• Venkatesh Pallipadi's avatar
    cpuidle acpi driver: fix oops on AC<->DC · dcb84f33
    Venkatesh Pallipadi authored
    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=10394Signed-off-by: default avatarVenkatesh Pallipadi <venkatesh.pallipadi@intel.com>
    Signed-off-by: default avatarLen Brown <len.brown@intel.com>
    dcb84f33
cpuidle.c 8.1 KB