Message ID | 5934791.lOV4Wx5bFT@kreacher |
---|---|
State | Superseded |
Headers | show |
Series | thermal: core/ACPI: Fix processor cooling device regression | expand |
On Mon, 2023-03-13 at 15:27 +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > 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> 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: > > >
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: