If the device is taken down during a scan, the bcm43xx driver can lock
up the system the next time ->set_channel() is called. This avoids the
lockup by checking whether the card is running before poking at it.

Signed-off-by: David Woodhouse <[EMAIL PROTECTED]>

--- linux-2.6.16.ppc/drivers/net/wireless/bcm43xx/bcm43xx_main.c~       
2006-03-22 16:52:18.000000000 +0000
+++ linux-2.6.16.ppc/drivers/net/wireless/bcm43xx/bcm43xx_main.c        
2006-03-24 10:57:53.000000000 +0000
@@ -3937,9 +3937,13 @@ static void bcm43xx_ieee80211_set_chan(s
        unsigned long flags;
 
        spin_lock_irqsave(&bcm->lock, flags);
-       bcm43xx_mac_suspend(bcm);
-       bcm43xx_radio_selectchannel(bcm, channel, 0);
-       bcm43xx_mac_enable(bcm);
+       if (likely(bcm->initialized)) {
+                   bcm43xx_mac_suspend(bcm);
+                   bcm43xx_radio_selectchannel(bcm, channel, 0);
+                   bcm43xx_mac_enable(bcm);
+       } else {
+               bcm->current_core->radio->initial_channel = channel;
+       }
        spin_unlock_irqrestore(&bcm->lock, flags);
 }
 

-- 
dwmw2

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

Reply via email to