android_kernel_motorola_sm6375/kernel/time
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Peter Hilber be26970980 timekeeping: Fix cross-timestamp interpolation for non-x86
[ Upstream commit 14274d0bd31b4debf28284604589f596ad2e99f2 ]

So far, get_device_system_crosststamp() unconditionally passes
system_counterval.cycles to timekeeping_cycles_to_ns(). But when
interpolating system time (do_interp == true), system_counterval.cycles is
before tkr_mono.cycle_last, contrary to the timekeeping_cycles_to_ns()
expectations.

On x86, CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE will mitigate on
interpolating, setting delta to 0. With delta == 0, xtstamp->sys_monoraw
and xtstamp->sys_realtime are then set to the last update time, as
implicitly expected by adjust_historical_crosststamp(). On other
architectures, the resulting nonsense xtstamp->sys_monoraw and
xtstamp->sys_realtime corrupt the xtstamp (ts) adjustment in
adjust_historical_crosststamp().

Fix this by deriving xtstamp->sys_monoraw and xtstamp->sys_realtime from
the last update time when interpolating, by using the local variable
"cycles". The local variable already has the right value when
interpolating, unlike system_counterval.cycles.

Fixes: 2c756feb18 ("time: Add history to cross timestamp interface supporting slower devices")
Signed-off-by: Peter Hilber <peter.hilber@opensynergy.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: John Stultz <jstultz@google.com>
Link: https://lore.kernel.org/r/20231218073849.35294-4-peter.hilber@opensynergy.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:22:14 -04:00
..
alarmtimer.c alarmtimer: Prevent starvation by small intervals and SIG_IGN 2023-02-25 11:53:26 +01:00
clockevents.c
clocksource.c
hrtimer.c hrtimer: Report offline hrtimer enqueue 2024-02-23 08:25:08 +01:00
itimer.c
jiffies.c timekeeping: Split jiffies seqlock 2023-05-17 11:35:39 +02:00
Kconfig
Makefile
ntp.c
ntp_internal.h
posix-clock.c
posix-cpu-timers.c
posix-stubs.c timers: Prevent union confusion from unexpected restart_syscall() 2023-03-11 16:43:54 +01:00
posix-timers.c posix-timers: Ensure timer ID search-loop limit is valid 2023-07-27 08:37:42 +02:00
posix-timers.h
sched_clock.c
test_udelay.c
tick-broadcast-hrtimer.c
tick-broadcast.c tick: Get rid of tick_period 2023-05-17 11:35:40 +02:00
tick-common.c tick/common: Align tick period during sched_timer setup 2023-06-28 10:18:36 +02:00
tick-internal.h tick: Get rid of tick_period 2023-05-17 11:35:40 +02:00
tick-oneshot.c
tick-sched.c tick/sched: Preserve number of idle sleeps across CPU hotplug events 2024-02-23 08:24:53 +01:00
tick-sched.h
time.c
timeconst.bc
timeconv.c
timecounter.c
timekeeping.c timekeeping: Fix cross-timestamp interpolation for non-x86 2024-03-26 18:22:14 -04:00
timekeeping.h timekeeping: Split jiffies seqlock 2023-05-17 11:35:39 +02:00
timekeeping_debug.c
timekeeping_internal.h
timer.c
timer_list.c
vsyscall.c