Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.91 Remove upstreamed patches: - airoha/patches-6.12/017-v6.13-net-airoha-Implement-BQL-support.patch[1] - airoha/patches-6.12/138-v7.1-net-airoha-Add-missing-RX_CPU_IDX-configuration-in-a.patch[2] - airoha/patches-6.12/149-v7.1-net-airoha-Move-ndesc-initialization-at-end-of-airoh.patch[3] - generic/backport-6.12/940-v7.1-net-dsa-realtek-rtl8365mb-fix-mode-mask-calculation.patch[5] Manually rebased patches: - airoha/patches-6.12/048-01-v6.15-net-airoha-Move-airoha_eth-driver-in-a-dedicated-fol.patch[1] - ath79/patches-6.12/800-leds-add-reset-controller-based-driver.patch[4] - bcm27xx/patches-6.12/950-0122-bcmgenet-Better-coalescing-parameter-defaults.patch[6] We also backported four patches to fix perf tool regression: - generic/backport-6.12/216-01-revert-perf-cgroup-update-metric-leader-in-evlist__e.patch - generic/backport-6.12/216-02-revert-perf-tool_pmu-fix-aggregation-on-duration_tim.patch - generic/backport-6.12/216-03-revert-perf-python-add-parse_events-function.patch - generic/backport-6.12/216-04-revert-perf-tool_pmu-factor-tool-events-into-their-o.patch All other patches are automatically refreshed. [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=ca24fcac1daaa5e8a667981d81986a3eb4b9fb04 [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=f00037a99bc2332ef59dc85298b98b20af165904 [3] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=d36be272adda7f313e39dd118086955d993bf6a7 [4] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=07d3611389ba7d78b80ea360a42ce32ab2521fbc [5] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=3354d6c62fd4baa7b32cbd80cc5a8aa3f2bd0656 [6] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.91&id=b84351dcc359667bc952131c1424b692ec83dce2 Signed-off-by: Shiji Yang <yangshiji66@outlook.com> Link: https://github.com/openwrt/openwrt/pull/23444 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
131 lines
3.5 KiB
Diff
131 lines
3.5 KiB
Diff
From c076e98c66afe06e41e118eb96d6b15019b822f2 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@redhat.com>
|
|
Date: Fri, 9 Jan 2026 14:15:32 +0100
|
|
Subject: [PATCH 3/7] net/sched: sch_cake: Add cake_mq qdisc for using cake on
|
|
mq devices
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Add a cake_mq qdisc which installs cake instances on each hardware
|
|
queue on a multi-queue device.
|
|
|
|
This is just a copy of sch_mq that installs cake instead of the default
|
|
qdisc on each queue. Subsequent commits will add sharing of the config
|
|
between cake instances, as well as a multi-queue aware shaper algorithm.
|
|
|
|
Reviewed-by: Willem de Bruijn <willemb@google.com>
|
|
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
|
|
Link: https://patch.msgid.link/20260109-mq-cake-sub-qdisc-v8-3-8d613fece5d8@redhat.com
|
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
---
|
|
net/sched/sch_cake.c | 79 +++++++++++++++++++++++++++++++++++++++++++-
|
|
1 file changed, 78 insertions(+), 1 deletion(-)
|
|
|
|
--- a/net/sched/sch_cake.c
|
|
+++ b/net/sched/sch_cake.c
|
|
@@ -67,6 +67,7 @@
|
|
#include <linux/if_vlan.h>
|
|
#include <net/gso.h>
|
|
#include <net/pkt_sched.h>
|
|
+#include <net/sch_priv.h>
|
|
#include <net/pkt_cls.h>
|
|
#include <net/tcp.h>
|
|
#include <net/flow_dissector.h>
|
|
@@ -3155,14 +3156,89 @@ static struct Qdisc_ops cake_qdisc_ops _
|
|
};
|
|
MODULE_ALIAS_NET_SCH("cake");
|
|
|
|
+struct cake_mq_sched {
|
|
+ struct mq_sched mq_priv; /* must be first */
|
|
+};
|
|
+
|
|
+static void cake_mq_destroy(struct Qdisc *sch)
|
|
+{
|
|
+ mq_destroy_common(sch);
|
|
+}
|
|
+
|
|
+static int cake_mq_init(struct Qdisc *sch, struct nlattr *opt,
|
|
+ struct netlink_ext_ack *extack)
|
|
+{
|
|
+ int ret;
|
|
+
|
|
+ ret = mq_init_common(sch, opt, extack, &cake_qdisc_ops);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int cake_mq_dump(struct Qdisc *sch, struct sk_buff *skb)
|
|
+{
|
|
+ mq_dump_common(sch, skb);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int cake_mq_change(struct Qdisc *sch, struct nlattr *opt,
|
|
+ struct netlink_ext_ack *extack)
|
|
+{
|
|
+ return -EOPNOTSUPP;
|
|
+}
|
|
+
|
|
+static int cake_mq_graft(struct Qdisc *sch, unsigned long cl, struct Qdisc *new,
|
|
+ struct Qdisc **old, struct netlink_ext_ack *extack)
|
|
+{
|
|
+ NL_SET_ERR_MSG(extack, "can't replace cake_mq sub-qdiscs");
|
|
+ return -EOPNOTSUPP;
|
|
+}
|
|
+
|
|
+static const struct Qdisc_class_ops cake_mq_class_ops = {
|
|
+ .select_queue = mq_select_queue,
|
|
+ .graft = cake_mq_graft,
|
|
+ .leaf = mq_leaf,
|
|
+ .find = mq_find,
|
|
+ .walk = mq_walk,
|
|
+ .dump = mq_dump_class,
|
|
+ .dump_stats = mq_dump_class_stats,
|
|
+};
|
|
+
|
|
+static struct Qdisc_ops cake_mq_qdisc_ops __read_mostly = {
|
|
+ .cl_ops = &cake_mq_class_ops,
|
|
+ .id = "cake_mq",
|
|
+ .priv_size = sizeof(struct cake_mq_sched),
|
|
+ .init = cake_mq_init,
|
|
+ .destroy = cake_mq_destroy,
|
|
+ .attach = mq_attach,
|
|
+ .change = cake_mq_change,
|
|
+ .change_real_num_tx = mq_change_real_num_tx,
|
|
+ .dump = cake_mq_dump,
|
|
+ .owner = THIS_MODULE,
|
|
+};
|
|
+MODULE_ALIAS_NET_SCH("cake_mq");
|
|
+
|
|
static int __init cake_module_init(void)
|
|
{
|
|
- return register_qdisc(&cake_qdisc_ops);
|
|
+ int ret;
|
|
+
|
|
+ ret = register_qdisc(&cake_qdisc_ops);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ ret = register_qdisc(&cake_mq_qdisc_ops);
|
|
+ if (ret)
|
|
+ unregister_qdisc(&cake_qdisc_ops);
|
|
+
|
|
+ return ret;
|
|
}
|
|
|
|
static void __exit cake_module_exit(void)
|
|
{
|
|
unregister_qdisc(&cake_qdisc_ops);
|
|
+ unregister_qdisc(&cake_mq_qdisc_ops);
|
|
}
|
|
|
|
module_init(cake_module_init)
|
|
@@ -3170,3 +3246,4 @@ module_exit(cake_module_exit)
|
|
MODULE_AUTHOR("Jonathan Morton");
|
|
MODULE_LICENSE("Dual BSD/GPL");
|
|
MODULE_DESCRIPTION("The CAKE shaper.");
|
|
+MODULE_IMPORT_NS(NET_SCHED_INTERNAL);
|