From nobody Sun May 24 22:33:51 2026 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B0D323D7F0 for ; Thu, 21 May 2026 01:04:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779325446; cv=none; b=LVgUy7C6AAi3T8Lu0dz3odzp37riksJS0WXpplA5AqOGYRy63/RPyMCJi4mAqpa8TZm/tpajLqE5XNp20L3BP38JP7JY3Eo/H1QpGrtHzaVgIG2Cstza7n3Jj+CMuABeceIld0KEWVrrwcB8vP6x8b1IQaWbt+KwpXFq8GX3ldc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779325446; c=relaxed/simple; bh=AS3r4SOTc4veYSfaHwgwn+ULtHBqWvT8Yq79Cu0j7WE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pBeYvXk/+1pAUdbzsjWJQNJ38/ajW9bDNA+UDIOymMPtfvwPui+Lkx4ZIzINeP6Fuw1ZCy4chfrsMi3iT+DOHhWUhYL8EKTLz8YVMJn5/0WJJu1Lik+yBjbbOmv9NpUq4ZzBzYXEYSp/Oy6wYxkaas/Fw0xRRgyDAy2Xah9WqRM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SMvF2c/K; arc=none smtp.client-ip=209.85.210.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SMvF2c/K" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-82f8b60e485so2310699b3a.0 for ; Wed, 20 May 2026 18:04:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779325445; x=1779930245; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wLqsfTgrZOczLHoU8IEadZ/9mpSZuAXVPGGnbvVO5aU=; b=SMvF2c/KcNGZT+6uRTRqQihxxx9dF5TPjroCcs7vjB/gVEymMYpEDC+uqY+DNOhkxN b1ilTnE434PITCqplXatB8MzdO+xNgnKw6vxuTTkEWFPh+u0jbjicg1yP1zkNpnQY4fH CsDa5h8CMVupxCpNYx9BBbWgp9Bx3P75J1Hm1MtdAccbuBzPt5SIl9ZqUtF/cbYIXiz7 ABcHxAcYWk0m+ERm23mrvmJKaNJMOl32R7S0ahPO1IJbMGxPVnMsKEoY2Yc+7abMydOw ++DFW5SOqturRsm0byO66FuuejBJomsxIEFoNRy53v5UskAzgBzvAIJkH3tuqfPGfkp/ pQpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779325445; x=1779930245; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wLqsfTgrZOczLHoU8IEadZ/9mpSZuAXVPGGnbvVO5aU=; b=RSKV+wNXSrM2UeAJVh0yRhwtAnA3lMbr0J9MR65dC/KVQkWa4siz3GW1NWhrxFxuuT w4zUquM4WUsvfgRjtDRQ/wPGs70IMNbw5obiC1vSfYoteaYpURtqGbie9t565i/IjlqG ecQRHHSEytH409sq7FpOTQN9qwKN0ffD5N13x7HxWfTeBmwfcqO8dPVqWcCQvuLXbnEc 9KZ76Th4aGybjY+1pvcpVdTpDy/80XmOkVEhS4rFo4EN6HFM4Xy5cDXHoHbUpqnThbrz 1RhKYPf6cwyL28HepQomTjvt+gocLzWPOE5VrOW++1V4diuy8ogcGBqjcB4gHkObEehE WsZg== X-Forwarded-Encrypted: i=1; AFNElJ8zH97R8Sm6aTzbYiui2e0KXKiPIdeMReHy4gQL2y7rzR2gVIKV+wkPwjYZTheomXAAwJgKKLiHg7YLILA=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/zwTb2pxhWSjHNTXaC3J+lY+3kTNrIs89SI2oZR6EqGiKDbTi /KLw27FkSRrrYC53ZOXeEC1jdOxJAPYFJPtCPLX6gJ1BXnNOb7a28t6e X-Gm-Gg: Acq92OF32r2msctvbxQi+fvB4pWVwjxhqFgkjh0lwI8fDhn/UXOQih3iolhqdNENDtk Sl/LCWALG/8pwqDlOqs1gB+HQSHUdA1HiQCwNvRBExO6S2K3Ve3E4Yya2gS/Zc+SBkNUPuI9d4n nk4SDrwtA5GYL8ADFQKjtu4Prequ8xwzvzYK/1caqKQZ9s8qGDay9RsLIgOwhgh5VJOcBvvvcax umY/x6q3oIKWwr7IVa7uD6UsFqQXvTblc0D4C62jD9uW59VCELy8ezwSU1IXAJrRMfwrpgpxXT1 c0AqWrwoJPmR6AH67vAZEUncAougXX7hZyUTRy+fSpSS+caFJEXUrDHguxh42GHCWtBGe1raKZX PovawpQ9s0yWhqQLeJ8Uz8Q1yGiOAMOegAPt+TFKSIugqOnqDoUt2y8RWrY1qWlU3jK01lTAOW3 AETLJu2UeeulXOGiz/w9WKP6xXMVOzOVNH+s/vIqNQfCfZsxYSGDWKbSMBZQra X-Received: by 2002:a05:6a20:7489:b0:3b2:8685:13e4 with SMTP id adf61e73a8af0-3b3086eca0emr810470637.15.1779325444711; Wed, 20 May 2026 18:04:04 -0700 (PDT) Received: from d.home.yangfl.dn42 ([2a09:bac5:661f:1232::1d0:bf]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c82bb114a70sm26319616a12.22.2026.05.20.18.04.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 18:04:04 -0700 (PDT) From: David Yang To: netdev@vger.kernel.org Cc: David Yang , Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jamal Hadi Salim , Jiri Pirko , Simon Horman , linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 1/3] net/sched: prefer existing extack message in qdisc_offload_graft_helper() Date: Thu, 21 May 2026 09:03:05 +0800 Message-ID: <20260521010320.208138-2-mmyangfl@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260521010320.208138-1-mmyangfl@gmail.com> References: <20260521010320.208138-1-mmyangfl@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use NL_SET_ERR_MSG_WEAK so any existing error message (probably from the underlying driver) is used instead of the generic fallback. Signed-off-by: David Yang --- net/sched/sch_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 3c779e5098ef..8a3236456db4 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -859,7 +859,7 @@ void qdisc_offload_graft_helper(struct net_device *dev,= struct Qdisc *sch, any_qdisc_is_offloaded |=3D old && old->flags & TCQ_F_OFFLOADED; =20 if (any_qdisc_is_offloaded) - NL_SET_ERR_MSG(extack, "Offloading graft operation failed."); + NL_SET_ERR_MSG_WEAK(extack, "Offloading graft operation failed."); } EXPORT_SYMBOL(qdisc_offload_graft_helper); =20 --=20 2.53.0 From nobody Sun May 24 22:33:51 2026 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 615212C11C4 for ; Thu, 21 May 2026 01:04:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779325450; cv=none; b=K0MD+itS/SFS2x9BRgZ+iiE3sSYw4b+c0plnBFLAkCLhQj3WHs374JagDIzoeWenChMvL87LH/syqix3DYDxb3NRZ7aTmNlnxIZFvDwI68Hte04kFoY79v6R3FXHp4jiFW5Qbz2+HP67lioeIhveXe0V1D1KB9C1A/5xOCKC6vo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779325450; c=relaxed/simple; bh=1ZjWBN0yIBNQfqflAGBfSTW8/icSlSo2UT4WXbyWYAA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kdCfmAmkjLhrAr/hteoVTpBjW8ntOxBZ5enD4u3E2PrvNr06P8g3cYAjlbUj8Q/SELOXOJsWcJ4ZllfGaqzBI+p3y7YTsqhoVlNSWaUv0elqpKB4hdLIXjA11TQBk6mM4FJFoq2clxwilfv8Qqk2nVkTJzyV89mJ0daw8VHb9og= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=igHngFhj; arc=none smtp.client-ip=209.85.210.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="igHngFhj" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-83ef1d17904so5485530b3a.1 for ; Wed, 20 May 2026 18:04:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779325449; x=1779930249; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=A1zAZ9q3hOWLxZR5AYVa5Nm+ouUfN2L7nHWHZTxPEz0=; b=igHngFhjo686CUY1sLkUjKTfg2rU6TjQfybS2J1mgowWcRPO3RfnDokgvDDRIM+Al0 SDVU+2XBUeac0K1CPJurAUa3vqyajWUpJAjmrOMa/M97YKA8GUkhri1mW82z0O9qOqL8 h3s0rb1OdIj8aoEe0bAluH9Ofot0cxGTWQj+q/5OTqHxLFosLd2JVjexN450baEpo0q3 pfj7a2mxEb9YDzucvbmnrqXVuBUYkpwthUztWPwQJbDNUkFApaRj19yDsStx+Moe9n6h +h/MZ4tAv2CjCWzQeLRqy2iMHNfI8G/HLNHbjZV/imsMaRU9FX9nciDT9WoGLFXXpC3k uw9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779325449; x=1779930249; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=A1zAZ9q3hOWLxZR5AYVa5Nm+ouUfN2L7nHWHZTxPEz0=; b=SVpioVDP4dweMv74O1HAT3kmlZ8Xr/uhj8Fb9xBv2iGcpDMZorLiphASLh+K9MxIqF 15JYs+X3hCSux1lnioBiVqviw+JA8lZdpbfGCpTcdFjRV3jDj4t08nsCXTuI+vOhdYwQ NkNVVmD0FPfnpCVen/BiD0aQAXdNsqjlaRoXWq+SNVOG2S8GikbSFQMXrKnEBKC5VpOJ aLs52UWy2C6uhUEED7oyhuNdn4OCqu4RmZtdvouwAneOv2ictEFduXnHPtaIefZgiQ/u 57JseTSbBm4cb9EBWWxChgZTOVNuVRm2hsnb91CWopaeoqml9ASrWlBhmY1DTheisz7d wQag== X-Forwarded-Encrypted: i=1; AFNElJ/VLd5kIGS3kEGUlwhBmizDKfIyhZHdANLljihZbUGPLHJe3A3ysvTgB6OiGeArFO4SgmZ8nQM7+bvSmLs=@vger.kernel.org X-Gm-Message-State: AOJu0YzIdG5Vdmca8u9k+0pNR8/itb9hYtz/YMUD3xZczXT9rWcNo3ZL MX4E2jI9GlA1TKAcUE6dZTBeC3oDSwkn+yWjrPa+M5UiuakE2M2RpDoRW28lxbI+ X-Gm-Gg: Acq92OGvRITRPnY4dVCw9mnwPiX6t6t28DQtgUr5wMrgHl40yaDt6xScS+gy8ZRfZma 7dkCPQ/VyOVaneXxy45A+sm0RjDV++2NMi6REWbjV3hc5zlnrJ/x5PHUrW2LF8aO8BZDqQVyCQB 0SETWvvdEawTKmZxPAZo2tQtKcerGpMbgEIqPBFjGt9eUeutxGHh+p4lOMjqovP/qYMGXBL3Ryc tV0Ul2qoNMFC7NlA9pVsunpGLz3gqx9/trVTeVg2ppDou/4ReJgfOJUH/9vTU66g7c0YEwwF87O gAwDQdxgL5OHplWyVCQUrJYPeipHw15w87d1xJgosv8q/V6XuRWoFlnUxIZ4MGHty6n0qQcPMlv EmgPraS310+EWCWmAtB3rTlFuxA6jaVsNmtJsb2+pcHKIKSrsbBo9dC4UuxXbnGGTqTcYGkHO3I 14T9D01rVMVGXF/5U5STaJ2vqMq3RohplwaPryiQTX317U96TvafOkqqXTO4Lr X-Received: by 2002:a05:6a20:4307:b0:398:6ea8:21d8 with SMTP id adf61e73a8af0-3b3086e6a37mr742936637.15.1779325448508; Wed, 20 May 2026 18:04:08 -0700 (PDT) Received: from d.home.yangfl.dn42 ([2a09:bac5:661f:1232::1d0:bf]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c82bb114a70sm26319616a12.22.2026.05.20.18.04.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 18:04:07 -0700 (PDT) From: David Yang To: netdev@vger.kernel.org Cc: David Yang , Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jamal Hadi Salim , Jiri Pirko , Simon Horman , linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 2/3] net/sched: tbf: add extack to offload params Date: Thu, 21 May 2026 09:03:06 +0800 Message-ID: <20260521010320.208138-3-mmyangfl@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260521010320.208138-1-mmyangfl@gmail.com> References: <20260521010320.208138-1-mmyangfl@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drivers might have error messages to propagate to user space. Propagate the netlink extack so that they can inform user space in a verbal way of their limitations. Signed-off-by: David Yang --- include/net/pkt_cls.h | 1 + net/sched/sch_tbf.c | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 99ac747b7906..3bd08d7f39c1 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -1046,6 +1046,7 @@ struct tc_tbf_qopt_offload_replace_params { }; =20 struct tc_tbf_qopt_offload { + struct netlink_ext_ack *extack; enum tc_tbf_command command; u32 handle; u32 parent; diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index 67c7aaaf8f60..58c9687efb0f 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c @@ -139,7 +139,8 @@ static u64 psched_ns_t2l(const struct psched_ratecfg *r, return len; } =20 -static void tbf_offload_change(struct Qdisc *sch) +static void tbf_offload_change(struct Qdisc *sch, + struct netlink_ext_ack *extack) { struct tbf_sched_data *q =3D qdisc_priv(sch); struct net_device *dev =3D qdisc_dev(sch); @@ -148,6 +149,7 @@ static void tbf_offload_change(struct Qdisc *sch) if (!tc_can_offload(dev) || !dev->netdev_ops->ndo_setup_tc) return; =20 + qopt.extack =3D extack; qopt.command =3D TC_TBF_REPLACE; qopt.handle =3D sch->handle; qopt.parent =3D sch->parent; @@ -166,6 +168,7 @@ static void tbf_offload_destroy(struct Qdisc *sch) if (!tc_can_offload(dev) || !dev->netdev_ops->ndo_setup_tc) return; =20 + qopt.extack =3D NULL; qopt.command =3D TC_TBF_DESTROY; qopt.handle =3D sch->handle; qopt.parent =3D sch->parent; @@ -176,6 +179,7 @@ static int tbf_offload_dump(struct Qdisc *sch) { struct tc_tbf_qopt_offload qopt; =20 + qopt.extack =3D NULL; qopt.command =3D TC_TBF_STATS; qopt.handle =3D sch->handle; qopt.parent =3D sch->parent; @@ -193,6 +197,7 @@ static void tbf_offload_graft(struct Qdisc *sch, struct= Qdisc *new, .parent =3D sch->parent, .child_handle =3D new->handle, .command =3D TC_TBF_GRAFT, + .extack =3D extack, }; =20 qdisc_offload_graft_helper(qdisc_dev(sch), sch, new, old, @@ -477,7 +482,7 @@ static int tbf_change(struct Qdisc *sch, struct nlattr = *opt, qdisc_put(old); err =3D 0; =20 - tbf_offload_change(sch); + tbf_offload_change(sch, extack); done: return err; } --=20 2.53.0 From nobody Sun May 24 22:33:51 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A75B32C3261 for ; Thu, 21 May 2026 01:04:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779325455; cv=none; b=l0BT9jLC+1Kova5IHZ6gOpMY2xhcJZy/53DtzFq6/CWv+KUlAFM93JIBFryjq6dfoYx0j3Sre7CcDqxHJryZiZ0uTKJkzLHvA8CfV06TdCe9pUpZnHZ5KAtB9PZrDxrx1+uf/SmUJ1ndq1LsugshyTxm4LrpaLGvX4RnUQTLvPY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779325455; c=relaxed/simple; bh=a5lw+ZWNnkXskn4epJZ8umdeexpyjZpwnavsvLPxSFk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BFsiwJKyVn8D4qtibhTrkuWwgz8z7Di4p0ezRQNNy7C8DtZF+GYN0WJsT2B7q17x/CSoPRGo8Em2fV4jyj9tef527uctzFUFMt5WvIqJGM2wQPL5bVg+2xkOjoSWwPqlNyFmJS3IIl61Wh+1ydnowBHBzyf/DmK43x9QTMEW6UQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Q79Pndzy; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Q79Pndzy" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-36974217d4eso3397937a91.2 for ; Wed, 20 May 2026 18:04:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779325453; x=1779930253; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IwPhEgGJz2L9oeS85kbGuc6+jFjA70v+GRwapYHP/2s=; b=Q79PndzyueOa/+YZcTEibyLav1Z80TphNBKMQpl30wXt/Boy1/gRtaoFrcJQQCROZ0 4OZ1hG8FRaNUjITTimAxE0c1TwUY/SKqWuKLfd38ZJ4wx3k0bkyvUBr6frtV1sAsaSpo bgJ/dYvR8qNXxs/8DZE1AMkoxRl16vu3CcnlYTGgJD9cCRbqrmqo+kJHEpqHgzoF94ra 0AKU/lHoqWQh0ya/7t5ji2xFYKHHnvNsLjJqAg/6rXQWRs1zPXQccU/ho95CPkORvK15 9403ialsU4LQ1fpdcJ6gTI+O0dfStfgTr5EhdjbFcLW8USNphQVRAPFnfiz0CeYvRw3j 6HXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779325453; x=1779930253; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=IwPhEgGJz2L9oeS85kbGuc6+jFjA70v+GRwapYHP/2s=; b=q13/IO3wh1zrNPyHR60Wa1Z9yh4GOC5OiHFrbgxsSANH4n5LsXYCsxp1cAzTUfCj+R tG1Guwu2AkHJm0+F8Kehz60Q8D4dCqcGAwbhFsPVw2VpmHMLAyY4D8eHuiUKfj3OnJCp hFqFLC7HGUhhlZCXaKnIlXNO9MixJrxgGKy+UFas8XLp7VmBEKbSrdCQGmH8aD8rQk3g ow2dNYmzvL7F++jTreRzKLtrvXJTOhitz07tfwiXEAZP/PhxmBHO/i3V9spNHXVmHyzx H5dNhpF13dm2dIHUFrvtTCeFZm8VRv1Bft0320wbn026XHZCK3PB8owtsLwVi06L0TFE hF+Q== X-Forwarded-Encrypted: i=1; AFNElJ8cyeTeALdJbrpu6l8lhxWcrWg/eDD2zhO1PBNWig6tZM9BEgkzwQ57LQ97N5jHaIfPd6pA/et/Ijl620U=@vger.kernel.org X-Gm-Message-State: AOJu0YwS+69Xg9RDBFk/S72kfOB6O+PEpwX6LUw5G38BDEmNpUICsutP yVOsTMbJQSXcBCrgOWiiU13FMaWu5CAzTNPj82xo7RN/K6fr6XDStjIt X-Gm-Gg: Acq92OFweutZ3J94f0+pkcv7PYXDBChakjFirWVWwovIems1ZTuJE6aUDDutzCnH3Pk TI+pCA27rOoHRDU9LUgpZu8Zgfe98YEsOy4WdQzWOrrzSbWBL4WY7VMp/Au7F4YbOEu2QwWqIqN rDhTjGM/qDrizmdp/J5qzV4m+WTOoNMEQP7ScuOC2N/kQZRLr6uXCOf/GrkgLsOFJCEtrkvqUN6 +/FHZrcjadQL8Z7jCGeCGeBCnEahWhgVbtCmoifQ3EZGSM34HipZQ0qMOPzATdQtA6moTj4jDYe piVRQQxPZj+no8be95aHWxSBpRvJkSRaig7W3ND0i8mZQ+uaOgaBhZd/G5gMFkMIySH522YQUMk VpYHQ761M+A2DNtNBvmiktohb0fBSHk+jt31wdEkjvgKdjC9ImG/IvYMqeLxwW4gq86bnRsxB+M ZWRv0Ds4jGQ0bWO8IuOtFu7RcUmORGvDofwNLDi9POU4FNzqi0rdHHgxUVKsm/ X-Received: by 2002:a17:90b:3505:b0:368:3d3e:efa6 with SMTP id 98e67ed59e1d1-36a45621dc5mr691121a91.20.1779325452803; Wed, 20 May 2026 18:04:12 -0700 (PDT) Received: from d.home.yangfl.dn42 ([2a09:bac5:661f:1232::1d0:bf]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c82bb114a70sm26319616a12.22.2026.05.20.18.04.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 May 2026 18:04:12 -0700 (PDT) From: David Yang To: netdev@vger.kernel.org Cc: David Yang , Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jamal Hadi Salim , Jiri Pirko , Simon Horman , linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 3/3] net: dsa: yt921x: Add port TBF support Date: Thu, 21 May 2026 09:03:07 +0800 Message-ID: <20260521010320.208138-4-mmyangfl@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260521010320.208138-1-mmyangfl@gmail.com> References: <20260521010320.208138-1-mmyangfl@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" React to TC_SETUP_QDISC_TBF and configure the egress shaper as appropriate with the maximum rate and burst size requested by the user. Per queue shaper is possible, though not touched in this commit. Signed-off-by: David Yang --- drivers/net/dsa/yt921x.c | 87 ++++++++++++++++++++++++++++++++++++++++ drivers/net/dsa/yt921x.h | 18 +++++++++ 2 files changed, 105 insertions(+) diff --git a/drivers/net/dsa/yt921x.c b/drivers/net/dsa/yt921x.c index fd1fdcd5f9a3..9cc211b90c6c 100644 --- a/drivers/net/dsa/yt921x.c +++ b/drivers/net/dsa/yt921x.c @@ -24,6 +24,7 @@ #include #include #include +#include =20 #include "yt921x.h" =20 @@ -1272,6 +1273,17 @@ yt921x_marker_tfm_police(struct yt921x_marker *marke= r, priv, port, extack); } =20 +static int +yt921x_marker_tfm_shape(struct yt921x_marker *marker, u64 rate, u64 burst, + unsigned int flags, struct yt921x_priv *priv, int port, + struct netlink_ext_ack *extack) +{ + return yt921x_marker_tfm(marker, rate, burst, flags, + priv->port_shape_slot_ns, YT921X_SHAPE_CIR_MAX, + YT921X_SHAPE_CBS_MAX, YT921X_SHAPE_UNIT_MAX, + priv, port, extack); +} + static int yt921x_police_validate(const struct flow_action_police *police, const struct flow_action *action, @@ -1378,6 +1390,73 @@ yt921x_dsa_port_policer_add(struct dsa_switch *ds, i= nt port, return res; } =20 +static int +yt921x_dsa_port_setup_tc_tbf_port(struct dsa_switch *ds, int port, + const struct tc_tbf_qopt_offload *qopt) +{ + struct yt921x_priv *priv =3D to_yt921x_priv(ds); + struct netlink_ext_ack *extack =3D qopt->extack; + u32 ctrls[2]; + int res; + + if (qopt->parent !=3D TC_H_ROOT) + return -EOPNOTSUPP; + + switch (qopt->command) { + case TC_TBF_STATS: + /* Unfortunately the convention for TC_*_STATS is a mess, + * neither 0 nor -EOPNOTSUPP is perfect here. + */ + return -EOPNOTSUPP; + case TC_TBF_DESTROY: + ctrls[0] =3D 0; + ctrls[1] =3D 0; + break; + case TC_TBF_REPLACE: { + const struct tc_tbf_qopt_offload_replace_params *p; + struct yt921x_marker marker; + + p =3D &qopt->replace_params; + + res =3D yt921x_marker_tfm_shape(&marker, p->rate.rate_bytes_ps, + p->max_size, + YT921X_MARKER_SINGLE_BUCKET, + priv, port, extack); + if (res) + return res; + + ctrls[0] =3D YT921X_PORT_SHAPE_CTRLa_CIR(marker.cir) | + YT921X_PORT_SHAPE_CTRLa_CBS(marker.cbs); + ctrls[1] =3D YT921X_PORT_SHAPE_CTRLb_UNIT(marker.unit) | + YT921X_PORT_SHAPE_CTRLb_EN; + break; + } + default: + return -EOPNOTSUPP; + } + + mutex_lock(&priv->reg_lock); + res =3D yt921x_reg64_write(priv, YT921X_PORTn_SHAPE_CTRL(port), ctrls); + mutex_unlock(&priv->reg_lock); + + return res; +} + +static int +yt921x_dsa_port_setup_tc(struct dsa_switch *ds, int port, + enum tc_setup_type type, void *type_data) +{ + switch (type) { + case TC_SETUP_QDISC_TBF: { + const struct tc_tbf_qopt_offload *qopt =3D type_data; + + return yt921x_dsa_port_setup_tc_tbf_port(ds, port, qopt); + } + default: + return -EOPNOTSUPP; + } +} + static int yt921x_mirror_del(struct yt921x_priv *priv, int port, bool ingress) { @@ -3524,6 +3603,13 @@ static int yt921x_chip_setup_tc(struct yt921x_priv *= priv) return res; priv->meter_slot_ns =3D ctrl * op_ns; =20 + ctrl =3D max(priv->port_shape_slot_ns / op_ns, + YT921X_PORT_SHAPE_SLOT_MIN); + res =3D yt921x_reg_write(priv, YT921X_PORT_SHAPE_SLOT, ctrl); + if (res) + return res; + priv->port_shape_slot_ns =3D ctrl * op_ns; + return 0; } =20 @@ -3680,6 +3766,7 @@ static const struct dsa_switch_ops yt921x_dsa_switch_= ops =3D { /* rate */ .port_policer_del =3D yt921x_dsa_port_policer_del, .port_policer_add =3D yt921x_dsa_port_policer_add, + .port_setup_tc =3D yt921x_dsa_port_setup_tc, /* hsr */ .port_hsr_leave =3D dsa_port_simple_hsr_leave, .port_hsr_join =3D dsa_port_simple_hsr_join, diff --git a/drivers/net/dsa/yt921x.h b/drivers/net/dsa/yt921x.h index 546b12a8994a..70fa780c337f 100644 --- a/drivers/net/dsa/yt921x.h +++ b/drivers/net/dsa/yt921x.h @@ -531,6 +531,19 @@ enum yt921x_app_selector { #define YT921X_MIRROR_PORT_M GENMASK(3, 0) #define YT921X_MIRROR_PORT(x) FIELD_PREP(YT921X_MIRROR_PORT_M, (x)) =20 +#define YT921X_PORT_SHAPE_SLOT 0x34000c +#define YT921X_PORT_SHAPE_SLOT_SLOT_M GENMASK(11, 0) +#define YT921X_PORTn_SHAPE_CTRL(port) (0x354000 + 8 * (port)) +#define YT921X_PORT_SHAPE_CTRLb_EN BIT(4) +#define YT921X_PORT_SHAPE_CTRLb_PKT_MODE BIT(3) /* 0: byte rate mode */ +#define YT921X_PORT_SHAPE_CTRLb_UNIT_M GENMASK(2, 0) +#define YT921X_PORT_SHAPE_CTRLb_UNIT(x) FIELD_PREP(YT921X_PORT_SHAPE_CT= RLb_UNIT_M, (x)) +#define YT921X_PORT_SHAPE_CTRLa_CBS_M GENMASK(31, 18) +#define YT921X_PORT_SHAPE_CTRLa_CBS(x) FIELD_PREP(YT921X_PORT_SHAPE_CTR= La_CBS_M, (x)) +#define YT921X_PORT_SHAPE_CTRLa_CIR_M GENMASK(17, 0) +#define YT921X_PORT_SHAPE_CTRLa_CIR(x) FIELD_PREP(YT921X_PORT_SHAPE_CTR= La_CIR_M, (x)) +#define YT921X_PORTn_SHAPE_STAT(port) (0x356000 + 4 * (port)) + #define YT921X_EDATA_EXTMODE 0xfb #define YT921X_EDATA_LEN 0x100 =20 @@ -556,6 +569,10 @@ enum yt921x_fdb_entry_status { #define YT921X_METER_UNIT_MAX ((1 << 3) - 1) #define YT921X_METER_CIR_MAX ((1 << 18) - 1) #define YT921X_METER_CBS_MAX ((1 << 16) - 1) +#define YT921X_PORT_SHAPE_SLOT_MIN 80 +#define YT921X_SHAPE_UNIT_MAX ((1 << 3) - 1) +#define YT921X_SHAPE_CIR_MAX ((1 << 18) - 1) +#define YT921X_SHAPE_CBS_MAX ((1 << 14) - 1) =20 #define YT921X_LAG_NUM 2 #define YT921X_LAG_PORT_NUM 4 @@ -652,6 +669,7 @@ struct yt921x_priv { =20 const struct yt921x_info *info; unsigned int meter_slot_ns; + unsigned int port_shape_slot_ns; /* cache of dsa_cpu_ports(ds) */ u16 cpu_ports_mask; unsigned char cycle_ns; --=20 2.53.0