[PATCH bpf-next v5 2/2] selftests/bpf: test the jited inline of bpf_get_current_task

Menglong Dong posted 2 patches 3 weeks ago
There is a newer version of this series
[PATCH bpf-next v5 2/2] selftests/bpf: test the jited inline of bpf_get_current_task
Posted by Menglong Dong 3 weeks ago
Add the testcase for the jited inline of bpf_get_current_task().

Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
---
 .../selftests/bpf/prog_tests/verifier.c       |  2 ++
 .../selftests/bpf/progs/verifier_jit_inline.c | 35 +++++++++++++++++++
 2 files changed, 37 insertions(+)
 create mode 100644 tools/testing/selftests/bpf/progs/verifier_jit_inline.c

diff --git a/tools/testing/selftests/bpf/prog_tests/verifier.c b/tools/testing/selftests/bpf/prog_tests/verifier.c
index 38c5ba70100c..2ae7b096bd64 100644
--- a/tools/testing/selftests/bpf/prog_tests/verifier.c
+++ b/tools/testing/selftests/bpf/prog_tests/verifier.c
@@ -111,6 +111,7 @@
 #include "verifier_xdp_direct_packet_access.skel.h"
 #include "verifier_bits_iter.skel.h"
 #include "verifier_lsm.skel.h"
+#include "verifier_jit_inline.skel.h"
 #include "irq.skel.h"
 
 #define MAX_ENTRIES 11
@@ -253,6 +254,7 @@ void test_verifier_bits_iter(void) { RUN(verifier_bits_iter); }
 void test_verifier_lsm(void)                  { RUN(verifier_lsm); }
 void test_irq(void)			      { RUN(irq); }
 void test_verifier_mtu(void)		      { RUN(verifier_mtu); }
