From: "Alexis Lothoré" <alexis.lothore@bootlin.com>
To: "Xu Kuohai" <xukuohai@huaweicloud.com>,
"Alexei Starovoitov" <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"John Fastabend" <john.fastabend@gmail.com>,
"Andrii Nakryiko" <andrii@kernel.org>,
"Martin KaFai Lau" <martin.lau@linux.dev>,
"Eduard Zingerman" <eddyz87@gmail.com>,
"Song Liu" <song@kernel.org>,
"Yonghong Song" <yonghong.song@linux.dev>,
"KP Singh" <kpsingh@kernel.org>,
"Stanislav Fomichev" <sdf@fomichev.me>,
"Hao Luo" <haoluo@google.com>, "Jiri Olsa" <jolsa@kernel.org>,
"Puranjay Mohan" <puranjay@kernel.org>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Will Deacon" <will@kernel.org>,
"Mykola Lysenko" <mykolal@fb.com>,
"Shuah Khan" <shuah@kernel.org>,
"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
"Alexandre Torgue" <alexandre.torgue@foss.st.com>,
"Florent Revest" <revest@chromium.org>
Cc: "Bastien Curutchet" <bastien.curutchet@bootlin.com>,
<ebpf@linuxfoundation.org>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
<bpf@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kselftest@vger.kernel.org>,
<linux-stm32@st-md-mailman.stormreply.com>,
"Xu Kuohai" <xukuohai@huawei.com>
Subject: Re: [PATCH bpf-next v2 1/2] bpf, arm64: Support up to 12 function arguments
Date: Tue, 27 May 2025 10:45:07 +0200 [thread overview]
Message-ID: <DA6T7OEF94IG.2BH2PWTCVEOTA@bootlin.com> (raw)
In-Reply-To: <8d184497-fecf-497f-8b4c-bcd4b0a697ce@huaweicloud.com>
Hi Xu, thanks for the review
On Tue May 27, 2025 at 10:11 AM CEST, Xu Kuohai wrote:
> On 5/22/2025 6:14 PM, Alexis Lothoré wrote:
>
> [...]
>
>> -static void save_args(struct jit_ctx *ctx, int args_off, int nregs)
>> +struct arg_aux {
>> + /* how many args are passed through registers, the rest of the args are
>> + * passed through stack
>> + */
>> + int args_in_regs;
>> + /* how many registers are used to pass arguments */
>> + int regs_for_args;
>> + /* how much stack is used for additional args passed to bpf program
>> + * that did not fit in original function registers
>> + **/
>
> nit: "**/" should be "*/"
ACK
[...]
>> + a->ostack_for_args = 0;
>> +
>> + /* the rest arguments are passed through stack */
>> + for (a->ostack_for_args = 0, a->bstack_for_args = 0;
>> + i < m->nr_args; i++) {
>
> a->ostack_for_args is initialized twice.
>
> move all initializations before the loop?
ACK
>> + /* We can not know for sure about exact alignment needs for
>> + * struct passed on stack, so deny those
>> + */
>> + if (m->arg_flags[i] & BTF_FMODEL_STRUCT_ARG)
>> + return -EOPNOTSUPP;
>
> leave the error code as is, namely, return -ENOTSUPP?
Actually this change follows a complaint from checkpatch:
"WARNING: ENOTSUPP is not a SUSV4 error code, prefer EOPNOTSUPP"
>> + stack_slots = (m->arg_size[i] + 7) / 8;
>> + /* AAPCS 64 C.14: arguments passed on stack must be aligned to
>> + * max(8, arg_natural_alignment)
>> + */
>> + a->bstack_for_args += stack_slots * 8;
>> + a->ostack_for_args = round_up(a->ostack_for_args + stack_slots * 8, 8);
>
> since a->ostack_for_args starts from 0 and is always incremented
> by multiples of 8, round_up() to 8 is not needed.
True. This is a (partial) remnant from the first attempt to handle more
exotic alignments like large structs or __int128, but that's indeed not
needed for this current version. I'll clean it up.
[...]
>> + for (i = a->args_in_regs; i < m->nr_args; i++) {
>> + slots = (m->arg_size[i] + 7) / 8;
>> + /* AAPCS C.14: additional arguments on stack must be
>> + * aligned on max(8, arg_natural_alignment)
>> + */
>> + soff = round_up(soff, 8);
>> + if (for_call_origin)
>> + doff = round_up(doff, 8);
>
> since both soff and doff start from multiples of 8 and are
> incremented by 8 each time, the two round_up()s are also
> not needed.
ACK. I guess the small AAPCS mention can go too then.
>
>> + /* verifier ensures arg_size <= 16, so slots equals 1 or 2 */
>> + while (slots-- > 0) {
>> + emit(A64_LDR64I(tmp, A64_FP, soff), ctx);
>> + /* if there is unused space in the last slot, clear
>> + * the garbage contained in the space.
>> + */
>> + if (slots == 0 && !for_call_origin)
>> + clear_garbage(ctx, tmp, m->arg_size[i] % 8);
>> + emit(A64_STR64I(tmp, A64_SP, doff), ctx);
>> + soff += 8;
>> + doff += 8;
>> + }
>> + }
>> +}
>
> [...]
--
Alexis Lothoré, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2025-05-27 8:45 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-22 10:14 [PATCH bpf-next v2 0/2] bpf, arm64: support up to 12 arguments Alexis Lothoré
2025-05-22 10:14 ` [PATCH bpf-next v2 1/2] bpf, arm64: Support up to 12 function arguments Alexis Lothoré
2025-05-27 8:11 ` Xu Kuohai
2025-05-27 8:45 ` Alexis Lothoré [this message]
2025-05-27 9:09 ` Xu Kuohai
2025-05-27 9:13 ` Alexis Lothoré
2025-05-22 10:14 ` [PATCH bpf-next v2 2/2] selftests/bpf: enable many-args tests for arm64 Alexis Lothoré (eBPF Foundation)
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=DA6T7OEF94IG.2BH2PWTCVEOTA@bootlin.com \
--to=alexis.lothore@bootlin.com \
--cc=alexandre.torgue@foss.st.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bastien.curutchet@bootlin.com \
--cc=bpf@vger.kernel.org \
--cc=catalin.marinas@arm.com \
--cc=daniel@iogearbox.net \
--cc=ebpf@linuxfoundation.org \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=martin.lau@linux.dev \
--cc=mcoquelin.stm32@gmail.com \
--cc=mykolal@fb.com \
--cc=puranjay@kernel.org \
--cc=revest@chromium.org \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=will@kernel.org \
--cc=xukuohai@huawei.com \
--cc=xukuohai@huaweicloud.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.