]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bpf: Add support to retrieve ref_ctr_offset for uprobe perf link
authorJiri Olsa <jolsa@kernel.org>
Fri, 9 May 2025 15:35:37 +0000 (17:35 +0200)
committerAndrii Nakryiko <andrii@kernel.org>
Fri, 9 May 2025 20:01:07 +0000 (13:01 -0700)
Adding support to retrieve ref_ctr_offset for uprobe perf link,
which got somehow omitted from the initial uprobe link info changes.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Yafang Shao <laoar.shao@gmail.com>
Link: https://lore.kernel.org/bpf/20250509153539.779599-2-jolsa@kernel.org
include/uapi/linux/bpf.h
kernel/bpf/syscall.c
kernel/trace/trace_uprobe.c
tools/include/uapi/linux/bpf.h

index 71d5ac83cf5da220aadf339decd2052c18f3195e..16e95398c91c867bddb45b5bff12b6186e64eac6 100644 (file)
@@ -6724,6 +6724,7 @@ struct bpf_link_info {
                                        __u32 name_len;
                                        __u32 offset; /* offset from file_name */
                                        __u64 cookie;
+                                       __u64 ref_ctr_offset;
                                } uprobe; /* BPF_PERF_EVENT_UPROBE, BPF_PERF_EVENT_URETPROBE */
                                struct {
                                        __aligned_u64 func_name; /* in/out */
index df33d19c5c3b339cb73dd7114604eb1e3af78628..4b5f2916861865b6e8dd00896e8c7f7cfa1556cc 100644 (file)
@@ -3800,14 +3800,14 @@ static int bpf_perf_link_fill_kprobe(const struct perf_event *event,
 static int bpf_perf_link_fill_uprobe(const struct perf_event *event,
                                     struct bpf_link_info *info)
 {
+       u64 ref_ctr_offset, offset;
        char __user *uname;
-       u64 addr, offset;
        u32 ulen, type;
        int err;
 
        uname = u64_to_user_ptr(info->perf_event.uprobe.file_name);
        ulen = info->perf_event.uprobe.name_len;
-       err = bpf_perf_link_fill_common(event, uname, &ulen, &offset, &addr,
+       err = bpf_perf_link_fill_common(event, uname, &ulen, &offset, &ref_ctr_offset,
                                        &type, NULL);
        if (err)
                return err;
@@ -3819,6 +3819,7 @@ static int bpf_perf_link_fill_uprobe(const struct perf_event *event,
        info->perf_event.uprobe.name_len = ulen;
        info->perf_event.uprobe.offset = offset;
        info->perf_event.uprobe.cookie = event->bpf_cookie;
+       info->perf_event.uprobe.ref_ctr_offset = ref_ctr_offset;
        return 0;
 }
 #endif
index 3386439ec9f674392aeaaca632b0e13ba15248ef..d9cf6ed2c106b65dac4b9edbc3ab2dff4d6ea587 100644 (file)
@@ -1489,7 +1489,7 @@ int bpf_get_uprobe_info(const struct perf_event *event, u32 *fd_type,
                                    : BPF_FD_TYPE_UPROBE;
        *filename = tu->filename;
        *probe_offset = tu->offset;
-       *probe_addr = 0;
+       *probe_addr = tu->ref_ctr_offset;
        return 0;
 }
 #endif /* CONFIG_PERF_EVENTS */
index 71d5ac83cf5da220aadf339decd2052c18f3195e..16e95398c91c867bddb45b5bff12b6186e64eac6 100644 (file)
@@ -6724,6 +6724,7 @@ struct bpf_link_info {
                                        __u32 name_len;
                                        __u32 offset; /* offset from file_name */
                                        __u64 cookie;
+                                       __u64 ref_ctr_offset;
                                } uprobe; /* BPF_PERF_EVENT_UPROBE, BPF_PERF_EVENT_URETPROBE */
                                struct {
                                        __aligned_u64 func_name; /* in/out */