• Tobias Waldekranz's avatar
    net: ethernet: fec: prevent tx starvation under high rx load · 7cdaa4cc
    Tobias Waldekranz authored
    In the ISR, we poll the event register for the queues in need of
    service and then enter polled mode. After this point, the event
    register will never be read again until we exit polled mode.
    
    In a scenario where a UDP flow is routed back out through the same
    interface, i.e. "router-on-a-stick" we'll typically only see an rx
    queue event initially. Once we start to process the incoming flow
    we'll be locked polled mode, but we'll never clean the tx rings since
    that event is never caught.
    
    Eventually the netdev watchdog will trip, causing all buffers to be
    dropped and then the process starts over again.
    
    Rework the NAPI poll to keep trying to consome the entire budget as
    long as new events are coming in, making sure to service all rx/tx
    queues, in priority order, on each pass.
    
    Fixes: 4d494cdc ("net: fec: change data structure to support multiqueue")
    Signed-off-by: default avatarTobias Waldekranz <tobias@waldekranz.com>
    Tested-by: default avatarFugang Duan <fugang.duan@nxp.com>
    Reviewed-by: default avatarFugang Duan <fugang.duan@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7cdaa4cc
fec_main.c 100 KB