Hello, recently I was doing a lot of tracing/profiling to understand an issue we were having. Anyway, during this I ran across __napi_schedule_irqoff() where the comment in dev.c says "Variant of __napi_schedule() assuming hard irqs are masked".
It looks like the queue_writel(queue, IDR, bp->rx_intr_mask); call just before the __napi_schedule() call in macb_main.c is doing this hard irq masking? So could it change to be like this? --- a/drivers/net/ethernet/cadence/macb_main.c +++ b/drivers/net/ethernet/cadence/macb_main.c @@ -1616,7 +1623,7 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id) if (napi_schedule_prep(&queue->napi)) { netdev_vdbg(bp->dev, "scheduling RX softirq\n"); - __napi_schedule(&queue->napi); + __napi_schedule_irqoff(&queue->napi); } } -Paul