)]}'
{
  "commit": "a5201129307f414890f9a4410e38da205f5d7359",
  "tree": "ad70c5f1d3b336ef5665a7fd5ad8707aaec23847",
  "parents": [
    "0998e4228aca046fbd747c3fed909791d52e88eb"
  ],
  "author": {
    "name": "Zachary Amsden",
    "email": "zach@vmware.com",
    "time": "Sat Sep 03 15:56:44 2005 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@evo.osdl.org",
    "time": "Mon Sep 05 00:06:12 2005 -0700"
  },
  "message": "[PATCH] x86: make IOPL explicit\n\nThe pushf/popf in switch_to are ONLY used to switch IOPL.  Making this\nexplicit in C code is more clear.  This pushf/popf pair was added as a\nbugfix for leaking IOPL to unprivileged processes when using\nsysenter/sysexit based system calls (sysexit does not restore flags).\n\nWhen requesting an IOPL change in sys_iopl(), it is just as easy to change\nthe current flags and the flags in the stack image (in case an IRET is\nrequired), but there is no reason to force an IRET if we came in from the\nSYSENTER path.\n\nThis change is the minimal solution for supporting a paravirtualized Linux\nkernel that allows user processes to run with I/O privilege.  Other\nsolutions require radical rewrites of part of the low level fault / system\ncall handling code, or do not fully support sysenter based system calls.\n\nUnfortunately, this added one field to the thread_struct.  But as a bonus,\non P4, the fastest time measured for switch_to() went from 312 to 260\ncycles, a win of about 17% in the fast case through this performance\ncritical path.\n\nSigned-off-by: Zachary Amsden \u003czach@vmware.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8b25160393c1f557d99f60f6ccab11d487b25a4b",
      "old_mode": 33188,
      "old_path": "arch/i386/kernel/ioport.c",
      "new_id": "f2b37654777f522af8231e14a6520a572dcb9cfb",
      "new_mode": 33188,
      "new_path": "arch/i386/kernel/ioport.c"
    },
    {
      "type": "modify",
      "old_id": "66099780039388c80367c99f01431c1c7957cd72",
      "old_mode": 33188,
      "old_path": "arch/i386/kernel/process.c",
      "new_id": "b45cbf93d4391b49411cfdaecf7c1e084e184c33",
      "new_mode": 33188,
      "new_path": "arch/i386/kernel/process.c"
    },
    {
      "type": "modify",
      "old_id": "992224bff54953852fe36ff605f1da4f0bfa335f",
      "old_mode": 33188,
      "old_path": "include/asm-i386/processor.h",
      "new_id": "37bef8ed7bed12bd33bf3670ccf7991516aa7484",
      "new_mode": 33188,
      "new_path": "include/asm-i386/processor.h"
    },
    {
      "type": "modify",
      "old_id": "37fd2f8c71963dc78153292459d62a0d6a9860d0",
      "old_mode": 33188,
      "old_path": "include/asm-i386/system.h",
      "new_id": "acd5c26b69ba68f9a2964b59cdf01b86daab9fda",
      "new_mode": 33188,
      "new_path": "include/asm-i386/system.h"
    }
  ]
}
