UBUNTU: SAUCE: Allow filtering of cpufreq drivers
authorTim Gardner <tim.gardner@canonical.com>
Tue, 24 Apr 2012 17:47:18 +0000 (11:47 -0600)
committerLuis Henriques <luis.henriques@canonical.com>
Mon, 30 Apr 2012 18:15:13 +0000 (19:15 +0100)
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>

Documentation/kernel-parameters.txt
drivers/cpufreq/cpufreq.c

index cb0532b..57dfe00 100644 (file)
@@ -570,6 +570,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
 
index 987a165..fe63d01 100644 (file)
@@ -1798,6 +1798,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#
@@ -1817,7 +1831,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;