)]}'
{
  "commit": "891cffbd6bcba26409869c19c07ecd4bfc0c2460",
  "tree": "cddf5286aedb76eecffd976101273e66858c4a23",
  "parents": [
    "4480f15b3306f43bbb0310d461142b4e897ca45b"
  ],
  "author": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Sun Oct 12 13:16:12 2008 -0700"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Mon Oct 13 17:46:39 2008 +0200"
  },
  "message": "x86/mm: do not trigger a kernel warning if user-space disables interrupts and generates a page fault\n\nArjan reported a spike in the following bug pattern in v2.6.27:\n\n   http://www.kerneloops.org/searchweek.php?search\u003dlock_page\n\nwhich happens because hwclock started triggering warnings due to\na (correct) might_sleep() check in the MM code.\n\nThe warning occurs because hwclock uses this dubious sequence of\ncode to run \"atomic\" code:\n\n  static unsigned long\n  atomic(const char *name, unsigned long (*op)(unsigned long),\n         unsigned long arg)\n  {\n    unsigned long v;\n    __asm__ volatile (\"cli\");\n    v \u003d (*op)(arg);\n    __asm__ volatile (\"sti\");\n    return v;\n  }\n\nThen it pagefaults in that \"atomic\" section, triggering the warning.\n\nThere is no way the kernel could provide \"atomicity\" in this path,\na page fault is a cannot-continue machine event so the kernel has to\nwait for the page to be filled in.\n\nEven if it was just a minor fault we\u0027d have to take locks and might have\nto spend quite a bit of time with interrupts disabled - not nice to irq\nlatencies in general.\n\nSo instead just enable interrupts in the pagefault path unconditionally\nif we come from user-space, and handle the fault.\n\nAlso, while touching this code, unify some trivial parts of the x86\nVM paths at the same time.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nReported-by: Arjan van de Ven \u003carjan@infradead.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a742d753d5b0ae438a65e976354556a8b0c938b1",
      "old_mode": 33188,
      "old_path": "arch/x86/mm/fault.c",
      "new_id": "ac2ad781da00390fb12debd4bed8d972ec75ba92",
      "new_mode": 33188,
      "new_path": "arch/x86/mm/fault.c"
    }
  ]
}
