Skip to content

Commit

Permalink
clocksource, acpi_pm.c: fix check for monotonicity
Browse files Browse the repository at this point in the history
Actually check the monotonicity of the ACPI PMTMR ten times, only delay for
0.9 miliseconds at most, and bail out early if some problem is determined.

Reported-by: Jochen Voß <jochen.voss@googlemail.com>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Dominik Brodowski authored and Ingo Molnar committed Sep 11, 2008
1 parent 6ef6216 commit f1926ce
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions drivers/clocksource/acpi_pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,11 +178,13 @@ static int verify_pmtmr_rate(void)

/* Number of monotonicity checks to perform during initialization */
#define ACPI_PM_MONOTONICITY_CHECKS 10
/* Number of reads we try to get two different values */
#define ACPI_PM_READ_CHECKS 10000

static int __init init_acpi_pm_clocksource(void)
{
cycle_t value1, value2;
unsigned int i, j, good = 0;
unsigned int i, j = 0;

if (!pmtmr_ioport)
return -ENODEV;
Expand All @@ -192,29 +194,26 @@ static int __init init_acpi_pm_clocksource(void)

/* "verify" this timing source: */
for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) {
udelay(100 * j);
value1 = clocksource_acpi_pm.read();
for (i = 0; i < 10000; i++) {
for (i = 0; i < ACPI_PM_READ_CHECKS; 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;
if (i == ACPI_PM_READ_CHECKS) {
printk(KERN_INFO "PM-Timer failed consistency check "
" (0x%#llx) - aborting.\n", value1);
return -ENODEV;
}
}

if (verify_pmtmr_rate() != 0)
Expand Down

0 comments on commit f1926ce

Please sign in to comment.