Message ID | 87iow080zv.fsf@mina86.com |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
On Sun, 2013-11-10 at 21:17 +0100, Michal Nazarewicz wrote: > inta is checked to be zero in a IRQ_NONE branch so afterwards it > cannot be zero as it is never modified. no signed-off-by > @@ -1150,7 +1149,14 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data) > * or due to sporadic interrupts thrown from our NIC. */ > if (!inta) { > IWL_DEBUG_ISR(trans, "Ignore interrupt, inta == 0\n"); > - goto none; > + /* re-enable interrupts here since we don't have anything to > + * service. only Re-enable if disabled by irq and no > + * schedules tasklet. > + */ > + if (test_bit(STATUS_INT_ENABLED, &trans_pcie->status) && > + !trans_pcie->inta) > + iwl_enable_interrupts(trans); > + return IRQ_NONE; I don't really think duplicating this is really an improvement? johannes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 2013-11-11 at 14:41 +0100, Johannes Berg wrote: > > @@ -1150,7 +1149,14 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data) > > * or due to sporadic interrupts thrown from our NIC. */ > > if (!inta) { > > IWL_DEBUG_ISR(trans, "Ignore interrupt, inta == 0\n"); > > - goto none; > > + /* re-enable interrupts here since we don't have anything to > > + * service. only Re-enable if disabled by irq and no > > + * schedules tasklet. > > + */ > > + if (test_bit(STATUS_INT_ENABLED, &trans_pcie->status) && > > + !trans_pcie->inta) > > + iwl_enable_interrupts(trans); > > + return IRQ_NONE; > > I don't really think duplicating this is really an improvement? Err, sorry, not paying attention. johannes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c index 3f237b4..7d0fdc0 100644 --- a/drivers/net/wireless/iwlwifi/pcie/rx.c +++ b/drivers/net/wireless/iwlwifi/pcie/rx.c @@ -1121,7 +1121,6 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data) struct iwl_trans *trans = data; struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); u32 inta, inta_mask; - irqreturn_t ret = IRQ_NONE; lockdep_assert_held(&trans_pcie->irq_lock); @@ -1150,7 +1149,14 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data) * or due to sporadic interrupts thrown from our NIC. */ if (!inta) { IWL_DEBUG_ISR(trans, "Ignore interrupt, inta == 0\n"); - goto none; + /* re-enable interrupts here since we don't have anything to + * service. only Re-enable if disabled by irq and no + * schedules tasklet. + */ + if (test_bit(STATUS_INT_ENABLED, &trans_pcie->status) && + !trans_pcie->inta) + iwl_enable_interrupts(trans); + return IRQ_NONE; } if ((inta == 0xFFFFFFFF) || ((inta & 0xFFFFFFF0) == 0xa5a5a5a0)) { @@ -1168,19 +1174,7 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data) trans_pcie->inta |= inta; /* the thread will service interrupts and re-enable them */ - if (likely(inta)) - return IRQ_WAKE_THREAD; - - ret = IRQ_HANDLED; - -none: - /* re-enable interrupts here since we don't have anything to service. */ - /* only Re-enable if disabled by irq and no schedules tasklet. */ - if (test_bit(STATUS_INT_ENABLED, &trans_pcie->status) && - !trans_pcie->inta) - iwl_enable_interrupts(trans); - - return ret; + return IRQ_WAKE_THREAD; } /* interrupt handler using ict table, with this interrupt driver will