Thread (7 messages) 7 messages, 4 authors, 2007-07-16

Re: [Bugme-new] [Bug 8736] New: New TC deadlock scenario

From: Patrick McHardy <hidden>
Date: 2007-07-11 18:31:15

Andrew Morton wrote:
quoted
http://bugzilla.kernel.org/show_bug.cgi?id=8736

Here is another scenario I bumped onto - qdisc_watchdog_cancel() and
qdisc_restart() deadlock.

CPU#0
qdisc_watchdog() fires and gets dev->queue_lock
qdisc_run()...qdisc_restart()... 
-> releases dev->queue_lock and enters dev_hard_start_xmit()

CPU#1
tc del qdisc dev ...
qdisc_graft()...dev_graft_qdisc()...dev_deactivate()...
-> grabs dev->queue_lock ... 
qdisc_reset()...{cbq,hfsc,htb,netem,tbf}_reset()...qdisc_watchdog_cancel()...
-> hrtimer_cancel() - waiting for the qdisc_watchdog() to exit, while still
holding dev->queue_lock

CPU#0
dev_hard_start_xmit() returns ... 
-> wants to get dev->queue_lock(!)

DEADLOCK!

Good catch.

Please try reverting commit 1936502d00ae6c2aa3931c42f6cf54afaba094f2,
that should fix it.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help