)]}'
{
  "commit": "ecb93d1ccd0aac63f03be2db3cac3fa974716f4c",
  "tree": "be6fe6fce203ed17b9f5b52d73b51b1832b00336",
  "parents": [
    "9104a18dcdd8dfefdddca8ce44988563f13ed3c4"
  ],
  "author": {
    "name": "Jeremy Fitzhardinge",
    "email": "jeremy@goop.org",
    "time": "Wed Jan 28 14:35:05 2009 -0800"
  },
  "committer": {
    "name": "H. Peter Anvin",
    "email": "hpa@linux.intel.com",
    "time": "Fri Jan 30 14:51:45 2009 -0800"
  },
  "message": "x86/paravirt: add register-saving thunks to reduce caller register pressure\n\nImpact: Optimization\n\nOne of the problems with inserting a pile of C calls where previously\nthere were none is that the register pressure is greatly increased.\nThe C calling convention says that the caller must expect a certain\nset of registers may be trashed by the callee, and that the callee can\nuse those registers without restriction.  This includes the function\nargument registers, and several others.\n\nThis patch seeks to alleviate this pressure by introducing wrapper\nthunks that will do the register saving/restoring, so that the\ncallsite doesn\u0027t need to worry about it, but the callee function can\nbe conventional compiler-generated code.  In many cases (particularly\nperformance-sensitive cases) the callee will be in assembler anyway,\nand need not use the compiler\u0027s calling convention.\n\nStandard calling convention is:\n\t arguments\t    return\tscratch\nx86-32\t eax edx ecx\t    eax\t\t?\nx86-64\t rdi rsi rdx rcx    rax\t\tr8 r9 r10 r11\n\nThe thunk preserves all argument and scratch registers.  The return\nregister is not preserved, and is available as a scratch register for\nunwrapped callee code (and of course the return value).\n\nWrapped function pointers are themselves wrapped in a struct\nparavirt_callee_save structure, in order to get some warning from the\ncompiler when functions with mismatched calling conventions are used.\n\nThe most common paravirt ops, both statically and dynamically, are\ninterrupt enable/disable/save/restore, so handle them first.  This is\nparticularly easy since their calls are handled specially anyway.\n\nXXX Deal with VMI.  What\u0027s their calling convention?\n\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dcce961262bfed5ba1105b781aeb8d8bdd93d18c",
      "old_mode": 33188,
      "old_path": "arch/x86/include/asm/paravirt.h",
      "new_id": "f9107b88631b6d893256700cef77707c260b0724",
      "new_mode": 33188,
      "new_path": "arch/x86/include/asm/paravirt.h"
    },
    {
      "type": "modify",
      "old_id": "dd25e2b1593ba1a62b4b62eea1a9e54b33b1f970",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/paravirt.c",
      "new_id": "8adb6b5aa42170bbb2ab31876e778470930e9b4b",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/paravirt.c"
    },
    {
      "type": "modify",
      "old_id": "a688f3bfaec2df184760f836dda4947edede828d",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/vsmp_64.c",
      "new_id": "c609205df594ba54dac5b6c0823bd3a34f486725",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/vsmp_64.c"
    },
    {
      "type": "modify",
      "old_id": "92f1c6f3e19d48b594fa5fcd4694784ae4b324af",
      "old_mode": 33188,
      "old_path": "arch/x86/lguest/boot.c",
      "new_id": "19e33b6cd593a7e66dd63740045163e00d942ca0",
      "new_mode": 33188,
      "new_path": "arch/x86/lguest/boot.c"
    },
    {
      "type": "modify",
      "old_id": "0cd2a165f179695eec4b91f38309544855e93288",
      "old_mode": 33188,
      "old_path": "arch/x86/xen/enlighten.c",
      "new_id": "ff6d530ccc7778f27198aeb407cb18223af24b02",
      "new_mode": 33188,
      "new_path": "arch/x86/xen/enlighten.c"
    },
    {
      "type": "modify",
      "old_id": "2e8271431e1af6c7d5ec0f27777c6ffb1b70a73a",
      "old_mode": 33188,
      "old_path": "arch/x86/xen/irq.c",
      "new_id": "5a070900ad3517dacd26f1c14a5aa65ddcaf8295",
      "new_mode": 33188,
      "new_path": "arch/x86/xen/irq.c"
    }
  ]
}
