]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: mscc: ocelot: stop returning IRQ_NONE in ocelot_xtr_irq_handler
authorVladimir Oltean <vladimir.oltean@nxp.com>
Sat, 13 Feb 2021 22:37:50 +0000 (00:37 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 15 Feb 2021 01:31:43 +0000 (17:31 -0800)
Since the xtr (extraction) IRQ of the ocelot switch is not shared, then
if it fired, it means that some data must be present in the queues of
the CPU port module. So simplify the code.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mscc/ocelot_vsc7514.c

index 6b6eb92149bac83b021d48455119c2ae3c653242..590297d5e144a987be09a151b4cadf3538c20e1d 100644 (file)
@@ -604,10 +604,7 @@ static irqreturn_t ocelot_xtr_irq_handler(int irq, void *arg)
        int i = 0, grp = 0;
        int err = 0;
 
-       if (!(ocelot_read(ocelot, QS_XTR_DATA_PRESENT) & BIT(grp)))
-               return IRQ_NONE;
-
-       do {
+       while (ocelot_read(ocelot, QS_XTR_DATA_PRESENT) & BIT(grp)) {
                struct skb_shared_hwtstamps *shhwtstamps;
                struct ocelot_port_private *priv;
                struct ocelot_port *ocelot_port;
@@ -702,7 +699,7 @@ static irqreturn_t ocelot_xtr_irq_handler(int irq, void *arg)
                        netif_rx(skb);
                dev->stats.rx_bytes += len;
                dev->stats.rx_packets++;
-       } while (ocelot_read(ocelot, QS_XTR_DATA_PRESENT) & BIT(grp));
+       }
 
        if (err)
                while (ocelot_read(ocelot, QS_XTR_DATA_PRESENT) & BIT(grp))