All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yonghong Song <yonghong.song@linux.dev>
To: Jiri Olsa <jolsa@kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Andrii Nakryiko <andrii@kernel.org>
Cc: Song Liu <song@kernel.org>,
	Quentin Monnet <quentin@isovalent.com>,
	bpf@vger.kernel.org, Martin KaFai Lau <kafai@fb.com>,
	Song Liu <songliubraving@fb.com>, Yonghong Song <yhs@fb.com>,
	John Fastabend <john.fastabend@gmail.com>,
	KP Singh <kpsingh@chromium.org>,
	Stanislav Fomichev <sdf@google.com>, Hao Luo <haoluo@google.com>,
	Yafang Shao <laoar.shao@gmail.com>
Subject: Re: [PATCHv3 bpf-next 6/6] bpftool: Add support to display uprobe_multi links
Date: Mon, 20 Nov 2023 10:32:02 -0800	[thread overview]
Message-ID: <769b00a5-88ac-4902-a69e-01ec977338ee@linux.dev> (raw)
In-Reply-To: <20231120145639.3179656-7-jolsa@kernel.org>


On 11/20/23 9:56 AM, Jiri Olsa wrote:
> Adding support to display details for uprobe_multi links,
> both plain:
>
>    # bpftool link -p
>    ...
>    24: uprobe_multi  prog 126
>            uprobe.multi  path /home/jolsa/bpf/test_progs  func_cnt 3  pid 4143
>            offset             ref_ctr_offset     cookies
>            0xd1f88            0xf5d5a8           0xdead
>            0xd1f8f            0xf5d5aa           0xbeef
>            0xd1f96            0xf5d5ac           0xcafe
>
> and json:
>
>    # bpftool link -p
>    [{
>    ...
>        },{
>            "id": 24,
>            "type": "uprobe_multi",
>            "prog_id": 126,
>            "retprobe": false,
>            "path": "/home/jolsa/bpf/test_progs",
>            "func_cnt": 3,
>            "pid": 4143,
>            "funcs": [{
>                    "offset": 860040,
>                    "ref_ctr_offset": 16111016,
>                    "cookie": 57005
>                },{
>                    "offset": 860047,
>                    "ref_ctr_offset": 16111018,
>                    "cookie": 48879
>                },{
>                    "offset": 860054,
>                    "ref_ctr_offset": 16111020,
>                    "cookie": 51966
>                }
>            ]
>        }
>    ]
>
> Acked-by: Song Liu <song@kernel.org>
> Reviewed-by: Quentin Monnet <quentin@isovalent.com>
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>   tools/bpf/bpftool/link.c | 105 ++++++++++++++++++++++++++++++++++++++-
>   1 file changed, 103 insertions(+), 2 deletions(-)
>
> diff --git a/tools/bpf/bpftool/link.c b/tools/bpf/bpftool/link.c
> index a1528cde81ab..d198adf77d81 100644
> --- a/tools/bpf/bpftool/link.c
> +++ b/tools/bpf/bpftool/link.c
> @@ -294,6 +294,37 @@ show_kprobe_multi_json(struct bpf_link_info *info, json_writer_t *wtr)
>   	jsonw_end_array(json_wtr);
>   }
>   
> +static __u64 *u64_to_arr(__u64 val)
> +{
> +	return (__u64 *) u64_to_ptr(val);
> +}
> +
> +static void
> +show_uprobe_multi_json(struct bpf_link_info *info, json_writer_t *wtr)
> +{
> +	__u32 i;
> +
> +	jsonw_bool_field(json_wtr, "retprobe",
> +			 info->uprobe_multi.flags & BPF_F_UPROBE_MULTI_RETURN);
> +	jsonw_string_field(json_wtr, "path", (char *) u64_to_ptr(info->uprobe_multi.path));
> +	jsonw_uint_field(json_wtr, "func_cnt", info->uprobe_multi.count);
> +	jsonw_int_field(json_wtr, "pid", (int) info->uprobe_multi.pid);
> +	jsonw_name(json_wtr, "funcs");
> +	jsonw_start_array(json_wtr);
> +
> +	for (i = 0; i < info->uprobe_multi.count; i++) {
> +		jsonw_start_object(json_wtr);
> +		jsonw_uint_field(json_wtr, "offset",
> +				 u64_to_arr(info->uprobe_multi.offsets)[i]);
> +		jsonw_uint_field(json_wtr, "ref_ctr_offset",
> +				 u64_to_arr(info->uprobe_multi.ref_ctr_offsets)[i]);
> +		jsonw_uint_field(json_wtr, "cookie",
> +				 u64_to_arr(info->uprobe_multi.cookies)[i]);
> +		jsonw_end_object(json_wtr);
> +	}
> +	jsonw_end_array(json_wtr);
> +}
> +
>   static void
>   show_perf_event_kprobe_json(struct bpf_link_info *info, json_writer_t *wtr)
>   {
> @@ -465,6 +496,9 @@ static int show_link_close_json(int fd, struct bpf_link_info *info)
>   	case BPF_LINK_TYPE_KPROBE_MULTI:
>   		show_kprobe_multi_json(info, json_wtr);
>   		break;
> +	case BPF_LINK_TYPE_UPROBE_MULTI:
> +		show_uprobe_multi_json(info, json_wtr);
> +		break;
>   	case BPF_LINK_TYPE_PERF_EVENT:
>   		switch (info->perf_event.type) {
>   		case BPF_PERF_EVENT_EVENT:
> @@ -674,6 +708,33 @@ static void show_kprobe_multi_plain(struct bpf_link_info *info)
>   	}
>   }
>   
> +static void show_uprobe_multi_plain(struct bpf_link_info *info)
> +{
> +	__u32 i;
> +
> +	if (!info->uprobe_multi.count)
> +		return;
> +
> +	if (info->uprobe_multi.flags & BPF_F_UPROBE_MULTI_RETURN)
> +		printf("\n\turetprobe.multi  ");
> +	else
> +		printf("\n\tuprobe.multi  ");
> +
> +	printf("path %s  ", (char *) u64_to_ptr(info->uprobe_multi.path));
> +	printf("func_cnt %u  ", info->uprobe_multi.count);
> +
> +	if (info->uprobe_multi.pid != (__u32) -1)
> +		printf("pid %d  ", info->uprobe_multi.pid);

Could you explain when info->uprobe_multi.pid could be -1?
 From patch 3, I see:
	info->uprobe_multi.pid = umulti_link->task ?
			 task_pid_nr_ns(umulti_link->task, task_active_pid_ns(current)) : 0;
and cannot find how -1 could be assigned to info->uprobe_multi.pid.

> +
> +	printf("\n\t%-16s   %-16s   %-16s", "offset", "ref_ctr_offset", "cookies");
> +	for (i = 0; i < info->uprobe_multi.count; i++) {
> +		printf("\n\t0x%-16llx 0x%-16llx 0x%-16llx",
> +			u64_to_arr(info->uprobe_multi.offsets)[i],
> +			u64_to_arr(info->uprobe_multi.ref_ctr_offsets)[i],
> +			u64_to_arr(info->uprobe_multi.cookies)[i]);
> +	}
> +}
> +
>   static void show_perf_event_kprobe_plain(struct bpf_link_info *info)
>   {
>   	const char *buf;
> [...]

  reply	other threads:[~2023-11-20 18:32 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-20 14:56 [PATCHv3 bpf-next 0/6] bpf: Add link_info support for uprobe multi link Jiri Olsa
2023-11-20 14:56 ` [PATCHv3 bpf-next 1/6] libbpf: Add st_type argument to elf_resolve_syms_offsets function Jiri Olsa
2023-11-20 14:56 ` [PATCHv3 bpf-next 2/6] bpf: Store ref_ctr_offsets values in bpf_uprobe array Jiri Olsa
2023-11-20 14:56 ` [PATCHv3 bpf-next 3/6] bpf: Add link_info support for uprobe multi link Jiri Olsa
2023-11-20 18:04   ` Yonghong Song
2023-11-22 21:50     ` Jiri Olsa
2023-11-23  9:20       ` Jiri Olsa
2023-11-23 18:26         ` Yonghong Song
2023-11-21 18:41   ` Andrii Nakryiko
2023-11-22 13:48     ` Jiri Olsa
2023-11-20 14:56 ` [PATCHv3 bpf-next 4/6] selftests/bpf: Use bpf_link__destroy in fill_link_info tests Jiri Olsa
2023-11-20 18:06   ` Yonghong Song
2023-11-20 14:56 ` [PATCHv3 bpf-next 5/6] selftests/bpf: Add link_info test for uprobe_multi link Jiri Olsa
2023-11-20 18:22   ` Yonghong Song
2023-11-21 11:29     ` Jiri Olsa
2023-11-20 14:56 ` [PATCHv3 bpf-next 6/6] bpftool: Add support to display uprobe_multi links Jiri Olsa
2023-11-20 18:32   ` Yonghong Song [this message]
2023-11-21 11:35     ` Jiri Olsa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=769b00a5-88ac-4902-a69e-01ec977338ee@linux.dev \
    --to=yonghong.song@linux.dev \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=haoluo@google.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kafai@fb.com \
    --cc=kpsingh@chromium.org \
    --cc=laoar.shao@gmail.com \
    --cc=quentin@isovalent.com \
    --cc=sdf@google.com \
    --cc=song@kernel.org \
    --cc=songliubraving@fb.com \
    --cc=yhs@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.