+ bcm43xx-workaround-init_board-vs-irq-race.patch added to -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 |   27 +++++++++---------
 1 file changed, 14 insertions(+), 13 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(bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED))
+		goto out;
+
 	reason = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON);
 	if (reason == 0xffffffff) {
 		/* irq not for us (shared irq) */
@@ -1893,19 +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();
_

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

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux