diff options
| author | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2011-01-14 12:47:26 -0500 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2011-01-21 11:38:19 -0500 |
| commit | db6b175fa6ad1408cbb2fb62949a6d55cfece03e (patch) | |
| tree | f24a18a63b7f7bab192d30c0b1e8500cb75a38b5 | |
| parent | 1daeddd5962acad1bea55e524fc0fadf32654a21 (diff) | |
acpi_pm: Clear pmtmr_ioport if acpi_pm initialization fails
If the acpi pm timer throws invalid data, clear pmtmr_ioport
so the pm timer won't accidentally be used.
This was found when using Xen where there is a acpi pm reported,
but gives bogus values, and other code was continuing to try
to use the pm timer after the initialization failed.
[jstultz: Catch additional failure and reword changelog message. ]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: John Stultz <johnstul@us.ibm.com>
LKML-Reference: <1295027246-11110-1-git-send-email-johnstul@us.ibm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
| -rw-r--r-- | drivers/clocksource/acpi_pm.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index cfb0f5278415..effe7974aa9a 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c | |||
| @@ -202,17 +202,21 @@ static int __init init_acpi_pm_clocksource(void) | |||
| 202 | printk(KERN_INFO "PM-Timer had inconsistent results:" | 202 | printk(KERN_INFO "PM-Timer had inconsistent results:" |
| 203 | " 0x%#llx, 0x%#llx - aborting.\n", | 203 | " 0x%#llx, 0x%#llx - aborting.\n", |
| 204 | value1, value2); | 204 | value1, value2); |
| 205 | pmtmr_ioport = 0; | ||
| 205 | return -EINVAL; | 206 | return -EINVAL; |
| 206 | } | 207 | } |
| 207 | if (i == ACPI_PM_READ_CHECKS) { | 208 | if (i == ACPI_PM_READ_CHECKS) { |
| 208 | printk(KERN_INFO "PM-Timer failed consistency check " | 209 | printk(KERN_INFO "PM-Timer failed consistency check " |
| 209 | " (0x%#llx) - aborting.\n", value1); | 210 | " (0x%#llx) - aborting.\n", value1); |
| 211 | pmtmr_ioport = 0; | ||
| 210 | return -ENODEV; | 212 | return -ENODEV; |
| 211 | } | 213 | } |
| 212 | } | 214 | } |
| 213 | 215 | ||
| 214 | if (verify_pmtmr_rate() != 0) | 216 | if (verify_pmtmr_rate() != 0){ |
| 217 | pmtmr_ioport = 0; | ||
| 215 | return -ENODEV; | 218 | return -ENODEV; |
| 219 | } | ||
| 216 | 220 | ||
| 217 | return clocksource_register_hz(&clocksource_acpi_pm, | 221 | return clocksource_register_hz(&clocksource_acpi_pm, |
| 218 | PMTMR_TICKS_PER_SEC); | 222 | PMTMR_TICKS_PER_SEC); |
