From: Puranjay Mohan <puranjay@kernel.org>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>,
Eduard Zingerman <eddyz87@gmail.com>
Cc: bpf@vger.kernel.org, ast@kernel.org, andrii@kernel.org,
daniel@iogearbox.net, martin.lau@linux.dev, kernel-team@fb.com,
yonghong.song@linux.dev, jose.marchesi@oracle.com,
puranjay12@gmail.com
Subject: Re: [RFC bpf-next v1 3/8] bpf, x86: no_caller_saved_registers for bpf_get_smp_processor_id()
Date: Wed, 03 Jul 2024 11:27:39 +0000 [thread overview]
Message-ID: <mb61ped8ak95g.fsf@kernel.org> (raw)
In-Reply-To: <CAEf4Bza7nmnFDvuPLU2xRQ-mZifUKLSiq3ZuE91MCaPoTqtBXw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2280 bytes --]
Andrii Nakryiko <andrii.nakryiko@gmail.com> writes:
> On Tue, Jul 2, 2024 at 1:44 PM Eduard Zingerman <eddyz87@gmail.com> wrote:
>>
>> On Mon, 2024-07-01 at 17:41 -0700, Andrii Nakryiko wrote:
>>
>> [...]
>>
>> > > @@ -158,6 +158,7 @@ const struct bpf_func_proto bpf_get_smp_processor_id_proto = {
>> > > .func = bpf_get_smp_processor_id,
>> > > .gpl_only = false,
>> > > .ret_type = RET_INTEGER,
>> > > + .nocsr = true,
>> >
>> > I'm wondering if we should call this flag in such a way that it's
>> > clear that this is more of an request, while the actual nocsr cleanup
>> > and stuff is done only if BPF verifier/BPF JIT support that for
>> > specific architecture/config/etc?
>>
>> Can change to .allow_nocsr. On the other hand, can remove this flag
>> completely and rely on call_csr_mask().
>
> I like the declaration that helper is eligible to be close to helper
> definition, so I'd definitely keep it, but yeah "allow_nocsr" seems
> betterto me
>
>>
>> [...]
>>
>> > > @@ -16030,7 +16030,14 @@ static u8 get_helper_reg_mask(const struct bpf_func_proto *fn)
>> > > */
>> > > static bool verifier_inlines_helper_call(struct bpf_verifier_env *env, s32 imm)
>> > > {
>> > > - return false;
>> > > + switch (imm) {
>> > > +#ifdef CONFIG_X86_64
>> > > + case BPF_FUNC_get_smp_processor_id:
>> > > + return env->prog->jit_requested && bpf_jit_supports_percpu_insn();
>> > > +#endif
>> >
>> > please see bpf_jit_inlines_helper_call(), arm64 and risc-v inline it
>> > in JIT, so we need to validate they don't assume any of R1-R5 register
>> > to be a scratch register
They don't assume any register to be scratch (except R0) so we can
enable this on arm64 and riscv.
>>
>> At the moment I return false for this archs.
Yes, verifier_inlines_helper_call() should keep returning false for
arm64 and risc-v.
>> Or do you suggest these to be added in the current patch-set?
The correct way to do this would be to change call_csr_mask() to have:
verifier_inlines_helper_call(env, insn->imm) || bpf_jit_inlines_helper_call(insn->imm)
> I'd add them from the get go. CC Puranjay to double-check?
Thanks,
Puranjay
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 255 bytes --]
next prev parent reply other threads:[~2024-07-03 11:27 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-29 9:47 [RFC bpf-next v1 0/8] no_caller_saved_registers attribute for helper calls Eduard Zingerman
2024-06-29 9:47 ` [RFC bpf-next v1 1/8] bpf: add a get_helper_proto() utility function Eduard Zingerman
2024-07-02 0:41 ` Andrii Nakryiko
2024-07-02 20:07 ` Eduard Zingerman
2024-06-29 9:47 ` [RFC bpf-next v1 2/8] bpf: no_caller_saved_registers attribute for helper calls Eduard Zingerman
2024-07-01 19:01 ` Eduard Zingerman
2024-07-02 0:41 ` Andrii Nakryiko
2024-07-02 20:38 ` Eduard Zingerman
2024-07-02 21:09 ` Andrii Nakryiko
2024-07-02 21:19 ` Eduard Zingerman
2024-07-02 21:22 ` Andrii Nakryiko
2024-07-03 11:57 ` Puranjay Mohan
2024-07-03 16:13 ` Eduard Zingerman
2024-07-04 10:55 ` Puranjay Mohan
2024-06-29 9:47 ` [RFC bpf-next v1 3/8] bpf, x86: no_caller_saved_registers for bpf_get_smp_processor_id() Eduard Zingerman
2024-07-02 0:41 ` Andrii Nakryiko
2024-07-02 20:43 ` Eduard Zingerman
2024-07-02 21:11 ` Andrii Nakryiko
2024-07-02 21:25 ` Eduard Zingerman
2024-07-03 11:27 ` Puranjay Mohan [this message]
2024-07-03 23:14 ` Eduard Zingerman
2024-07-04 11:19 ` Puranjay Mohan
2024-07-04 16:39 ` Eduard Zingerman
2024-07-04 17:00 ` Eduard Zingerman
2024-07-04 17:24 ` Puranjay Mohan
2024-07-04 17:39 ` Eduard Zingerman
2024-06-29 9:47 ` [RFC bpf-next v1 4/8] selftests/bpf: extract utility function for BPF disassembly Eduard Zingerman
2024-07-02 0:41 ` Andrii Nakryiko
2024-07-02 20:59 ` Eduard Zingerman
2024-07-02 21:16 ` Andrii Nakryiko
2024-07-02 21:23 ` Eduard Zingerman
2024-06-29 9:47 ` [RFC bpf-next v1 5/8] selftests/bpf: no need to track next_match_pos in struct test_loader Eduard Zingerman
2024-07-02 0:41 ` Andrii Nakryiko
2024-07-02 21:05 ` Eduard Zingerman
2024-07-02 21:18 ` Andrii Nakryiko
2024-06-29 9:47 ` [RFC bpf-next v1 6/8] selftests/bpf: extract test_loader->expect_msgs as a data structure Eduard Zingerman
2024-07-02 0:42 ` Andrii Nakryiko
2024-07-02 21:06 ` Eduard Zingerman
2024-06-29 9:47 ` [RFC bpf-next v1 7/8] selftests/bpf: allow checking xlated programs in verifier_* tests Eduard Zingerman
2024-07-02 0:42 ` Andrii Nakryiko
2024-07-02 21:07 ` Eduard Zingerman
2024-07-02 21:19 ` Andrii Nakryiko
2024-06-29 9:47 ` [RFC bpf-next v1 8/8] selftests/bpf: test no_caller_saved_registers spill/fill removal Eduard Zingerman
2024-07-02 0:42 ` Andrii Nakryiko
2024-07-02 21:12 ` Eduard Zingerman
2024-07-02 21:20 ` Andrii Nakryiko
2024-07-02 0:41 ` [RFC bpf-next v1 0/8] no_caller_saved_registers attribute for helper calls Andrii Nakryiko
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=mb61ped8ak95g.fsf@kernel.org \
--to=puranjay@kernel.org \
--cc=andrii.nakryiko@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=jose.marchesi@oracle.com \
--cc=kernel-team@fb.com \
--cc=martin.lau@linux.dev \
--cc=puranjay12@gmail.com \
--cc=yonghong.song@linux.dev \
/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.