Message ID | 20240204140928.2865-1-sensor1010@163.com |
---|---|
State | New |
Headers | show |
Series | cpufreq/schedutil: When updating limitations, frequency modulation interval not become invalid. | expand |
On 04-02-24, 06:09, Lizhe wrote: > If the current frequency scaling policy is schedutil. > echo schedutil > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor > This would result in an invalid frequency modulation interval. > In sugov_limit(), sg_policy->limits_changed is set to true. That will only make us do an extra freq change. What's the problem with that ? > Signed-off-by: Lizhe <sensor1010@163.com> > --- > drivers/cpufreq/cpufreq.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c > index 44db4f59c4cc..a0af38fcb7e2 100644 > --- a/drivers/cpufreq/cpufreq.c > +++ b/drivers/cpufreq/cpufreq.c > @@ -2631,7 +2631,7 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy, > > if (new_gov == policy->governor) { > pr_debug("governor limits update\n"); > - cpufreq_governor_limits(policy); > + cpufreq_policy_apply_limits(policy); > return 0; > }
On 05-02-24, 16:33, lizhe wrote: > HI: > I think not. > It will cause the following changes: > limits_changed in sugov_limit() is set to true. > This will cause the modulation interval to be invalid. > The system modulation will ignore the modulation interval. > A modulation request will be initiated immediately. > > > As shown below : > sugov_should_update_freq(...) > { > if (unlikely(sg_policy->limits_changed)) { > .... > return true; > } > } > > Repeatedly setting the schedutil modulation policy causes the modulation interval to be invalid. > Why is this necessary ? This is the penalty being paid to keep the interface simple and consistent. Playing with sysfs can do such minor things.
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 44db4f59c4cc..a0af38fcb7e2 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -2631,7 +2631,7 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy, if (new_gov == policy->governor) { pr_debug("governor limits update\n"); - cpufreq_governor_limits(policy); + cpufreq_policy_apply_limits(policy); return 0; }
If the current frequency scaling policy is schedutil. echo schedutil > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor This would result in an invalid frequency modulation interval. In sugov_limit(), sg_policy->limits_changed is set to true. Signed-off-by: Lizhe <sensor1010@163.com> --- drivers/cpufreq/cpufreq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)