All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yonghong Song <yonghong.song@linux.dev>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: bpf <bpf@vger.kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	"Jose E . Marchesi" <jose.marchesi@oracle.com>,
	Kernel Team <kernel-team@fb.com>,
	Martin KaFai Lau <martin.lau@kernel.org>
Subject: Re: [PATCH bpf-next 03/10] bpf: Support stack arguments for bpf functions
Date: Mon, 6 Apr 2026 09:19:18 -0700	[thread overview]
Message-ID: <2036096d-296f-4834-9181-ae895d330d22@linux.dev> (raw)
In-Reply-To: <CAADnVQJ6y33kKOPTWvHu-ZNLFa8JOUih5qfv+e-71+W=orBNhw@mail.gmail.com>



On 4/6/26 8:17 AM, Alexei Starovoitov wrote:
> On Sun, Apr 5, 2026 at 11:03 PM Yonghong Song <yonghong.song@linux.dev> wrote:
>>
>>
>> On 4/5/26 9:51 PM, Alexei Starovoitov wrote:
>>> On Sun, Apr 5, 2026 at 9:29 PM Yonghong Song <yonghong.song@linux.dev> wrote:
>>>>> For 6th argument JIT emits these two stx/ldx as moves to/from x86's r9.
>>>> For stx case, we should move the bottom stack value (6th argument)
>>>> to r9 and pop the bottom stack slot (8 bytes).
>>> That doesn't sound right.
>>> Passing 6th argument should not involve stack manipulation at all.
>>> No push and no pop.
>> The following stack layout can avoid the above push/pop issue:
>>
>>      incoming stack arg N -> 1
>>      return adderss
>>      saved rbp
>>      BPF program stack
>>      tail call cnt <== if tail call reachable
> let's disallow mixing 6+ args and tailcalls.

Okay.

>
>>      callee-saved regs
>>      r9 <== if priv_frame_ptr is not null
> I guess we can also disable private stack and 6+ args.
> Looks like it's a bit in the way.
> The compilers will emit
> stx [r12 - N], src_reg // store of outgoing 6th arg
> call
>
> For priv stack JIT will emit push_r9 while JITing call insn.
> But it should push_r9 before stx converts to 'mov %r9 <- %src_reg'.

I guess this is not enough. we can push_r9 in prologue. But for
priv stack, r9 is still used in the normal bpf load/store codes.
This will interfere with jitting 'mov %r9 <- %src_reg'.

As you mentioned later, disable priv_stack would work.

> Maybe we can reload r9 after the call instead of push/pop.
>
>>      outgoing stack arg 1
>>      outgoing stack arg M -> 2
>>
>> After the above pushing (outgoing stack arg M -> 2),
>> if bpf-to-bpf, push the outgoing stack arg 1.
>> If kfunc, move outgoing stack arg 1 to r9.
> Ideally JIT treats subprog calls and kfunc calls the same way.
> Why should they be different ?
> In the callee, in both cases, the first insn in the prologue
> can be 'mov [rbp + ] <- %r9',
>
> so that later 'ldx [r12 + ' can be JITed as-is. Here priv stack
> is not in the way.
> Without priv stack we can avoid this first 'mov [rbp + ] <- %r9'
> in the prologue and instead JIT 'ldx [r12 + ' as 'mov %dst_reg <- %r9'
> since nothing will be overwriting %r9.
>
> It feels to me that it's easier to disallow priv stack for now.

So if we disallow priv_stack, we can do
    stx[r12 - first_arg_off] = val/reg => mov %r9, val/reg
other arg_off will be pushed to stack in reverse orders.

So for kfunc, 'mov %r9, val' already there, so we should be okay.
For bpf-to-bpf, do 'push %r9'.

Is this correct?



  reply	other threads:[~2026-04-06 16:19 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-02  1:27 [PATCH bpf-next 00/10] bpf: Support stack arguments for BPF functions and kfuncs Yonghong Song
2026-04-02  1:27 ` [PATCH bpf-next 01/10] bpf: Introduce bpf register BPF_REG_STACK_ARG_BASE Yonghong Song
2026-04-02  1:27 ` [PATCH bpf-next 02/10] bpf: Reuse MAX_BPF_FUNC_ARGS for maximum number of arguments Yonghong Song
2026-04-02  1:27 ` [PATCH bpf-next 03/10] bpf: Support stack arguments for bpf functions Yonghong Song
2026-04-02  3:18   ` bot+bpf-ci
2026-04-02 14:42     ` Yonghong Song
2026-04-02 18:55   ` Amery Hung
2026-04-02 20:45     ` Yonghong Song
2026-04-02 23:38   ` Amery Hung
2026-04-03  4:05     ` Yonghong Song
2026-04-02 23:38   ` Alexei Starovoitov
2026-04-03  4:10     ` Yonghong Song
2026-04-05 21:07       ` Alexei Starovoitov
2026-04-06  4:29         ` Yonghong Song
2026-04-06  4:51           ` Alexei Starovoitov
2026-04-06  6:03             ` Yonghong Song
2026-04-06 15:17               ` Alexei Starovoitov
2026-04-06 16:19                 ` Yonghong Song [this message]
2026-04-06 17:24                   ` Alexei Starovoitov
2026-04-02  1:27 ` [PATCH bpf-next 04/10] bpf: Support stack arguments for kfunc calls Yonghong Song
2026-04-02  3:18   ` bot+bpf-ci
2026-04-02 14:45     ` Yonghong Song
2026-04-02 21:02   ` Amery Hung
2026-04-02  1:27 ` [PATCH bpf-next 05/10] bpf: Reject stack arguments in non-JITed programs Yonghong Song
2026-04-02  1:27 ` [PATCH bpf-next 06/10] bpf: Enable stack argument support for x86_64 Yonghong Song
2026-04-02  1:28 ` [PATCH bpf-next 07/10] bpf,x86: Implement JIT support for stack arguments Yonghong Song
2026-04-02 22:26   ` Amery Hung
2026-04-02 23:26     ` Yonghong Song
2026-04-02 23:51   ` Alexei Starovoitov
2026-04-03  4:13     ` Yonghong Song
2026-04-02  1:28 ` [PATCH bpf-next 08/10] selftests/bpf: Add tests for BPF function " Yonghong Song
2026-04-02  1:28 ` [PATCH bpf-next 09/10] selftests/bpf: Add negative test for oversized kfunc stack argument Yonghong Song
2026-04-02  1:28 ` [PATCH bpf-next 10/10] selftests/bpf: Add verifier tests for stack argument validation Yonghong Song

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=2036096d-296f-4834-9181-ae895d330d22@linux.dev \
    --to=yonghong.song@linux.dev \
    --cc=alexei.starovoitov@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=jose.marchesi@oracle.com \
    --cc=kernel-team@fb.com \
    --cc=martin.lau@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.