On Mon, 2023-03-13 at 15:27 +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > 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@xxxxxxxxx> > Link: > https://lore.kernel.org/linux-pm/53ec1f06f61c984100868926f282647e57ecfb2d.camel@xxxxxxxxx/ > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> Tested-by: Zhang Rui <rui.zhang@xxxxxxxxx> Reviewed-by: Zhang Rui <rui.zhang@xxxxxxxxx> thanks, rui > --- > > v1 -> v2: Expand changelog to explain that this particular patch > addresses > part of the issue. > > --- > drivers/acpi/processor_driver.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > Index: linux-pm/drivers/acpi/processor_driver.c > =================================================================== > --- linux-pm.orig/drivers/acpi/processor_driver.c > +++ linux-pm/drivers/acpi/processor_driver.c > @@ -263,6 +263,12 @@ static int __init acpi_processor_driver_ > if (acpi_disabled) > return 0; > > + if (!cpufreq_register_notifier(&acpi_processor_notifier_block, > + CPUFREQ_POLICY_NOTIFIER)) { > + acpi_processor_cpufreq_init = true; > + acpi_processor_ignore_ppc_init(); > + } > + > result = driver_register(&acpi_processor_driver); > if (result < 0) > return result; > @@ -276,12 +282,6 @@ static int __init acpi_processor_driver_ > cpuhp_setup_state_nocalls(CPUHP_ACPI_CPUDRV_DEAD, "acpi/cpu- > drv:dead", > NULL, acpi_soft_cpu_dead); > > - if (!cpufreq_register_notifier(&acpi_processor_notifier_block, > - CPUFREQ_POLICY_NOTIFIER)) { > - acpi_processor_cpufreq_init = true; > - acpi_processor_ignore_ppc_init(); > - } > - > acpi_processor_throttling_init(); > return 0; > err: > > >