The branch main has been updated by dumbbell: URL: https://cgit.FreeBSD.org/src/commit/?id=9273fe8ed2addad2179227d444f9f8ab63b942a1
commit 9273fe8ed2addad2179227d444f9f8ab63b942a1 Author: Jean-Sébastien Pédron <[email protected]> AuthorDate: 2026-08-15 18:31:05 +0000 Commit: Jean-Sébastien Pédron <[email protected]> CommitDate: 2026-09-07 20:31:39 +0000 linuxkpi: Add `hrtimer_setup()` `hrtimer_setup()` replaces `hrtimer_init()` in Linux 6.15. The API and the role are the same, except: * it takes the `function` callback as argument * if `function` is NULL, it assigns a default callback At the same time, we hide `hrtimer_init()` if LINUXKPI_VERSION is greater than or equal to 61500 because it was dropped in Linux 6.15. Reviewed by: bz Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58757 --- sys/compat/linuxkpi/common/include/linux/hrtimer.h | 19 +++++++++++++++++++ sys/compat/linuxkpi/common/src/linux_hrtimer.c | 17 +++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/sys/compat/linuxkpi/common/include/linux/hrtimer.h b/sys/compat/linuxkpi/common/include/linux/hrtimer.h index 88f9487d0b85..14977431ade6 100644 --- a/sys/compat/linuxkpi/common/include/linux/hrtimer.h +++ b/sys/compat/linuxkpi/common/include/linux/hrtimer.h @@ -55,11 +55,20 @@ struct hrtimer { #define hrtimer_try_to_cancel(hrtimer) linux_hrtimer_try_to_cancel(hrtimer) #define hrtimer_cancel(hrtimer) linux_hrtimer_cancel(hrtimer) +/* hrtimer_init() is replaced by hrtimer_setup() in Linux 6.15. */ +#if defined(LINUXKPI_VERSION) && LINUXKPI_VERSION < 61500 #define hrtimer_init(hrtimer, clock, mode) do { \ CTASSERT((clock) == CLOCK_MONOTONIC); \ CTASSERT((mode) == HRTIMER_MODE_REL); \ linux_hrtimer_init(hrtimer); \ } while (0) +#endif + +#define hrtimer_setup(hrtimer, restart, clock, mode) do { \ + CTASSERT((clock) == CLOCK_MONOTONIC); \ + CTASSERT((mode) == HRTIMER_MODE_REL); \ + linuxkpi_hrtimer_setup(hrtimer, restart); \ +} while (0) #define hrtimer_set_expires(hrtimer, time) \ linux_hrtimer_set_expires(hrtimer, time) @@ -81,10 +90,20 @@ struct hrtimer { bool linux_hrtimer_active(struct hrtimer *); int linux_hrtimer_try_to_cancel(struct hrtimer *); int linux_hrtimer_cancel(struct hrtimer *); +/* + * The corresponding `hrtimer_init()` was dropped in Linux 6.15, thus the "#if + * LINUXKPI_VERSION < 61500" above. We keep this prototype here though because + * the underlying `linux_hrtimer_init()` is used by `linuxkpi_hrtimer_setup()`. + */ void linux_hrtimer_init(struct hrtimer *); +void linuxkpi_hrtimer_setup(struct hrtimer *hrtimer, + enum hrtimer_restart (*function)(struct hrtimer *)); void linux_hrtimer_set_expires(struct hrtimer *, ktime_t); void linux_hrtimer_start(struct hrtimer *, ktime_t); void linux_hrtimer_start_range_ns(struct hrtimer *, ktime_t, int64_t); void linux_hrtimer_forward_now(struct hrtimer *, ktime_t); +enum hrtimer_restart linuxkpi_hrtimer_dummy_timeout(struct hrtimer *unused); +#define hrtimer_dummy_timeout(hrtimer) linuxkpi_hrtimer_dummy_timeout(hrtimer) + #endif /* _LINUXKPI_LINUX_HRTIMER_H_ */ diff --git a/sys/compat/linuxkpi/common/src/linux_hrtimer.c b/sys/compat/linuxkpi/common/src/linux_hrtimer.c index dca5d5cf709b..bbd99dec2d83 100644 --- a/sys/compat/linuxkpi/common/src/linux_hrtimer.c +++ b/sys/compat/linuxkpi/common/src/linux_hrtimer.c @@ -105,6 +105,23 @@ linux_hrtimer_init(struct hrtimer *hrtimer) callout_init_mtx(&hrtimer->callout, &hrtimer->mtx, 0); } +enum hrtimer_restart +linuxkpi_hrtimer_dummy_timeout(struct hrtimer *unused __unused) +{ + return (HRTIMER_NORESTART); +} + +void +linuxkpi_hrtimer_setup(struct hrtimer *hrtimer, + enum hrtimer_restart (*function)(struct hrtimer *)) +{ + linux_hrtimer_init(hrtimer); + if (function != NULL) + hrtimer->function = function; + else + hrtimer->function = linuxkpi_hrtimer_dummy_timeout; +} + void linux_hrtimer_set_expires(struct hrtimer *hrtimer, ktime_t time) {
