From: Tero Kristo <tero.kristo@linux.intel.com>
To: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
bpf@vger.kernel.org
Subject: Re: [PATCH] bpf: Add support for absolute value BPF timers
Date: Tue, 21 Feb 2023 17:17:51 +0200 [thread overview]
Message-ID: <b2cf88bf-c137-8278-d20d-bb8a0eda5fd8@linux.intel.com> (raw)
In-Reply-To: <20230221144803.2216876-1-tero.kristo@linux.intel.com>
Hi,
Please ignore this, I added a broken mailing list to CC.
Re-sending in a bit.
-Tero
On 21/02/2023 16:48, Tero Kristo wrote:
> Add a new flag BPF_F_TIMER_ABS that can be passed to bpf_timer_start()
> to start an absolute value timer instead of the default relative value.
> This makes the timer expire at an exact point in time, instead of a time
> with latencies and jitter induced by both the BPF and timer subsystems.
> This is useful e.g. in certain time sensitive profiling cases, where we
> need a timer to expire at an exact point in time.
>
> Signed-off-by: Tero Kristo <tero.kristo@linux.intel.com>
> ---
> include/uapi/linux/bpf.h | 15 +++++++++++++++
> kernel/bpf/helpers.c | 11 +++++++++--
> 2 files changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
> index 464ca3f01fe7..7f5b71847984 100644
> --- a/include/uapi/linux/bpf.h
> +++ b/include/uapi/linux/bpf.h
> @@ -4951,6 +4951,12 @@ union bpf_attr {
> * different maps if key/value layout matches across maps.
> * Every bpf_timer_set_callback() can have different callback_fn.
> *
> + * *flags* can be one of:
> + *
> + * **BPF_F_TIMER_ABS**
> + * Start the timer in absolute expire value instead of the
> + * default relative one.
> + *
> * Return
> * 0 on success.
> * **-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier
> @@ -7050,4 +7056,13 @@ struct bpf_core_relo {
> enum bpf_core_relo_kind kind;
> };
>
> +/*
> + * Flags to control bpf_timer_start() behaviour.
> + * - BPF_F_TIMER_ABS: Timeout passed is absolute time, by default it is
> + * relative to current time.
> + */
> +enum {
> + BPF_F_TIMER_ABS = (1ULL << 0),
> +};
> +
> #endif /* _UAPI__LINUX_BPF_H__ */
> diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
> index af30c6cbd65d..924849d89828 100644
> --- a/kernel/bpf/helpers.c
> +++ b/kernel/bpf/helpers.c
> @@ -1253,10 +1253,11 @@ BPF_CALL_3(bpf_timer_start, struct bpf_timer_kern *, timer, u64, nsecs, u64, fla
> {
> struct bpf_hrtimer *t;
> int ret = 0;
> + enum hrtimer_mode mode;
>
> if (in_nmi())
> return -EOPNOTSUPP;
> - if (flags)
> + if (flags > BPF_F_TIMER_ABS)
> return -EINVAL;
> __bpf_spin_lock_irqsave(&timer->lock);
> t = timer->timer;
> @@ -1264,7 +1265,13 @@ BPF_CALL_3(bpf_timer_start, struct bpf_timer_kern *, timer, u64, nsecs, u64, fla
> ret = -EINVAL;
> goto out;
> }
> - hrtimer_start(&t->timer, ns_to_ktime(nsecs), HRTIMER_MODE_REL_SOFT);
> +
> + if (flags & BPF_F_TIMER_ABS)
> + mode = HRTIMER_MODE_ABS_SOFT;
> + else
> + mode = HRTIMER_MODE_REL_SOFT;
> +
> + hrtimer_start(&t->timer, ns_to_ktime(nsecs), mode);
> out:
> __bpf_spin_unlock_irqrestore(&timer->lock);
> return ret;
prev parent reply other threads:[~2023-02-21 15:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-21 14:48 [PATCH] bpf: Add support for absolute value BPF timers Tero Kristo
2023-02-21 15:17 ` Tero Kristo [this message]
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=b2cf88bf-c137-8278-d20d-bb8a0eda5fd8@linux.intel.com \
--to=tero.kristo@linux.intel.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
/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