From: John Fastabend <john.fastabend@gmail.com>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>, bpf@vger.kernel.org
Cc: daniel@iogearbox.net, andrii@kernel.org, martin.lau@kernel.org,
memxor@gmail.com, eddyz87@gmail.com, kernel-team@fb.com
Subject: RE: [PATCH v3 bpf-next 0/4] bpf: Introduce may_goto and cond_break
Date: Thu, 29 Feb 2024 21:24:06 -0800 [thread overview]
Message-ID: <65e166766200b_46ebe20895@john.notmuch> (raw)
In-Reply-To: <20240301033734.95939-1-alexei.starovoitov@gmail.com>
Alexei Starovoitov wrote:
> From: Alexei Starovoitov <ast@kernel.org>
>
> v2 -> v3: Major change
> - drop bpf_can_loop() kfunc and introduce may_goto instruction instead
> kfunc is a function call while may_goto doesn't consume any registers
> and LLVM can produce much better code due to less register pressure.
Nice back to the original instruction idea for loops. I was walking
around thinking about this for last day or so and had the same thought,
but you beat me to it.
The original troublesome parts was jumps into the loop. But will read
on to see the solution.
> - instead of counting from zero to BPF_MAX_LOOPS start from it instead
> and break out of the loop when count reaches zero
> - use may_goto instruction in cond_break macro
> - recognize that 'exact' state comparison doesn't need to be truly exact.
> regsafe() should ignore precision and liveness marks, but range_within
> logic is safe to use while evaluating open coded iterators.
I will need to review last bit is too dense for me to process right now.
I think this will be useful for lots of cases.
>
> Alexei Starovoitov (4):
> bpf: Introduce may_goto instruction
> bpf: Recognize that two registers are safe when their ranges match
> bpf: Add cond_break macro
> selftests/bpf: Test may_goto
>
> include/linux/bpf_verifier.h | 2 +
> include/uapi/linux/bpf.h | 1 +
> kernel/bpf/core.c | 1 +
> kernel/bpf/disasm.c | 3 +
> kernel/bpf/verifier.c | 269 +++++++++++++-----
> tools/include/uapi/linux/bpf.h | 1 +
> tools/testing/selftests/bpf/DENYLIST.s390x | 1 +
> .../testing/selftests/bpf/bpf_experimental.h | 12 +
> .../bpf/progs/verifier_iterating_callbacks.c | 72 ++++-
> 9 files changed, 291 insertions(+), 71 deletions(-)
>
> --
> 2.34.1
>
>
next prev parent reply other threads:[~2024-03-01 5:24 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-01 3:37 [PATCH v3 bpf-next 0/4] bpf: Introduce may_goto and cond_break Alexei Starovoitov
2024-03-01 3:37 ` [PATCH v3 bpf-next 1/4] bpf: Introduce may_goto instruction Alexei Starovoitov
2024-03-01 3:37 ` [PATCH v3 bpf-next 2/4] bpf: Recognize that two registers are safe when their ranges match Alexei Starovoitov
2024-03-01 3:37 ` [PATCH v3 bpf-next 3/4] bpf: Add cond_break macro Alexei Starovoitov
2024-03-01 3:37 ` [PATCH v3 bpf-next 4/4] selftests/bpf: Test may_goto Alexei Starovoitov
2024-03-01 19:47 ` John Fastabend
2024-03-01 21:16 ` Alexei Starovoitov
2024-03-01 21:47 ` John Fastabend
2024-03-01 22:06 ` John Fastabend
2024-03-01 22:12 ` Alexei Starovoitov
2024-03-01 21:22 ` Alexei Starovoitov
2024-03-01 5:24 ` John Fastabend [this message]
2024-03-02 1:20 ` [PATCH v3 bpf-next 0/4] bpf: Introduce may_goto and cond_break Eduard Zingerman
2024-03-02 1:28 ` Alexei Starovoitov
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=65e166766200b_46ebe20895@john.notmuch \
--to=john.fastabend@gmail.com \
--cc=alexei.starovoitov@gmail.com \
--cc=andrii@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=kernel-team@fb.com \
--cc=martin.lau@kernel.org \
--cc=memxor@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox