[PATCH net v6 4/4] net: stmmac: restore the XSK TX pool on resume

From: Ding Hui

Date: Tue Nov 10 2026 - 07:42:32 EST


From: Ding Hui <dinghui@xxxxxxxxxxx>

When suspend interrupts AF_XDP zero-copy transmission, resume releases
outstanding TX buffers through dma_free_tx_skbufs(). If it completes XSK
frames, that helper also clears tx_q->xsk_pool even though the socket
remains bound to the queue.

The resume path does not run the TX ring allocation routine that normally
sets this pointer. Consequently, stmmac_tx_clean() skips XSK transmission
and a running TX-only socket can stop sending after resume, despite the
link coming back up.

Restore the TX pool from the queue's existing XSK binding after releasing
TX buffers and before restarting DMA and NAPI. Keep the buffer cleanup
helper's behavior for teardown unchanged.

Fixes: 132c32ee5bc0 ("net: stmmac: Add TX via XDP zero-copy socket")
Signed-off-by: Ding Hui <dinghui@xxxxxxxxxxx>
---
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 99e46174741e..140b95f767fe 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -2280,6 +2280,9 @@ static int stmmac_resume_descriptors(struct stmmac_priv *priv)
for (queue = 0; queue < priv->plat->tx_queues_to_use; queue++) {
stmmac_reset_tx_queue(priv, queue);
dma_free_tx_skbufs(priv, dma_conf, queue);
+ /* Buffer cleanup may clear the pool; the socket remains bound. */
+ dma_conf->tx_queue[queue].xsk_pool =
+ stmmac_get_xsk_pool(priv, queue);
stmmac_clear_tx_descriptors(priv, dma_conf, queue);
}

--
2.34.1