bpf: Handle bpf_link_info for the parameterized task BPF iterators.
authorKui-Feng Lee <kuifeng@fb.com>
Mon, 26 Sep 2022 18:49:54 +0000 (11:49 -0700)
committerAndrii Nakryiko <andrii@kernel.org>
Wed, 28 Sep 2022 23:29:55 +0000 (16:29 -0700)
Add new fields to bpf_link_info that users can query it through
bpf_obj_get_info_by_fd().

Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Yonghong Song <yhs@fb.com>
Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
Link: https://lore.kernel.org/bpf/20220926184957.208194-3-kuifeng@fb.com
include/uapi/linux/bpf.h
kernel/bpf/task_iter.c
tools/include/uapi/linux/bpf.h

index 455b21a53aac761287af57340f3751d61b432cb1..3075018a4ef8f629756d47bcd7a40ced408faa4a 100644 (file)
@@ -6265,6 +6265,10 @@ struct bpf_link_info {
                                        __u64 cgroup_id;
                                        __u32 order;
                                } cgroup;
+                               struct {
+                                       __u32 tid;
+                                       __u32 pid;
+                               } task;
                        };
                } iter;
                struct  {
index 8b2f47e7139da97e25451fb9d273d4411f42fac7..46f836be22e26c84471e348f0c700afdb313696a 100644 (file)
@@ -672,6 +672,21 @@ static const struct bpf_iter_seq_info task_seq_info = {
        .seq_priv_size          = sizeof(struct bpf_iter_seq_task_info),
 };
 
+static int bpf_iter_fill_link_info(const struct bpf_iter_aux_info *aux, struct bpf_link_info *info)
+{
+       switch (aux->task.type) {
+       case BPF_TASK_ITER_TID:
+               info->iter.task.tid = aux->task.pid;
+               break;
+       case BPF_TASK_ITER_TGID:
+               info->iter.task.pid = aux->task.pid;
+               break;
+       default:
+               break;
+       }
+       return 0;
+}
+
 static struct bpf_iter_reg task_reg_info = {
        .target                 = "task",
        .attach_target          = bpf_iter_attach_task,
@@ -682,6 +697,7 @@ static struct bpf_iter_reg task_reg_info = {
                  PTR_TO_BTF_ID_OR_NULL },
        },
        .seq_info               = &task_seq_info,
+       .fill_link_info         = bpf_iter_fill_link_info,
 };
 
 static const struct bpf_iter_seq_info task_file_seq_info = {
@@ -703,6 +719,7 @@ static struct bpf_iter_reg task_file_reg_info = {
                  PTR_TO_BTF_ID_OR_NULL },
        },
        .seq_info               = &task_file_seq_info,
+       .fill_link_info         = bpf_iter_fill_link_info,
 };
 
 static const struct bpf_iter_seq_info task_vma_seq_info = {
@@ -724,6 +741,7 @@ static struct bpf_iter_reg task_vma_reg_info = {
                  PTR_TO_BTF_ID_OR_NULL },
        },
        .seq_info               = &task_vma_seq_info,
+       .fill_link_info         = bpf_iter_fill_link_info,
 };
 
 BPF_CALL_5(bpf_find_vma, struct task_struct *, task, u64, start,
index 455b21a53aac761287af57340f3751d61b432cb1..3075018a4ef8f629756d47bcd7a40ced408faa4a 100644 (file)
@@ -6265,6 +6265,10 @@ struct bpf_link_info {
                                        __u64 cgroup_id;
                                        __u32 order;
                                } cgroup;
+                               struct {
+                                       __u32 tid;
+                                       __u32 pid;
+                               } task;
                        };
                } iter;
                struct  {