Skip to content

Commit 02c68ed

Browse files
LiHuiSong1rafaeljw
authored andcommitted
ACPI: processor: idle: Reset power_setup_done flag on initialization failure
The 'power_setup_done' flag is a key indicator used across the ACPI processor driver to determine if cpuidle are properly configured and available for a given CPU. Currently, this flag is set during the early stages of initialization. However, if the subsequent registration of the cpuidle driver in acpi_processor_register_idle_driver() or the per-CPU device registration in acpi_processor_power_init() fails, this flag remains set. This may lead to some issues where other functions in ACPI idle driver use these flags. Fix this by explicitly resetting this flag to 0 in these error paths. Signed-off-by: Huisong Li <lihuisong@huawei.com> Link: https://patch.msgid.link/20260403085343.866440-1-lihuisong@huawei.com Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent 00154ee commit 02c68ed

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

drivers/acpi/processor_idle.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,6 +1379,7 @@ void acpi_processor_register_idle_driver(void)
13791379

13801380
ret = cpuidle_register_driver(&acpi_idle_driver);
13811381
if (ret) {
1382+
pr->flags.power_setup_done = 0;
13821383
pr_debug("register %s failed.\n", acpi_idle_driver.name);
13831384
return;
13841385
}
@@ -1387,7 +1388,16 @@ void acpi_processor_register_idle_driver(void)
13871388

13881389
void acpi_processor_unregister_idle_driver(void)
13891390
{
1391+
struct acpi_processor *pr;
1392+
int cpu;
1393+
13901394
cpuidle_unregister_driver(&acpi_idle_driver);
1395+
for_each_possible_cpu(cpu) {
1396+
pr = per_cpu(processors, cpu);
1397+
if (!pr)
1398+
continue;
1399+
pr->flags.power_setup_done = 0;
1400+
}
13911401
}
13921402

13931403
void acpi_processor_power_init(struct acpi_processor *pr)
@@ -1424,6 +1434,7 @@ void acpi_processor_power_init(struct acpi_processor *pr)
14241434
*/
14251435
if (cpuidle_register_device(dev)) {
14261436
per_cpu(acpi_cpuidle_device, pr->id) = NULL;
1437+
pr->flags.power_setup_done = 0;
14271438
kfree(dev);
14281439
}
14291440
}

0 commit comments

Comments
 (0)