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. Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -- 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