Message ID | 1928789.tdWV9SEqCh@rjwysocki.net (mailing list archive) |
---|---|
State | Queued |
Delegated to: | Rafael Wysocki |
Headers | show |
Series | cpufreq: cpufreq_update_limits() fix and some cleanups | expand |
On Fri, Mar 28, 2025 at 09:39:08PM +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > Since acpi_processor_notify() can be called before registering a cpufreq > driver or even in cases when a cpufreq driver is not registered at all, > cpufreq_update_limits() needs to check if a cpufreq driver is present > and prevent it from being unregistered. > > For this purpose, make it call cpufreq_cpu_get() to obtain a cpufreq > policy pointer for the given CPU and reference count the corresponding > policy object, if present. > > Fixes: 5a25e3f7cc53 ("cpufreq: intel_pstate: Driver-specific handling of _PPC updates") > Closes: https://lore.kernel.org/linux-acpi/Z-ShAR59cTow0KcR@mail-itl > Reporetd-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Reported I wanted to propose also Tested-by tag, but technically it's not me who tested it: https://forum.qubes-os.org/t/kernel-latest-6-13-6-boot-loop/32926/18 > Cc: All applicable <stable@vger.kernel.org> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > drivers/cpufreq/cpufreq.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > --- a/drivers/cpufreq/cpufreq.c > +++ b/drivers/cpufreq/cpufreq.c > @@ -2781,6 +2781,12 @@ > */ > void cpufreq_update_limits(unsigned int cpu) > { > + struct cpufreq_policy *policy __free(put_cpufreq_policy); > + > + policy = cpufreq_cpu_get(cpu); > + if (!policy) > + return; > + > if (cpufreq_driver->update_limits) > cpufreq_driver->update_limits(cpu); > else > > >
On Sat, Mar 29, 2025 at 3:02 AM Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> wrote: > > On Fri, Mar 28, 2025 at 09:39:08PM +0100, Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > > > Since acpi_processor_notify() can be called before registering a cpufreq > > driver or even in cases when a cpufreq driver is not registered at all, > > cpufreq_update_limits() needs to check if a cpufreq driver is present > > and prevent it from being unregistered. > > > > For this purpose, make it call cpufreq_cpu_get() to obtain a cpufreq > > policy pointer for the given CPU and reference count the corresponding > > policy object, if present. > > > > Fixes: 5a25e3f7cc53 ("cpufreq: intel_pstate: Driver-specific handling of _PPC updates") > > Closes: https://lore.kernel.org/linux-acpi/Z-ShAR59cTow0KcR@mail-itl > > Reporetd-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> > > Reported Right, thanks! > I wanted to propose also Tested-by tag, but technically it's not me who > tested it: https://forum.qubes-os.org/t/kernel-latest-6-13-6-boot-loop/32926/18 You can ask the original tester whether or not they would be willing to give a tag, though. > > Cc: All applicable <stable@vger.kernel.org> > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > --- > > drivers/cpufreq/cpufreq.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > --- a/drivers/cpufreq/cpufreq.c > > +++ b/drivers/cpufreq/cpufreq.c > > @@ -2781,6 +2781,12 @@ > > */ > > void cpufreq_update_limits(unsigned int cpu) > > { > > + struct cpufreq_policy *policy __free(put_cpufreq_policy); > > + > > + policy = cpufreq_cpu_get(cpu); > > + if (!policy) > > + return; > > + > > if (cpufreq_driver->update_limits) > > cpufreq_driver->update_limits(cpu); > > else > > > > > > > > -- > Best Regards, > Marek Marczykowski-Górecki > Invisible Things Lab
--- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -2781,6 +2781,12 @@ */ void cpufreq_update_limits(unsigned int cpu) { + struct cpufreq_policy *policy __free(put_cpufreq_policy); + + policy = cpufreq_cpu_get(cpu); + if (!policy) + return; + if (cpufreq_driver->update_limits) cpufreq_driver->update_limits(cpu); else