timekeeping: Add minimal posix-timers support for auxiliary clocks

Provide clock_getres(2) and clock_gettime(2) for auxiliary clocks.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: John Stultz <jstultz@google.com>
Link: https://lore.kernel.org/all/20250625183757.932220594@linutronix.de
This commit is contained in:
Thomas Gleixner 2025-06-25 20:38:32 +02:00
parent 05bc6e6290
commit 606424bf4f
3 changed files with 25 additions and 0 deletions

View File

@ -1526,6 +1526,9 @@ static const struct k_clock * const posix_clocks[] = {
[CLOCK_REALTIME_ALARM] = &alarm_clock,
[CLOCK_BOOTTIME_ALARM] = &alarm_clock,
[CLOCK_TAI] = &clock_tai,
#ifdef CONFIG_POSIX_AUX_CLOCKS
[CLOCK_AUX ... CLOCK_AUX_LAST] = &clock_aux,
#endif
};
static const struct k_clock *clockid_to_kclock(const clockid_t id)

View File

@ -41,6 +41,7 @@ extern const struct k_clock clock_posix_dynamic;
extern const struct k_clock clock_process;
extern const struct k_clock clock_thread;
extern const struct k_clock alarm_clock;
extern const struct k_clock clock_aux;
void posix_timer_queue_signal(struct k_itimer *timr);

View File

@ -2655,6 +2655,7 @@ EXPORT_SYMBOL(hardpps);
#endif /* CONFIG_NTP_PPS */
#ifdef CONFIG_POSIX_AUX_CLOCKS
#include "posix-timers.h"
/*
* Bitmap for the activated auxiliary timekeepers to allow lockless quick
@ -2749,6 +2750,26 @@ bool ktime_get_aux_ts64(clockid_t id, struct timespec64 *ts)
}
EXPORT_SYMBOL_GPL(ktime_get_aux_ts64);
static int aux_get_res(clockid_t id, struct timespec64 *tp)
{
if (!clockid_aux_valid(id))
return -ENODEV;
tp->tv_sec = 0;
tp->tv_nsec = 1;
return 0;
}
static int aux_get_timespec(clockid_t id, struct timespec64 *tp)
{
return ktime_get_aux_ts64(id, tp) ? 0 : -ENODEV;
}
const struct k_clock clock_aux = {
.clock_getres = aux_get_res,
.clock_get_timespec = aux_get_timespec,
};
static __init void tk_aux_setup(void)
{
for (int i = TIMEKEEPER_AUX_FIRST; i <= TIMEKEEPER_AUX_LAST; i++)