linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] cpufreq: schedutil: next_freq need update when cpufreq_limits changed
@ 2023-07-19 13:05 Xuewen Yan
  2023-07-21 22:19 ` Qais Yousef
  2023-10-05 11:26 ` Ingo Molnar
  0 siblings, 2 replies; 13+ messages in thread
From: Xuewen Yan @ 2023-07-19 13:05 UTC (permalink / raw)
  To: rafael, viresh.kumar, mingo, peterz, vincent.guittot
  Cc: dietmar.eggemann, rostedt, bsegall, mgorman, bristot, vschneid,
	guohua.yan, qyousef, linux-pm, linux-kernel

When cpufreq's policy is single, there is a scenario that will
cause sg_policy's next_freq to be unable to update.

When the cpu's util is always max, the cpufreq will be max,
and then if we change the policy's scaling_max_freq to be a
lower freq, indeed, the sg_policy's next_freq need change to
be the lower freq, however, because the cpu_is_busy, the next_freq
would keep the max_freq.

For example:
The cpu7 is single cpu:

unisoc:/sys/devices/system/cpu/cpufreq/policy7 # while true;do done&
[1] 4737
unisoc:/sys/devices/system/cpu/cpufreq/policy7 # taskset -p 80 4737
pid 4737's current affinity mask: ff
pid 4737's new affinity mask: 80
unisoc:/sys/devices/system/cpu/cpufreq/policy7 # cat scaling_max_freq
2301000
unisoc:/sys/devices/system/cpu/cpufreq/policy7 # cat scaling_cur_freq
2301000
unisoc:/sys/devices/system/cpu/cpufreq/policy7 # echo 2171000 > scaling_max_freq
unisoc:/sys/devices/system/cpu/cpufreq/policy7 # cat scaling_max_freq
2171000

At this time, the sg_policy's next_freq would keep 2301000.

To prevent the case happen, add the judgment of the need_freq_update flag.

Signed-off-by: Xuewen Yan <xuewen.yan@unisoc.com>
Co-developed-by: Guohua Yan <guohua.yan@unisoc.com>
Signed-off-by: Guohua Yan <guohua.yan@unisoc.com>
---
 kernel/sched/cpufreq_schedutil.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 4492608b7d7f..458d359f5991 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -350,7 +350,8 @@ static void sugov_update_single_freq(struct update_util_data *hook, u64 time,
 	 * Except when the rq is capped by uclamp_max.
 	 */
 	if (!uclamp_rq_is_capped(cpu_rq(sg_cpu->cpu)) &&
-	    sugov_cpu_is_busy(sg_cpu) && next_f < sg_policy->next_freq) {
+	    sugov_cpu_is_busy(sg_cpu) && next_f < sg_policy->next_freq &&
+	    !sg_policy->need_freq_update) {
 		next_f = sg_policy->next_freq;
 
 		/* Restore cached freq as next_freq has changed */
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2023-10-05 20:09 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-19 13:05 [PATCH] cpufreq: schedutil: next_freq need update when cpufreq_limits changed Xuewen Yan
2023-07-21 22:19 ` Qais Yousef
2023-07-24  3:36   ` Xuewen Yan
2023-07-24 15:33     ` Pierre Gondois
2023-07-25  2:01       ` Xuewen Yan
2023-07-24 15:53     ` Qais Yousef
2023-07-25  2:21       ` Xuewen Yan
2023-07-25  8:50         ` Rafael J. Wysocki
2023-07-25 12:08           ` Xuewen Yan
2023-08-22 19:28             ` Rafael J. Wysocki
2023-10-05 11:26 ` Ingo Molnar
2023-10-05 11:35   ` Rafael J. Wysocki
2023-10-05 20:09     ` Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).