aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Gardner <tim.gardner@canonical.com>2012-04-24 11:47:18 -0600
committerJohn Rigby <john.rigby@linaro.org>2012-06-25 15:02:24 -0600
commit47b844782eab75e1e6f077f66e36847ee7213ffd (patch)
treec2c94ec1a7cd180e0e60bb67422d3e3c0b6d709e
parent3645868a274e195fbe641cd4f219bfbbc06b5a2b (diff)
UBUNTU: SAUCE: Allow filtering of cpufreq drivers
BugLink: http://bugs.launchpad.net/bugs/984288 Acked-by: Stefan Bader <stefan.bader@canonical.com> Acked-by: Herton Krzesinski <herton.krzesinski@canonical.com> Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
-rw-r--r--Documentation/kernel-parameters.txt4
-rw-r--r--drivers/cpufreq/cpufreq.c22
2 files changed, 25 insertions, 1 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index d79efa33735..ef9af9a052c 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -588,6 +588,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
/proc/<pid>/coredump_filter.
See also Documentation/filesystems/proc.txt.
+ 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 7f2f149ae40..222966f3443 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1817,6 +1817,20 @@ static struct notifier_block __refdata cpufreq_cpu_notifier = {
* REGISTER / UNREGISTER CPUFREQ DRIVER *
*********************************************************************/
+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#
@@ -1839,7 +1853,13 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
((!driver_data->setpolicy) && (!driver_data->target)))
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;
if (driver_data->setpolicy)
driver_data->flags |= CPUFREQ_CONST_LOOPS;