| From | Thomas Gleixner <> | Subject | [patch 13/45] posix-cpu-timers: Replace old expiry retrieval in posix_cpu_timer_set() | Date | Tue, 6 Jun 2023 16:37:39 +0200 (CEST) |
| |
Reuse the split out __posix_cpu_timer_get() function which does already the right thing.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- kernel/time/posix-cpu-timers.c | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-)
--- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -609,6 +609,8 @@ static void cpu_timer_fire(struct k_itim } } +static void __posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec64 *itp, u64 now); + /* * Guts of sys_timer_settime for CPU timers. * This is called with the timer locked and interrupts disabled. @@ -680,29 +682,9 @@ static int posix_cpu_timer_set(struct k_ else now = cpu_clock_sample_group(clkid, p, !sigev_none); - if (old) { - if (old_expires == 0) { - old->it_value.tv_sec = 0; - old->it_value.tv_nsec = 0; - } else { - /* - * Update the timer in case it has overrun already. - * If it has, we'll report it as having overrun and - * with the next reloaded timer already ticking, - * though we are swallowing that pending - * notification here to install the new setting. - */ - u64 exp = bump_cpu_timer(timer, now); - - if (now < exp) { - old_expires = exp - now; - old->it_value = ns_to_timespec64(old_expires); - } else { - old->it_value.tv_nsec = 1; - old->it_value.tv_sec = 0; - } - } - } + /* Retrieve the previous expiry value if requested. */ + if (old && old_expires) + __posix_cpu_timer_get(timer, old, now); /* Retry if the timer expiry is running concurrently */ if (unlikely(ret)) {
|