f586a33601
We use spinlock to access a single flag. We can avoid spin_locks by using atomic variable and atomic_cmpxchg(). Use atomic_cmpxchg to set the flag for idle to poll. And a simple atomic_set to unlock (set idle from poll). In napi poll, if gro is enabled, we call napi_gro_receive() to deliver the packets. Before we call napi_complete(), i.e while re-polling, if low latency busy poll is called, we use netif_receive_skb() to deliver the packets. At this point if there are some skb's held in GRO, busy poll could deliver the packets out of order. So we call napi_gro_flush() to flush skbs before we move the napi poll to idle. Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com> Signed-off-by: David S. Miller <davem@davemloft.net> |
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
cq_desc.h | ||
cq_enet_desc.h | ||
enic.h | ||
enic_api.c | ||
enic_api.h | ||
enic_clsf.c | ||
enic_clsf.h | ||
enic_dev.c | ||
enic_dev.h | ||
enic_ethtool.c | ||
enic_main.c | ||
enic_pp.c | ||
enic_pp.h | ||
enic_res.c | ||
enic_res.h | ||
rq_enet_desc.h | ||
vnic_cq.c | ||
vnic_cq.h | ||
vnic_dev.c | ||
vnic_dev.h | ||
vnic_devcmd.h | ||
vnic_enet.h | ||
vnic_intr.c | ||
vnic_intr.h | ||
vnic_nic.h | ||
vnic_resource.h | ||
vnic_rq.c | ||
vnic_rq.h | ||
vnic_rss.h | ||
vnic_stats.h | ||
vnic_vic.c | ||
vnic_vic.h | ||
vnic_wq.c | ||
vnic_wq.h | ||
wq_enet_desc.h |