From: Lucas Stach <l.st...@pengutronix.de> Sent: Thursday, December 07, 2017 1:25 AM >fep->work_rx and fep->work_tx are both non-zero, as long as the NAPI >softirq hasn't finished its work. So if the current IRQ does not signal any RX >or >TX completion, but some unrelated event, the path to schedule the NAPI >context is still entered. > >The handler works correctly as in this case napi_schedule_prep() will reject >the scheduling attempt, but the flow can still be optimized by not trying to >schedule if the IRQ doesn't signal RX or TX completion. > >Signed-off-by: Lucas Stach <l.st...@pengutronix.de> >--- > drivers/net/ethernet/freescale/fec_main.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > >diff --git a/drivers/net/ethernet/freescale/fec_main.c >b/drivers/net/ethernet/freescale/fec_main.c >index 0b70c07eb703..2043e140e9bd 100644 >--- a/drivers/net/ethernet/freescale/fec_main.c >+++ b/drivers/net/ethernet/freescale/fec_main.c >@@ -1587,14 +1587,14 @@ fec_enet_interrupt(int irq, void *dev_id) > int_events = readl_relaxed(fep->hwp + FEC_IEVENT) & > readl_relaxed(fep->hwp + FEC_IMASK); > writel(int_events, fep->hwp + FEC_IEVENT); >- fec_enet_collect_events(fep, int_events); > >- if ((fep->work_tx || fep->work_rx) && fep->link) { >+ if ((int_events & (FEC_ENET_RXF | FEC_ENET_TXF)) && fep->link) { > ret = IRQ_HANDLED; > > if (napi_schedule_prep(&fep->napi)) { > /* Disable the NAPI interrupts */ > writel(FEC_NAPI_IMASK, fep->hwp + FEC_IMASK); >+ fec_enet_collect_events(fep, int_events); > __napi_schedule(&fep->napi); > } > } >-- >2.11.0
The patch seems fine, and patch#1 is better to cache imask as David's comment. Thanks. Acked-by: Fugang Duan <fugang.d...@nxp.com>