mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/9] hrtimer: Remove hrtimer_clock_base::get_time
@ 2025-08-21 13:28 Thomas Weißschuh
  2025-08-21 13:28 ` [PATCH v2 1/9] posix-timers: Avoid direct access to hrtimer clockbase Thomas Weißschuh
                   ` (8 more replies)
  0 siblings, 9 replies; 20+ messages in thread
From: Thomas Weißschuh @ 2025-08-21 13:28 UTC (permalink / raw)
  To: Anna-Maria Behnsen, Frederic Weisbecker, Thomas Gleixner,
	Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Matt Wu, Andrew Morton, Jaroslav Kysela,
	Takashi Iwai, Sean Young, Mauro Carvalho Chehab, Jan Kiszka,
	Kieran Bingham
  Cc: linux-kernel, linux-sound, linux-media, Thomas Weißschuh,
	Takashi Iwai

The get_time() callbacks always need to match the bases clockid.
Instead of maintaining that association twice in hrtimer_bases,
use a helper.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
Changes in v2:
- Pick up tags from the mailing list
- Reorder switch-case branches to match hrtimer_bases table
- Link to v1: https://lore.kernel.org/r/20250812-hrtimer-cleanup-get_time-v1-0-b962cd9d9385@linutronix.de

---
Thomas Weißschuh (9):
      posix-timers: Avoid direct access to hrtimer clockbase
      timers/itimer: Avoid direct access to hrtimer clockbase
      sched/core: Avoid direct access to hrtimer clockbase
      lib: test_objpool: Avoid direct access to hrtimer clockbase
      ALSA: hrtimer: Avoid direct access to hrtimer clockbase
      media: pwm-ir-tx: Avoid direct access to hrtimer clockbase
      hrtimer: Use hrtimer_cb_get_time() helper
      hrtimer: Remove hrtimer_clock_base::get_time
      hrtimer: Reorder branches in hrtimer_clockid_to_base()

 drivers/media/rc/pwm-ir-tx.c   |  5 +----
 include/linux/hrtimer.h        | 14 +++++---------
 include/linux/hrtimer_defs.h   |  2 --
 kernel/sched/core.c            |  2 +-
 kernel/time/hrtimer.c          | 38 +++++++++++++++++++++++++++-----------
 kernel/time/itimer.c           |  3 +--
 kernel/time/posix-timers.c     |  5 ++---
 kernel/time/timer_list.c       |  2 --
 lib/test_objpool.c             |  2 +-
 scripts/gdb/linux/timerlist.py |  2 --
 sound/core/hrtimer.c           |  2 +-
 11 files changed, 39 insertions(+), 38 deletions(-)
---
base-commit: 8f5ae30d69d7543eee0d70083daf4de8fe15d585
change-id: 20250728-hrtimer-cleanup-get_time-8ac9d797a685

Best regards,
-- 
Thomas Weißschuh <thomas.weissschuh@linutronix.de>


^ permalink raw reply	[flat|nested] 20+ messages in thread
* [PATCH 8/8] hrtimer: Remove hrtimer_clock_base::get_time
@ 2025-08-12  6:08 Thomas Weißschuh
  2025-09-09  8:56 ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh
  0 siblings, 1 reply; 20+ messages in thread
From: Thomas Weißschuh @ 2025-08-12  6:08 UTC (permalink / raw)
  To: Anna-Maria Behnsen, Frederic Weisbecker, Thomas Gleixner,
	Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider, Matt Wu, Andrew Morton, Jaroslav Kysela,
	Takashi Iwai, Sean Young, Mauro Carvalho Chehab, Jan Kiszka,
	Kieran Bingham
  Cc: linux-kernel, linux-sound, linux-media, Thomas Weißschuh

The get_time() callbacks always need to match the bases clockid.
Instead of maintaining that association twice in hrtimer_bases,
use a helper.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
 include/linux/hrtimer.h        |  5 +----
 include/linux/hrtimer_defs.h   |  2 --
 kernel/time/hrtimer.c          | 34 +++++++++++++++++++++++++---------
 kernel/time/timer_list.c       |  2 --
 scripts/gdb/linux/timerlist.py |  2 --
 5 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
index e655502b14e6c4b1a69b67c997132d628bd1470f..2cf1bf65b22578499e7de5417dbda1d34cf12fce 100644
--- a/include/linux/hrtimer.h
+++ b/include/linux/hrtimer.h
@@ -154,10 +154,7 @@ static inline s64 hrtimer_get_expires_ns(const struct hrtimer *timer)
 	return ktime_to_ns(timer->node.expires);
 }
 
