)]}'
{
  "commit": "3f902886a81c6d4e6c399760936b645b5c7a7342",
  "tree": "9e46c6f799390497784f2048a2294b3967bb857e",
  "parents": [
    "9a8b4584065dd241d6c2bf818e349986bd900b8e"
  ],
  "author": {
    "name": "Grant Grundler",
    "email": "grundler@parisc-linux.org",
    "time": "Thu Nov 17 16:26:20 2005 -0500"
  },
  "committer": {
    "name": "Kyle McMartin",
    "email": "kyle@parisc-linux.org",
    "time": "Thu Nov 17 16:26:20 2005 -0500"
  },
  "message": "[PARISC] Disable nesting of interrupts\n\nDisable nesting of interrupts - still has holes\n\nThe offending sequence starts out like this:\n1) take external interrupt\n2) set_eiem() to only allow TIMER_IRQ; local interrupts still disabled\n3) read the EIRR to get a \"list\" of pending interrupts\n4) clear EIRR of pending interrupts we intend to handle\n5) call __do_IRQ() to handle IRQ.\n6) handle_IRQ_event() enables local interrupts (I-Bit)\n7) take a timer interrupt\n8) read EIRR to get a new list of pending interrupts\n9) clear EIRR of pending interrupts we just read\n10) handle pending interrupts found in (8)\n11) set_eiem(cpu_eiem) and return\n        [ TROUBLE! all enabled CPU IRQs are unmasked. }\n12) handle remaining interrupts pending from (3)\n        e.g. call __do_IRQ() -\u003e handle_IRQ_event()..etc\n        [ TROUBLE! call to handle_IRQ_event() can now enable *any* IRQ. }\n13) set_eiem(cpu_eiem) and return\n\nThe problem is we now get into ugly race conditions with Timer and IPI\ninterrupts at this point.  I\u0027m not exactly sure what happens when\nthings go wrong (perhaps nest calls to IPI or timer interrupt?).\nBut I\u0027m certain it\u0027s not good.\n\nThis sequence will break sooner if (10) would accidentally leave\ninterrupts enabled.\n\nI\u0027m pretty sure the right answer is now to make cpu_eiem\na per CPU variable since all external interrupts on parisc\nare per CPU. This means we will NOT need to send an IPI to\nevery CPU in the system when enabling or disabling an IRQ\nsince only one CPU needs to change it\u0027s EIEM.\n\nThanks to James Bottomley for (once again) pointing out the problem.\n\nSigned-off-by: Grant Grundler \u003cgrundler@parisc-linux.org\u003e\nSigned-off-by: Kyle McMartin \u003ckyle@parisc-linux.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f7ae2bcd49a5731a0d4b88f2b73f547bb44ecba5",
      "old_mode": 33188,
      "old_path": "arch/parisc/kernel/irq.c",
      "new_id": "21a9c5ad580bc079e9a2d897f753a41a028af215",
      "new_mode": 33188,
      "new_path": "arch/parisc/kernel/irq.c"
    }
  ]
}
