cpufreq/schedutil: When updating limitations, frequency modulation interval not become invalid.

Message ID 20240204140928.2865-1-sensor1010@163.com
State New
Headers
Series cpufreq/schedutil: When updating limitations, frequency modulation interval not become invalid. |

Commit Message

Lizhe Feb. 4, 2024, 2:09 p.m. UTC
  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(-)
  

Comments

Viresh Kumar Feb. 5, 2024, 7:38 a.m. UTC | #1
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;
>  	}
  
Viresh Kumar Feb. 5, 2024, 8:54 a.m. UTC | #2
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.
  

Patch

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;
 	}