From: Vladimir Oltean <vladimir.olt...@nxp.com>

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.olt...@nxp.com>
Reviewed-by: Florian Fainelli <f.faine...@gmail.com>
---
Changes in v3:
None.

Changes in v2:
None.

Changes in v2:
Patch is new.

 drivers/net/ethernet/mscc/ocelot_vsc7514.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c 
b/drivers/net/ethernet/mscc/ocelot_vsc7514.c
index 407244fe5b17..5140639910a6 100644
--- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c
+++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c
@@ -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))
-- 
2.25.1

Reply via email to