From: Ihor Solodrai <ihor.solodrai@linux.dev>
To: Emil Tsalapatis <emil@etsalapatis.com>,
Alexei Starovoitov <ast@kernel.org>,
Andrii Nakryiko <andrii@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Eduard Zingerman <eddyz87@gmail.com>,
Kumar Kartikeya Dwivedi <memxor@gmail.com>
Cc: Alan Maguire <alan.maguire@oracle.com>,
Jiri Olsa <jolsa@kernel.org>,
bpf@vger.kernel.org, linux-kbuild@vger.kernel.org
Subject: Re: [PATCH bpf-next v1 04/14] selftests/bpf: Add kfunc set test to resolve_btfids
Date: Tue, 16 Jun 2026 14:52:26 -0700 [thread overview]
Message-ID: <e3660e76-37d0-4ec7-bae9-4270fc0a2915@linux.dev> (raw)
In-Reply-To: <DJAA8M3U5PJ7.W84BYRNJA7UY@etsalapatis.com>
On 6/16/26 12:07 AM, Emil Tsalapatis wrote:
> On Mon Jun 1, 2026 at 6:17 PM EDT, Ihor Solodrai wrote:
>> Extend the resolve_btfids selftest to cover kfunc sets defined with
>> BTF_KFUNCS_START/BTF_KFUNCS_END.
>>
>> The test verifies that resolve_btfids correctly processes BTF_ID_FLAGS,
>> resolves function IDs, and checks the kfunc set is sorted.
>>
>> Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev>
>
> Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com>
>
> One nit below.
>
>> ---
>> .../selftests/bpf/prog_tests/resolve_btfids.c | 56 +++++++++++++++++++
>> tools/testing/selftests/bpf/progs/btf_data.c | 10 ++++
>> 2 files changed, 66 insertions(+)
>>
>> diff --git a/tools/testing/selftests/bpf/prog_tests/resolve_btfids.c b/tools/testing/selftests/bpf/prog_tests/resolve_btfids.c
>> index d0e51979d455..f6fd79b9dd23 100644
>> --- a/tools/testing/selftests/bpf/prog_tests/resolve_btfids.c
>> +++ b/tools/testing/selftests/bpf/prog_tests/resolve_btfids.c
>> @@ -10,6 +10,10 @@
>> #include <linux/btf_ids.h>
>> #include "test_progs.h"
>>
>> +#ifndef KF_FASTCALL
>> +#define KF_FASTCALL (1 << 12)
>> +#endif
>> +
>> struct symbol {
>> const char *name;
>> int type;
>> @@ -26,6 +30,17 @@ struct symbol test_symbols[] = {
>> { "func", BTF_KIND_FUNC, -1 },
>> };
>>
>> +struct kfunc_symbol {
>> + const char *name;
>> + s32 id;
>> + u32 flags;
>> +};
>> +
>> +static struct kfunc_symbol kfunc_symbols[] = {
>> + { "kfunc_a", -1, 0 },
>> + { "kfunc_b", -1, KF_FASTCALL },
>> +};
>> +
>> /* Align the .BTF_ids section to 4 bytes */
>> asm (
>> ".pushsection " BTF_IDS_SECTION " ,\"a\"; \n"
>> @@ -77,7 +92,13 @@ BTF_ID(union, U)
>> BTF_ID(func, func)
>> BTF_SET_END(test_set)
>>
>> +BTF_KFUNCS_START(test_kfunc_set)
>> +BTF_ID_FLAGS(func, kfunc_a)
>> +BTF_ID_FLAGS(func, kfunc_b, KF_FASTCALL)
>> +BTF_KFUNCS_END(test_kfunc_set)
>> +
>> #pragma GCC visibility pop
>> +
>> static int
>> __resolve_symbol(struct btf *btf, int type_id)
>> {
>> @@ -108,6 +129,18 @@ __resolve_symbol(struct btf *btf, int type_id)
>> test_symbols[i].id = type_id;
>> }
>>
>> + if (BTF_INFO_KIND(type->info) == BTF_KIND_FUNC) {
>> + str = btf__name_by_offset(btf, type->name_off);
>> + if (str) {
>
> This can be rewritten to collapse the nesting:
> if (BTF_INFO_KIND(type->info) != BTF_KIND_FUNC)
> return 0;
>
> str = btf__name_by_offset(btf, type->name_off);
> if (!str)
> return 0;
>
> <the rest>
>
Hi Emil, thank you for the reviews.
I'm going to drop this string check following Andrii's suggestion, so
this condition will be removed.
Good nit though.
>> + for (i = 0; i < ARRAY_SIZE(kfunc_symbols); i++) {
>> + if (kfunc_symbols[i].id >= 0)
>> + continue;
>> + if (!strcmp(str, kfunc_symbols[i].name))
>> + kfunc_symbols[i].id = type_id;
>> + }
>> + }
>> + }
>> +
>> return 0;
>> }
>>
>> @@ -162,6 +195,29 @@ void test_resolve_btfids(void)
>> ASSERT_LE(test_set.ids[i - 1], test_set.ids[i], "sort_check");
>> }
>>
>> + /* Check BTF_KFUNCS_START(test_kfunc_set) */
>> + ASSERT_EQ(test_kfunc_set.flags, BTF_SET8_KFUNCS, "kfunc_set_flags");
>> + ASSERT_EQ(test_kfunc_set.cnt, ARRAY_SIZE(kfunc_symbols), "kfunc_set_cnt");
>> +
>> + for (i = 0; i < test_kfunc_set.cnt; i++) {
>> + bool found = false;
>> +
>> + for (j = 0; j < ARRAY_SIZE(kfunc_symbols); j++) {
>> + if (kfunc_symbols[j].id != (s32)test_kfunc_set.pairs[i].id)
>> + continue;
>> + found = true;
>> + ASSERT_EQ(test_kfunc_set.pairs[i].flags,
>> + kfunc_symbols[j].flags, "kfunc_flags_check");
>> + break;
>> + }
>> +
>> + ASSERT_TRUE(found, "kfunc_id_found");
>> +
>> + if (i > 0)
>> + ASSERT_LE(test_kfunc_set.pairs[i - 1].id,
>> + test_kfunc_set.pairs[i].id, "kfunc_sort_check");
>> + }
>> +
>> out:
>> btf__free(btf);
>> }
>> diff --git a/tools/testing/selftests/bpf/progs/btf_data.c b/tools/testing/selftests/bpf/progs/btf_data.c
>> index baa525275bde..8587658012c3 100644
>> --- a/tools/testing/selftests/bpf/progs/btf_data.c
>> +++ b/tools/testing/selftests/bpf/progs/btf_data.c
>> @@ -48,3 +48,13 @@ int func(struct root_struct *root)
>> {
>> return 0;
>> }
>> +
>> +int kfunc_a(struct root_struct *root)
>> +{
>> + return 0;
>> +}
>> +
>> +int kfunc_b(struct root_struct *root)
>> +{
>> + return 0;
>> +}
>
next prev parent reply other threads:[~2026-06-16 21:52 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-01 22:17 [PATCH bpf-next v1 00/14] resolve_btfids: Implement BTF tags emission for kfuncs Ihor Solodrai
2026-06-01 22:17 ` [PATCH bpf-next v1 01/14] tools/bpf: Sync btf_ids.h to tools Ihor Solodrai
2026-06-16 6:28 ` Emil Tsalapatis
2026-06-01 22:17 ` [PATCH bpf-next v1 02/14] selftests/bpf: Modernize resolve_btfids test scaffolding Ihor Solodrai
2026-06-02 13:02 ` Jiri Olsa
2026-06-02 18:30 ` Ihor Solodrai
2026-06-16 6:33 ` Emil Tsalapatis
2026-06-01 22:17 ` [PATCH bpf-next v1 03/14] selftests/bpf: Fix resolve_btfids test reads of BTF ID sets in PIE builds Ihor Solodrai
2026-06-03 23:45 ` Andrii Nakryiko
2026-06-16 20:15 ` Ihor Solodrai
2026-06-16 6:53 ` Emil Tsalapatis
2026-06-01 22:17 ` [PATCH bpf-next v1 04/14] selftests/bpf: Add kfunc set test to resolve_btfids Ihor Solodrai
2026-06-02 13:02 ` Jiri Olsa
2026-06-03 23:45 ` Andrii Nakryiko
2026-06-16 7:07 ` Emil Tsalapatis
2026-06-16 18:33 ` Alexei Starovoitov
2026-06-16 21:52 ` Ihor Solodrai [this message]
2026-06-01 22:17 ` [PATCH bpf-next v1 05/14] resolve_btfids: Index BTF ID symbols by address Ihor Solodrai
2026-06-01 23:03 ` bot+bpf-ci
2026-06-02 13:01 ` Jiri Olsa
2026-06-02 18:28 ` Ihor Solodrai
2026-06-03 23:45 ` Andrii Nakryiko
2026-06-16 21:47 ` Ihor Solodrai
2026-06-16 18:45 ` Emil Tsalapatis
2026-06-16 21:53 ` Ihor Solodrai
2026-06-01 22:17 ` [PATCH bpf-next v1 06/14] resolve_btfids: Discover kfuncs from BTF ID sets Ihor Solodrai
2026-06-02 20:36 ` Jiri Olsa
2026-06-02 21:08 ` Ihor Solodrai
2026-06-03 23:45 ` Andrii Nakryiko
2026-06-03 23:45 ` Andrii Nakryiko
2026-06-16 21:49 ` Ihor Solodrai
2026-06-01 22:17 ` [PATCH bpf-next v1 07/14] resolve_btfids: Emit bpf_kfunc BTF decl tag for discovered kfuncs Ihor Solodrai
2026-06-03 23:45 ` Andrii Nakryiko
2026-06-01 22:17 ` [PATCH bpf-next v1 08/14] selftests/bpf: Verify bpf_kfunc decl tag emission in resolve_btfids Ihor Solodrai
2026-06-01 22:18 ` [PATCH bpf-next v1 09/14] resolve_btfids: Emit a decl tag for kfuncs with KF_FASTCALL Ihor Solodrai
2026-06-01 22:18 ` [PATCH bpf-next v1 10/14] selftests/bpf: Verify bpf_fastcall decl tags in resolve_btfids test Ihor Solodrai
2026-06-03 23:47 ` Andrii Nakryiko
2026-06-01 22:18 ` [PATCH bpf-next v1 11/14] resolve_btfids: Process KF_ARENA_* flags in resolve_btfids Ihor Solodrai
2026-06-03 23:47 ` Andrii Nakryiko
2026-06-16 19:51 ` Emil Tsalapatis
2026-06-16 20:36 ` Emil Tsalapatis
2026-06-16 21:58 ` Ihor Solodrai
2026-06-01 22:18 ` [PATCH bpf-next v1 12/14] selftests/bpf: Verify arena type tags in resolve_btfids test Ihor Solodrai
2026-06-03 23:46 ` Andrii Nakryiko
2026-06-01 22:18 ` [PATCH bpf-next v1 13/14] kbuild: Drop decl_tag_kfuncs and attributes from pahole flags Ihor Solodrai
2026-06-03 23:48 ` Andrii Nakryiko
2026-06-01 22:18 ` [PATCH bpf-next v1 14/14] docs, resolve_btfids: Document kfunc BTF annotation emission Ihor Solodrai
2026-06-16 19:54 ` Emil Tsalapatis
2026-06-03 23:45 ` [PATCH bpf-next v1 00/14] resolve_btfids: Implement BTF tags emission for kfuncs Andrii Nakryiko
2026-06-16 20:10 ` Ihor Solodrai
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=e3660e76-37d0-4ec7-bae9-4270fc0a2915@linux.dev \
--to=ihor.solodrai@linux.dev \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=jolsa@kernel.org \
--cc=linux-kbuild@vger.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