aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_main.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
index 6195c2a151..57306a6584 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
@@ -2079,12 +2079,19 @@ static irqreturn_t bcm43xx_interrupt_handler(int irq, void *dev_id, struct pt_re
2079 2079
2080 bcm43xx_interrupt_ack(bcm, reason, mask); 2080 bcm43xx_interrupt_ack(bcm, reason, mask);
2081 2081
2082 /* disable all IRQs. They are enabled again in the bottom half. */ 2082 /* Only accept IRQs, if we are initialized properly.
2083 bcm->irq_savedstate = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL); 2083 * This avoids an RX race while initializing.
2084 2084 * We should probably not enable IRQs before we are initialized
2085 /* save the reason code and call our bottom half. */ 2085 * completely, but some careful work is needed to fix this. I think it
2086 bcm->irq_reason = reason; 2086 * is best to stay with this cheap workaround for now... .
2087 tasklet_schedule(&bcm->isr_tasklet); 2087 */
2088 if (likely(bcm->initialized)) {
2089 /* disable all IRQs. They are enabled again in the bottom half. */
2090 bcm->irq_savedstate = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL);
2091 /* save the reason code and call our bottom half. */
2092 bcm->irq_reason = reason;
2093 tasklet_schedule(&bcm->isr_tasklet);
2094 }
2088 2095
2089 spin_unlock(&bcm->lock); 2096 spin_unlock(&bcm->lock);
2090 2097