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.stach@xxxxxxxxxxxxxx> --- 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 498264969e89..fee5783a4dc6 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1575,14 +1575,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.8.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel