[PATCH] bcm43xx: fix race condition in periodic work handler
authorMichael Buesch <mb@bu3sch.de>
Tue, 26 Sep 2006 18:22:41 +0000 (13:22 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 17 Oct 2006 00:09:47 +0000 (20:09 -0400)
There is a potential race condition in the periodic_work_handler routine
of bcm43xx-softmac. In addition to fixing this condition, the size of code is
reduced by moving the mutex lock outside the if.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/bcm43xx/bcm43xx_main.c

index bad3452..0f047d4 100644 (file)
@@ -3164,12 +3164,12 @@ static void bcm43xx_periodic_work_handler(void *d)
        u32 savedirqs = 0;
        int badness;
 
+       mutex_lock(&bcm->mutex);
        badness = estimate_periodic_work_badness(bcm->periodic_state);
        if (badness > BADNESS_LIMIT) {
                /* Periodic work will take a long time, so we want it to
                 * be preemtible.
                 */
-               mutex_lock(&bcm->mutex);
                netif_tx_disable(bcm->net_dev);
                spin_lock_irqsave(&bcm->irq_lock, flags);
                bcm43xx_mac_suspend(bcm);
@@ -3182,7 +3182,6 @@ static void bcm43xx_periodic_work_handler(void *d)
                /* Periodic work should take short time, so we want low
                 * locking overhead.
                 */
-               mutex_lock(&bcm->mutex);
                spin_lock_irqsave(&bcm->irq_lock, flags);
        }