All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <olsajiri@gmail.com>
To: Ihor Solodrai <ihor.solodrai@linux.dev>
Cc: 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>,
	Thomas Gleixner <tglx@kernel.org>,
	bpf@vger.kernel.org
Subject: Re: [PATCH bpf v2] selftests/bpf: Use both hrtimer enqueue helpers in vmlinux test
Date: Mon, 11 May 2026 09:04:11 +0200	[thread overview]
Message-ID: <agF_a9RYywaT2c7f@krava> (raw)
In-Reply-To: <20260509005730.250956-1-ihor.solodrai@linux.dev>

On Fri, May 08, 2026 at 05:57:30PM -0700, Ihor Solodrai wrote:
> The vmlinux selftest triggers nanosleep and checks that both kprobe
> and fentry programs observe the hrtimer enqueue path.
> 
> After the hrtimer_start_expires_user() conversion [1], nanosleep
> reaches hrtimer_start_range_ns_user() instead of
> hrtimer_start_range_ns(). Hard-coding either symbol makes the test
> fail either on bpf tree or on linux-next [2].
> 
> Update the test to resolve the target symbol at runtime via
> libbpf_find_vmlinux_btf_id(). This is a nice example of how to modify
> a BPF program to work on both older and newer kernel revision.

iiuc this will help before the [1] fully propagates everywhere,
also good as an example

Acked-by: Jiri Olsa <jolsa@kernel.org>

jirka

> 
> [1] https://lore.kernel.org/all/20260408114952.062400833@kernel.org/
> [2] https://github.com/kernel-patches/bpf/actions/runs/25485909958/job/74782902203
> 
> Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev>
> 
> ---
> 
> v1->v2:
>   * Use bpf_program__set_attach_target() and bpf_program__attach_kprobe()
>     to avoid duplicating BPF programs (Amery)
> v1: https://lore.kernel.org/all/20260507113915.24988-1-ihor.solodrai@linux.dev/
> 
> ---
>  .../selftests/bpf/prog_tests/vmlinux.c        | 45 ++++++++++++++++++-
>  .../selftests/bpf/progs/test_vmlinux.c        |  4 +-
>  2 files changed, 45 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/testing/selftests/bpf/prog_tests/vmlinux.c b/tools/testing/selftests/bpf/prog_tests/vmlinux.c
> index 6fb2217d940b..b5fdd593910d 100644
> --- a/tools/testing/selftests/bpf/prog_tests/vmlinux.c
> +++ b/tools/testing/selftests/bpf/prog_tests/vmlinux.c
> @@ -14,21 +14,61 @@ static void nsleep()
>  	(void)syscall(__NR_nanosleep, &ts, NULL);
>  }
>  
> +static const char *hrtimer_func = "hrtimer_start_range_ns";
> +
> +static int setup_hrtimer_progs(struct test_vmlinux *skel)
> +{
> +	int err;
> +
> +	if (libbpf_find_vmlinux_btf_id("hrtimer_start_range_ns_user", BPF_TRACE_FENTRY) > 0)
> +		hrtimer_func = "hrtimer_start_range_ns_user";
> +
> +	err = bpf_program__set_attach_target(skel->progs.handle__fentry, 0, hrtimer_func);
> +	if (err)
> +		return err;
> +
> +	/*
> +	 * Bare SEC("kprobe") has no target function, so attach it manually
> +	 * later after selecting the hrtimer function to probe.
> +	 */
> +	bpf_program__set_autoattach(skel->progs.handle__kprobe, false);
> +
> +	return 0;
> +}
> +
>  void test_vmlinux(void)
>  {
>  	int err;
>  	struct test_vmlinux* skel;
>  	struct test_vmlinux__bss *bss;
> +	struct bpf_link *kprobe_link = NULL;
>  
> -	skel = test_vmlinux__open_and_load();
> -	if (!ASSERT_OK_PTR(skel, "test_vmlinux__open_and_load"))
> +	skel = test_vmlinux__open();
> +	if (!ASSERT_OK_PTR(skel, "test_vmlinux__open"))
>  		return;
> +
> +	err = setup_hrtimer_progs(skel);
> +	if (!ASSERT_OK(err, "setup_hrtimer_progs"))
> +		goto cleanup;
> +
> +	err = test_vmlinux__load(skel);
> +	if (!ASSERT_OK(err, "test_vmlinux__load"))
> +		goto cleanup;
> +
>  	bss = skel->bss;
>  
>  	err = test_vmlinux__attach(skel);
>  	if (!ASSERT_OK(err, "test_vmlinux__attach"))
>  		goto cleanup;
>  
> +	/* manually attach kprobe with the selected function */
> +	if (hrtimer_func) {
> +		kprobe_link = bpf_program__attach_kprobe(skel->progs.handle__kprobe,
> +							 false /* retprobe */, hrtimer_func);
> +		if (!ASSERT_OK_PTR(kprobe_link, "bpf_program__attach_kprobe"))
> +			goto cleanup;
> +	}
> +
>  	/* trigger everything */
>  	nsleep();
>  
> @@ -39,5 +79,6 @@ void test_vmlinux(void)
>  	ASSERT_TRUE(bss->fentry_called, "fentry");
>  
>  cleanup:
> +	bpf_link__destroy(kprobe_link);
>  	test_vmlinux__destroy(skel);
>  }
> diff --git a/tools/testing/selftests/bpf/progs/test_vmlinux.c b/tools/testing/selftests/bpf/progs/test_vmlinux.c
> index 78b23934d9f8..eea556940df6 100644
> --- a/tools/testing/selftests/bpf/progs/test_vmlinux.c
> +++ b/tools/testing/selftests/bpf/progs/test_vmlinux.c
> @@ -69,7 +69,7 @@ int BPF_PROG(handle__tp_btf, struct pt_regs *regs, long id)
>  	return 0;
>  }
>  
> -SEC("kprobe/hrtimer_start_range_ns")
> +SEC("kprobe")
>  int BPF_KPROBE(handle__kprobe, struct hrtimer *timer, ktime_t tim, u64 delta_ns,
>  	       const enum hrtimer_mode mode)
>  {
> @@ -78,7 +78,7 @@ int BPF_KPROBE(handle__kprobe, struct hrtimer *timer, ktime_t tim, u64 delta_ns,
>  	return 0;
>  }
>  
> -SEC("fentry/hrtimer_start_range_ns")
> +SEC("fentry")
>  int BPF_PROG(handle__fentry, struct hrtimer *timer, ktime_t tim, u64 delta_ns,
>  	     const enum hrtimer_mode mode)
>  {
> -- 
> 2.54.0
> 
> 

  reply	other threads:[~2026-05-11  7:04 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-09  0:57 [PATCH bpf v2] selftests/bpf: Use both hrtimer enqueue helpers in vmlinux test Ihor Solodrai
2026-05-11  7:04 ` Jiri Olsa [this message]
2026-05-11 23:00 ` patchwork-bot+netdevbpf

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=agF_a9RYywaT2c7f@krava \
    --to=olsajiri@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=eddyz87@gmail.com \
    --cc=ihor.solodrai@linux.dev \
    --cc=memxor@gmail.com \
    --cc=tglx@kernel.org \
    /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.