aboutsummaryrefslogtreecommitdiffstats
diff options
authorAmery Hung <amery.hung@bytedance.com>2025-04-09 14:46:01 -0700
committerMartin KaFai Lau <martin.lau@kernel.org>2025-04-17 10:54:40 -0700
commit544e0a1f1e56de5a28251c188aa8f78fe50b31c9 (patch)
tree8dbfbc107307712f8b846291ac603c2291cb8d85
parent7a2dafda950b78611dc441c83d105dfdc7082681 (diff)
downloadath-544e0a1f1e56de5a28251c188aa8f78fe50b31c9.tar.gz
bpf: net_sched: Support updating bstats
Add a kfunc to update Qdisc bstats when an skb is dequeued. The kfunc is only available in .dequeue programs. Signed-off-by: Amery Hung <amery.hung@bytedance.com> Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org> Acked-by: Toke Høiland-Jørgensen <toke@redhat.com> Link: https://patch.msgid.link/20250409214606.2000194-6-ameryhung@gmail.com
-rw-r--r--net/sched/bpf_qdisc.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/sched/bpf_qdisc.c b/net/sched/bpf_qdisc.c
index 0790f1248bd82..dcbd1c9276345 100644
--- a/net/sched/bpf_qdisc.c
+++ b/net/sched/bpf_qdisc.c
@@ -238,6 +238,15 @@ __bpf_kfunc void bpf_qdisc_reset_destroy_epilogue(struct Qdisc *sch)
qdisc_watchdog_cancel(&q->watchdog);
}
+/* bpf_qdisc_bstats_update - Update Qdisc basic statistics
+ * @sch: The qdisc from which an skb is dequeued.
+ * @skb: The skb to be dequeued.
+ */
+__bpf_kfunc void bpf_qdisc_bstats_update(struct Qdisc *sch, const struct sk_buff *skb)
+{
+ bstats_update(&sch->bstats, skb);
+}
+
__bpf_kfunc_end_defs();
BTF_KFUNCS_START(qdisc_kfunc_ids)
@@ -248,6 +257,7 @@ BTF_ID_FLAGS(func, bpf_dynptr_from_skb, KF_TRUSTED_ARGS)
BTF_ID_FLAGS(func, bpf_qdisc_watchdog_schedule, KF_TRUSTED_ARGS)
BTF_ID_FLAGS(func, bpf_qdisc_init_prologue, KF_TRUSTED_ARGS)
BTF_ID_FLAGS(func, bpf_qdisc_reset_destroy_epilogue, KF_TRUSTED_ARGS)
+BTF_ID_FLAGS(func, bpf_qdisc_bstats_update, KF_TRUSTED_ARGS)
BTF_KFUNCS_END(qdisc_kfunc_ids)
BTF_SET_START(qdisc_common_kfunc_set)
@@ -263,6 +273,7 @@ BTF_SET_END(qdisc_enqueue_kfunc_set)
BTF_SET_START(qdisc_dequeue_kfunc_set)
BTF_ID(func, bpf_qdisc_watchdog_schedule)
+BTF_ID(func, bpf_qdisc_bstats_update)
BTF_SET_END(qdisc_dequeue_kfunc_set)
enum qdisc_ops_kf_flags {