diff options
| author | Michael Buesch <mb@bu3sch.de> | 2006-09-26 14:22:41 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2006-10-16 20:09:47 -0400 |
| commit | 3693ec670b3bb4d11295856bea3592dd8f37f9a5 (patch) | |
| tree | 3af120e21b4d693f8f48bf5d00a8b2872c4018b2 | |
| parent | 51018b0a3160d253283173c2f54f16746cee5852 (diff) | |
[PATCH] bcm43xx: fix race condition in periodic work handler
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>
| -rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_main.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c index bad3452ea893..0f047d42158f 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c | |||
| @@ -3164,12 +3164,12 @@ static void bcm43xx_periodic_work_handler(void *d) | |||
| 3164 | u32 savedirqs = 0; | 3164 | u32 savedirqs = 0; |
| 3165 | int badness; | 3165 | int badness; |
| 3166 | 3166 | ||
| 3167 | mutex_lock(&bcm->mutex); | ||
| 3167 | badness = estimate_periodic_work_badness(bcm->periodic_state); | 3168 | badness = estimate_periodic_work_badness(bcm->periodic_state); |
| 3168 | if (badness > BADNESS_LIMIT) { | 3169 | if (badness > BADNESS_LIMIT) { |
| 3169 | /* Periodic work will take a long time, so we want it to | 3170 | /* Periodic work will take a long time, so we want it to |
| 3170 | * be preemtible. | 3171 | * be preemtible. |
| 3171 | */ | 3172 | */ |
| 3172 | mutex_lock(&bcm->mutex); | ||
| 3173 | netif_tx_disable(bcm->net_dev); | 3173 | netif_tx_disable(bcm->net_dev); |
| 3174 | spin_lock_irqsave(&bcm->irq_lock, flags); | 3174 | spin_lock_irqsave(&bcm->irq_lock, flags); |
| 3175 | bcm43xx_mac_suspend(bcm); | 3175 | bcm43xx_mac_suspend(bcm); |
| @@ -3182,7 +3182,6 @@ static void bcm43xx_periodic_work_handler(void *d) | |||
| 3182 | /* Periodic work should take short time, so we want low | 3182 | /* Periodic work should take short time, so we want low |
| 3183 | * locking overhead. | 3183 | * locking overhead. |
| 3184 | */ | 3184 | */ |
| 3185 | mutex_lock(&bcm->mutex); | ||
| 3186 | spin_lock_irqsave(&bcm->irq_lock, flags); | 3185 | spin_lock_irqsave(&bcm->irq_lock, flags); |
| 3187 | } | 3186 | } |
| 3188 | 3187 | ||
