)]}'
{
  "commit": "fbc9f97bbf5e1eaee562eba93dc60faaff3f3bfa",
  "tree": "b9ee621a651efb7f8daeed55210106f2466daae5",
  "parents": [
    "a54be5d43aa2d6febc5a4f8dd3b87b9429b60437"
  ],
  "author": {
    "name": "Reinette Chatre",
    "email": "reinette.chatre@intel.com",
    "time": "Fri May 15 16:13:46 2009 -0700"
  },
  "committer": {
    "name": "John W. Linville",
    "email": "linville@tuxdriver.com",
    "time": "Wed May 20 14:29:53 2009 -0400"
  },
  "message": "iwlwifi: do not cancel delayed work inside spin_lock_irqsave\n\nCalling cancel_delayed_work() from inside\nspin_lock_irqsave, introduces a potential deadlock.\n\nAs explained by Johannes Berg \u003cjohannes@sipsolutions.net\u003e\n\nA - lock\nT - timer\n\nphase                   CPU 1           CPU 2\n---------------------------------------------\n\nsome place that calls\ncancel_timer_sync()\n(which is the | code)\n                                        lock-irq(A)\n|                                       \"lock-irq\"(T)\n|                                       \"unlock\"(T)\n|                                       wait(T)\n                                        unlock(A)\n\ntimer softirq\n                        \"lock\"(T)\n                        run(T)\n                        \"unlock\"(T)\n\nirq handler\n          lock(A)\n          unlock(A)\n\nNow all that again, interleaved, leading to deadlock:\n\n                                        lock-irq(A)\n                        \"lock\"(T)\n                         run(T)\nIRQ during or maybe\nbefore run(T) --\u003e        lock(A)\n                                        \"lock-irq\"(T)\n                                        wait(T)\n\nWe fix this by moving the call to cancel_delayed_work() into workqueue.\nThere are cases where the work may not actually be queued or running\nat the time we are trying to cancel it, but cancel_delayed_work() is\nable to deal with this.\n\nAlso cleanup iwl_set_mode related to this call. This function\n(iwl_set_mode) is only called when bringing interface up and there will\nthus not be any scanning done. No need to try to cancel scanning.\n\nFixes http://bugzilla.kernel.org/show_bug.cgi?id\u003d13224, which was also\nreported at http://marc.info/?l\u003dlinux-wireless\u0026m\u003d124081921903223\u0026w\u003d2 .\n\nTested-by: Miles Lane \u003cmiles.lane@gmail.com\u003e\nSigned-off-by: Reinette Chatre \u003creinette.chatre@intel.com\u003e\nAcked-by: Zhu Yi \u003cyi.zhu@intel.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3bb28db4a40fd5aa71dfc08ac4605a84dda17e86",
      "old_mode": 33188,
      "old_path": "drivers/net/wireless/iwlwifi/iwl-agn.c",
      "new_id": "f46ba24757768226a842ef1f51bc0b61f53275cd",
      "new_mode": 33188,
      "new_path": "drivers/net/wireless/iwlwifi/iwl-agn.c"
    },
    {
      "type": "modify",
      "old_id": "e7c65c4f741bfb0be178586d4e8c908de347c653",
      "old_mode": 33188,
      "old_path": "drivers/net/wireless/iwlwifi/iwl-scan.c",
      "new_id": "6330b91e37ceab65eb776e4c336a91bf827b5607",
      "new_mode": 33188,
      "new_path": "drivers/net/wireless/iwlwifi/iwl-scan.c"
    },
    {
      "type": "modify",
      "old_id": "4cce66133500a04087084ab8eec0979160b7262f",
      "old_mode": 33188,
      "old_path": "drivers/net/wireless/iwlwifi/iwl3945-base.c",
      "new_id": "ff4d0e41d7c492237d5740b423be5918b526bc3f",
      "new_mode": 33188,
      "new_path": "drivers/net/wireless/iwlwifi/iwl3945-base.c"
    }
  ]
}
