The patch titled bcm43xx: workaround init_board vs. IRQ race has been added to the -mm tree. Its filename is bcm43xx-workaround-init_board-vs-irq-race.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: bcm43xx: workaround init_board vs. IRQ race From: Michael Buesch <mb@xxxxxxxxx> Place the Init-vs-IRQ workaround before any card register access, because we might not have the wireless core mapped at all times in init. So this will result in a Machine Check caused by a bus error. Signed-off-by: Michael Buesch <mb@xxxxxxxxx> Cc: "John W. Linville" <linville@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- drivers/net/wireless/bcm43xx/bcm43xx_main.c | 28 +++++++++--------- 1 file changed, 14 insertions(+), 14 deletions(-) diff -puN drivers/net/wireless/bcm43xx/bcm43xx_main.c~bcm43xx-workaround-init_board-vs-irq-race drivers/net/wireless/bcm43xx/bcm43xx_main.c --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c~bcm43xx-workaround-init_board-vs-irq-race +++ a/drivers/net/wireless/bcm43xx/bcm43xx_main.c @@ -1872,6 +1872,15 @@ static irqreturn_t bcm43xx_interrupt_han spin_lock(&bcm->_lock); + /* Only accept IRQs, if we are initialized properly. + * This avoids an RX race while initializing. + * We should probably not enable IRQs before we are initialized + * completely, but some careful work is needed to fix this. I think it + * is best to stay with this cheap workaround for now... . + */ + if (unlikely(!bcm->initialized)) + goto out; + reason = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON); if (reason == 0xffffffff) { /* irq not for us (shared irq) */ @@ -1893,20 +1902,11 @@ static irqreturn_t bcm43xx_interrupt_han bcm43xx_interrupt_ack(bcm, reason); - /* Only accept IRQs, if we are initialized properly. - * This avoids an RX race while initializing. - * We should probably not enable IRQs before we are initialized - * completely, but some careful work is needed to fix this. I think it - * is best to stay with this cheap workaround for now... . - */ - if (likely(bcm->initialized)) { - /* disable all IRQs. They are enabled again in the bottom half. */ - bcm->irq_savedstate = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL); - /* save the reason code and call our bottom half. */ - bcm->irq_reason = reason; - tasklet_schedule(&bcm->isr_tasklet); - } - + /* disable all IRQs. They are enabled again in the bottom half. */ + bcm->irq_savedstate = bcm43xx_interrupt_disable(bcm, BCM43xx_IRQ_ALL); + /* save the reason code and call our bottom half. */ + bcm->irq_reason = reason; + tasklet_schedule(&bcm->isr_tasklet); out: mmiowb(); spin_unlock(&bcm->_lock); _ Patches currently in -mm which might be from mb@xxxxxxxxx are git-netdev-all.patch bcm43xx-workaround-init_board-vs-irq-race.patch remove-old-hw-rng-support.patch add-new-generic-hw-rng-core.patch add-new-generic-hw-rng-core-cleanups.patch add-new-generic-hw-rng-core-hw_random-core-rewrite-chrdev-read-method.patch add-new-generic-hw-rng-core-maintainers.patch add-new-generic-hw-rng-core-hw_random-core-rewrite-chrdev-read-method-hw_random-core-block-read-if-o_nonblock.patch add-intel-hw-rng-driver.patch add-intel-hw-rng-driver-cleanups.patch add-amd-hw-rng-driver.patch add-geode-hw-rng-driver.patch add-geode-hw-rng-driver-cleanups.patch add-via-hw-rng-driver.patch add-via-hw-rng-driver-cleanups.patch add-ixp4xx-hw-rng-driver.patch add-ti-omap-cpu-family-hw-rng-driver.patch add-bcm43xx-hw-rng-support.patch capi-crash--race-condition.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html