From: Rafael J. Wysocki Date: Tue, 26 Sep 2006 08:52:37 +0000 (+0200) Subject: [PATCH] Detect clock skew during suspend X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=34464a5b8937b79801776dfb6970c1b949fed4be;p=openwrt%2Fstaging%2Fblogic.git [PATCH] Detect clock skew during suspend Detect the situations in which the time after a resume from disk would be earlier than the time before the suspend and prevent them from happening on x86_64. Signed-off-by: Rafael J. Wysocki Signed-off-by: Andi Kleen --- diff --git a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c index 97115e608ed8..9dd15d12b659 100644 --- a/arch/x86_64/kernel/time.c +++ b/arch/x86_64/kernel/time.c @@ -1039,8 +1039,16 @@ static int timer_resume(struct sys_device *dev) unsigned long flags; unsigned long sec; unsigned long ctime = get_cmos_time(); - unsigned long sleep_length = (ctime - sleep_start) * HZ; + long sleep_length = (ctime - sleep_start) * HZ; + if (sleep_length < 0) { + printk(KERN_WARNING "Time skew detected in timer resume!\n"); + /* The time after the resume must not be earlier than the time + * before the suspend or some nasty things will happen + */ + sleep_length = 0; + ctime = sleep_start; + } if (vxtime.hpet_address) hpet_reenable(); else