)]}'
{
  "commit": "ed585a651681e822089087b426e6ebfb6d3d9873",
  "tree": "d16e78437208dd660e05974506449c5260e479c5",
  "parents": [
    "d0a77454c70d0449a5f87087deb8f0cb15145e90"
  ],
  "author": {
    "name": "Geert Uytterhoeven",
    "email": "geert@linux-m68k.org",
    "time": "Sun Sep 11 13:59:27 2011 +0200"
  },
  "committer": {
    "name": "Thomas Gleixner",
    "email": "tglx@linutronix.de",
    "time": "Mon Sep 12 09:38:53 2011 +0200"
  },
  "message": "genirq: Make irq_shutdown() symmetric vs. irq_startup again\n\nIf an irq_chip provides .irq_shutdown(), but neither of .irq_disable() or\n.irq_mask(), free_irq() crashes when jumping to NULL.\nFix this by only trying .irq_disable() and .irq_mask() if there\u0027s no\n.irq_shutdown() provided.\n\nThis revives the symmetry with irq_startup(), which tries .irq_startup(),\n.irq_enable(), and irq_unmask(), and makes it consistent with the comment for\nirq_chip.irq_shutdown() in \u003clinux/irq.h\u003e, which says:\n\n * @irq_shutdown:\tshut down the interrupt (defaults to -\u003edisable if NULL)\n\nThis is also how __free_irq() behaved before the big overhaul, cfr. e.g.\n3b56f0585fd4c02d047dc406668cb40159b2d340 (\"genirq: Remove bogus conditional\"),\nwhere the core interrupt code always overrode .irq_shutdown() to\n.irq_disable() if .irq_shutdown() was NULL.\n\nSigned-off-by: Geert Uytterhoeven \u003cgeert@linux-m68k.org\u003e\nCc: linux-m68k@lists.linux-m68k.org\nLink: http://lkml.kernel.org/r/1315742394-16036-2-git-send-email-geert@linux-m68k.org\nCc: stable@kernel.org\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d5a3009da71aed6dd5f3a82895f2f21cecd656b6",
      "old_mode": 33188,
      "old_path": "kernel/irq/chip.c",
      "new_id": "dc5114b4c16cc6cd656290cdb03596a2ffd3f3b8",
      "new_mode": 33188,
      "new_path": "kernel/irq/chip.c"
    }
  ]
}
