From d1241cdbbcf7bfac3e53482b2054504628f9f047 Mon Sep 17 00:00:00 2001 From: James Hilliard Date: Tue, 13 Oct 2026 11:54:13 -0600 Subject: [PATCH] net: stmmac: leave the datapath running for normal-size MTU changes When both MTUs are at most ETH_DATA_LEN, the receive buffer size and MAC receive limit do not change. Update the MTU without restarting the datapath. This also avoids rebinding a live AF_XDP pool to a temporary RXQ. XDP rejects jumbo MTUs, so all supported XDP MTU changes take this path. Jumbo transitions still use the existing reopen path. Found by source review while working on the stmmac MTU/resume recovery series. The fast path was tested on Allwinner H616 with sun8i EMAC1 and an AC300 PHY. The AF_XDP scenario was identified by inspection. Reviewed-by: Nicolai Buchwitz Signed-off-by: James Hilliard Reviewed-by: Daniel Machon Reviewed-by: Maxime Chevallier Link: https://patch.msgid.link/20261013-stmmac-mtu-fastpath-v2-1-1e4ce8137689@gmail.com Signed-off-by: Paolo Abeni --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 3636449e1ffc..afd8f7a9f051 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -6265,7 +6265,12 @@ static int stmmac_change_mtu(struct net_device *dev, int new_mtu) if ((txfifosz < new_mtu) || (new_mtu > BUF_SIZE_16KiB)) return -EINVAL; - if (netif_running(dev)) { + /* Normal-size frames use the same buffers and MAC receive limits. + * In particular, do not disturb a live AF_XDP pool: XDP does not + * support jumbo frames, so it never needs the ring replacement below. + */ + if (netif_running(dev) && + (dev->mtu > ETH_DATA_LEN || mtu > ETH_DATA_LEN)) { netdev_dbg(priv->dev, "restarting interface to change its MTU\n"); /* Try to allocate the new DMA conf with the new mtu */ dma_conf = stmmac_setup_dma_desc(priv, mtu);