Message ID | 20160616053524.19921-1-acourbot@nvidia.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
+Rafael On 16-06-16, 14:35, Alexandre Courbot wrote: > This is not an actual request for revert, but rather for comments about > the observed behavior since I am not really familiar with cpufreq. > > I am observing a serious performance regression on Jetson TK1 since 4.7-rc1: > namely, moving windows under X would become unsufferably slow, and graphical > performance under X in general is seriously degraded. After bisecting, I > found the regression to be visible since commit 1530b9963eeb ("cpufreq: dt: > Identify cpu-sharing for platforms without operating-points-v2") > > If I revert this commit, I noticed that the CPU frequency immediately jumps to > a higher frequency once I start moving windows (resulting in a smooth and > responsive action), whereas enabling this commit causes the CPU frequency to > remain low (typically 204 Mhz) in that case, resulting in CPU-bound slowness. > > What happens is that with 1530b9963eeb applied, dev_pm_opp_get_sharing_cpus() > returns zero causing the fallback variable to remain false, whereas without it > opp_v1 is set to true. > > It is not clear to me whether this is a cpufreq issue or a Tegra issue, so I am > posting this in the hope to get clarifications from either side. > > Thanks! Yeah, you just hit a corner case. Sorry about that :( Can you try a patch that I sent to you instead? Its subject is: [PATCH] PM / OPP: 'UNKNOWN' status of opp-table->shared Also I would like to know one more thing. You can hit this bug only if some other piece of code for your platform is creating OPP table for the CPUs. Which code is doing that ?
On 06/16/2016 03:35 PM, Viresh Kumar wrote: > +Rafael > > On 16-06-16, 14:35, Alexandre Courbot wrote: >> This is not an actual request for revert, but rather for comments about >> the observed behavior since I am not really familiar with cpufreq. >> >> I am observing a serious performance regression on Jetson TK1 since 4.7-rc1: >> namely, moving windows under X would become unsufferably slow, and graphical >> performance under X in general is seriously degraded. After bisecting, I >> found the regression to be visible since commit 1530b9963eeb ("cpufreq: dt: >> Identify cpu-sharing for platforms without operating-points-v2") >> >> If I revert this commit, I noticed that the CPU frequency immediately jumps to >> a higher frequency once I start moving windows (resulting in a smooth and >> responsive action), whereas enabling this commit causes the CPU frequency to >> remain low (typically 204 Mhz) in that case, resulting in CPU-bound slowness. >> >> What happens is that with 1530b9963eeb applied, dev_pm_opp_get_sharing_cpus() >> returns zero causing the fallback variable to remain false, whereas without it >> opp_v1 is set to true. >> >> It is not clear to me whether this is a cpufreq issue or a Tegra issue, so I am >> posting this in the hope to get clarifications from either side. >> >> Thanks! > > Yeah, you just hit a corner case. Sorry about that :( > > Can you try a patch that I sent to you instead? Its subject is: > > [PATCH] PM / OPP: 'UNKNOWN' status of opp-table->shared Thanks, this seems to solve the issue. > Also I would like to know one more thing. You can hit this bug only if > some other piece of code for your platform is creating OPP table for > the CPUs. Which code is doing that ? Good question. I am still educating myself about OPP - adding Thierry in the meantime who may have an answer. -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c index 3957de801ae8..eef245cd4b7f 100644 --- a/drivers/cpufreq/cpufreq-dt.c +++ b/drivers/cpufreq/cpufreq-dt.c @@ -146,7 +146,7 @@ static int cpufreq_init(struct cpufreq_policy *policy) struct clk *cpu_clk; struct dev_pm_opp *suspend_opp; unsigned int transition_latency; - bool fallback = false; + bool opp_v1 = false; const char *name; int ret; @@ -166,16 +166,14 @@ static int cpufreq_init(struct cpufreq_policy *policy) /* Get OPP-sharing information from "operating-points-v2" bindings */ ret = dev_pm_opp_of_get_sharing_cpus(cpu_dev, policy->cpus); if (ret) { - if (ret != -ENOENT) - goto out_put_clk; - /* * operating-points-v2 not supported, fallback to old method of - * finding shared-OPPs for backward compatibility if the - * platform hasn't set sharing CPUs. + * finding shared-OPPs for backward compatibility. */ - if (dev_pm_opp_get_sharing_cpus(cpu_dev, policy->cpus)) - fallback = true; + if (ret == -ENOENT) + opp_v1 = true; + else + goto out_put_clk; } /* @@ -215,7 +213,7 @@ static int cpufreq_init(struct cpufreq_policy *policy) goto out_free_opp; } - if (fallback) { + if (opp_v1) { cpumask_setall(policy->cpus); /*