All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dominik Brodowski <linux@dominikbrodowski.net>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Andreas Mohr <andi@lisas.de>,
	linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
	johnstul@us.ibm.com, hirofumi@mail.parknet.co.jp,
	alan@lxorguk.ukuu.org.uk, arjan@infradead.org
Subject: [PATCH v2 2/2] acpi_pm.c: check for monotonicity
Date: Sat, 23 Aug 2008 00:26:04 +0200	[thread overview]
Message-ID: <20080822222604.GA704@isilmar.linta.de> (raw)
In-Reply-To: <20080819025915.c34951b6.akpm@linux-foundation.org>



From: Dominik Brodowski <linux@dominikbrodowski.net>
Date: Fri, 22 Aug 2008 23:51:23 +0200
Subject: [PATCH 2/2] acpi_pm.c: check for monotonicity

The current check for monotonicity is way too weak: Andreas Mohr reports
( http://lkml.org/lkml/2008/8/10/77  ) that on one of his test systems the
current check only triggers in 50% of all cases, leading to catastrophic timer
behaviour. To fix this issue, expand the check for monotonicity by doing ten
consecutive tests instead of one.

CC: John Stultz <johnstul@us.ibm.com>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
---
 drivers/clocksource/acpi_pm.c |   46 +++++++++++++++++++++++++---------------
 1 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c
index 860d033..4eee533 100644
--- a/drivers/clocksource/acpi_pm.c
+++ b/drivers/clocksource/acpi_pm.c
@@ -21,6 +21,7 @@
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/pci.h>
+#include <linux/delay.h>
 #include <asm/io.h>
 
 /*
@@ -175,10 +176,13 @@ static int verify_pmtmr_rate(void)
 #define verify_pmtmr_rate() (0)
 #endif
 
+/* Number of monotonicity checks to perform during initialization */
+#define ACPI_PM_MONOTONICITY_CHECKS 10
+
 static int __init init_acpi_pm_clocksource(void)
 {
 	cycle_t value1, value2;
-	unsigned int i;
+	unsigned int i, j, good = 0;
 
 	if (!pmtmr_ioport)
 		return -ENODEV;
@@ -187,24 +191,32 @@ static int __init init_acpi_pm_clocksource(void)
 						clocksource_acpi_pm.shift);
 
 	/* "verify" this timing source: */
-	value1 = clocksource_acpi_pm.read();
-	for (i = 0; i < 10000; i++) {
-		value2 = clocksource_acpi_pm.read();
-		if (value2 == value1)
-			continue;
-		if (value2 > value1)
-			goto pm_good;
-		if ((value2 < value1) && ((value2) < 0xFFF))
-			goto pm_good;
-		printk(KERN_INFO "PM-Timer had inconsistent results:"
-			" 0x%#llx, 0x%#llx - aborting.\n", value1, value2);
-		return -EINVAL;
+	for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) {
+		value1 = clocksource_acpi_pm.read();
+		for (i = 0; i < 10000; i++) {
+			value2 = clocksource_acpi_pm.read();
+			if (value2 == value1)
+				continue;
+			if (value2 > value1)
+				good++;
+				break;
+			if ((value2 < value1) && ((value2) < 0xFFF))
+				good++;
+				break;
+			printk(KERN_INFO "PM-Timer had inconsistent results:"
+			       " 0x%#llx, 0x%#llx - aborting.\n",
+			       value1, value2);
+			return -EINVAL;
+		}
+		udelay(300 * i);
+	}
+
+	if (good != ACPI_PM_MONOTONICITY_CHECKS) {
+		printk(KERN_INFO "PM-Timer failed consistency check "
+		       " (0x%#llx) - aborting.\n", value1);
+		return -ENODEV;
 	}
-	printk(KERN_INFO "PM-Timer had no reasonable result:"
-			" 0x%#llx - aborting.\n", value1);
-	return -ENODEV;
 
-pm_good:
 	if (verify_pmtmr_rate() != 0)
 		return -ENODEV;
 
-- 
1.5.2.5


  parent reply	other threads:[~2008-08-22 22:26 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-10 10:17 ACPI PM-Timer on K6-3 SiS5591: Houston Andreas Mohr
2008-08-10 16:29 ` Dominik Brodowski
2008-08-10 16:40   ` Arjan van de Ven
2008-08-10 19:08   ` Andreas Mohr
2008-08-10 19:08     ` Andreas Mohr
2008-08-10 20:02     ` Dominik Brodowski
2008-08-18 19:03     ` [git pull?] clocksource: ACPI pmtmr bugfixes [Was: Re: ACPI PM-Timer on K6-3 SiS5591: Houston...] Dominik Brodowski
2008-08-18 19:05       ` [PATCH 1/2] acpi_pm.c: use proper read function also in errata mode Dominik Brodowski
2008-08-18 19:05       ` [PATCH 2/2] acpi_pm.c: check for monotonicity Dominik Brodowski
2008-08-18 19:19       ` [git pull?] clocksource: ACPI pmtmr bugfixes [Was: Re: ACPI PM-Timer on K6-3 SiS5591: Houston...] Andrew Morton
2008-08-18 19:35         ` Dominik Brodowski
2008-08-18 19:47           ` Andrew Morton
2008-08-18 20:09             ` Dominik Brodowski
2008-08-18 20:10               ` [PATCH 1/2] acpi_pm.c: use proper read function also in errata mode Dominik Brodowski
2008-08-18 20:10                 ` Dominik Brodowski
2008-08-19  9:43                 ` Andrew Morton
2008-08-19  9:49                   ` Dominik Brodowski
2008-08-19  9:59                     ` Andrew Morton
2008-08-22 22:22                       ` [PATCH v2 " Dominik Brodowski
2008-08-22 22:26                       ` Dominik Brodowski [this message]
2008-08-23  8:48                         ` [PATCH v2 2/2] acpi_pm.c: check for monotonicity Jochen Voß
2008-08-23  8:48                           ` Jochen Voß
2008-08-18 20:11               ` [PATCH " Dominik Brodowski
2008-08-18 20:11                 ` Dominik Brodowski
2008-08-18 20:18                 ` Andreas Mohr
2008-08-18 20:18                   ` Andreas Mohr
2008-08-18 20:28                   ` Andrew Morton
2008-08-18 20:28                     ` Andrew Morton
2008-08-18 20:42                     ` Dominik Brodowski
2008-08-18 20:25               ` [git pull?] clocksource: ACPI pmtmr bugfixes [Was: Re: ACPI PM-Timer on K6-3 SiS5591: Houston...] Andrew Morton
2008-08-18 20:29                 ` Dominik Brodowski
2008-08-18 20:00           ` Andreas Mohr
2008-08-18 20:00             ` Andreas Mohr

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080822222604.GA704@isilmar.linta.de \
    --to=linux@dominikbrodowski.net \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=andi@lisas.de \
    --cc=arjan@infradead.org \
    --cc=hirofumi@mail.parknet.co.jp \
    --cc=johnstul@us.ibm.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.