aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/dma.c
diff options
context:
space:
mode:
authorMichael Buesch <mb@bu3sch.de>2009-09-04 16:51:29 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-09-08 16:31:06 -0400
commit36dbd9548e92268127b0c31b0e121e63e9207108 (patch)
tree41d95c5dd824ea43c5f0055bd790b64d7ba8a33a /drivers/net/wireless/b43/dma.c
parentb275f28535fc774325bb8ad5f664e6c44a8fbc9b (diff)
b43: Use a threaded IRQ handler
Use a threaded IRQ handler to allow locking the mutex and sleeping while executing an interrupt. This removes usage of the irq_lock spinlock, but introduces a new hardirq_lock, which is _only_ used for the PCI/SSB lowlevel hard-irq handler. Sleeping busses (SDIO) will use mutex instead. Signed-off-by: Michael Buesch <mb@bu3sch.de> Tested-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/dma.c')
-rw-r--r--drivers/net/wireless/b43/dma.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
index 289aaf6dfe79..25ced8bdec8f 100644
--- a/drivers/net/wireless/b43/dma.c
+++ b/drivers/net/wireless/b43/dma.c
@@ -1387,7 +1387,6 @@ out_unlock:
1387 return err; 1387 return err;
1388} 1388}
1389 1389
1390/* Called with IRQs disabled. */
1391void b43_dma_handle_txstatus(struct b43_wldev *dev, 1390void b43_dma_handle_txstatus(struct b43_wldev *dev,
1392 const struct b43_txstatus *status) 1391 const struct b43_txstatus *status)
1393{ 1392{
@@ -1402,7 +1401,7 @@ void b43_dma_handle_txstatus(struct b43_wldev *dev,
1402 if (unlikely(!ring)) 1401 if (unlikely(!ring))
1403 return; 1402 return;
1404 1403
1405 spin_lock(&ring->lock); /* IRQs are already disabled. */ 1404 spin_lock_irq(&ring->lock);
1406 1405
1407 B43_WARN_ON(!ring->tx); 1406 B43_WARN_ON(!ring->tx);
1408 ops = ring->ops; 1407 ops = ring->ops;
@@ -1463,7 +1462,7 @@ void b43_dma_handle_txstatus(struct b43_wldev *dev,
1463 } 1462 }
1464 } 1463 }
1465 1464
1466 spin_unlock(&ring->lock); 1465 spin_unlock_irq(&ring->lock);
1467} 1466}
1468 1467
1469void b43_dma_get_tx_stats(struct b43_wldev *dev, 1468void b43_dma_get_tx_stats(struct b43_wldev *dev,