mirror of
https://github.com/torvalds/linux.git
synced 2025-11-30 23:16:01 +07:00
hrtimer: Remove hrtimer_clock_base:: Get_time
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> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/all/20250821-hrtimer-cleanup-get_time-v2-8-3ae822e5bfbd@linutronix.de
This commit is contained in:
committed by
Thomas Gleixner
parent
cdea7cdae2
commit
009eb5da29
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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_MONOTONIC:
|
||||
return ktime_get();
|
||||
case CLOCK_REALTIME:
|
||||
return ktime_get_real();
|
||||
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)
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user