)]}'
{
  "commit": "46db09d3fd847f185a7d23a96bc8fe7a4be0cd05",
  "tree": "1134b3244ebe89208856c35bf86138d2b1ed791e",
  "parents": [
    "39e9543344fa3179e346d2b381c6e0cd17b516de"
  ],
  "author": {
    "name": "Jan Beulich",
    "email": "JBeulich@suse.com",
    "time": "Tue Nov 29 11:17:45 2011 +0000"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Mon Dec 05 17:24:41 2011 +0100"
  },
  "message": "x86-64: Slightly shorten line system call entry and exit paths\n\nGET_THREAD_INFO() involves a memory read immediately followed by\nan \"sub\" on the value read, in turn (in several cases)\nimmediately followed by a use of the calculated value as the\nbase address of a memory access. This combination of\ninstructions has a non-negligible potential for stalls.\n\nIn the system call entry point code, however, the (fixed) offset\nof the stack pointer from the end of the stack is generally\nknown, and hence we can instead avoid the memory load and\nsubtract, and instead do the memory reference using %rsp as the\nbase register. To do so in a legible fashion, introduce a\nTHREAD_INFO() macro which, provided a register (generally %rsp)\nand the known offset from the end of the stack, produces a\nsuitable memory access operand.\n\nThe patch attempts to only touch the fast paths (no auditing and\nalike), but manages to do so only in the 64-bit entry point\ncase; the compatibility mode entry points have so many\ninterdependencies between their various branch targets that it\nwas necessary to also adjust the slow paths to eliminate the\nrisk of having missed some register dependency during code\nanalysis.\n\nSigned-off-by: Jan Beulich \u003cjbeulich@suse.com\u003e\nReviewed-by: Andi Kleen \u003cak@linux.intel.com\u003e\nLink: http://lkml.kernel.org/r/4ED4CD690200007800064075@nat28.tlf.novell.com\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a6253ec1b28461e12d6f650683c6d05c99a7a7cc",
      "old_mode": 33188,
      "old_path": "arch/x86/ia32/ia32entry.S",
      "new_id": "0d5c279f3732d6f295f38485103a76791db14da8",
      "new_mode": 33188,
      "new_path": "arch/x86/ia32/ia32entry.S"
    },
    {
      "type": "modify",
      "old_id": "25ebd792725b033d0afae60fc57cd49954a6677f",
      "old_mode": 33188,
      "old_path": "arch/x86/include/asm/thread_info.h",
      "new_id": "185b719ec61a29bcdaeed612e238d998adb66fdd",
      "new_mode": 33188,
      "new_path": "arch/x86/include/asm/thread_info.h"
    },
    {
      "type": "modify",
      "old_id": "1581f1990187dba2cc402d123e1bb99f4eef0687",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/entry_64.S",
      "new_id": "75f72a50cf269c72e4a57472a91e639ac29f86cd",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/entry_64.S"
    }
  ]
}
