From: Martin KaFai Lau <martin.lau@linux.dev>
To: Eduard Zingerman <eddyz87@gmail.com>
Cc: bpf@vger.kernel.org, Alexei Starovoitov <ast@kernel.org>,
Andrii Nakryiko <andrii@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Yonghong Song <yonghong.song@linux.dev>,
Amery Hung <ameryhung@gmail.com>,
kernel-team@meta.com
Subject: Re: [PATCH v4 bpf-next 6/9] selftests/bpf: Test gen_prologue and gen_epilogue
Date: Thu, 29 Aug 2024 10:35:35 -0700 [thread overview]
Message-ID: <6b81ecdb-779a-445f-ba2f-22147e635f6f@linux.dev> (raw)
In-Reply-To: <12566dccdcf9b39cf6b9eda88104451719d18676.camel@gmail.com>
On 8/29/24 12:27 AM, Eduard Zingerman wrote:
> On Tue, 2024-08-27 at 12:48 -0700, Martin KaFai Lau wrote:
>> From: Martin KaFai Lau <martin.lau@kernel.org>
>>
>> This test adds a new struct_ops "bpf_testmod_st_ops" in bpf_testmod.
>> The ops of the bpf_testmod_st_ops is triggered by new kfunc calls
>> "bpf_kfunc_st_ops_test_*logue". These new kfunc calls are
>> primarily used by the SEC("syscall") program. The test triggering
>> sequence is like:
>> SEC("syscall")
>> syscall_prologue_subprog(struct st_ops_args *args)
>> bpf_kfunc_st_op_test_prologue(args)
>> st_ops->test_prologue(args)
>>
>> .gen_prologue adds 1000 to args->a
>> .gen_epilogue adds 10000 to args->a
>> .gen_epilogue will also set the r0 to 2 * args->a.
>>
>> The .gen_prologue and .gen_epilogue of the bpf_testmod_st_ops
>> will test the prog->aux->attach_func_name to decide if
>> it needs to generate codes.
>>
>> The main programs of the pro_epilogue_subprog.c will call a subprog()
>> which does "args->a += 1".
>>
>> The main programs of the pro_epilogue_kfunc.c will call a
>> new kfunc bpf_kfunc_st_ops_inc10 which does "args->a += 10".
>>
>> This patch uses the test_loader infra to check the __xlated
>> instructions patched after gen_prologue and/or gen_epilogue.
>> The __xlated check is based on Eduard's example (Thanks!) in v1.
>>
>> args->a is returned by the struct_ops prog (either the main prog
>> or the epilogue). Thus, the __retval of the SEC("syscall") prog
>> is checked. For example, when triggering the ops in the
>> 'SEC("struct_ops/test_epilogue_subprog") int test_epilogue_subprog'
>> The expected args->a is +1 (subprog call) + 10000 (.gen_epilogue) = 10001.
>> The expected return value is 2 * 10001 (.gen_epilogue).
>>
>> Suggested-by: Eduard Zingerman <eddyz87@gmail.com>
>> Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
>> ---
>
> Acked-by: Eduard Zingerman <eddyz87@gmail.com>
>
> [...]
>
>> diff --git a/tools/testing/selftests/bpf/progs/pro_epilogue_kfunc.c b/tools/testing/selftests/bpf/progs/pro_epilogue_kfunc.c
>> new file mode 100644
>> index 000000000000..7d1124cf4942
>> --- /dev/null
>> +++ b/tools/testing/selftests/bpf/progs/pro_epilogue_kfunc.c
>> @@ -0,0 +1,156 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +/* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */
>> +
>> +#include <vmlinux.h>
>> +#include <bpf/bpf_tracing.h>
>> +#include "bpf_misc.h"
>> +#include "../bpf_testmod/bpf_testmod.h"
>> +#include "../bpf_testmod/bpf_testmod_kfunc.h"
>> +
>> +char _license[] SEC("license") = "GPL";
>> +
>> +void __kfunc_btf_root(void)
>> +{
>> + struct st_ops_args args = {};
>> +
>> + bpf_kfunc_st_ops_inc10(&args);
>
> Nit: 'bpf_kfunc_st_ops_inc10(0);' would also work.
sgtm. I think it will make it obvious that it won't be executed also.
>
>> +}
>
> As a side note, I think that kfunc and subprog sets of tests could be
> combined in order to have less code. Probably does not matter.
ok. I will drop the _subprog.c and only keep the _kfunc.c.
The _kfunc.c calls a subprog and a kfunc which should have already covered the
_subprog.c cases.
next prev parent reply other threads:[~2024-08-29 17:35 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-27 19:48 [PATCH v4 bpf-next 0/9] bpf: Add gen_epilogue to bpf_verifier_ops Martin KaFai Lau
2024-08-27 19:48 ` [PATCH v4 bpf-next 1/9] bpf: Move insn_buf[16] to bpf_verifier_env Martin KaFai Lau
2024-08-29 0:41 ` Eduard Zingerman
2024-08-29 1:46 ` Alexei Starovoitov
2024-08-29 15:20 ` Martin KaFai Lau
2024-08-29 15:26 ` Alexei Starovoitov
2024-08-29 15:33 ` Martin KaFai Lau
2024-08-27 19:48 ` [PATCH v4 bpf-next 3/9] bpf: Add gen_epilogue to bpf_verifier_ops Martin KaFai Lau
2024-08-29 2:26 ` Eduard Zingerman
2024-08-29 15:47 ` Martin KaFai Lau
2024-08-27 19:48 ` [PATCH v4 bpf-next 4/9] bpf: Export bpf_base_func_proto Martin KaFai Lau
2024-08-27 19:48 ` [PATCH v4 bpf-next 5/9] selftests/bpf: attach struct_ops maps before test prog runs Martin KaFai Lau
2024-08-27 19:48 ` [PATCH v4 bpf-next 6/9] selftests/bpf: Test gen_prologue and gen_epilogue Martin KaFai Lau
2024-08-29 7:27 ` Eduard Zingerman
2024-08-29 17:35 ` Martin KaFai Lau [this message]
2024-08-27 19:48 ` [PATCH v4 bpf-next 7/9] selftests/bpf: Add tailcall epilogue test Martin KaFai Lau
2024-08-29 6:16 ` Eduard Zingerman
2024-08-29 18:15 ` Martin KaFai Lau
2024-08-27 19:48 ` [PATCH v4 bpf-next 8/9] selftests/bpf: A pro/epilogue test when the main prog jumps back to the 1st insn Martin KaFai Lau
2024-08-29 6:21 ` Eduard Zingerman
2024-08-27 19:48 ` [PATCH v4 bpf-next 9/9] selftests/bpf: Test epilogue patching when the main prog has multiple BPF_EXIT Martin KaFai Lau
2024-08-28 0:58 ` Martin KaFai Lau
2024-08-29 6:28 ` Eduard Zingerman
2024-08-29 20:09 ` Martin KaFai Lau
2024-08-29 6:25 ` Eduard Zingerman
2024-08-27 19:52 ` [PATCH v4 bpf-next 2/9] bpf: Adjust BPF_JMP that jumps to the 1st insn of the prologue Martin KaFai Lau
2024-08-28 16:48 ` Alexei Starovoitov
2024-08-28 17:44 ` Martin KaFai Lau
2024-08-28 18:43 ` Alexei Starovoitov
2024-08-28 18:59 ` Martin KaFai Lau
[not found] ` <20240827194834.1423815-3-martin.lau@linux.dev>
2024-08-29 2:01 ` Eduard Zingerman
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=6b81ecdb-779a-445f-ba2f-22147e635f6f@linux.dev \
--to=martin.lau@linux.dev \
--cc=ameryhung@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=kernel-team@meta.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.