aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/lantiq_etop.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2017-01-30 08:22:01 -0800
committerDavid S. Miller <davem@davemloft.net>2017-01-30 15:10:42 -0500
commit6ad20165d376fa07919a70e4f43dfae564601829 (patch)
treed5cc7d8d041321af6ea83b053bedd47a73e639fb /drivers/net/ethernet/lantiq_etop.c
parentnet: Avoid receiving packets with an l3mdev on unbound UDP sockets (diff)
downloadlinux-dev-6ad20165d376fa07919a70e4f43dfae564601829.tar.xz
linux-dev-6ad20165d376fa07919a70e4f43dfae564601829.zip
drivers: net: generalize napi_complete_done()
napi_complete_done() allows to opt-in for gro_flush_timeout, added back in linux-3.19, commit 3b47d30396ba ("net: gro: add a per device gro flush timer") This allows for more efficient GRO aggregation without sacrifying latencies. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/lantiq_etop.c')
-rw-r--r--drivers/net/ethernet/lantiq_etop.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/net/ethernet/lantiq_etop.c b/drivers/net/ethernet/lantiq_etop.c
index faea52da8dae..afc810069440 100644
--- a/drivers/net/ethernet/lantiq_etop.c
+++ b/drivers/net/ethernet/lantiq_etop.c
@@ -156,24 +156,21 @@ ltq_etop_poll_rx(struct napi_struct *napi, int budget)
{
struct ltq_etop_chan *ch = container_of(napi,
struct ltq_etop_chan, napi);
- int rx = 0;
- int complete = 0;
+ int work_done = 0;
- while ((rx < budget) && !complete) {
+ while (work_done < budget) {
struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->dma.desc];
- if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) == LTQ_DMA_C) {
- ltq_etop_hw_receive(ch);
- rx++;
- } else {
- complete = 1;
- }
+ if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) != LTQ_DMA_C)
+ break;
+ ltq_etop_hw_receive(ch);
+ work_done++;
}
- if (complete || !rx) {
- napi_complete(&ch->napi);
+ if (work_done < budget) {
+ napi_complete_done(&ch->napi, work_done);
ltq_dma_ack_irq(&ch->dma);
}
- return rx;
+ return work_done;
}
static int