Merge ssh://master.kernel.org/pub/scm/linux/kernel/git/tglx/linux-2.6-x86
[linux-2.6.git] / drivers / acpi / processor_core.c
index fd48110..235a51e 100644 (file)
@@ -44,6 +44,7 @@
 #include <linux/seq_file.h>
 #include <linux/dmi.h>
 #include <linux/moduleparam.h>
+#include <linux/cpuidle.h>
 
 #include <asm/io.h>
 #include <asm/system.h>
@@ -1043,11 +1044,13 @@ static int __init acpi_processor_init(void)
                return -ENOMEM;
        acpi_processor_dir->owner = THIS_MODULE;
 
+       result = cpuidle_register_driver(&acpi_idle_driver);
+       if (result < 0)
+               goto out_proc;
+
        result = acpi_bus_register_driver(&acpi_processor_driver);
-       if (result < 0) {
-               remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir);
-               return result;
-       }
+       if (result < 0)
+               goto out_cpuidle;
 
        acpi_processor_install_hotplug_notify();
 
@@ -1056,11 +1059,18 @@ static int __init acpi_processor_init(void)
        acpi_processor_ppc_init();
 
        return 0;
+
+out_cpuidle:
+       cpuidle_unregister_driver(&acpi_idle_driver);
+
+out_proc:
+       remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir);
+
+       return result;
 }
 
 static void __exit acpi_processor_exit(void)
 {
-
        acpi_processor_ppc_exit();
 
        acpi_thermal_cpufreq_exit();
@@ -1069,6 +1079,8 @@ static void __exit acpi_processor_exit(void)
 
        acpi_bus_unregister_driver(&acpi_processor_driver);
 
+       cpuidle_unregister_driver(&acpi_idle_driver);
+
        remove_proc_entry(ACPI_PROCESSOR_CLASS, acpi_root_dir);
 
        return;