diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-04-20 13:10:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-04-20 13:10:49 -0400 |
commit | e899cc3b3d9813f795c039c0f3c689861d6836da (patch) | |
tree | 20970763d41cf257cd1c6f0ca92ad516ba928286 /kernel | |
parent | b25c69b9d5e41159b54ad7cb33f7d9ead8523d33 (diff) | |
parent | 3f2552f7e9c5abef2775c53f7af66532f8bf65bc (diff) |
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Ingo Molnar:
"Misc clocksource driver fixes, and a sched-clock wrapping fix"
* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
timers/sched_clock: Prevent generic sched_clock wrap caused by tick_freeze()
clocksource/drivers/timer-ti-dm: Remove omap_dm_timer_set_load_start
clocksource/drivers/oxnas: Fix OX820 compatible
clocksource/drivers/arm_arch_timer: Remove unneeded pr_fmt macro
clocksource/drivers/npcm: select TIMER_OF
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/time/sched_clock.c | 4 | ||||
-rw-r--r-- | kernel/time/tick-common.c | 2 | ||||
-rw-r--r-- | kernel/time/timekeeping.h | 7 |
3 files changed, 11 insertions, 2 deletions
diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c index 094b82ca95e5..930113b9799a 100644 --- a/kernel/time/sched_clock.c +++ b/kernel/time/sched_clock.c | |||
@@ -272,7 +272,7 @@ static u64 notrace suspended_sched_clock_read(void) | |||
272 | return cd.read_data[seq & 1].epoch_cyc; | 272 | return cd.read_data[seq & 1].epoch_cyc; |
273 | } | 273 | } |
274 | 274 | ||
275 | static int sched_clock_suspend(void) | 275 | int sched_clock_suspend(void) |
276 | { | 276 | { |
277 | struct clock_read_data *rd = &cd.read_data[0]; | 277 | struct clock_read_data *rd = &cd.read_data[0]; |
278 | 278 | ||
@@ -283,7 +283,7 @@ static int sched_clock_suspend(void) | |||
283 | return 0; | 283 | return 0; |
284 | } | 284 | } |
285 | 285 | ||
286 | static void sched_clock_resume(void) | 286 | void sched_clock_resume(void) |
287 | { | 287 | { |
288 | struct clock_read_data *rd = &cd.read_data[0]; | 288 | struct clock_read_data *rd = &cd.read_data[0]; |
289 | 289 | ||
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c index 529143b4c8d2..df401463a191 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c | |||
@@ -487,6 +487,7 @@ void tick_freeze(void) | |||
487 | trace_suspend_resume(TPS("timekeeping_freeze"), | 487 | trace_suspend_resume(TPS("timekeeping_freeze"), |
488 | smp_processor_id(), true); | 488 | smp_processor_id(), true); |
489 | system_state = SYSTEM_SUSPEND; | 489 | system_state = SYSTEM_SUSPEND; |
490 | sched_clock_suspend(); | ||
490 | timekeeping_suspend(); | 491 | timekeeping_suspend(); |
491 | } else { | 492 | } else { |
492 | tick_suspend_local(); | 493 | tick_suspend_local(); |
@@ -510,6 +511,7 @@ void tick_unfreeze(void) | |||
510 | 511 | ||
511 | if (tick_freeze_depth == num_online_cpus()) { | 512 | if (tick_freeze_depth == num_online_cpus()) { |
512 | timekeeping_resume(); | 513 | timekeeping_resume(); |
514 | sched_clock_resume(); | ||
513 | system_state = SYSTEM_RUNNING; | 515 | system_state = SYSTEM_RUNNING; |
514 | trace_suspend_resume(TPS("timekeeping_freeze"), | 516 | trace_suspend_resume(TPS("timekeeping_freeze"), |
515 | smp_processor_id(), false); | 517 | smp_processor_id(), false); |
diff --git a/kernel/time/timekeeping.h b/kernel/time/timekeeping.h index 7a9b4eb7a1d5..141ab3ab0354 100644 --- a/kernel/time/timekeeping.h +++ b/kernel/time/timekeeping.h | |||
@@ -14,6 +14,13 @@ extern u64 timekeeping_max_deferment(void); | |||
14 | extern void timekeeping_warp_clock(void); | 14 | extern void timekeeping_warp_clock(void); |
15 | extern int timekeeping_suspend(void); | 15 | extern int timekeeping_suspend(void); |
16 | extern void timekeeping_resume(void); | 16 | extern void timekeeping_resume(void); |
17 | #ifdef CONFIG_GENERIC_SCHED_CLOCK | ||
18 | extern int sched_clock_suspend(void); | ||
19 | extern void sched_clock_resume(void); | ||
20 | #else | ||
21 | static inline int sched_clock_suspend(void) { return 0; } | ||
22 | static inline void sched_clock_resume(void) { } | ||
23 | #endif | ||
17 | 24 | ||
18 | extern void do_timer(unsigned long ticks); | 25 | extern void do_timer(unsigned long ticks); |
19 | extern void update_wall_time(void); | 26 | extern void update_wall_time(void); |