axienet_open() never starts the transmit queue, and nothing else does either: __dev_open() and dev_activate() leave the driver's queue state alone. axienet_start_xmit() stops the queue with netif_stop_queue() when the TX ring fills, and axienet_tx_poll() wakes it again as completions free descriptors. If the interface is brought down while the queue is stopped, __QUEUE_STATE_DRV_XOFF survives into the next axienet_open(). The ring is reinitialised empty, so no TX completion ever arrives to run the wake in axienet_tx_poll(), and the interface cannot transmit until the driver is reloaded. The resume path is unaffected only because netif_device_attach() wakes the queues. Start the queue at the end of a successful axienet_open(), as most drivers do. Tested on an AXI Ethernet MAC behind a PCIe endpoint: traffic passes, and resumes after each of ten down/up cycles and five module reloads, all made with traffic running. A queue left stopped across a down/up cycle, with the ring full, was not reproduced. Fixes: 8a3b7a252dca ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver") Assisted-by: LLM sparse Signed-off-by: Sagi Maimon --- drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c index 782f903d318f..fb26d2e39fac 100644 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c @@ -1700,6 +1700,11 @@ static int axienet_open(struct net_device *ndev) goto err_phy; } + /* Nothing else clears a stop left over from before the last close: + * the ring is empty, so no TX completion will wake the queue. + */ + netif_start_queue(ndev); + return 0; err_free_eth_irq: -- 2.47.0