Commit d5a3d32a authored by Venkatesh Pallipadi's avatar Venkatesh Pallipadi Committed by Len Brown

ACPI: fix 2.6.20 SMP boot regression

Always disable/enable interrupts in the acpi idle routine,
even in the error path.

This is required as the 2.6.20 change in git commit d331e739...
"Fix interrupt race in idle callback" expects the idle handler
to enable interrupt before returning.

There was a case in acpi idle routine, in which interrupt was not being
enabled before return, which caused the system to hang at bootup, while
enabling C-states on an SMP system.

The signature of the hang was that "processor.nocst"
was required to enable boot.
Signed-off-by: default avatarVenkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 83dd4504
...@@ -332,16 +332,18 @@ static void acpi_processor_idle(void) ...@@ -332,16 +332,18 @@ static void acpi_processor_idle(void)
int sleep_ticks = 0; int sleep_ticks = 0;
u32 t1, t2 = 0; u32 t1, t2 = 0;
pr = processors[smp_processor_id()];
if (!pr)
return;
/* /*
* Interrupts must be disabled during bus mastering calculations and * Interrupts must be disabled during bus mastering calculations and
* for C2/C3 transitions. * for C2/C3 transitions.
*/ */
local_irq_disable(); local_irq_disable();
pr = processors[smp_processor_id()];
if (!pr) {
local_irq_enable();
return;
}
/* /*
* Check whether we truly need to go idle, or should * Check whether we truly need to go idle, or should
* reschedule: * reschedule:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment