All of lore.kernel.org
 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
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ 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] 14+ messages in thread

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

Thread overview: 14+ 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
2023-10-05 20:23 ` [tip: sched/urgent] cpufreq: schedutil: Update next_freq when cpufreq_limits change tip-bot2 for Xuewen Yan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.