)]}'
{
  "commit": "625dbc3b8acbefefefe27e1d7bbc6e53eb4f3f2d",
  "tree": "d27741bbc7397b6982ae5f0fd2cb06629c98ea1c",
  "parents": [
    "39a6eebda253aa34d659ca9436e3c32ef60473f1"
  ],
  "author": {
    "name": "Frederic Weisbecker",
    "email": "fweisbec@gmail.com",
    "time": "Thu Jan 06 15:22:47 2011 +0100"
  },
  "committer": {
    "name": "Frederic Weisbecker",
    "email": "fweisbec@gmail.com",
    "time": "Fri Jan 07 17:40:56 2011 +0100"
  },
  "message": "x86: Save rbp in pt_regs on irq entry\n\nFrom the x86_64 low level interrupt handlers, the frame pointer is\nsaved right after the partial pt_regs frame.\n\nrbp is not supposed to be part of the irq partial saved registers,\nbut it only requires to extend the pt_regs frame by 8 bytes to\ndo so, plus a tiny stack offset fixup on irq exit.\n\nThis changes a bit the semantics or get_irq_entry() that is supposed\nto provide only the value of caller saved registers and the cpu\nsaved frame. However it\u0027s a win for unwinders that can walk through\nstack frames on top of get_irq_regs() snapshots.\n\nA noticeable impact is that it makes perf events cpu-clock and\ntask-clock events based callchains working on x86_64.\n\nLet\u0027s then save rbp into the irq pt_regs.\n\nAs a result with:\n\n\tperf record -e cpu-clock perf bench sched messaging\n\tperf report --stdio\n\nBefore:\n    20.94%             perf  [kernel.kallsyms]        [k] lock_acquire\n                       |\n                       --- lock_acquire\n                          |\n                          |--44.01%-- __write_nocancel\n                          |\n                          |--43.18%-- __read\n                          |\n                          |--6.08%-- fork\n                          |          create_worker\n                          |\n                          |--0.88%-- _dl_fixup\n                          |\n                          |--0.65%-- do_lookup_x\n                          |\n                          |--0.53%-- __GI___libc_read\n                           --4.67%-- [...]\n\nAfter:\n    19.23%         perf  [kernel.kallsyms]    [k] __lock_acquire\n                   |\n                   --- __lock_acquire\n                      |\n                      |--97.74%-- lock_acquire\n                      |          |\n                      |          |--21.82%-- _raw_spin_lock\n                      |          |          |\n                      |          |          |--37.26%-- unix_stream_recvmsg\n                      |          |          |          sock_aio_read\n                      |          |          |          do_sync_read\n                      |          |          |          vfs_read\n                      |          |          |          sys_read\n                      |          |          |          system_call\n                      |          |          |          __read\n                      |          |          |\n                      |          |          |--24.09%-- unix_stream_sendmsg\n                      |          |          |          sock_aio_write\n                      |          |          |          do_sync_write\n                      |          |          |          vfs_write\n                      |          |          |          sys_write\n                      |          |          |          system_call\n                      |          |          |          __write_nocancel\n\nv2: Fix cfi annotations.\n\nReported-by: Soeren Sandmann Pedersen \u003csandmann@redhat.com\u003e\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: H. Peter Anvin \u003chpa@zytor.com\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Stephane Eranian \u003ceranian@google.com\u003e\nCc: Jan Beulich \u003cJBeulich@novell.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e3ba417e869766bb258ef489aa389f4933abf2a3",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/entry_64.S",
      "new_id": "d3b895f375d3df70d641654be9258b995c21f950",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/entry_64.S"
    }
  ]
}
