aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/timer.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2007-03-06 02:25:42 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-03-06 12:30:24 -0500
commit6321dd60c76b2e12383bc06046288b15397ed3a0 (patch)
tree4cea63e69ce4f6f5f7f94fc6905063efdde7974e /kernel/timer.c
parentc3442e296517aee733d62fc3fe03211598902c7d (diff)
[PATCH] Save/restore periodic tick information over suspend/resume
The programming of periodic tick devices needs to be saved/restored across suspend/resume - otherwise we might end up with a system coming up that relies on getting a PIT (or HPET) interrupt, while those devices default to 'no interrupts' after powerup. (To confuse things it worked to a certain degree on some systems because the lapic gets initialized as a side-effect of SMP bootup.) This suspend / resume thing was dropped unintentionally during the last-minute -mm code reshuffling. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/timer.c')
-rw-r--r--kernel/timer.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/timer.c b/kernel/timer.c
index 8ad384253ef2..ee0a2da4aab3 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -997,6 +997,9 @@ static int timekeeping_resume(struct sys_device *dev)
997 write_sequnlock_irqrestore(&xtime_lock, flags); 997 write_sequnlock_irqrestore(&xtime_lock, flags);
998 998
999 touch_softlockup_watchdog(); 999 touch_softlockup_watchdog();
1000
1001 clockevents_notify(CLOCK_EVT_NOTIFY_RESUME, NULL);
1002
1000 /* Resume hrtimers */ 1003 /* Resume hrtimers */
1001 clock_was_set(); 1004 clock_was_set();
1002 1005
@@ -1011,6 +1014,9 @@ static int timekeeping_suspend(struct sys_device *dev, pm_message_t state)
1011 timekeeping_suspended = 1; 1014 timekeeping_suspended = 1;
1012 timekeeping_suspend_time = read_persistent_clock(); 1015 timekeeping_suspend_time = read_persistent_clock();
1013 write_sequnlock_irqrestore(&xtime_lock, flags); 1016 write_sequnlock_irqrestore(&xtime_lock, flags);
1017
1018 clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
1019
1014 return 0; 1020 return 0;
1015} 1021}
1016 1022