diff options
author | Michael Buesch <mb@bu3sch.de> | 2009-09-11 23:04:04 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-09-23 17:35:44 +0200 |
commit | 176e9f6a4cf4b1bf66d18243ede0938a35c81541 (patch) | |
tree | 6cf1f0afdafb61e329b5d74426a83eb4ac3ca744 /drivers | |
parent | b43: Fix SDIO interrupt handler deadlock (diff) | |
download | linux-176e9f6a4cf4b1bf66d18243ede0938a35c81541.tar.xz linux-176e9f6a4cf4b1bf66d18243ede0938a35c81541.zip |
b43: Fix IRQ sync for SDIO
synchronize_irq is meaningless for SDIO. sdio_release_irq will
sync the IRQ thread for us.
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/b43/main.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 5b0aeff01dbf..7d22dadfd890 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c @@ -3854,10 +3854,15 @@ redo: b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* Flush */ spin_unlock_irq(&wl->hardirq_lock); } - /* Synchronize the interrupt handlers. Unlock to avoid deadlocks. */ + /* Synchronize and free the interrupt handlers. Unlock to avoid deadlocks. */ orig_dev = dev; mutex_unlock(&wl->mutex); - synchronize_irq(dev->dev->irq); + if (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) { + b43_sdio_free_irq(dev); + } else { + synchronize_irq(dev->dev->irq); + free_irq(dev->dev->irq, dev); + } mutex_lock(&wl->mutex); dev = wl->current_dev; if (!dev) @@ -3874,10 +3879,6 @@ redo: dev_kfree_skb(skb_dequeue(&wl->tx_queue)); b43_mac_suspend(dev); - if (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) - b43_sdio_free_irq(dev); - else - free_irq(dev->dev->irq, dev); b43_leds_exit(dev); b43dbg(wl, "Wireless interface stopped\n"); |