• Colin Cross's avatar
    ARM: 7486/1: sched_clock: update epoch_cyc on resume · 237ec6f2
    Colin Cross authored
    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: default avatarColin Cross <ccross@android.com>
    Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    237ec6f2
sched_clock.c 4.79 KB