From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=91.218.175.206 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793657300; b=V2XamJBcRMPL+2j5xbid79sxfKeCR6XAbOhe6klxXa6JMo/SGfMC6IplYZP8kc6pNRXh apw9KsFBke4qyNKAGWS9Rvq+8VwpB/W9AlmO8PjIDSeOCxJ3AE2tU6X7C6O5Kh5qS+D0k M9AfJLvP3W8hzBhbB2mnmcGvMRhW5jWnmD/F+AKJcQ0Gnrfcw6HT95i/4dyMYEVrbnjuH HFaEpCO8nuXHwBxRydGFPCqPhhpaB7CVBh257YL2875gHTpm6fO9VHvThYIG/e0AFmxbw 2H/OECdf/pp7McLKXDOoWjETxHebq3Av95yEm9UdjrsdUiYfsim4/7UClmiYvT+ZCfQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793657300; h=DMARC-Filter:X-Envelope-To:DKIM-Signature:X-Envelope-To:Received: X-Mizu-Trace-ID:X-Migadu-Flow:From:To:Cc:Subject:Date:Message-ID: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; bh=+pm9gGaZs/CLh7OoTmuolKvilNEtJFezKPiXE4mTJrk=; b=asBCpITFOMwuLV+yAEbimPd0vTAh/QKc87SNn5+DUv9Asy6kvChSnU6y88APaz6DeOYp 2NyZ09EvivZuERB4+cCYAHWNQtggJI/IFj5n63qIkovhfgbI0j7MgCFX1cpaeSLln2/FW vZKL8iYm4PgOpHzbhaG/5gBII6OS/d8CsEYnr9rBVt/Y0J4HDjWMYNf4L4VQyzEHfsXPN RZP+PZ1JwH6ZklHZHW3lV0vL+V7vph2N3poTuUA6qywjPAxpozsPXRjQSXr2YVSIjszmQ kFTyQvII70CKrocJdybDwv88wp9z/af9v0LVz00pKq78Ggs5K2sKnYU2VPJydo6P/VQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256 header.s=key1 header.b="w/vFrUmg"; arc=none smtp.remote-ip=91.218.175.206 Received: from mta0.migadu.com (out-206.mta0.migadu.com [91.218.175.206]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A121D606A335 for ; Mon, 2 Nov 2026 22:08:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org A121D606A335 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256 header.s=key1 header.b=w/vFrUmg X-Envelope-To: linux-kernel@vger.kernel.org DKIM-Signature: a=rsa-sha256; bh=9fjztXg2DC76hhkmLgtkEbkjo8i8oo2Esga6BzQfns4=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1793657297; v=1; x=1794262097; b=w/vFrUmgnk7uuaFBQaIkpp+V5ZFaH8R5o13Oj+ZvJ4Yam3GhxJkcBzVi8h1EPIzLQHqwfmxh IHLqbqCTfTEv/PF47hB1CCbsnbauyCGr7A63W08gq1GRQVKlP+/+6GGZhUEpk61Zf45Bq6JfKGQ JGSttjwgA8ocSxrc8EzRs+kk= X-Envelope-To: linux-kernel@vger.kernel.org Received: by smtp.migadu.com with ESMTPS id 20f9fe87d35c4850; Mon, 02 Nov 2026 22:08:17 +0000 X-Mizu-Trace-ID: 20f9fe87d35c4850 X-Migadu-Flow: FLOW_OUT From: Vineet Gupta To: bpf@vger.kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, eddyz87@gmail.com, memxor@gmail.com, martin.lau@linux.dev, song@kernel.org, yonghong.song@linux.dev, jolsa@kernel.org, emil@etsalapatis.com, ihor.solodrai@linux.dev, john.fastabend@gmail.com, shuah@kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, jose.marchesi@oracle.com, david.faust@oss.qualcomm.com, Vineet Gupta Subject: [PATCH bpf-next v3 8/8] selftests/bpf: skip the struct_ops arena tests without compiler support Date: Mon, 2 Nov 2026 14:07:17 -0800 Message-ID: <20261102220717.4079739-9-vineet.gupta@linux.dev> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261102220717.4079739-1-vineet.gupta@linux.dev> References: <20261102220717.4079739-1-vineet.gupta@linux.dev> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit trigger() in struct_ops_arena.c and its three siblings puts the __BPF_FEATURE_ADDR_SPACE_CAST guard inside the function, so without arena support the body is gone and the program falls through to "return 0". The host side then does err = bpf_prog_test_run_opts(bpf_program__fd(trigger), &topts); ASSERT_OK(err, "test_run"); ASSERT_EQ(topts.retval, 0, "trigger_retval"); and passes, having run a program that did nothing. Two tests report OK under a stock bpf-gcc on that basis: arena_arg and arena_autobind. The other two, arena_member and arena_member_render, need a testmod BTF carrying the arena type tag and are not reached without one, but are fixed the same way. These are not driven by test_loader, so __skip_without_arena does not reach them. Use the flag-in-.data pattern linked_externs.c already uses for the same situation: the program exports skip_tests, and the host checks it before attaching and reports SKIP. Signed-off-by: Vineet Gupta --- .../bpf/prog_tests/test_struct_ops_arena.c | 27 +++++++++++++++++++ .../selftests/bpf/progs/struct_ops_arena.c | 10 +++++++ .../bpf/progs/struct_ops_arena_autobind.c | 10 +++++++ .../bpf/progs/struct_ops_arena_member.c | 10 +++++++ .../progs/struct_ops_arena_member_render.c | 10 +++++++ 5 files changed, 67 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c b/tools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c index e7580b9f0fc2..11b7dab77ff7 100644 --- a/tools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c +++ b/tools/testing/selftests/bpf/prog_tests/test_struct_ops_arena.c @@ -31,6 +31,12 @@ static void arena_arg(void) if (!ASSERT_OK_PTR(skel, "struct_ops_arena__open_and_load")) return; + if (skel->data->skip_tests) { + printf("%s:SKIP: no addr_space_cast support in the BPF compiler\n", __func__); + test__skip(); + goto out; + } + link = bpf_map__attach_struct_ops(skel->maps.testmod_arena); if (!ASSERT_OK_PTR(link, "attach_struct_ops")) goto out; @@ -142,6 +148,13 @@ static void arena_member(void) if (!ASSERT_OK_PTR(skel, "struct_ops_arena_member__open_and_load")) return; + if (skel->data->skip_tests) { + printf("%s:SKIP: no addr_space_cast support in the BPF compiler\n", __func__); + test__skip(); + struct_ops_arena_member__destroy(skel); + return; + } + attach_and_trigger(skel->maps.testmod_arena_member, skel->progs.trigger); struct_ops_arena_member__destroy(skel); } @@ -186,6 +199,13 @@ static void arena_autobind(void) assert_prog_map(bpf_program__fd(skel->progs.test_arena_cb), info.id, "test_arena_cb"); assert_prog_map(bpf_program__fd(skel->progs.unrelated), info.id, "unrelated"); + if (skel->data->skip_tests) { + printf("%s:SKIP: no addr_space_cast support in the BPF compiler\n", __func__); + test__skip(); + struct_ops_arena_autobind__destroy(skel); + return; + } + attach_and_trigger(skel->maps.testmod_arena_autobind, skel->progs.trigger); out: struct_ops_arena_autobind__destroy(skel); @@ -268,6 +288,13 @@ static void arena_member_render(void) if (!ASSERT_OK_PTR(skel, "struct_ops_arena_member_render__open_and_load")) return; + if (skel->data->skip_tests) { + printf("%s:SKIP: no addr_space_cast support in the BPF compiler\n", __func__); + test__skip(); + struct_ops_arena_member_render__destroy(skel); + return; + } + attach_and_trigger(skel->maps.testmod_arena_member_render, skel->progs.trigger); struct_ops_arena_member_render__destroy(skel); } diff --git a/tools/testing/selftests/bpf/progs/struct_ops_arena.c b/tools/testing/selftests/bpf/progs/struct_ops_arena.c index 8aa8639df91f..612ca868c8fe 100644 --- a/tools/testing/selftests/bpf/progs/struct_ops_arena.c +++ b/tools/testing/selftests/bpf/progs/struct_ops_arena.c @@ -83,6 +83,16 @@ struct bpf_testmod_ops3 testmod_arena = { .test_arena_multislot = (void *)test_arena_multislot_cb, }; +/* + * These tests are not driven by test_loader, so __skip_without_arena + * cannot reach them; the host side reads this flag and skips instead. + */ +#ifdef __BPF_FEATURE_ADDR_SPACE_CAST +bool skip_tests __attribute((__section__(".data"))) = false; +#else +bool skip_tests = true; +#endif + SEC("syscall") int trigger(void *ctx) { diff --git a/tools/testing/selftests/bpf/progs/struct_ops_arena_autobind.c b/tools/testing/selftests/bpf/progs/struct_ops_arena_autobind.c index 495faa0f4a8b..de026d901dcb 100644 --- a/tools/testing/selftests/bpf/progs/struct_ops_arena_autobind.c +++ b/tools/testing/selftests/bpf/progs/struct_ops_arena_autobind.c @@ -42,6 +42,16 @@ int unrelated(void *ctx) return 0; } +/* + * These tests are not driven by test_loader, so __skip_without_arena + * cannot reach them; the host side reads this flag and skips instead. + */ +#ifdef __BPF_FEATURE_ADDR_SPACE_CAST +bool skip_tests __attribute((__section__(".data"))) = false; +#else +bool skip_tests = true; +#endif + SEC("syscall") int trigger(void *ctx) { diff --git a/tools/testing/selftests/bpf/progs/struct_ops_arena_member.c b/tools/testing/selftests/bpf/progs/struct_ops_arena_member.c index a2218cd81619..4ec0aead3e95 100644 --- a/tools/testing/selftests/bpf/progs/struct_ops_arena_member.c +++ b/tools/testing/selftests/bpf/progs/struct_ops_arena_member.c @@ -77,6 +77,16 @@ struct bpf_testmod_ops3 testmod_arena_member = { .test_arena_member = (void *)test_arena_member_cb, }; +/* + * These tests are not driven by test_loader, so __skip_without_arena + * cannot reach them; the host side reads this flag and skips instead. + */ +#ifdef __BPF_FEATURE_ADDR_SPACE_CAST +bool skip_tests __attribute((__section__(".data"))) = false; +#else +bool skip_tests = true; +#endif + SEC("syscall") int trigger(void *ctx) { diff --git a/tools/testing/selftests/bpf/progs/struct_ops_arena_member_render.c b/tools/testing/selftests/bpf/progs/struct_ops_arena_member_render.c index 09b4c740bdca..3ccbc6e71626 100644 --- a/tools/testing/selftests/bpf/progs/struct_ops_arena_member_render.c +++ b/tools/testing/selftests/bpf/progs/struct_ops_arena_member_render.c @@ -60,6 +60,16 @@ struct bpf_testmod_ops3 testmod_arena_member_render = { .test_arena_member = (void *)test_arena_member_render_cb, }; +/* + * These tests are not driven by test_loader, so __skip_without_arena + * cannot reach them; the host side reads this flag and skips instead. + */ +#ifdef __BPF_FEATURE_ADDR_SPACE_CAST +bool skip_tests __attribute((__section__(".data"))) = false; +#else +bool skip_tests = true; +#endif + SEC("syscall") int trigger(void *ctx) { -- 2.53.0-Meta