)]}'
{
  "commit": "0621ed2e4edbe2f6f83dafbf85eecefae7aaf2e8",
  "tree": "30e005117719da029a238b88c742b0a7e516ad50",
  "parents": [
    "59eecdfb166f6846ae356ddc744abed5820ad965"
  ],
  "author": {
    "name": "Patrick McHardy",
    "email": "kaber@trash.net",
    "time": "Sat Jul 14 20:49:26 2007 -0700"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Sat Jul 14 20:49:26 2007 -0700"
  },
  "message": "[NET_SCHED]: Revert \"avoid transmit softirq on watchdog wakeup\" optimization\n\nAs noticed by Ranko Zivojnovic \u003cranko@spidernet.net\u003e, calling qdisc_run\nfrom the timer handler can result in deadlock:\n\n\u003e CPU#0\n\u003e\n\u003e qdisc_watchdog() fires and gets dev-\u003equeue_lock\n\u003e qdisc_run()...qdisc_restart()...\n\u003e -\u003e releases dev-\u003equeue_lock and enters dev_hard_start_xmit()\n\u003e\n\u003e CPU#1\n\u003e\n\u003e tc del qdisc dev ...\n\u003e qdisc_graft()...dev_graft_qdisc()...dev_deactivate()...\n\u003e -\u003e grabs dev-\u003equeue_lock ...\n\u003e\n\u003e qdisc_reset()...{cbq,hfsc,htb,netem,tbf}_reset()...qdisc_watchdog_cancel()...\n\u003e -\u003e hrtimer_cancel() - waiting for the qdisc_watchdog() to exit, while still\n\u003e\t\t        holding dev-\u003equeue_lock\n\u003e\n\u003e CPU#0\n\u003e\n\u003e dev_hard_start_xmit() returns ...\n\u003e -\u003e wants to get dev-\u003equeue_lock(!)\n\u003e\n\u003e DEADLOCK!\n\nThe entire optimization is a bit questionable IMO, it moves potentially\nlarge parts of NET_TX_SOFTIRQ work to TIMER_SOFTIRQ/HRTIMER_SOFTIRQ,\nwhich kind of defeats the separation of them.\n\nSigned-off-by: Patrick McHardy \u003ckaber@trash.net\u003e\nAcked-by: Ranko Zivojnovic \u003cranko@spidernet.net\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d92ea26982c56c88adf73d56728854d406681fde",
      "old_mode": 33188,
      "old_path": "net/sched/sch_api.c",
      "new_id": "4fd0beca9450c892192a20d58dc49c0b122b260f",
      "new_mode": 33188,
      "new_path": "net/sched/sch_api.c"
    }
  ]
}
