On 8/16/20 8:07 PM, Eric Dumazet wrote: > > > On 8/15/20 11:33 AM, Hauke Mehrtens wrote: >> Use napi_complete_done() and activate the interrupts when this function >> returns true. This way the generic NAPI code can take care of activating >> the interrupts. >> >> Signed-off-by: Hauke Mehrtens >> --- >> drivers/net/ethernet/lantiq_xrx200.c | 8 ++------ >> 1 file changed, 2 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/net/ethernet/lantiq_xrx200.c b/drivers/net/ethernet/lantiq_xrx200.c >> index f34e4dc8c661..674ffb2ecd9a 100644 >> --- a/drivers/net/ethernet/lantiq_xrx200.c >> +++ b/drivers/net/ethernet/lantiq_xrx200.c >> @@ -229,10 +229,8 @@ static int xrx200_poll_rx(struct napi_struct *napi, int budget) >> } >> } >> >> - if (rx < budget) { >> - napi_complete(&ch->napi); >> + if (napi_complete_done(&ch->napi, rx)) >> ltq_dma_enable_irq(&ch->dma); >> - } >> >> return rx; >> } >> @@ -271,10 +269,8 @@ static int xrx200_tx_housekeeping(struct napi_struct *napi, int budget) >> if (netif_queue_stopped(net_dev)) >> netif_wake_queue(net_dev); >> >> - if (pkts < budget) { >> - napi_complete(&ch->napi); >> + if (napi_complete_done(&ch->napi, pkts)) >> ltq_dma_enable_irq(&ch->dma); >> - } >> >> return pkts; >> } >> > > > This looks buggy to me. Hi Eric, Thanks for looking at the patch. What exactly looks buggy to you? We see with and also without this patch problems in the TX path, it looks like the netif tx queue is not started again. > Please look again to other implementations for a correct usage. I looked at multiple drivers and they look similar in this area. For example microchip/lan743x_main.c is looking similar to me. The hardware has two interrupts one for the RX and one for TX complete. Can you please suggest a driver which uses the NAPI in a good way and is not very complex. Hauke