• Govindarajulu Varadarajan's avatar
    enic: use atomic_t instead of spin_lock in busy poll · f586a336
    Govindarajulu Varadarajan authored
    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: default avatarGovindarajulu Varadarajan <_govind@gmx.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f586a336
enic_main.c 67.7 KB