]> git.baikalelectronics.ru Git - kernel.git/commit
net: ll_temac: Fix race condition causing TX hang
authorEsben Haabendal <esben@geanix.com>
Fri, 21 Feb 2020 06:47:21 +0000 (07:47 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Feb 2020 18:58:48 +0000 (10:58 -0800)
commit051a2c651824138bd47e0abf355838dc35f7e85a
treee8a373a6d314a81b514f23a20a00b3f1e82855be
parentb51a6fc6ec4b9c53df821d45866b8ec4e5f150e3
net: ll_temac: Fix race condition causing TX hang

It is possible that the interrupt handler fires and frees up space in
the TX ring in between checking for sufficient TX ring space and
stopping the TX queue in temac_start_xmit. If this happens, the
queue wake from the interrupt handler will occur before the queue is
stopped, causing a lost wakeup and the adapter's transmit hanging.

To avoid this, after stopping the queue, check again whether there is
sufficient space in the TX ring. If so, wake up the queue again.

This is a port of the similar fix in axienet driver,
commit 83f057204bf5 ("net: axienet: Fix race condition causing TX hang").

Fixes: 77ff44a61a76 ("net: ll_temac: fix checksum offload logic")
Signed-off-by: Esben Haabendal <esben@geanix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/xilinx/ll_temac_main.c