• Ilias Apalodimas's avatar
    net: socionext: correctly recover txq after being full · 17a12eaa
    Ilias Apalodimas authored
    Running pktgen with packets sizes > 512b ends up in the interface Txq
    getting stuck.
    "netsec 522d0000.ethernet eth0: netsec_netdev_start_xmit: TxQFull!"
    appears on dmesg but the interface never recovers. It requires an
    ifconfig down/up to make the interface usable again.
    
    The reason that triggers this, is a race condition between
    .ndo_start_xmit and the napi completion. The available budget is
    calculated first and indicates the queue is full. Due to a costly
    netif_err() the queue is not stopped in time while the napi completion
    runs, clears the irq and frees up descriptors, thus the queue never wakes
    up again.
    
    Fix this by moving the print after stopping the queue, make the print
    ratelimited, add barriers and check for cleaned descriptors..
    Signed-off-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    17a12eaa
netsec.c 46.7 KB