From nobody Mon May 4 13:06:36 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (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 DBDE737CD49 for ; Mon, 4 May 2026 10:13:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777889624; cv=none; b=HJjZrto/kEVB2pBE58D4K1awxxiLDHzuLyj/N+Bg6rq0p7Xq/JEu0ZCvN+iZdpHKoySirhW7Gxy1DOA5dCvgKLCia3zS0EeTA6ab/QWGqFYs6pRyewutf0unSYuP+X7hzsLjevY+A8OCAM8ggnuindURxFeAhShUwKdPwlDfMzQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777889624; c=relaxed/simple; bh=3STGZFIGp1QI0P9KYESK3j78npCaPdnySXuzfK9UW/E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jmBlIAcYQ6oZ4fu3xKkyc846nKAyxRA4q+vHRVZAsfPl+kE5G4p7y+kBgC34I+O4Sf3tdIbAP8Gnyi+fwv5U0aAEls3758lVMLrNwOdFcTSNnTKMcEvk5YD3iP1xq9vw+SsYK2/BJlBXrkSzE2lKQTild+3DrCywW96dId7YOhI= 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=KOWo1IrF; arc=none smtp.client-ip=209.85.210.169 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="KOWo1IrF" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-82748257f5fso3414797b3a.1 for ; Mon, 04 May 2026 03:13:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777889621; x=1778494421; 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=XVeN/tIgR68DwC5ZYD/OpJgnTRgKD56zUbPN+aZwxQg=; b=KOWo1IrFxJndDFpJiO5wtNLoGnJ/9PGw6Hf0SBnecSwyhW/BSPY8q4T4EvIVQwcI4p /+omCbrEyssRR302C5CQIMm3YPg0TsVHx9cgi4jBOpXmOJ+zY2QldHqQ81ztMdqfdwCD IykRMhf3E+B58lvNLSrHu8PxP7nBc+O8bTaMh4vVXSkkEoIzzbmAwXeErAqjQAstmvYk AXDe1NRET9rMbGxaOtlZptEiLewUOGvnc7LLsqyJSvzXRALFPJ5n2JybMTrCRFXvyPrh 0DVwrVlYS8tDPVBDaYO2pDYvwfDKbrTGx3Wlpb3qmcker9hnECqx6FP9jH8NOF2cMlUm 706w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777889621; x=1778494421; 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=XVeN/tIgR68DwC5ZYD/OpJgnTRgKD56zUbPN+aZwxQg=; b=fqOErHxNoqSPFfB8WzZuhM9eeGPX+c74XUl19c6EwO4fQU2y05tKxQsQ3W7ilPkuMT kBhGdBuWd/yE2+R1Bd8q9QGGuj7swvUrgLTdXj6+R1mSNP6ZsYmyInVx6BFM90pxmZoh xB7BE8xBJYUPRbOkdEefKOQx9Dj6u5K1RR/5g1zWNAwCI9u3DFDuOO5VF1oDCq/A9dRs 980EIaZiJ3vFl3aX0KXNHihm1YN2EUsE8VkpwvU383Br5qSvJxBXZohmfIvIPzpEfQn0 C4/XgWr9ljDrj9wfk8AwbY+xLUjUqSi4S90uXz0QpXXciIMmMgD+ZkIwhep6x9cThEma +b8g== X-Forwarded-Encrypted: i=1; AFNElJ8N7xqr+oScdNxnzzanIMy8FAO1VDpdsQHsCuYzK/guw8el870jBPuadtPIDUhPRBUPXAL/JnPajus4nVo=@vger.kernel.org X-Gm-Message-State: AOJu0YxkP8UQKG2NEqc+dB6wTEGV67Z3Bcl4SwNBJDuEODPpgbdmmEZ8 luEDgVBCw/DIsaEG0s96t4mKUcBz4/EdT5ZCUXYGMW4U7kEH1nwQDFHaxz6ZMvcw X-Gm-Gg: AeBDietVTxfCP9u0ha1C9GxxWJ9DWD2KAMVswQ6VypN/fgMACnYzVtj1+4L2qI/Y5PL pgUE+3jtxuaKbs5wCbcAQAfY3Cyj5HoN46yxM4ITLz10zuFEuQOKHSPnkqJHMpiDydyAELyEAGy 9dJvKIZH5dFSyYWjxt5YElavyM6uc1q5DKzxQvlDS5sdATj/lUkbGyfRWHgUBVzfQjkBSEyt0Lv 06ZxpMBN15IPOsINGKqnLA2ViPs8/nbGKiQ+bgnSocv7c/ihR7DeQYUMC4fBcNJn61KUhDXEuZg CMw3XrIGdzfUqvRfCCKG6usropcC56QBFuVotp+t/UV4RxuPo1TEopl0b1bTZs0hUZROwcAmlE0 RFTC7W50vJ481O8ZWHmE0H7iGbONRh/05yHw+draOGi7h6CiZIRvCitBghdyGfVvTsgQ2y/95aH /a1oSZOzEEKDsOvJg9uA+R1EfTjJjlrnAhpbFZBcMEkJTLtRi+OwirULgXG7Np X-Received: by 2002:a05:6a00:aa06:b0:829:7a62:6a with SMTP id d2e1a72fcca58-8352c4fd461mr7141618b3a.22.1777889621211; Mon, 04 May 2026 03:13:41 -0700 (PDT) Received: from d.home.yangfl.dn42 ([2a09:bac5:6619:3046::4cf:90]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-835158bd62fsm10813486b3a.24.2026.05.04.03.13.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 03:13:40 -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 v2 1/3] net: sched: tbf: add extack to offload params Date: Mon, 4 May 2026 18:12:53 +0800 Message-ID: <20260504101258.1608004-2-mmyangfl@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260504101258.1608004-1-mmyangfl@gmail.com> References: <20260504101258.1608004-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 f2340164f579..4576111fe075 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 Mon May 4 13:06:36 2026 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 88274390990 for ; Mon, 4 May 2026 10:13:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777889627; cv=none; b=ecPaPRWKNXeNsemCsa33R2ne8hfB81MC2783GvwYFn/+65QcJR/8SkGNR24O1B1D/jzmSEQqAz4wGZrxR9Bqrny3vkulSDxG/awoi5LiDZbGA8FgZHrO4zBxrJ95C8AoCMmNeWm7sXKHlEPvk9u0SHh4fTo/56Q6sUJAAOiVovM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777889627; c=relaxed/simple; bh=GBdaPFRBndABu+g6xyTPCYH9U8koFL/3jkPmvZnpAtQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uQASrTYVryQ4s8naEyd22Qp108K0i+nZ4WTxE8J2azlLYFYGGlxJmB4I7LOvgwKNGcF/krXeINtaW+Z8sDNBsUOsBDbH3IevfcPUm7fcsiGZww9cAuYZz3wudBVRMC9WeOn2uSKzTmyRPYc5HBUBUyhLtvkn9pSSael2N2ZpIQs= 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=J6lXpdNK; arc=none smtp.client-ip=209.85.210.175 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="J6lXpdNK" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-82fb2d0c5d1so3045170b3a.0 for ; Mon, 04 May 2026 03:13:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777889626; x=1778494426; 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=h/HtMUR8y8tNvQTsqYRM6w8nnbZCwy6OiBJMOowLZxI=; b=J6lXpdNK4yWdKQmAyOEeuPSi4LIgc9NGVQL54dFtvBJPa4G0gyts/uxhGPwoLtCzSt qEu6LRgSeTCa42aF3mKWSkifz4I72mhvQ/rf/YMAO/kIi0Jk84wuApr1vWIpcfrVAcg/ FQrY1c7UOwd6KtXZ3QD6E1ndu4s4xmjJqWx3PCI5J0917CApUmGCEtLq9AgRfy/bKQdM jTYNaQSWahlMTteQPu05nnw163/FQHQOGBEFJdR4HjNUf5QR1d6MSxfD7qHbiQyHcL5e +pZjsAB1ZIzZT2Oi5SpzUIGLGvsORCBA6ZG1r0mq5k6e1CbWfEJ2AQQHnfnUcLpblbUk vOAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777889626; x=1778494426; 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=h/HtMUR8y8tNvQTsqYRM6w8nnbZCwy6OiBJMOowLZxI=; b=HR+LfmjqzwXykLXmanGoWlT+zhvqCqDH0tNRHZnoxiCKiiEapghTUOpnyBkL4o1EUQ KA5Aut6RDFjyfFxb1d98QenHhG3yqoMObXyFG+4XHVZkF/UiWVpkfhS7WAPvhc4jLD67 Y/twTuPytxaegB7HJlV3Ghzp+oYUrtWXYRa++yqsQPYUm5p5Vw/T3IQwpdD4KlEo4OeO 6FqMC6BApztzJjCm/HvRJ0ZK9vHkPM+i6Uo+RTtmte8/P2iHJz9ahwmKNP0ZdHdz/nw2 n/eZOHqVZK/Q4YisuM4xZLvv1Bxf4S7vcCg+cZhex7NvVj/iUHo2oRyQAsPekY7aXeEK fNiw== X-Forwarded-Encrypted: i=1; AFNElJ/1oPuIOVRqw41uVc1AZpCipUPIdFm8CoLnsCXNZJrXd8rq+p+m7cl+4LzSojrumCqFvdQXynG1PIn58gM=@vger.kernel.org X-Gm-Message-State: AOJu0Yyo792aLr/XX3jTdC/2digKn/p44Y4z+DFksX4kGGQUATJ95bTr hxaQebvrxDv4IjNd8n59wZuw5gOvSpt2oyVY7XDt9rKwbqgJC26Hd4W2 X-Gm-Gg: AeBDieuKt7y+ECbUhrC9LnJUpRt35MIhzJQX2R/KDdDpxSlXk36gQVfd2pZTKKn6YM+ Q3KnE/TsOgYLuhuaYPx/Z3y9Byi2+XpveKecO8tG/dMMYycV4lFNellMM+vVmKbYL34VROgjxiz 94wNF2F87wxr5z+EbPqqJkerogVQV+DYB1hMa4CPikqsgEK6nR/eeJSDoZox4p2kGLV6GeAVHCh DPSnO+4wLyiNijdJPKpylAjL0V70C6JP9p/N+rUZHzg2KUA2o5Q0M/5Dxyvp6xhVLqBt0PFifIz WkM6x9Ssnchej/82d9rfGff0Cv+FgI48M6quar4RHWaiCT4xBg+23ibdeez20OKPZf5nL9hb3x1 JmRTTSeZcy93I9DlL9YnESPFIHdGP7SEYqks1TBGjmyvg+FVxiGUaQ85NnzE/JWEszLumCdTcUW Co2ruATyIsN0l76OnZxZkeAcd6ZKAxjMvrqjhmMkhs6gOmqVLr5YOew6H45Jcj70KuAaT8qMU= X-Received: by 2002:a05:6a00:299a:b0:822:69b2:7ed0 with SMTP id d2e1a72fcca58-8352c3b0cc7mr7391366b3a.6.1777889625685; Mon, 04 May 2026 03:13:45 -0700 (PDT) Received: from d.home.yangfl.dn42 ([2a09:bac5:6619:3046::4cf:90]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-835158bd62fsm10813486b3a.24.2026.05.04.03.13.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 03:13:45 -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 v2 2/3] net: sched: tbf: pass all params to offload users Date: Mon, 4 May 2026 18:12:54 +0800 Message-ID: <20260504101258.1608004-3-mmyangfl@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260504101258.1608004-1-mmyangfl@gmail.com> References: <20260504101258.1608004-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 fine-grained control over queues. Pass all available params so they can make use of them. Signed-off-by: David Yang --- include/net/pkt_cls.h | 6 +++++- net/sched/sch_tbf.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 3bd08d7f39c1..d73c04e3d919 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -1040,8 +1040,12 @@ enum tc_tbf_command { }; =20 struct tc_tbf_qopt_offload_replace_params { + u32 limit; + u32 max_size; + s64 buffer; + s64 mtu; struct psched_ratecfg rate; - u32 max_size; + struct psched_ratecfg peak; struct gnet_stats_queue *qstats; }; =20 diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index 4576111fe075..8a1110d59dec 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c @@ -153,8 +153,12 @@ static void tbf_offload_change(struct Qdisc *sch, qopt.command =3D TC_TBF_REPLACE; qopt.handle =3D sch->handle; qopt.parent =3D sch->parent; - qopt.replace_params.rate =3D q->rate; + qopt.replace_params.limit =3D q->limit; qopt.replace_params.max_size =3D q->max_size; + qopt.replace_params.buffer =3D q->buffer; + qopt.replace_params.mtu =3D q->mtu; + qopt.replace_params.rate =3D q->rate; + qopt.replace_params.peak =3D q->peak; qopt.replace_params.qstats =3D &sch->qstats; =20 dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_QDISC_TBF, &qopt); --=20 2.53.0 From nobody Mon May 4 13:06:36 2026 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) (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 ECECE39184F for ; Mon, 4 May 2026 10:13:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777889631; cv=none; b=KsdjTg/U4M1xf3wMcXhKioqpvD8Ox+A0NfR326avBLy9p5krRiXyA/+BHjf7BtykdlX0dKdMFwe3xQWHFnwbDzhD/cuYXz45WDlvVHaUknlpJC9lu4teZUDYK3GQ3lXcr98k7Jdf7wErFS7zoFyFLbFhJ4GiW17XFsRXrLQR8dg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777889631; c=relaxed/simple; bh=QrxzpA0GiXoHm7RCzoHPdzDiRzt9hYqD8UzCVTFrFuo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gk4bjRn+TMuNzT5s/wXkyjd70Ua/KjKYBjwlEe8hkCqakMMeOkC3QfaSNzN5ZCVAir9yfnJPETgyk090qU8N7sHa1OXKEeBo+B+pAOXh3MpUPiYzVYsKlbVLYZFX7Zj3kxYl8hBMf6mJp712wMPgM1kNSQ7ilbA5aM2+e1+CaWk= 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=JC8JV9DD; arc=none smtp.client-ip=209.85.210.182 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="JC8JV9DD" Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-82735a41920so1391618b3a.2 for ; Mon, 04 May 2026 03:13:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777889629; x=1778494429; 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=SKiZYwrOXmYbchKN5aqn3H9VsvZ64UWqf0h7N9kmfHc=; b=JC8JV9DDtgM3Gc0VzNBTAC5QeHj0bzjLm6Kq736XCtLMwQDbY0xVwBSM124kuhW0fY oa9qK76mgU0lZdPoKUmdLMbmDGEc/tT3SDIevr+5yKuXVZllM3UOyNTbyrGWoBbvvrW2 GfwgbpLTW4D6+y30AYCdSwMVestbFsuuOzPhCzczPrOTR5Rw0sGJeERfzg9YZd32yHz6 4aCSs33rNx4TfhxHDqIPLtxkY7A4tfcPLQxSUboRatafDM7quDKv93t/e9lGjyYiMpAc 2ZxZi1rF0IkMsazuPppX51awxPVDbCSOsACiXCp8cB2wGbpc15dfypQnmucDtJYHKsds ZiLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777889629; x=1778494429; 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=SKiZYwrOXmYbchKN5aqn3H9VsvZ64UWqf0h7N9kmfHc=; b=F9sF41XQiqtJ1gP9GNm7ZhdxX7/QZ9eIl3V01VNICqnjVDJTXSPLxQVf3xsOvjPUJy BgCwxtYO1EWiMVNQVEd0Ohg3NiCAwBpslPdIB98EaEHjszsvRSDXXWqMD6CFpx+kiCgW GPtKDW1UDJOhxsvoW0mj6j99O9QFb0zrp4xJt/0UcVu62DmpmKGaosNYsumLwzSGNxeQ zE80OxRy04jFDnWsc+6p2pCuXL5fFtCwBUnf5EZ8GWEqAs9tesPurlIcxdx+4J5MCYr8 c3s7UOFtINMzNVLeEDw0fUi3B3/ZoybMcRxN2S48v62KXVg7vL2h8SiWDuiAi/LGb9Qj yYCw== X-Forwarded-Encrypted: i=1; AFNElJ9ONKyOqytGMiIeCGzQbCwoeWoPG6Ztm4IlA4j9DEhadt1W3fDb/OEhtSbD4JN5/Z/NAo5t3DTapPQfK/k=@vger.kernel.org X-Gm-Message-State: AOJu0YwN+1AL0tO1LlKMJDmDwCP88hfJIiyvyHhTMapyjA+ajE/6NJGY H4yWsrxzzMiUwMnzwLU2HFXjCdKXSPtLz8YXRmIlZVufvmhRem3UBZce X-Gm-Gg: AeBDieufOb9JNTYADIA8F3cjA2ayzw2sTi3N2FsZ2hAgIwWpIa2ZkG+wYSrH0HPGF1G QXV3XuvmehwZjiUG19UrpW+2mXspGfBsbHpsGmdSoquM/pKSUC1h6VLhK/77C9KtWwttjru4wXm sbFSUUHDiWTAnZezOBWUBvq/DAOjsxbDvTuI2UOUQgVRl6NQ4GGOyQ94jLK67QDW5puBjubDbRY fOvtkfacNSPBZ3ui6TfD0WR9pGBVSSIqd+vtydwSD/pJW6qH2gVKXTFs01VZNsM98FsutXJyqYj NESC5MuMfro2xuE91NYvh7ozmAIKqhaGPDLyjgW27G5W8dcTjTdeeFK7wD38XH2AA0BNpLphySN UD2gCsiMuSD0AZ8YBfMjOERflfvsfMd/eze0k0Nn8u49nTZr5/Vpx1ddWssiECILuUapFr/J8mv LyJQdPKKeJxD6Ffp0ued3MiQqYXvjK9wL//0kU3GNaBVZfDvzqYHVkMi/84KSV X-Received: by 2002:a05:6a00:3a15:b0:824:9bc5:e946 with SMTP id d2e1a72fcca58-8352d2ac213mr8324730b3a.46.1777889629282; Mon, 04 May 2026 03:13:49 -0700 (PDT) Received: from d.home.yangfl.dn42 ([2a09:bac5:6619:3046::4cf:90]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-835158bd62fsm10813486b3a.24.2026.05.04.03.13.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 03:13:48 -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 v2 3/3] net: dsa: yt921x: Add port qdisc tbf support Date: Mon, 4 May 2026 18:12:55 +0800 Message-ID: <20260504101258.1608004-4-mmyangfl@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260504101258.1608004-1-mmyangfl@gmail.com> References: <20260504101258.1608004-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" Enable port shaping and support limiting the rate of outgoing traffic. Signed-off-by: David Yang --- drivers/net/dsa/yt921x.c | 126 +++++++++++++++++++++++++++++++++++++++ drivers/net/dsa/yt921x.h | 18 ++++++ 2 files changed, 144 insertions(+) diff --git a/drivers/net/dsa/yt921x.c b/drivers/net/dsa/yt921x.c index fd1fdcd5f9a3..fd77e1ef53bb 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,112 @@ yt921x_dsa_port_policer_add(struct dsa_switch *ds, = int port, return res; } =20 +static int +yt921x_tbf_validate(struct yt921x_priv *priv, + const struct tc_tbf_qopt_offload *qopt) +{ + struct netlink_ext_ack *extack =3D qopt->extack; + + if (qopt->parent !=3D TC_H_ROOT) { + NL_SET_ERR_MSG_MOD(extack, "Parent should be \"root\""); + return -EOPNOTSUPP; + } + + switch (qopt->command) { + case TC_TBF_REPLACE: { + const struct tc_tbf_qopt_offload_replace_params *p; + + p =3D &qopt->replace_params; + + if (p->mtu || p->peak.rate_bytes_ps) { + NL_SET_ERR_MSG_MOD(extack, + "Offload not supported when mtu/peakrate is configured"); + return -EOPNOTSUPP; + } + + if (!p->rate.mpu) { + NL_SET_ERR_MSG_MOD(extack, "Assuming mpu =3D 64"); + } else if (p->rate.mpu !=3D 64) { + NL_SET_ERR_MSG_MOD(extack, + "Offload not supported when mpu is other than 64"); + return -EOPNOTSUPP; + } + + break; + } + default: + break; + } + + return 0; +} + +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; + + switch (qopt->command) { + 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) +{ + struct yt921x_priv *priv =3D to_yt921x_priv(ds); + int res; + + switch (type) { + case TC_SETUP_QDISC_TBF: { + const struct tc_tbf_qopt_offload *qopt =3D type_data; + + res =3D yt921x_tbf_validate(priv, qopt); + if (res) + return res; + + 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 +3642,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 +3805,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