cpufreq: Use cpufreq_policy_list for iterating over policies
authorViresh Kumar <viresh.kumar@linaro.org>
Tue, 20 Aug 2013 06:38:26 +0000 (12:08 +0530)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 20 Aug 2013 13:43:50 +0000 (15:43 +0200)
To iterate over all policies we currently iterate over all online
CPUs and then get the policy for each of them which is suboptimal.
Use the newly created cpufreq_policy_list for this purpose instead.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/cpufreq.c

index 0586bd20a474a7afe4031b4786128fb57eaac7dd..81ceea6ed630af1836bc36b21cff6f50f1e6865a 100644 (file)
@@ -961,8 +961,8 @@ static int __cpufreq_add_dev(struct device *dev, struct subsys_interface *sif,
        struct cpufreq_policy *policy;
        unsigned long flags;
 #ifdef CONFIG_HOTPLUG_CPU
+       struct cpufreq_policy *tpolicy;
        struct cpufreq_governor *gov;
-       int sibling;
 #endif
 
        if (cpu_is_offline(cpu))
@@ -985,11 +985,10 @@ static int __cpufreq_add_dev(struct device *dev, struct subsys_interface *sif,
 #ifdef CONFIG_HOTPLUG_CPU
        /* Check if this cpu was hot-unplugged earlier and has siblings */
        read_lock_irqsave(&cpufreq_driver_lock, flags);
-       for_each_online_cpu(sibling) {
-               struct cpufreq_policy *cp = per_cpu(cpufreq_cpu_data, sibling);
-               if (cp && cpumask_test_cpu(cpu, cp->related_cpus)) {
+       list_for_each_entry(tpolicy, &cpufreq_policy_list, policy_list) {
+               if (cpumask_test_cpu(cpu, tpolicy->related_cpus)) {
                        read_unlock_irqrestore(&cpufreq_driver_lock, flags);
-                       ret = cpufreq_add_policy_cpu(cp, cpu, dev, frozen);
+                       ret = cpufreq_add_policy_cpu(tpolicy, cpu, dev, frozen);
                        up_read(&cpufreq_rwsem);
                        return ret;
                }