Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ACPI: processor: Reorder acpi_processor_driver_init()

The cpufreq policy notifier in the ACPI processor driver may as
well be registered before the driver itself, which causes
acpi_processor_cpufreq_init to be true (unless the notifier
registration fails, which is unlikely at that point) when the
ACPI CPU thermal cooling devices are registered, so the
processor_get_max_state() result does not change while
acpi_processor_driver_init() is running.

Change the ordering in acpi_processor_driver_init() accordingly
to prevent the max_state value from remaining 0 permanently for all
ACPI CPU cooling devices due to setting acpi_processor_cpufreq_init
too late. [Note that processor_get_max_state() may still return
different values at different times after this change, depending on
the cpufreq driver registration time, but that issue needs to be
addressed separately.]

Fixes: a365105c685c("thermal: sysfs: Reuse cdev->max_state")
Reported-by: Wang, Quanxian <quanxian.wang@intel.com>
Link: https://lore.kernel.org/linux-pm/53ec1f06f61c984100868926f282647e57ecfb2d.camel@intel.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Tested-by: Zhang Rui <rui.zhang@intel.com>
Reviewed-by: Zhang Rui <rui.zhang@intel.com>

+6 -6
+6 -6
drivers/acpi/processor_driver.c
··· 263 263 if (acpi_disabled) 264 264 return 0; 265 265 266 + if (!cpufreq_register_notifier(&acpi_processor_notifier_block, 267 + CPUFREQ_POLICY_NOTIFIER)) { 268 + acpi_processor_cpufreq_init = true; 269 + acpi_processor_ignore_ppc_init(); 270 + } 271 + 266 272 result = driver_register(&acpi_processor_driver); 267 273 if (result < 0) 268 274 return result; ··· 281 275 hp_online = result; 282 276 cpuhp_setup_state_nocalls(CPUHP_ACPI_CPUDRV_DEAD, "acpi/cpu-drv:dead", 283 277 NULL, acpi_soft_cpu_dead); 284 - 285 - if (!cpufreq_register_notifier(&acpi_processor_notifier_block, 286 - CPUFREQ_POLICY_NOTIFIER)) { 287 - acpi_processor_cpufreq_init = true; 288 - acpi_processor_ignore_ppc_init(); 289 - } 290 278 291 279 acpi_processor_throttling_init(); 292 280 return 0;