cpuidle acpi driver: fix oops on AC<->DC
commitdcb84f335bee9c9a7781cfc5d74492dccaf066d2
authorVenkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Mon, 19 May 2008 23:09:27 +0000 (19 19:09 -0400)
committerLen Brown <len.brown@intel.com>
Wed, 11 Jun 2008 23:13:45 +0000 (11 19:13 -0400)
treee24d4ca7df49b2a87862aa69c09d21ad45a024b7
parente1094bfa26e5e94af2fea79e004614dbce42b008
cpuidle acpi driver: fix oops on AC<->DC

cpuidle and acpi driver interaction bug with the way cpuidle_register_driver()
is called. Due to this bug, there will be oops on
AC<->DC on some systems, where they support C-states in one DC and not in AC.

The current code does
ON BOOT:
Look at CST and other C-state info to see whether more than C1 is
supported. If it is, then acpi processor_idle does a
cpuidle_register_driver() call, which internally enables the device.

ON CST change notification (AC<->DC) and on suspend-resume:
acpi driver temporarily disables device, updates the device with
any new C-states, and reenables the device.

The problem is is on boot, there are no C2, C3 states supported and we skip
the register. Later on AC<->DC, we may get a CST notification and we try
to reevaluate CST and enabled the device, without actually registering it.
This causes breakage as we try to create /sys fs sub directory, without the
parent directory which is created at register time.

Thanks to Sanjeev for reporting the problem here.
http://bugzilla.kernel.org/show_bug.cgi?id=10394

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/processor_idle.c
drivers/cpuidle/cpuidle.c
include/linux/cpuidle.h