]> git.baikalelectronics.ru Git - kernel.git/commit
net: socionext: correctly recover txq after being full
authorIlias Apalodimas <ilias.apalodimas@linaro.org>
Fri, 14 Dec 2018 08:59:00 +0000 (10:59 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 15 Dec 2018 21:15:19 +0000 (13:15 -0800)
commit3579ecdc287eb5b3080ed1d555b509ed29d90009
tree09a0f96be00c93c4eb6b20355d8705697af79104
parentecc6b42e9aa8e8c3c21b78847748f16b3c116b4b
net: socionext: correctly recover txq after being full

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: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/socionext/netsec.c