From: Tao Chen <chen.dylane@gmail.com>
To: Jiri Olsa <olsajiri@gmail.com>
Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
eddyz87@gmail.com, haoluo@google.com, qmo@kernel.org,
bpf@vger.kernel.org, linux-kernel@vger.kernel.org,
Tao Chen <dylane.chen@didiglobal.com>
Subject: Re: [PATCH bpf-next v6 3/4] libbpf: Add libbpf_probe_bpf_kfunc API
Date: Wed, 12 Feb 2025 00:09:34 +0800 [thread overview]
Message-ID: <ad6421b2-10b4-4ac0-8a37-e49d1cdff712@gmail.com> (raw)
In-Reply-To: <Z6tgfKgUdCRaQJ9c@krava>
在 2025/2/11 22:36, Jiri Olsa 写道:
> On Tue, Feb 11, 2025 at 07:18:58PM +0800, Tao Chen wrote:
>
> SNIP
>
>> diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c
>> index 8ed92ea922b3..ab5591c385de 100644
>> --- a/tools/lib/bpf/libbpf_probes.c
>> +++ b/tools/lib/bpf/libbpf_probes.c
>> @@ -431,6 +431,54 @@ static bool can_probe_prog_type(enum bpf_prog_type prog_type)
>> return true;
>> }
>>
>> +int libbpf_probe_bpf_kfunc(enum bpf_prog_type prog_type, int kfunc_id, int btf_fd,
>> + const void *opts)
>> +{
>> + struct bpf_insn insns[] = {
>> + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, BPF_PSEUDO_KFUNC_CALL, 1, kfunc_id),
>> + BPF_EXIT_INSN(),
>> + };
>> + const size_t insn_cnt = ARRAY_SIZE(insns);
>> + char buf[4096];
>> + int fd_array[2] = {-1};
>> + int ret;
>> +
>> + if (opts)
>> + return libbpf_err(-EINVAL);
>> +
>> + if (!can_probe_prog_type(prog_type))
>> + return -EOPNOTSUPP;
>
> we could use libbpf_err(-EOPNOTSUPP) in here and in libbpf_probe_bpf_helper
> sry for not spoting it earlier
>
> other than that the patchset looks good to me
>
> Reviewed-by: Jiri Olsa <jolsa@kernel.org>
>
> thanks,
> jirka
>
Ack. will change it. Thanks for your review!
>> +
>> + if (btf_fd >= 0) {
>> + fd_array[1] = btf_fd;
>> + } else if (btf_fd == -1) {
>> + /* insn.off = 0, means vmlinux btf */
>> + insns[0].off = 0;
>> + } else {
>> + return libbpf_err(-EINVAL);
>> + }
>> +
>> + buf[0] = '\0';
>> + ret = probe_prog_load(prog_type, insns, insn_cnt, btf_fd >= 0 ? fd_array : NULL,
>> + buf, sizeof(buf));
>> + if (ret < 0)
>> + return libbpf_err(ret);
>> +
>> + /* If BPF verifier recognizes BPF kfunc but it's not supported for
>> + * given BPF program type, it will emit "calling kernel function
>> + * bpf_cpumask_create is not allowed", if the kfunc id is invalid,
>> + * it will emit "kernel btf_id 4294967295 is not a function". If btf fd
>> + * invalid in module btf, it will emit "invalid module BTF fd specified" or
>> + * "negative offset disallowed for kernel module function call"
>> + */
>> + if (ret == 0 && (strstr(buf, "not allowed") || strstr(buf, "not a function") ||
>> + (strstr(buf, "invalid module BTF fd")) ||
>> + (strstr(buf, "negative offset disallowed"))))
>> + return 0;
>> +
>> + return 1; /* assume supported */
>> +}
>> +
>> int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helper_id,
>> const void *opts)
>> {
>> --
>> 2.43.0
>>
--
Best Regards
Dylane Chen
next prev parent reply other threads:[~2025-02-11 16:09 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-11 11:18 [PATCH bpf-next v6 0/4] Add prog_kfunc feature probe Tao Chen
2025-02-11 11:18 ` [PATCH bpf-next v6 1/4] libbpf: Extract prog load type check from libbpf_probe_bpf_helper Tao Chen
2025-02-11 11:18 ` [PATCH bpf-next v6 2/4] libbpf: Init fd_array when prog probe load Tao Chen
2025-02-11 11:18 ` [PATCH bpf-next v6 3/4] libbpf: Add libbpf_probe_bpf_kfunc API Tao Chen
2025-02-11 14:36 ` Jiri Olsa
2025-02-11 16:09 ` Tao Chen [this message]
2025-02-11 22:24 ` Andrii Nakryiko
2025-02-12 2:33 ` Tao Chen
2025-02-11 11:18 ` [PATCH bpf-next v6 4/4] selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests Tao Chen
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=ad6421b2-10b4-4ac0-8a37-e49d1cdff712@gmail.com \
--to=chen.dylane@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=dylane.chen@didiglobal.com \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=olsajiri@gmail.com \
--cc=qmo@kernel.org \
/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.