On Wednesday 07 November 2007 18:16:11 Stefano Brivio wrote:
> Fix an IRQ race condition in b43. If we call b43_stop_wireless_core(), it
> will set the status of the device to INITIALIZED and the IRQ handler won't
> care any longer about IRQs, thus the kernel will disable the IRQ if it's
> shared (unless we boot it with the 'irqpoll' option). So we must disable
> IRQs before changing the device status.
> 
> 
> Signed-off-by: Stefano Brivio <[EMAIL PROTECTED]>
> 
> ---
> 
> --- wireless-2.6/drivers/net/wireless/b43/main.c.orig 2007-11-07 
> 17:55:30.553591943 +0100
> +++ wireless-2.6/drivers/net/wireless/b43/main.c      2007-11-07 
> 17:59:23.356020048 +0100
> @@ -2979,6 +2979,16 @@
>  
>       if (b43_status(dev) < B43_STAT_STARTED)
>               return;
> +
> +     /* Disable and sync interrupts. We must do this before than
> +      * setting the status to INITIALIZED, as the interrupt handler
> +      * won't care about IRQs then. */
> +     spin_lock_irqsave(&wl->irq_lock, flags);
> +     dev->irq_savedstate = b43_interrupt_disable(dev, B43_IRQ_ALL);
> +     b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* flush */
> +     spin_unlock_irqrestore(&wl->irq_lock, flags);
> +     b43_synchronize_irq(dev);
> +
>       b43_set_status(dev, B43_STAT_INITIALIZED);
>  
>       mutex_unlock(&wl->mutex);
> @@ -2989,13 +2999,6 @@
>  
>       ieee80211_stop_queues(wl->hw);  //FIXME this could cause a deadlock, as 
> mac80211 seems buggy.
>  
> -     /* Disable and sync interrupts. */
> -     spin_lock_irqsave(&wl->irq_lock, flags);
> -     dev->irq_savedstate = b43_interrupt_disable(dev, B43_IRQ_ALL);
> -     b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* flush */
> -     spin_unlock_irqrestore(&wl->irq_lock, flags);
> -     b43_synchronize_irq(dev);
> -
>       b43_mac_suspend(dev);
>       free_irq(dev->dev->irq, dev);
>       b43dbg(wl, "Wireless interface stopped\n");
> 
> 

Acked-by: Michael Buesch <[EMAIL PROTECTED]>

-- 
Greetings Michael.
_______________________________________________
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to