On 12-12-17, 08:28, Thomas Petazzoni wrote: > Hello, > > On Thu, 7 Dec 2017 14:56:13 +0100, Gregory CLEMENT wrote: > > > - /* > > - * In case of a failure of dev_pm_opp_add(), we don't > > - * bother with cleaning up the registered OPP (there's > > - * no function to do so), and simply cancel the > > - * registration of the cpufreq device. > > - */ > > ret = dev_pm_opp_add(cpu_dev, clk_get_rate(clk), 0); > > if (ret) { > > clk_put(clk); > > @@ -90,6 +84,11 @@ static int __init armada_xp_pmsu_cpufreq_init(void) > > > > ret = dev_pm_opp_add(cpu_dev, clk_get_rate(clk) / 2, 0); > > if (ret) { > > + /* > > + * The second opp failed to be added, remove > > + * the first one before exiting. > > + */ > > + dev_pm_opp_remove(cpu_dev, clk_get_rate(clk)); > > clk_put(clk); > > return ret; > > } > > This still doesn't fix the failure situation. Indeed, you are only > removing the OPP at full rate for the current CPU, but you are not > removing the OPPs for the N-1 previous CPUs that have been handled in > previous iterations of the loop. Sorry for missing that, I quickly looked at source and missed seeing the for_each_cpu loop :( -- viresh -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html