|
@@ -1332,9 +1332,15 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr)
|
|
|
if (!pr->flags.power_setup_done)
|
|
|
return -ENODEV;
|
|
|
|
|
|
- /* Fall back to the default idle loop */
|
|
|
- pm_idle = pm_idle_save;
|
|
|
- synchronize_sched(); /* Relies on interrupts forcing exit from idle. */
|
|
|
+ /*
|
|
|
+ * Fall back to the default idle loop, when pm_idle_save had
|
|
|
+ * been initialized.
|
|
|
+ */
|
|
|
+ if (pm_idle_save) {
|
|
|
+ pm_idle = pm_idle_save;
|
|
|
+ /* Relies on interrupts forcing exit from idle. */
|
|
|
+ synchronize_sched();
|
|
|
+ }
|
|
|
|
|
|
pr->flags.power = 0;
|
|
|
result = acpi_processor_get_power_info(pr);
|
|
@@ -1896,7 +1902,8 @@ int acpi_processor_power_exit(struct acpi_processor *pr,
|
|
|
|
|
|
/* Unregister the idle handler when processor #0 is removed. */
|
|
|
if (pr->id == 0) {
|
|
|
- pm_idle = pm_idle_save;
|
|
|
+ if (pm_idle_save)
|
|
|
+ pm_idle = pm_idle_save;
|
|
|
|
|
|
/*
|
|
|
* We are about to unload the current idle thread pm callback
|