]> Pileus Git - ~andy/linux/commitdiff
wireless: hostap, fix oops due to early probing interrupt
authorColin Ian King <colin.king@canonical.com>
Mon, 31 Aug 2009 02:18:41 +0000 (20:18 -0600)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 21 Dec 2009 23:38:49 +0000 (18:38 -0500)
BugLink: https://bugs.launchpad.net/ubuntu/+bug/254837
Spurious shared interrupts or early probing interrupts can cause the
hostap interrupt handler to oops before the driver has fully configured
the IO base port addresses. In some cases the oops can be because
the hardware shares an interrupt line, on other cases it is due to a
race condition between probing for the hardware and configuring
the IO base port. The latter occurs because the probing is required to
determin the hardware port address which is only determined when the probe
can interrupt the hardware (catch 22).

This patch catches this pre-configured condition to avoid the oops.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Tim Gardner <tim.gardner@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/hostap/hostap_hw.c

index ff9b5c882184a00e58316166a62fd5514ead0ae6..d70732819423d25d09627fa0bc371be5f6976896 100644 (file)
@@ -2618,6 +2618,15 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id)
        int events = 0;
        u16 ev;
 
+       /* Detect early interrupt before driver is fully configued */
+       if (!dev->base_addr) {
+               if (net_ratelimit()) {
+                       printk(KERN_DEBUG "%s: Interrupt, but dev not configured\n",
+                              dev->name);
+               }
+               return IRQ_HANDLED;
+       }
+
        iface = netdev_priv(dev);
        local = iface->local;