Messages in this thread | | | Date | Tue, 29 Mar 2022 13:56:05 +0800 | From | Huang Rui <> | Subject | Re: [PATCH v2 2/3] cpufreq: amd-pstate: Allow replacing acpi-cpufreq when loaded |
| |
On Tue, Mar 29, 2022 at 09:59:46AM +0800, Limonciello, Mario wrote: > `amd-pstate` can be compiled as a module. This however can be a > deficiency because `acpi-cpufreq` will be loaded earlier when compiled > into the kernel meaning `amd-pstate` doesn't get a chance. > `acpi-cpufreq` is also unable to be unloaded in this circumstance. > > To better improve the usability of `amd-pstate` when compiled as a module, > add an optional module parameter that will force it to replace other > cpufreq drivers at startup. > > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > --- > v1->v2: > * Update to changes from v1. > * Verify the driver being matched is acpi-cpufreq. > * Show a message letting users know they can use amd-pstate. > > drivers/cpufreq/amd-pstate.c | 19 ++++++++++++++++--- > 1 file changed, 16 insertions(+), 3 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 7be38bc6a673..7dc2e344f222 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -63,6 +63,12 @@ module_param(shared_mem, bool, 0444); > MODULE_PARM_DESC(shared_mem, > "enable amd-pstate on processors with shared memory solution (false = disabled (default), true = enabled)"); > > +static bool replace = false; > +module_param(replace, bool, 0444); > +MODULE_PARM_DESC(replace, > + "replace acpi-cpufreq driver upon init if necessary"); > +extern void acpi_cpufreq_exit(void); > + > static struct cpufreq_driver amd_pstate_driver; > > /** > @@ -643,6 +649,7 @@ static struct cpufreq_driver amd_pstate_driver = { > > static int __init amd_pstate_init(void) > { > + const char *current_driver; > int ret; > > if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) > @@ -653,9 +660,15 @@ static int __init amd_pstate_init(void) > return -ENODEV; > } > > - /* don't keep reloading if cpufreq_driver exists */ > - if (cpufreq_get_current_driver()) > - return -EEXIST; > + current_driver = cpufreq_get_current_driver(); > + if (current_driver) { > + if (replace && strcmp(current_driver, "acpi-cpufreq") == 0) {
#ifdef CONFIG_X86_ACPI_CPUFREQ > + acpi_cpufreq_exit(); #endif
We need a kernel config checking here, otherwise, it will be built failed once the acpi-cpufreq not set but amd_pstate is set.
Thanks, Ray
| |