mirror of https://github.com/torvalds/linux.git
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:
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);
|
return ktime_to_ns(timer->node.expires);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline ktime_t hrtimer_cb_get_time(const struct hrtimer *timer)
|
ktime_t hrtimer_cb_get_time(const struct hrtimer *timer);
|
||||||
{
|
|
||||||
return timer->base->get_time();
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline ktime_t hrtimer_expires_remaining(const struct hrtimer *timer)
|
static inline ktime_t hrtimer_expires_remaining(const struct hrtimer *timer)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@
|
||||||
* @seq: seqcount around __run_hrtimer
|
* @seq: seqcount around __run_hrtimer
|
||||||
* @running: pointer to the currently running hrtimer
|
* @running: pointer to the currently running hrtimer
|
||||||
* @active: red black tree root node for the active timers
|
* @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
|
* @offset: offset of this clock to the monotonic base
|
||||||
*/
|
*/
|
||||||
struct hrtimer_clock_base {
|
struct hrtimer_clock_base {
|
||||||
|
|
@ -51,7 +50,6 @@ struct hrtimer_clock_base {
|
||||||
seqcount_raw_spinlock_t seq;
|
seqcount_raw_spinlock_t seq;
|
||||||
struct hrtimer *running;
|
struct hrtimer *running;
|
||||||
struct timerqueue_head active;
|
struct timerqueue_head active;
|
||||||
ktime_t (*get_time)(void);
|
|
||||||
ktime_t offset;
|
ktime_t offset;
|
||||||
} __hrtimer_clock_base_align;
|
} __hrtimer_clock_base_align;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@
|
||||||
#define HRTIMER_ACTIVE_ALL (HRTIMER_ACTIVE_SOFT | HRTIMER_ACTIVE_HARD)
|
#define HRTIMER_ACTIVE_ALL (HRTIMER_ACTIVE_SOFT | HRTIMER_ACTIVE_HARD)
|
||||||
|
|
||||||
static void retrigger_next_event(void *arg);
|
static void retrigger_next_event(void *arg);
|
||||||
|
static ktime_t __hrtimer_cb_get_time(clockid_t clock_id);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The timer bases:
|
* The timer bases:
|
||||||
|
|
@ -76,42 +77,34 @@ DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) =
|
||||||
{
|
{
|
||||||
.index = HRTIMER_BASE_MONOTONIC,
|
.index = HRTIMER_BASE_MONOTONIC,
|
||||||
.clockid = CLOCK_MONOTONIC,
|
.clockid = CLOCK_MONOTONIC,
|
||||||
.get_time = &ktime_get,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.index = HRTIMER_BASE_REALTIME,
|
.index = HRTIMER_BASE_REALTIME,
|
||||||
.clockid = CLOCK_REALTIME,
|
.clockid = CLOCK_REALTIME,
|
||||||
.get_time = &ktime_get_real,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.index = HRTIMER_BASE_BOOTTIME,
|
.index = HRTIMER_BASE_BOOTTIME,
|
||||||
.clockid = CLOCK_BOOTTIME,
|
.clockid = CLOCK_BOOTTIME,
|
||||||
.get_time = &ktime_get_boottime,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.index = HRTIMER_BASE_TAI,
|
.index = HRTIMER_BASE_TAI,
|
||||||
.clockid = CLOCK_TAI,
|
.clockid = CLOCK_TAI,
|
||||||
.get_time = &ktime_get_clocktai,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.index = HRTIMER_BASE_MONOTONIC_SOFT,
|
.index = HRTIMER_BASE_MONOTONIC_SOFT,
|
||||||
.clockid = CLOCK_MONOTONIC,
|
.clockid = CLOCK_MONOTONIC,
|
||||||
.get_time = &ktime_get,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.index = HRTIMER_BASE_REALTIME_SOFT,
|
.index = HRTIMER_BASE_REALTIME_SOFT,
|
||||||
.clockid = CLOCK_REALTIME,
|
.clockid = CLOCK_REALTIME,
|
||||||
.get_time = &ktime_get_real,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.index = HRTIMER_BASE_BOOTTIME_SOFT,
|
.index = HRTIMER_BASE_BOOTTIME_SOFT,
|
||||||
.clockid = CLOCK_BOOTTIME,
|
.clockid = CLOCK_BOOTTIME,
|
||||||
.get_time = &ktime_get_boottime,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.index = HRTIMER_BASE_TAI_SOFT,
|
.index = HRTIMER_BASE_TAI_SOFT,
|
||||||
.clockid = CLOCK_TAI,
|
.clockid = CLOCK_TAI,
|
||||||
.get_time = &ktime_get_clocktai,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.csd = CSD_INIT(retrigger_next_event, NULL)
|
.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);
|
remove_hrtimer(timer, base, true, force_local);
|
||||||
|
|
||||||
if (mode & HRTIMER_MODE_REL)
|
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);
|
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,
|
static void __hrtimer_setup(struct hrtimer *timer,
|
||||||
enum hrtimer_restart (*function)(struct hrtimer *),
|
enum hrtimer_restart (*function)(struct hrtimer *),
|
||||||
clockid_t clock_id, enum hrtimer_mode mode)
|
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, " .index: %d\n", base->index);
|
||||||
|
|
||||||
SEQ_printf(m, " .resolution: %u nsecs\n", hrtimer_resolution);
|
SEQ_printf(m, " .resolution: %u nsecs\n", hrtimer_resolution);
|
||||||
|
|
||||||
SEQ_printf(m, " .get_time: %ps\n", base->get_time);
|
|
||||||
#ifdef CONFIG_HIGH_RES_TIMERS
|
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||||
SEQ_printf(m, " .offset: %Lu nsecs\n",
|
SEQ_printf(m, " .offset: %Lu nsecs\n",
|
||||||
(unsigned long long) ktime_to_ns(base->offset));
|
(unsigned long long) ktime_to_ns(base->offset));
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,6 @@ def print_base(base):
|
||||||
text += " .index: {}\n".format(base['index'])
|
text += " .index: {}\n".format(base['index'])
|
||||||
|
|
||||||
text += " .resolution: {} nsecs\n".format(constants.LX_hrtimer_resolution)
|
text += " .resolution: {} nsecs\n".format(constants.LX_hrtimer_resolution)
|
||||||
|
|
||||||
text += " .get_time: {}\n".format(base['get_time'])
|
|
||||||
if constants.LX_CONFIG_HIGH_RES_TIMERS:
|
if constants.LX_CONFIG_HIGH_RES_TIMERS:
|
||||||
text += " .offset: {} nsecs\n".format(base['offset'])
|
text += " .offset: {} nsecs\n".format(base['offset'])
|
||||||
text += "active timers:\n"
|
text += "active timers:\n"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue