On 06/16/2016 03:33 PM, Viresh Kumar wrote:
dev_pm_opp_get_sharing_cpus() returns 0 even in the case where the OPP core doesn't know if the table is shared or not. It is working for most of the platforms, as the OPP table was never created and we returned -ENODEV then. But in case of one of the platforms (Jetson TK1) at least, the situation is a bit different. The OPP table is created (somehow) before dev_pm_opp_get_sharing_cpus() is called and so we returned 0. The caller of this routine treated that as 'CPUs don't share OPPs' and that had bad consequences on performance. Fix this by converting 'shared_opp' to an integer and have an extra value when its state in undefined. dev_pm_opp_get_sharing_cpus() returns -EINVAL now in that case, so that the caller can handle it accordingly (cpufreq-dt considers that as 'all CPUs share the table'). Fixes: 6f707daa3833 ("PM / OPP: Add dev_pm_opp_get_sharing_cpus()") Reported-by: Alexandre Courbot <acourbot@xxxxxxxxxx> Signed-off-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx> --- Hi Alexandre, This is untested, can you please confirm if this fixes it for you?
Yep, with this cpufreq_init() takes the fallback path and cpufreq behaves as expected thereafter.
Thanks for reacting so quickly! Can this go into 4.7 fixes? Tested-by: Alexandre Courbot <acourbot@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html