time: Introduce one suspend clocksource to compensate the suspend time
authorBaolin Wang <baolin.wang@linaro.org>
Tue, 17 Jul 2018 07:55:16 +0000 (15:55 +0800)
committerJohn Stultz <john.stultz@linaro.org>
Fri, 20 Jul 2018 00:08:52 +0000 (17:08 -0700)
commit39232ed5a1793f67b11430c43ed8a9ed6e96c6eb
treedbcd15f6322432bf49f1c0d84fe638ccf7189117
parentf473e5f467f6049370575390b08dc42131315d60
time: Introduce one suspend clocksource to compensate the suspend time

On some hardware with multiple clocksources, we have coarse grained
clocksources that support the CLOCK_SOURCE_SUSPEND_NONSTOP flag, but
which are less than ideal for timekeeping whereas other clocksources
can be better candidates but halt on suspend.

Currently, the timekeeping core only supports timing suspend using
CLOCK_SOURCE_SUSPEND_NONSTOP clocksources if that clocksource is the
current clocksource for timekeeping.

As a result, some architectures try to implement read_persistent_clock64()
using those non-stop clocksources, but isn't really ideal, which will
introduce more duplicate code. To fix this, provide logic to allow a
registered SUSPEND_NONSTOP clocksource, which isn't the current
clocksource, to be used to calculate the suspend time.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Miroslav Lichvar <mlichvar@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Stephen Boyd <sboyd@kernel.org>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
[jstultz: minor tweaks to merge with previous resume changes]
Signed-off-by: John Stultz <john.stultz@linaro.org>
include/linux/clocksource.h
kernel/time/clocksource.c
kernel/time/timekeeping.c