From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C98EE3C5855 for ; Wed, 12 Aug 2026 08:04:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786521870; cv=none; b=Fd0T/UVEfOKcY+QZdluQMqHxQ9UuujmR1czRhA0SAnTQDIfoZGdUhTe0n1JkHo5vvQjGocLituvqJ2LGeYUkUDYUNbbb28e0IXAdFvONPVCwauT6c7GD2CBrSeAg4nJGQd8qnvbyaqo6XWrzDb59a3hMFMq8c4ZcjX569zH5sWU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786521870; c=relaxed/simple; bh=SiG6zK9xDHe4WU6qg0UldbCJtsiy9CbIwEyEegLfj+Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RyFFGcm2LYo1HNTJi7rDWkaxRtYqZaM/m2lRaM/fjTrF3byP7huXgnP++in5mdVMDyL5iOJZfiecK4okL//qnEkpAdoGlU54iGhABQo+3oLDmBTFD2WDVDD2gBhiZ+KM8a3WIOyYN+k6KtNX+G0KQYu5ELtetMJ1RtCkgtlC4Gc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=xwCDAxzQ; arc=none smtp.client-ip=185.246.85.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="xwCDAxzQ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id CD3894E411D1; Wed, 12 Aug 2026 08:04:24 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id A18586045E; Wed, 12 Aug 2026 08:04:24 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 7052C11C4C950; Wed, 12 Aug 2026 10:04:21 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1786521863; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=2nLXXOmZ7mcphBVLGD2Js0DsLGkAmZ7vRToDyi2ecao=; b=xwCDAxzQTUguDry4n2BRCXSrQbe3OM+wvyQUHU6T2DXhcYHV5UZ1BgWuyljNheQ+JjTf76 BIXTyC78+A6c59hNqqkAc1gYyvRA4oFdXAqUoY1YU87Y5AjgNXvG1UqWgBBKTgkG+5DovN k0cZY4CFfFNgenkzr7gXgFiLN4r69aNa9nqzMu7EYTQ9qlggGcawM23BZ4/bdzpQ+EbzL4 XHF/6KsHv9FYEtDA8YgOpbFkivnir8F8tgWl5N/5BojKKmZzBvK4M4/rjafMs3xupmkBCs M1K627K8DZl3M4vNPY0GR5h3+l54j+i397fLRYbq30AxG7g+C8KmYWtbjcfbYw== From: =?utf-8?q?Th=C3=A9o_Lebrun?= Date: Wed, 12 Aug 2026 10:03:31 +0200 Subject: [PATCH net-next v9 17/17] net: macb: use context swapping in .ndo_change_mtu() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Message-Id: <20260812-macb-context-v9-17-7ddbf5f715e0@bootlin.com> References: <20260812-macb-context-v9-0-7ddbf5f715e0@bootlin.com> In-Reply-To: <20260812-macb-context-v9-0-7ddbf5f715e0@bootlin.com> To: =?utf-8?q?Th=C3=A9o_Lebrun?= , Conor Dooley , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , Russell King Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Nicolas Ferre , Claudiu Beznea , Paolo Valerio , Nicolai Buchwitz , Vladimir Kondratiev , Gregory CLEMENT , =?utf-8?q?Beno=C3=AEt_Monin?= , Tawfik Bayouk , Thomas Petazzoni , Maxime Chevallier X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 Use newly introduced context buffer management to implement .ndo_change_mtu() as a context swap: allocate new context -> reconfigure HW -> free old context. This resists memory pressure well by failing without closing the interface and it is much faster by avoiding PHY reinit. AT91 EMAC is handled differently as their buffer management is separate and they don't do NAPI. They cannot land in macb_change_mtu as they use a different ndo struct. We still defensively protect against it in code. Reviewed-by: Nicolai Buchwitz Signed-off-by: Théo Lebrun --- drivers/net/ethernet/cadence/macb_main.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c index 55c97f2035e7..3160e815a89a 100644 --- a/drivers/net/ethernet/cadence/macb_main.c +++ b/drivers/net/ethernet/cadence/macb_main.c @@ -3530,11 +3530,29 @@ static int macb_close(struct net_device *netdev) static int macb_change_mtu(struct net_device *netdev, int new_mtu) { - if (netif_running(netdev)) - return -EBUSY; + struct macb *bp = netdev_priv(netdev); + bool running = netif_running(netdev); + struct macb_context *new_ctx; + + if (running) { + /* Context swapping is not supported for AT91. */ + if (bp->caps & MACB_CAPS_MACB_IS_EMAC) + return -EBUSY; + + new_ctx = macb_context_alloc(bp, new_mtu, + bp->configured_rx_ring_size, + bp->configured_tx_ring_size); + if (IS_ERR(new_ctx)) + return PTR_ERR(new_ctx); + + macb_context_swap_start(bp); + } WRITE_ONCE(netdev->mtu, new_mtu); + if (running) + macb_context_swap_end(bp, new_ctx); + return 0; } -- 2.55.0