Messages in this thread Patch in this message | | | From | Mario Limonciello <> | Subject | [PATCH v2 2/3] cpufreq: amd-pstate: Allow replacing acpi-cpufreq when loaded | Date | Mon, 28 Mar 2022 20:59:46 -0500 |
| |
`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) { + acpi_cpufreq_exit(); + } else { + pr_info("This processor supports amd-pstate, you can enable it with amd_pstate.replace=1\n"); + return -EEXIST; + } + } /* capability check */ if (boot_cpu_has(X86_FEATURE_CPPC)) { -- 2.34.1
| |