+void test_verifier_jit_inline(void)               { RUN(verifier_jit_inline); }
 
 static int init_test_val_map(struct bpf_object *obj, char *map_name)
 {
diff --git a/tools/testing/selftests/bpf/progs/verifier_jit_inline.c b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
new file mode 100644
index 000000000000..0938ca1dac87
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <vmlinux.h>
+#include <bpf/bpf_helpers.h>
+#include "bpf_misc.h"
+
+#if defined(__TARGET_ARCH_x86) || defined(__TARGET_ARCH_arm64)
+
+SEC("fentry/bpf_fentry_test1")
+__description("Jit inline, bpf_get_current_task")
+__success __retval(0)
+__arch_x86_64
+__jited("	addq	%gs:{{.*}}, %rax")
+__arch_arm64
+__jited("	mrs	x7, SP_EL0")
+int inline_bpf_get_current_task(void)
+{
+	bpf_get_current_task();
+
+	return 0;
+}
+
+#else
+
+SEC("kprobe")
+__description("Jit inline is not supported, use a dummy test")
+__success
+int dummy_test(void)
+{
+	return 0;
+}
+
+#endif
+
+char _license[] SEC("license") = "GPL";
-- 
2.52.0
Re: [PATCH bpf-next v5 2/2] selftests/bpf: test the jited inline of bpf_get_current_task
Posted by Eduard Zingerman 2 weeks, 6 days ago
On Mon, 2026-01-19 at 15:02 +0800, Menglong Dong wrote:
> Add the testcase for the jited inline of bpf_get_current_task().
> 
> Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
> ---
>  .../selftests/bpf/prog_tests/verifier.c       |  2 ++
>  .../selftests/bpf/progs/verifier_jit_inline.c | 35 +++++++++++++++++++
>  2 files changed, 37 insertions(+)
>  create mode 100644 tools/testing/selftests/bpf/progs/verifier_jit_inline.c
> 
> diff --git a/tools/testing/selftests/bpf/prog_tests/verifier.c b/tools/testing/selftests/bpf/prog_tests/verifier.c
> index 38c5ba70100c..2ae7b096bd64 100644
> --- a/tools/testing/selftests/bpf/prog_tests/verifier.c
> +++ b/tools/testing/selftests/bpf/prog_tests/verifier.c
> @@ -111,6 +111,7 @@
>  #include "verifier_xdp_direct_packet_access.skel.h"
>  #include "verifier_bits_iter.skel.h"
>  #include "verifier_lsm.skel.h"
> +#include "verifier_jit_inline.skel.h"
>  #include "irq.skel.h"
>  
>  #define MAX_ENTRIES 11
> @@ -253,6 +254,7 @@ void test_verifier_bits_iter(void) { RUN(verifier_bits_iter); }
>  void test_verifier_lsm(void)                  { RUN(verifier_lsm); }
>  void test_irq(void)			      { RUN(irq); }
>  void test_verifier_mtu(void)		      { RUN(verifier_mtu); }
> +void test_verifier_jit_inline(void)               { RUN(verifier_jit_inline); }
>  
>  static int init_test_val_map(struct bpf_object *obj, char *map_name)
>  {
> diff --git a/tools/testing/selftests/bpf/progs/verifier_jit_inline.c b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
> new file mode 100644
> index 000000000000..0938ca1dac87
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
> @@ -0,0 +1,35 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +#include <vmlinux.h>
> +#include <bpf/bpf_helpers.h>
> +#include "bpf_misc.h"
> +
> +#if defined(__TARGET_ARCH_x86) || defined(__TARGET_ARCH_arm64)

I don't think this #if is necessary as well as 'dummy_test'.
test_loader.c:run_subtest() checks current architecture against a mask
supplied by __arch_* annotations and skips the test for unsupported
archs.

> +
> +SEC("fentry/bpf_fentry_test1")
> +__description("Jit inline, bpf_get_current_task")

Nit: please don't use __description() for new tests,
     it makes "./test_progs -t" tests selection harder.

> +__success __retval(0)
> +__arch_x86_64
> +__jited("	addq	%gs:{{.*}}, %rax")
> +__arch_arm64
> +__jited("	mrs	x7, SP_EL0")
> +int inline_bpf_get_current_task(void)
> +{
> +	bpf_get_current_task();
> +
> +	return 0;
> +}
> +
> +#else
> +
> +SEC("kprobe")
> +__description("Jit inline is not supported, use a dummy test")
> +__success
> +int dummy_test(void)
> +{
> +	return 0;
> +}
> +
> +#endif
> +
> +char _license[] SEC("license") = "GPL";
Re: [PATCH bpf-next v5 2/2] selftests/bpf: test the jited inline of bpf_get_current_task
Posted by Menglong Dong 2 weeks, 6 days ago
On 2026/1/20 04:37, Eduard Zingerman wrote:
> On Mon, 2026-01-19 at 15:02 +0800, Menglong Dong wrote:
> > Add the testcase for the jited inline of bpf_get_current_task().
> > 
> > Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
> > ---
> >  .../selftests/bpf/prog_tests/verifier.c       |  2 ++
> >  .../selftests/bpf/progs/verifier_jit_inline.c | 35 +++++++++++++++++++
> >  2 files changed, 37 insertions(+)
> >  create mode 100644 tools/testing/selftests/bpf/progs/verifier_jit_inline.c
> > 
> > diff --git a/tools/testing/selftests/bpf/prog_tests/verifier.c b/tools/testing/selftests/bpf/prog_tests/verifier.c
> > index 38c5ba70100c..2ae7b096bd64 100644
> > --- a/tools/testing/selftests/bpf/prog_tests/verifier.c
> > +++ b/tools/testing/selftests/bpf/prog_tests/verifier.c
> > @@ -111,6 +111,7 @@
> >  #include "verifier_xdp_direct_packet_access.skel.h"
> >  #include "verifier_bits_iter.skel.h"
> >  #include "verifier_lsm.skel.h"
> > +#include "verifier_jit_inline.skel.h"
> >  #include "irq.skel.h"
> >  
> >  #define MAX_ENTRIES 11
> > @@ -253,6 +254,7 @@ void test_verifier_bits_iter(void) { RUN(verifier_bits_iter); }
> >  void test_verifier_lsm(void)                  { RUN(verifier_lsm); }
> >  void test_irq(void)			      { RUN(irq); }
> >  void test_verifier_mtu(void)		      { RUN(verifier_mtu); }
> > +void test_verifier_jit_inline(void)               { RUN(verifier_jit_inline); }
> >  
> >  static int init_test_val_map(struct bpf_object *obj, char *map_name)
> >  {
> > diff --git a/tools/testing/selftests/bpf/progs/verifier_jit_inline.c b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
> > new file mode 100644
> > index 000000000000..0938ca1dac87
> > --- /dev/null
> > +++ b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
> > @@ -0,0 +1,35 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +
> > +#include <vmlinux.h>
> > +#include <bpf/bpf_helpers.h>
> > +#include "bpf_misc.h"
> > +
> > +#if defined(__TARGET_ARCH_x86) || defined(__TARGET_ARCH_arm64)
> 
> I don't think this #if is necessary as well as 'dummy_test'.
> test_loader.c:run_subtest() checks current architecture against a mask
> supplied by __arch_* annotations and skips the test for unsupported
> archs.

Yeah, you are right, they are unnecessary.

> 
> > +
> > +SEC("fentry/bpf_fentry_test1")
> > +__description("Jit inline, bpf_get_current_task")
> 
> Nit: please don't use __description() for new tests,
>      it makes "./test_progs -t" tests selection harder.

OK, I'll remove them.

Thanks!
Menglong Dong

> 
> > +__success __retval(0)
> > +__arch_x86_64
> > +__jited("	addq	%gs:{{.*}}, %rax")
> > +__arch_arm64
> > +__jited("	mrs	x7, SP_EL0")
> > +int inline_bpf_get_current_task(void)
> > +{
> > +	bpf_get_current_task();
> > +
> > +	return 0;
> > +}
> > +
> > +#else
> > +
> > +SEC("kprobe")
> > +__description("Jit inline is not supported, use a dummy test")
> > +__success
> > +int dummy_test(void)
> > +{
> > +	return 0;
> > +}
> > +
> > +#endif
> > +
> > +char _license[] SEC("license") = "GPL";
> 
>