rtlwifi: Fix incorrect return of IRQ_HANDLED
authorLarry Finger <Larry.Finger@lwfinger.net>
Thu, 24 Nov 2011 03:30:19 +0000 (21:30 -0600)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 28 Nov 2011 19:43:53 +0000 (14:43 -0500)
The recent discussion regarding an incorrect return of IRQ_HANDLED
from rt2800pci caused me to look at this PCI interrupt routine. I
discovered that changes were needed.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rtlwifi/pci.c

index b6683a2..91f0525 100644 (file)
@@ -780,6 +780,7 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id)
        unsigned long flags;
        u32 inta = 0;
        u32 intb = 0;
+       irqreturn_t ret = IRQ_HANDLED;
 
        spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
 
@@ -787,8 +788,10 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id)
        rtlpriv->cfg->ops->interrupt_recognized(hw, &inta, &intb);
 
        /*Shared IRQ or HW disappared */
-       if (!inta || inta == 0xffff)
+       if (!inta || inta == 0xffff) {
+               ret = IRQ_NONE;
                goto done;
+       }
 
        /*<1> beacon related */
        if (inta & rtlpriv->cfg->maps[RTL_IMR_TBDOK]) {
@@ -892,7 +895,7 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id)
 
 done:
        spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
-       return IRQ_HANDLED;
+       return ret;
 }
 
 static void _rtl_pci_irq_tasklet(struct ieee80211_hw *hw)