ARM: 7486/1: sched_clock: update epoch_cyc on resume
authorColin Cross <ccross@android.com>
Tue, 7 Aug 2012 18:05:10 +0000 (19:05 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 11 Aug 2012 08:15:58 +0000 (09:15 +0100)
commit237ec6f2e51d2fc2ff37c7c5f1ccc9264d09c85b
tree17a21e6c00129a703d906166f0e640089e3af6b7
parentf1898f6be9a2e3690fb62d8307849b86a89cc36c
ARM: 7486/1: sched_clock: update epoch_cyc on resume

Many clocks that are used to provide sched_clock will reset during
suspend.  If read_sched_clock returns 0 after suspend, sched_clock will
appear to jump forward.  This patch resets cd.epoch_cyc to the current
value of read_sched_clock during resume, which causes sched_clock() just
after suspend to return the same value as sched_clock() just before
suspend.

In addition, during the window where epoch_ns has been updated before
suspend, but epoch_cyc has not been updated after suspend, it is unknown
whether the clock has reset or not, and sched_clock() could return a
bogus value.  Add a suspended flag, and return the pre-suspend epoch_ns
value during this period.

The new behavior is triggered by calling setup_sched_clock_needs_suspend
instead of setup_sched_clock.

Signed-off-by: Colin Cross <ccross@android.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/include/asm/sched_clock.h
arch/arm/kernel/sched_clock.c