aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpuidle/poll_state.c
diff options
context:
space:
mode:
authorVincent Guittot <vincent.guittot@linaro.org>2019-01-30 18:26:02 +0100
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2019-01-30 22:49:06 +0100
commit15efb47dc560849d0c07db96fdad5121f2cf736e (patch)
tree1f0e4af0f13875be99b3aadd3457d32a65e1d408 /drivers/cpuidle/poll_state.c
parentLinux 5.0-rc4 (diff)
downloadlinux-dev-15efb47dc560849d0c07db96fdad5121f2cf736e.tar.xz
linux-dev-15efb47dc560849d0c07db96fdad5121f2cf736e.zip
PM-runtime: Fix deadlock with ktime_get()
A deadlock has been seen when swicthing clocksources which use PM-runtime. The call path is: change_clocksource ... write_seqcount_begin ... timekeeping_update ... sh_cmt_clocksource_enable ... rpm_resume pm_runtime_mark_last_busy ktime_get do read_seqcount_begin while read_seqcount_retry .... write_seqcount_end Although we should be safe because we haven't yet changed the clocksource at that time, we can't do that because of seqcount protection. Use ktime_get_mono_fast_ns() instead which is lock safe for such cases. With ktime_get_mono_fast_ns, the timestamp is not guaranteed to be monotonic across an update and as a result can goes backward. According to update_fast_timekeeper() description: "In the worst case, this can result is a slightly wrong timestamp (a few nanoseconds)". For PM-runtime autosuspend, this means only that the suspend decision may be slightly suboptimal. Fixes: 8234f6734c5d ("PM-runtime: Switch autosuspend over to using hrtimers") Reported-by: Biju Das <biju.das@bp.renesas.com> Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/cpuidle/poll_state.c')
0 files changed, 0 insertions, 0 deletions