diff options
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/processor_idle.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index b7f2963693a7..283c08f5f4d4 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
@@ -1332,9 +1332,15 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr) | |||
1332 | if (!pr->flags.power_setup_done) | 1332 | if (!pr->flags.power_setup_done) |
1333 | return -ENODEV; | 1333 | return -ENODEV; |
1334 | 1334 | ||
1335 | /* Fall back to the default idle loop */ | 1335 | /* |
1336 | pm_idle = pm_idle_save; | 1336 | * Fall back to the default idle loop, when pm_idle_save had |
1337 | synchronize_sched(); /* Relies on interrupts forcing exit from idle. */ | 1337 | * been initialized. |
1338 | */ | ||
1339 | if (pm_idle_save) { | ||
1340 | pm_idle = pm_idle_save; | ||
1341 | /* Relies on interrupts forcing exit from idle. */ | ||
1342 | synchronize_sched(); | ||
1343 | } | ||
1338 | 1344 | ||
1339 | pr->flags.power = 0; | 1345 | pr->flags.power = 0; |
1340 | result = acpi_processor_get_power_info(pr); | 1346 | result = acpi_processor_get_power_info(pr); |
@@ -1896,7 +1902,8 @@ int acpi_processor_power_exit(struct acpi_processor *pr, | |||
1896 | 1902 | ||
1897 | /* Unregister the idle handler when processor #0 is removed. */ | 1903 | /* Unregister the idle handler when processor #0 is removed. */ |
1898 | if (pr->id == 0) { | 1904 | if (pr->id == 0) { |
1899 | pm_idle = pm_idle_save; | 1905 | if (pm_idle_save) |
1906 | pm_idle = pm_idle_save; | ||
1900 | 1907 | ||
1901 | /* | 1908 | /* |
1902 | * We are about to unload the current idle thread pm callback | 1909 | * We are about to unload the current idle thread pm callback |