OPP: Improve error handling in dev_pm_opp_of_cpumask_add_table()
authorViresh Kumar <viresh.kumar@linaro.org>
Wed, 3 Oct 2018 09:42:06 +0000 (15:12 +0530)
committerViresh Kumar <viresh.kumar@linaro.org>
Thu, 4 Oct 2018 03:40:56 +0000 (09:10 +0530)
The error handling wasn't appropriate in
dev_pm_opp_of_cpumask_add_table(). For example it returns 0 on success
and also for the case where cpumask is empty or cpu_device wasn't found
for any of the CPUs.

It should really return error on such cases, so that the callers can be
aware of the outcome.

Fix it.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/opp/of.c

index a71ff3a..67a384c 100644 (file)
@@ -614,16 +614,18 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_remove_table);
 int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
 {
        struct device *cpu_dev;
-       int cpu, ret = 0;
+       int cpu, ret;
 
-       WARN_ON(cpumask_empty(cpumask));
+       if (WARN_ON(cpumask_empty(cpumask)))
+               return -ENODEV;
 
        for_each_cpu(cpu, cpumask) {
                cpu_dev = get_cpu_device(cpu);
                if (!cpu_dev) {
                        pr_err("%s: failed to get cpu%d device\n", __func__,
                               cpu);
-                       continue;
+                       ret = -ENODEV;
+                       goto remove_table;
                }
 
                ret = dev_pm_opp_of_add_table(cpu_dev);
@@ -635,12 +637,16 @@ int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
                        pr_debug("%s: couldn't find opp table for cpu:%d, %d\n",
                                 __func__, cpu, ret);
 
-                       /* Free all other OPPs */
-                       _dev_pm_opp_cpumask_remove_table(cpumask, cpu);
-                       break;
+                       goto remove_table;
                }
        }
 
+       return 0;
+
+remove_table:
+       /* Free all other OPPs */
+       _dev_pm_opp_cpumask_remove_table(cpumask, cpu);
+
        return ret;
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_of_cpumask_add_table);