]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
provide disable_cpufreq() function to disable the API.
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tue, 13 Mar 2012 23:18:39 +0000 (19:18 -0400)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Thu, 19 Apr 2012 20:53:45 +0000 (16:53 -0400)
useful for disabling cpufreq altogether. The cpu frequency
scaling drivers and cpu frequency governors will fail to register.

[upstream a7b422c]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Dave Jones <davej@redhat.com>
drivers/cpufreq/cpufreq.c
include/linux/cpufreq.h

index 0a5bea9e3585c2cc9daff87417a42e25ad4469b8..389edd6e253ac6af49fcf7bbc8a84b342f398115 100644 (file)
@@ -126,6 +126,15 @@ static int __init init_cpufreq_transition_notifier_list(void)
 }
 pure_initcall(init_cpufreq_transition_notifier_list);
 
+static int off __read_mostly;
+int cpufreq_disabled(void)
+{
+       return off;
+}
+void disable_cpufreq(void)
+{
+       off = 1;
+}
 static LIST_HEAD(cpufreq_governor_list);
 static DEFINE_MUTEX(cpufreq_governor_mutex);
 
@@ -1420,6 +1429,9 @@ int __cpufreq_driver_target(struct cpufreq_policy *policy,
 {
        int retval = -EINVAL;
 
+       if (cpufreq_disabled())
+               return -ENODEV;
+
        pr_debug("target for CPU %u: %u kHz, relation %u\n", policy->cpu,
                target_freq, relation);
        if (cpu_online(policy->cpu) && cpufreq_driver->target)
@@ -1528,6 +1540,9 @@ int cpufreq_register_governor(struct cpufreq_governor *governor)
        if (!governor)
                return -EINVAL;
 
+       if (cpufreq_disabled())
+               return -ENODEV;
+
        mutex_lock(&cpufreq_governor_mutex);
 
        err = -EBUSY;
@@ -1551,6 +1566,9 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor)
        if (!governor)
                return;
 
+       if (cpufreq_disabled())
+               return;
+
 #ifdef CONFIG_HOTPLUG_CPU
        for_each_present_cpu(cpu) {
                if (cpu_online(cpu))
@@ -1793,6 +1811,9 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
        unsigned long flags;
        int ret;
 
+       if (cpufreq_disabled())
+               return -ENODEV;
+
        if (!driver_data || !driver_data->verify || !driver_data->init ||
            ((!driver_data->setpolicy) && (!driver_data->target)))
                return -EINVAL;
@@ -1882,6 +1903,9 @@ static int __init cpufreq_core_init(void)
 {
        int cpu;
 
+       if (cpufreq_disabled())
+               return -ENODEV;
+
        for_each_possible_cpu(cpu) {
                per_cpu(cpufreq_policy_cpu, cpu) = -1;
                init_rwsem(&per_cpu(cpu_policy_rwsem, cpu));
index 11be48e0d168b8e91ab1b2aefed6eb419ab801c8..544ca8d8d151708c6393e91cd945ed229f278281 100644 (file)
@@ -35,6 +35,7 @@
 #ifdef CONFIG_CPU_FREQ
 int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list);
 int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list);
+extern void disable_cpufreq(void);
 #else          /* CONFIG_CPU_FREQ */
 static inline int cpufreq_register_notifier(struct notifier_block *nb,
                                                unsigned int list)
@@ -46,6 +47,7 @@ static inline int cpufreq_unregister_notifier(struct notifier_block *nb,
 {
        return 0;
 }
+static inline void disable_cpufreq(void) { }
 #endif         /* CONFIG_CPU_FREQ */
 
 /* if (cpufreq_driver->target) exists, the ->governor decides what frequency