From 12fdc5c1caed35b336f7fe2db2f4104d81626b71 Mon Sep 17 00:00:00 2001 From: Tim Gardner Date: Tue, 24 Apr 2012 11:47:18 -0600 Subject: [PATCH] UBUNTU: SAUCE: (no-up) Allow filtering of cpufreq drivers Harmless patch that allows k8 powernow machines to boot. Carry until conflict. BugLink: http://bugs.launchpad.net/bugs/984288 Acked-by: Stefan Bader Acked-by: Herton Krzesinski Signed-off-by: Tim Gardner [ arighi: context adjustment (cpu0_hotplug has been removed) ] Signed-off-by: Andrea Righi --- .../admin-guide/kernel-parameters.txt | 4 ++++ drivers/cpufreq/cpufreq.c | 22 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 31b3a25680d0..a12fd038fe25 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -848,6 +848,10 @@ Format: ,,,[,] + cpufreq_driver= [X86] Allow only the named cpu frequency scaling driver + to register. Example: cpufreq_driver=powernow-k8 + Format: { none | STRING } + cpuidle.off=1 [CPU_IDLE] disable the cpuidle sub-system diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 44db4f59c4cc..cdd0f3527023 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -2841,6 +2841,20 @@ static int cpuhp_cpufreq_offline(unsigned int cpu) return 0; } +static char cpufreq_driver_name[CPUFREQ_NAME_LEN]; + +static int __init cpufreq_driver_setup(char *str) +{ + strlcpy(cpufreq_driver_name, str, CPUFREQ_NAME_LEN); + return 1; +} + +/* + * Set this name to only allow one specific cpu freq driver, e.g., + * cpufreq_driver=powernow-k8 + */ +__setup("cpufreq_driver=", cpufreq_driver_setup); + /** * cpufreq_register_driver - register a CPU Frequency driver * @driver_data: A struct cpufreq_driver containing the values# @@ -2876,7 +2890,13 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) (driver_data->adjust_perf && !driver_data->fast_switch)) return -EINVAL; - pr_debug("trying to register driver %s\n", driver_data->name); + pr_debug("trying to register driver %s, cpufreq_driver=%s\n", + driver_data->name, cpufreq_driver_name); + + if (cpufreq_driver_name[0]) + if (!driver_data->name || + strcmp(cpufreq_driver_name, driver_data->name)) + return -EINVAL; /* Protect against concurrent CPU online/offline. */ cpus_read_lock();