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)
 {

Reply via email to