)]}'
{
  "commit": "ccd49c2391773ffbf52bb80d75c4a92b16972517",
  "tree": "42137704944da98524e33eff1d1ec1cd9af48d3c",
  "parents": [
    "228bdaa95fb830e08b6acd1afd4d2c55093cabfa"
  ],
  "author": {
    "name": "Steven Rostedt",
    "email": "srostedt@redhat.com",
    "time": "Tue Dec 13 16:44:16 2011 -0500"
  },
  "committer": {
    "name": "Steven Rostedt",
    "email": "rostedt@goodmis.org",
    "time": "Wed Dec 21 15:38:55 2011 -0500"
  },
  "message": "x86: Allow NMIs to hit breakpoints in i386\n\nWith i386, NMIs and breakpoints use the current stack and they\ndo not reset the stack pointer to a fix point that might corrupt\na previous NMI or breakpoint (as it does in x86_64). But NMIs are\nstill not made to be re-entrant, and need to prevent the case that\nan NMI hitting a breakpoint (which does an iret), doesn\u0027t allow\nanother NMI to run.\n\nThe fix is to let the NMI be in 3 different states:\n\n1) not running\n2) executing\n3) latched\n\nWhen no NMI is executing on a given CPU, the state is \"not running\".\nWhen the first NMI comes in, the state is switched to \"executing\".\nOn exit of that NMI, a cmpxchg is performed to switch the state\nback to \"not running\" and if that fails, the NMI is restarted.\n\nIf a breakpoint is hit and does an iret, which re-enables NMIs,\nand another NMI comes in before the first NMI finished, it will\ndetect that the state is not in the \"not running\" state and the\ncurrent NMI is nested. In this case, the state is switched to \"latched\"\nto let the interrupted NMI know to restart the NMI handler, and\nthe nested NMI exits without doing anything.\n\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: H. Peter Anvin \u003chpa@linux.intel.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Paul Turner \u003cpjt@google.com\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "de8d4b333f405ab875462ea49c9b2b2cf7d2400e",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/nmi.c",
      "new_id": "47acaf31916592d48995fa8fcb27ee9a0ce30139",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/nmi.c"
    }
  ]
}
