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: 54+ 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 22:28 ` sashiko-bot
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-01 22:33 ` sashiko-bot
2026-06-02 18:36 ` 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-01 22:29 ` sashiko-bot
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 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.