summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/dma.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-03-28 01:42:50 +0100
committerDavid S. Miller <davem@davemloft.net>2008-03-28 01:42:50 +0100
commit50fd4407b8bfbde7c1a0bfe4f24de7df37164342 (patch)
tree57a9f05b130903fb2c6c12412352928bb24dc3a7 /drivers/net/wireless/b43/dma.c
parent[NETFILTER]: Replate direct proc_fops assignment with proc_create call. (diff)
downloadlinux-50fd4407b8bfbde7c1a0bfe4f24de7df37164342.tar.xz
linux-50fd4407b8bfbde7c1a0bfe4f24de7df37164342.zip
[NET]: Use local_irq_{save,restore}() in napi_complete().
Based upon a lockdep report. Since ->poll() can be invoked from netpoll with interrupts disabled, we must not unconditionally enable interrupts in napi_complete(). Instead we must use local_irq_{save,restore}(). Noticed by Peter Zijlstra: <irqs disabled> netpoll_poll() poll_napi() spin_trylock(&napi->poll_lock) poll_one_napi() napi->poll() := sky2_poll() napi_complete() local_irq_disable() local_irq_enable() <--- *BUG* <irq> irq_exit() do_softirq() net_rx_action() spin_lock(&napi->poll_lock) <--- Deadlock! Because we still hold the lock.... Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wireless/b43/dma.c')
0 files changed, 0 insertions, 0 deletions