Adding tracing_multi link fdinfo support with following output:

pos:    0
flags:  02000000
mnt_id: 19
ino:    3091
link_type:      tracing_multi
link_id:        382
prog_tag:       62073a1123f07ef7
prog_id:        715
cnt:    10
            cookie     BTF-id func
                 0      91187 bpf_fentry_test1+0x4/0x10
                 0      91188 bpf_fentry_test10+0x4/0x10
                 0      91189 bpf_fentry_test2+0x4/0x10
                 0      91190 bpf_fentry_test3+0x4/0x20
                 0      91191 bpf_fentry_test4+0x4/0x20
                 0      91192 bpf_fentry_test5+0x4/0x20
                 0      91193 bpf_fentry_test6+0x4/0x20
                 0      91194 bpf_fentry_test7+0x4/0x10
                 0      91195 bpf_fentry_test8+0x4/0x10
                 0      91196 bpf_fentry_test9+0x4/0x10

Signed-off-by: Jiri Olsa <[email protected]>
---
 kernel/trace/bpf_trace.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 3070b9de174d..e9951c4237e1 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -3618,9 +3618,35 @@ static void bpf_tracing_multi_link_dealloc(struct 
bpf_link *link)
        kvfree(tr_link);
 }
 
+#ifdef CONFIG_PROC_FS
+static void bpf_tracing_multi_show_fdinfo(const struct bpf_link *link,
+                                         struct seq_file *seq)
+{
+       struct bpf_tracing_multi_link *tr_link =
+               container_of(link, struct bpf_tracing_multi_link, link);
+       bool has_cookies = !!tr_link->cookies;
+
+       seq_printf(seq, "cnt:\t%u\n", tr_link->nodes_cnt);
+
+       seq_printf(seq, "%18s %10s %s\n", "cookie", "BTF-id", "func");
+       for (int i = 0; i < tr_link->nodes_cnt; i++) {
+               struct bpf_tracing_multi_node *mnode = &tr_link->nodes[i];
+               u32 btf_id;
+
+               bpf_trampoline_unpack_key(mnode->trampoline->key, NULL, 
&btf_id);
+               seq_printf(seq, "%18llx %10u %pS\n",
+                          has_cookies ? tr_link->cookies[i] : 0,
+                          btf_id, (void *) mnode->trampoline->ip);
+       }
+}
+#endif
+
 static const struct bpf_link_ops bpf_tracing_multi_link_lops = {
        .release = bpf_tracing_multi_link_release,
        .dealloc_deferred = bpf_tracing_multi_link_dealloc,
+#ifdef CONFIG_PROC_FS
+       .show_fdinfo = bpf_tracing_multi_show_fdinfo,
+#endif
 };
 
 int bpf_tracing_multi_attach(struct bpf_prog *prog, const union bpf_attr *attr)
-- 
2.53.0


Reply via email to