-static inline ktime_t hrtimer_cb_get_time(const struct hrtimer *timer)
-{
-	return timer->base->get_time();
-}
+ktime_t hrtimer_cb_get_time(const struct hrtimer *timer);
 
 static inline ktime_t hrtimer_expires_remaining(const struct hrtimer *timer)
 {
diff --git a/include/linux/hrtimer_defs.h b/include/linux/hrtimer_defs.h
index 84a5045f80f36f88cb47bf23a62a4d0afbd1a2c6..aa49ffa130e57f7278a7d9f96a6d86e6630c69de 100644
--- a/include/linux/hrtimer_defs.h
+++ b/include/linux/hrtimer_defs.h
@@ -41,7 +41,6 @@
  * @seq:		seqcount around __run_hrtimer
  * @running:		pointer to the currently running hrtimer
  * @active:		red black tree root node for the active timers
- * @get_time:		function to retrieve the current time of the clock
  * @offset:		offset of this clock to the monotonic base
  */
 struct hrtimer_clock_base {
@@ -51,7 +50,6 @@ struct hrtimer_clock_base {
 	seqcount_raw_spinlock_t	seq;
 	struct hrtimer		*running;
 	struct timerqueue_head	active;
-	ktime_t			(*get_time)(void);
 	ktime_t			offset;
 } __hrtimer_clock_base_align;
 
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index 30899a8cc52c0a9203ce0216fe47f5f19a7bf6ec..4ce754a76ece537570a9a569dbdd95f51b575d78 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -59,6 +59,7 @@
 #define HRTIMER_ACTIVE_ALL	(HRTIMER_ACTIVE_SOFT | HRTIMER_ACTIVE_HARD)
 
 static void retrigger_next_event(void *arg);
+static ktime_t __hrtimer_cb_get_time(clockid_t clock_id);
 
 /*
  * The timer bases:
@@ -76,42 +77,34 @@ DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) =
 		{
 			.index = HRTIMER_BASE_MONOTONIC,
 			.clockid = CLOCK_MONOTONIC,
-			.get_time = &ktime_get,
 		},
 		{
 			.index = HRTIMER_BASE_REALTIME,
 			.clockid = CLOCK_REALTIME,
-			.get_time = &ktime_get_real,
 		},
 		{
 			.index = HRTIMER_BASE_BOOTTIME,
 			.clockid = CLOCK_BOOTTIME,
-			.get_time = &ktime_get_boottime,
 		},
 		{
 			.index = HRTIMER_BASE_TAI,
 			.clockid = CLOCK_TAI,
-			.get_time = &ktime_get_clocktai,
 		},
 		{
 			.index = HRTIMER_BASE_MONOTONIC_SOFT,
 			.clockid = CLOCK_MONOTONIC,
-			.get_time = &ktime_get,
 		},
 		{
 			.index = HRTIMER_BASE_REALTIME_SOFT,
 			.clockid = CLOCK_REALTIME,
-			.get_time = &ktime_get_real,
 		},
 		{
 			.index = HRTIMER_BASE_BOOTTIME_SOFT,
 			.clockid = CLOCK_BOOTTIME,
-			.get_time = &ktime_get_boottime,
 		},
 		{
 			.index = HRTIMER_BASE_TAI_SOFT,
 			.clockid = CLOCK_TAI,
-			.get_time = &ktime_get_clocktai,
 		},
 	},
 	.csd = CSD_INIT(retrigger_next_event, NULL)
@@ -1253,7 +1246,7 @@ static int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
 	remove_hrtimer(timer, base, true, force_local);
 
 	if (mode & HRTIMER_MODE_REL)
-		tim = ktime_add_safe(tim, base->get_time());
+		tim = ktime_add_safe(tim, __hrtimer_cb_get_time(base->clockid));
 
 	tim = hrtimer_update_lowres(timer, tim, mode);
 
@@ -1588,6 +1581,29 @@ static inline int hrtimer_clockid_to_base(clockid_t clock_id)
 	}
 }
 
+static ktime_t __hrtimer_cb_get_time(clockid_t clock_id)
+{
+	switch (clock_id) {
+	case CLOCK_REALTIME:
+		return ktime_get_real();
+	case CLOCK_MONOTONIC:
+		return ktime_get();
+	case CLOCK_BOOTTIME:
+		return ktime_get_boottime();
+	case CLOCK_TAI:
+		return ktime_get_clocktai();
+	default:
+		WARN(1, "Invalid clockid %d. Using MONOTONIC\n", clock_id);
+		return ktime_get();
+	}
+}
+
+ktime_t hrtimer_cb_get_time(const struct hrtimer *timer)
+{
+	return __hrtimer_cb_get_time(timer->base->clockid);
+}
+EXPORT_SYMBOL_GPL(hrtimer_cb_get_time);
+
 static void __hrtimer_setup(struct hrtimer *timer,
 			    enum hrtimer_restart (*function)(struct hrtimer *),
 			    clockid_t clock_id, enum hrtimer_mode mode)
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
index b03d0ada64695058d4c57f3e29d546ba18bff591..488e47e96e93f96a5a18c0f72b8f4df36270943f 100644
--- a/kernel/time/timer_list.c
+++ b/kernel/time/timer_list.c
@@ -102,8 +102,6 @@ print_base(struct seq_file *m, struct hrtimer_clock_base *base, u64 now)
 	SEQ_printf(m, "  .index:      %d\n", base->index);
 
 	SEQ_printf(m, "  .resolution: %u nsecs\n", hrtimer_resolution);
-
-	SEQ_printf(m,   "  .get_time:   %ps\n", base->get_time);
 #ifdef CONFIG_HIGH_RES_TIMERS
 	SEQ_printf(m, "  .offset:     %Lu nsecs\n",
 		   (unsigned long long) ktime_to_ns(base->offset));
diff --git a/scripts/gdb/linux/timerlist.py b/scripts/gdb/linux/timerlist.py
index 98445671fe83897d50187f302f844919729388dc..ccc24d30de8063b28e0a3068416af341f8951876 100644
--- a/scripts/gdb/linux/timerlist.py
+++ b/scripts/gdb/linux/timerlist.py
@@ -56,8 +56,6 @@ def print_base(base):
     text += " .index:      {}\n".format(base['index'])
 
     text += " .resolution: {} nsecs\n".format(constants.LX_hrtimer_resolution)
-
-    text += " .get_time:   {}\n".format(base['get_time'])
     if constants.LX_CONFIG_HIGH_RES_TIMERS:
         text += "  .offset:     {} nsecs\n".format(base['offset'])
     text += "active timers:\n"

-- 
2.50.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2025-09-09 10:31 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-21 13:28 [PATCH v2 0/9] hrtimer: Remove hrtimer_clock_base::get_time Thomas Weißschuh
2025-08-21 13:28 ` [PATCH v2 1/9] posix-timers: Avoid direct access to hrtimer clockbase Thomas Weißschuh
2025-09-09 10:31   ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh
2025-08-21 13:28 ` [PATCH v2 2/9] timers/itimer: " Thomas Weißschuh
2025-09-09 10:31   ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh
2025-08-21 13:28 ` [PATCH v2 3/9] sched/core: " Thomas Weißschuh
2025-09-09 10:31   ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh
2025-08-21 13:28 ` [PATCH v2 4/9] lib: test_objpool: " Thomas Weißschuh
2025-09-09 10:31   ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh
2025-08-21 13:28 ` [PATCH v2 5/9] ALSA: hrtimer: " Thomas Weißschuh
2025-09-09 10:31   ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh
2025-08-21 13:28 ` [PATCH v2 6/9] media: pwm-ir-tx: " Thomas Weißschuh
2025-09-09 10:31   ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh
2025-08-21 13:28 ` [PATCH v2 7/9] hrtimer: Use hrtimer_cb_get_time() helper Thomas Weißschuh
2025-09-09 10:31   ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh
2025-08-21 13:28 ` [PATCH v2 8/9] hrtimer: Remove hrtimer_clock_base::get_time Thomas Weißschuh
2025-09-09 10:31   ` [tip: timers/core] hrtimer: Remove hrtimer_clock_base:: Get_time tip-bot2 for Thomas Weißschuh
2025-08-21 13:28 ` [PATCH v2 9/9] hrtimer: Reorder branches in hrtimer_clockid_to_base() Thomas Weißschuh
2025-09-09 10:30   ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh
  -- strict thread matches above, loose matches on Subject: below --
2025-08-12  6:08 [PATCH 8/8] hrtimer: Remove hrtimer_clock_base::get_time Thomas Weißschuh
2025-09-09  8:56 ` [tip: timers/core] " tip-bot2 for Thomas Weißschuh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®