diff options
author | Alexei Starovoitov <ast@kernel.org> | 2023-05-06 13:56:38 -0700 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2023-05-06 13:56:44 -0700 |
commit | e04ddf179c2acb6de841016e5bcf29b26705b4ec (patch) | |
tree | 0aa9ef72877daa223b52b9856933342d9172b401 /kernel/bpf/helpers.c | |
parent | f4dea9689c5fea3d07170c2cb0703e216f1a0922 (diff) | |
parent | 49e0263ab40f15a11cefa397bb17a0204505cead (diff) | |
download | linux-e04ddf179c2acb6de841016e5bcf29b26705b4ec.tar.gz linux-e04ddf179c2acb6de841016e5bcf29b26705b4ec.tar.bz2 linux-e04ddf179c2acb6de841016e5bcf29b26705b4ec.zip |
Merge branch 'Introduce a new kfunc of bpf_task_under_cgroup'
Feng zhou says:
====================
Trace sched related functions, such as enqueue_task_fair, it is necessary to
specify a task instead of the current task which within a given cgroup.
====================
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'kernel/bpf/helpers.c')
-rw-r--r-- | kernel/bpf/helpers.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index bb6b4637ebf2..a128fe0ab2d0 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -2149,6 +2149,22 @@ __bpf_kfunc struct cgroup *bpf_cgroup_from_id(u64 cgid) return NULL; return cgrp; } + +/** + * bpf_task_under_cgroup - wrap task_under_cgroup_hierarchy() as a kfunc, test + * task's membership of cgroup ancestry. + * @task: the task to be tested + * @ancestor: possible ancestor of @task's cgroup + * + * Tests whether @task's default cgroup hierarchy is a descendant of @ancestor. + * It follows all the same rules as cgroup_is_descendant, and only applies + * to the default hierarchy. + */ +__bpf_kfunc long bpf_task_under_cgroup(struct task_struct *task, + struct cgroup *ancestor) +{ + return task_under_cgroup_hierarchy(task, ancestor); +} #endif /* CONFIG_CGROUPS */ /** @@ -2400,6 +2416,7 @@ 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_task_under_cgroup, KF_RCU) #endif BTF_ID_FLAGS(func, bpf_task_from_pid, KF_ACQUIRE | KF_RET_NULL) BTF_SET8_END(generic_btf_ids) |