From 8fd1aace1558d4bc7feba3fd04a1f39fee52095a Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Tue, 26 Sep 2006 10:52:37 +0200 Subject: [PATCH] --- yaml --- r: 35911 b: refs/heads/master c: 34464a5b8937b79801776dfb6970c1b949fed4be h: refs/heads/master i: 35909: 1afccd80d914d4808a8e723eb352c515869a73d5 35907: 5d23cd252bfc8ce3d6399a3a31ce1faf01303094 35903: 15f78d3612810c9694eebab15bbbecfe013bafa9 v: v3 --- [refs] | 2 +- trunk/arch/x86_64/kernel/time.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index cbea6611d3bc..b6697baa4107 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a549b86dd0f3cbffcd5f9343f4ae7fcd59f7e756 +refs/heads/master: 34464a5b8937b79801776dfb6970c1b949fed4be diff --git a/trunk/arch/x86_64/kernel/time.c b/trunk/arch/x86_64/kernel/time.c index 97115e608ed8..9dd15d12b659 100644 --- a/trunk/arch/x86_64/kernel/time.c +++ b/trunk/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