b43: Don't disable IRQs in mac_suspend
PATCH 1/1 b43: Don't disable IRQs in mac_suspend
This patch removes the IRQ-disable from mac_suspend.
The main advantage of this is to get rid of the IRQ-sync call in mac_suspend. We need to remove the MAC suspend bit from the IRQ service mask, as otherwise the IRQ handler would race with us.
Signed-off-by Michael Buesch <[email protected]>
---
John, this is for 2.6.27
drivers/net/wireless/b43/b43.h +1 -2
@@ -407,14 +407,13 @@ enum {#define B43_IRQ_RFKILL 0x10000000#define B43_IRQ_TX_OK 0x20000000#define B43_IRQ_PHY_G_CHANGED 0x40000000#define B43_IRQ_TIMEOUT 0x80000000#define B43_IRQ_ALL 0xFFFFFFFF -#define B43_IRQ_MASKTEMPLATE (B43_IRQ_MAC_SUSPENDED | \ - B43_IRQ_TBTT_INDI | \ +#define B43_IRQ_MASKTEMPLATE (B43_IRQ_TBTT_INDI | \ B43_IRQ_ATIM_END | \ B43_IRQ_PMQ | \ B43_IRQ_MAC_TXERR | \ B43_IRQ_PHY_TXERR | \ B43_IRQ_DMA | \ B43_IRQ_TXFIFO_FLUSH_OK | \
drivers/net/wireless/b43/main.c +0 -13
@@ -2319,17 +2319,12 @@ void b43_mac_enable(struct b43_wldev *deb43_write32 (dev,B43_MMIO_GEN_IRQ_REASON ,B43_IRQ_MAC_SUSPENDED );/* Commit writes */ b43_read32 (dev,B43_MMIO_MACCTL );b43_read32 (dev,B43_MMIO_GEN_IRQ_REASON );b43_power_saving_ctl_bits (dev,0 ); - -/* Re-enable IRQs. */ -spin_lock_irq (&dev->wl->irq_lock); -b43_interrupt_enable (dev, dev->irq_savedstate); -spin_unlock_irq (&dev->wl->irq_lock); } }/* http://bcm-specs.sipsolutions.net/SuspendMAC */ void b43_mac_suspend (struct b43_wldev *dev) {
@@ -2337,20 +2332,12 @@ void b43_mac_suspend(struct b43_wldev *du32 tmp;might_sleep ();B43_WARN_ON (dev->mac_suspended <0 );if (dev->mac_suspended ==0 ) { -/* Mask IRQs before suspending MAC. Otherwise -* the MAC stays busy and won't suspend. */ -spin_lock_irq (&dev->wl->irq_lock); - tmp =b43_interrupt_disable (dev,B43_IRQ_ALL ); -spin_unlock_irq (&dev->wl->irq_lock); -b43_synchronize_irq (dev); - dev->irq_savedstate = tmp; -b43_power_saving_ctl_bits (dev,B43_PS_AWAKE );b43_write32 (dev,B43_MMIO_MACCTL ,b43_read32 (dev,B43_MMIO_MACCTL ) & ~B43_MACCTL_ENABLED );/* force pci to flush the write */ b43_read32 (dev,B43_MMIO_MACCTL );