]> Git Repo - linux.git/blob - tools/testing/selftests/bpf/progs/bpf_iter_task_btf.c
Linux 6.14-rc3
[linux.git] / tools / testing / selftests / bpf / progs / bpf_iter_task_btf.c
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2020, Oracle and/or its affiliates. */
3 #include <vmlinux.h>
4 #include <bpf/bpf_helpers.h>
5 #include <bpf/bpf_core_read.h>
6
7 #include <errno.h>
8
9 char _license[] SEC("license") = "GPL";
10
11 long tasks = 0;
12 long seq_err = 0;
13 bool skip = false;
14
15 SEC("iter/task")
16 int dump_task_struct(struct bpf_iter__task *ctx)
17 {
18         struct seq_file *seq = ctx->meta->seq;
19         struct task_struct *task = ctx->task;
20         static struct btf_ptr ptr = { };
21         long ret;
22
23 #if __has_builtin(__builtin_btf_type_id)
24         ptr.type_id = bpf_core_type_id_kernel(struct task_struct);
25         ptr.ptr = task;
26
27         if (ctx->meta->seq_num == 0)
28                 BPF_SEQ_PRINTF(seq, "Raw BTF task\n");
29
30         ret = bpf_seq_printf_btf(seq, &ptr, sizeof(ptr), 0);
31         switch (ret) {
32         case 0:
33                 tasks++;
34                 break;
35         case -ERANGE:
36                 /* NULL task or task->fs, don't count it as an error. */
37                 break;
38         case -E2BIG:
39                 return 1;
40         default:
41                 seq_err = ret;
42                 break;
43         }
44 #else
45         skip = true;
46 #endif
47
48         return 0;
49 }
This page took 0.033935 seconds and 4 git commands to generate.