OSDN Git Service

qtnfmac: fix INTx interrupt handling
authorSergey Matyukevich <sergey.matyukevich.os@quantenna.com>
Mon, 14 Jan 2019 09:39:36 +0000 (09:39 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 1 Feb 2019 12:11:52 +0000 (14:11 +0200)
In the current implementation INTx interrupt is deasserted after the
control path processing. However this may lead to missed interrupts
from the wireless card. For instance, this may happen as a result
of control path activity, when another interrupt arrives before
INTx is deasserted.

Signed-off-by: Sergey Matyukevich <sergey.matyukevich.os@quantenna.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c

index 598edb8..cbcda57 100644 (file)
@@ -559,6 +559,9 @@ static irqreturn_t qtnf_pcie_topaz_interrupt(int irq, void *data)
        if (!priv->msi_enabled && !qtnf_topaz_intx_asserted(ts))
                return IRQ_NONE;
 
+       if (!priv->msi_enabled)
+               qtnf_deassert_intx(ts);
+
        priv->pcie_irq_count++;
 
        qtnf_shm_ipc_irq_handler(&priv->shm_ipc_ep_in);
@@ -571,9 +574,6 @@ static irqreturn_t qtnf_pcie_topaz_interrupt(int irq, void *data)
 
        tasklet_hi_schedule(&priv->reclaim_tq);
 
-       if (!priv->msi_enabled)
-               qtnf_deassert_intx(ts);
-
        return IRQ_HANDLED;
 }