aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorMichael Buesch <mb@bu3sch.de>2009-09-11 17:04:04 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-09-23 11:35:44 -0400
commit176e9f6a4cf4b1bf66d18243ede0938a35c81541 (patch)
tree6cf1f0afdafb61e329b5d74426a83eb4ac3ca744 /drivers/net/wireless
parenta8696c800b8154e27b359866f7b837079cdb513a (diff)
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/net/wireless')
-rw-r--r--drivers/net/wireless/b43/main.c13
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:
3854 b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* Flush */ 3854 b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* Flush */
3855 spin_unlock_irq(&wl->hardirq_lock); 3855 spin_unlock_irq(&wl->hardirq_lock);
3856 } 3856 }
3857 /* Synchronize the interrupt handlers. Unlock to avoid deadlocks. */ 3857 /* Synchronize and free the interrupt handlers. Unlock to avoid deadlocks. */
3858 orig_dev = dev; 3858 orig_dev = dev;
3859 mutex_unlock(&wl->mutex); 3859 mutex_unlock(&wl->mutex);
3860 synchronize_irq(dev->dev->irq); 3860 if (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) {
3861 b43_sdio_free_irq(dev);
3862 } else {
3863 synchronize_irq(dev->dev->irq);
3864 free_irq(dev->dev->irq, dev);
3865 }
3861 mutex_lock(&wl->mutex); 3866 mutex_lock(&wl->mutex);
3862 dev = wl->current_dev; 3867 dev = wl->current_dev;
3863 if (!dev) 3868 if (!dev)
@@ -3874,10 +3879,6 @@ redo:
3874 dev_kfree_skb(skb_dequeue(&wl->tx_queue)); 3879 dev_kfree_skb(skb_dequeue(&wl->tx_queue));
3875 3880
3876 b43_mac_suspend(dev); 3881 b43_mac_suspend(dev);
3877 if (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO)
3878 b43_sdio_free_irq(dev);
3879 else
3880 free_irq(dev->dev->irq, dev);
3881 b43_leds_exit(dev); 3882 b43_leds_exit(dev);
3882 b43dbg(wl, "Wireless interface stopped\n"); 3883 b43dbg(wl, "Wireless interface stopped\n");
3883 3884