]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Revert "ACPI: processor: idle: Redefine two functions as void"
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 25 Nov 2025 13:53:33 +0000 (14:53 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 25 Nov 2025 13:53:33 +0000 (14:53 +0100)
Revert commit fbd401e95e56 ("ACPI: processor: idle: Redefine two
functions as void") because it depends on a problematic one.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/processor_idle.c
include/acpi/processor.h

index 698d14c1958737a34e56eb9d9245ae98fa78a283..5dacf41d7cc0a0f8585936a01676ef56305b9300 100644 (file)
@@ -1400,45 +1400,47 @@ void acpi_processor_unregister_idle_driver(void)
        cpuidle_unregister_driver(&acpi_idle_driver);
 }
 
-void acpi_processor_power_init(struct acpi_processor *pr)
+int acpi_processor_power_init(struct acpi_processor *pr)
 {
+       int retval;
        struct cpuidle_device *dev;
 
        if (disabled_by_idle_boot_param())
-               return;
+               return 0;
 
        acpi_processor_cstate_first_run_checks();
 
        if (!acpi_processor_get_power_info(pr))
                pr->flags.power_setup_done = 1;
 
-       if (!pr->flags.power)
-               return;
-
-       dev = kzalloc(sizeof(*dev), GFP_KERNEL);
-       if (!dev)
-               return;
+       if (pr->flags.power) {
+               dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+               if (!dev)
+                       return -ENOMEM;
+               per_cpu(acpi_cpuidle_device, pr->id) = dev;
 
-       per_cpu(acpi_cpuidle_device, pr->id) = dev;
+               acpi_processor_setup_cpuidle_dev(pr, dev);
 
-       acpi_processor_setup_cpuidle_dev(pr, dev);
+               /* Register per-cpu cpuidle_device. Cpuidle driver
+                * must already be registered before registering device
+                */
+               retval = cpuidle_register_device(dev);
+               if (retval) {
 
-       /*
-        * Register a cpuidle device for this CPU.  The cpuidle driver using
-        * this device is expected to be registered.
-        */
-       if (cpuidle_register_device(dev)) {
-               per_cpu(acpi_cpuidle_device, pr->id) = NULL;
-               kfree(dev);
+                       per_cpu(acpi_cpuidle_device, pr->id) = NULL;
+                       kfree(dev);
+                       return retval;
+               }
        }
+       return 0;
 }
 
-void acpi_processor_power_exit(struct acpi_processor *pr)
+int acpi_processor_power_exit(struct acpi_processor *pr)
 {
        struct cpuidle_device *dev = per_cpu(acpi_cpuidle_device, pr->id);
 
        if (disabled_by_idle_boot_param())
-               return;
+               return 0;
 
        if (pr->flags.power) {
                cpuidle_unregister_device(dev);
@@ -1446,6 +1448,7 @@ void acpi_processor_power_exit(struct acpi_processor *pr)
        }
 
        pr->flags.power_setup_done = 0;
+       return 0;
 }
 
 MODULE_IMPORT_NS("ACPI_PROCESSOR_IDLE");
index 24fdaa3c28992e547f2e67b16d98f8441e07540e..6ee4a69412de672aab81ec41aa31441c0201d2ed 100644 (file)
@@ -419,8 +419,8 @@ static inline void acpi_processor_throttling_init(void) {}
 /* in processor_idle.c */
 extern struct cpuidle_driver acpi_idle_driver;
 #ifdef CONFIG_ACPI_PROCESSOR_IDLE
-void acpi_processor_power_init(struct acpi_processor *pr);
-void acpi_processor_power_exit(struct acpi_processor *pr);
+int acpi_processor_power_init(struct acpi_processor *pr);
+int acpi_processor_power_exit(struct acpi_processor *pr);
 int acpi_processor_power_state_has_changed(struct acpi_processor *pr);
 int acpi_processor_hotplug(struct acpi_processor *pr);
 void acpi_processor_register_idle_driver(void);