From: Vernon Yang Add bpf_cgroup_{flush_stats,stall} function to prepare for the subsequent mthp_ext ebpf program. no function changes. Signed-off-by: Vernon Yang --- kernel/bpf/helpers.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index 2bb60200c266..87f3072adce3 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "../../lib/kstrtox.h" @@ -2819,6 +2820,32 @@ __bpf_kfunc struct cgroup *bpf_cgroup_from_id(u64 cgid) return cgrp; } +/** + * bpf_cgroup_stall - acquire the total stall time of cgroup + * @cgrp: cgroup struct + * @states: psi states + * + * Return the total stall time. + */ +__bpf_kfunc unsigned long bpf_cgroup_stall(struct cgroup *cgrp, + enum psi_states states) +{ + struct psi_group *group = cgroup_psi(cgrp); + + return div_u64(group->total[PSI_AVGS][states], NSEC_PER_MSEC); +} + +/** + * bpf_cgroup_flush_stats - Flush cgroup's statistics + * @cgrp: cgroup struct + */ +__bpf_kfunc void bpf_cgroup_flush_stats(struct cgroup *cgrp) +{ + struct psi_group *group = cgroup_psi(cgrp); + + psi_group_flush_stats(group); +} + /** * bpf_task_under_cgroup - wrap task_under_cgroup_hierarchy() as a kfunc, test * task's membership of cgroup ancestry. @@ -4732,6 +4759,8 @@ BTF_ID_FLAGS(func, bpf_cgroup_acquire, KF_ACQUIRE | KF_RCU | KF_RET_NULL) BTF_ID_FLAGS(func, bpf_cgroup_release, KF_RELEASE) BTF_ID_FLAGS(func, bpf_cgroup_ancestor, KF_ACQUIRE | KF_RCU | KF_RET_NULL) BTF_ID_FLAGS(func, bpf_cgroup_from_id, KF_ACQUIRE | KF_RET_NULL) +BTF_ID_FLAGS(func, bpf_cgroup_stall) +BTF_ID_FLAGS(func, bpf_cgroup_flush_stats, KF_SLEEPABLE) BTF_ID_FLAGS(func, bpf_task_under_cgroup, KF_RCU) BTF_ID_FLAGS(func, bpf_task_get_cgroup1, KF_ACQUIRE | KF_RCU | KF_RET_NULL) #endif -- 2.53.0