Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751475AbWHMVLb (ORCPT ); Sun, 13 Aug 2006 17:11:31 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751479AbWHMVLH (ORCPT ); Sun, 13 Aug 2006 17:11:07 -0400 Received: from ogre.sisk.pl ([217.79.144.158]:35222 "EHLO ogre.sisk.pl") by vger.kernel.org with ESMTP id S1751475AbWHMVLD (ORCPT ); Sun, 13 Aug 2006 17:11:03 -0400 From: "Rafael J. Wysocki" To: LKML Subject: [RFC][PATCH -mm 2/2] x86_64: Detect clock skew during suspend Date: Sun, 13 Aug 2006 23:07:40 +0200 User-Agent: KMail/1.9.3 Cc: Andrew Morton , Pavel Machek , Andi Kleen References: <200608132303.00012.rjw@sisk.pl> In-Reply-To: <200608132303.00012.rjw@sisk.pl> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200608132307.40741.rjw@sisk.pl> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1364 Lines: 37 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 --- arch/x86_64/kernel/time.c | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletion(-) Index: linux-2.6.18-rc4-mm1/arch/x86_64/kernel/time.c =================================================================== --- linux-2.6.18-rc4-mm1.orig/arch/x86_64/kernel/time.c +++ linux-2.6.18-rc4-mm1/arch/x86_64/kernel/time.c @@ -1039,8 +1039,16 @@ static int timer_resume(struct sys_devic 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 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/