xen/cpufreq: fix adjusting of sampling window on early exit

The logic in dbs_check_cpu() resets the sampling window even when the
sampling period is considered too small.  This leads to further calls
finding an imbalance between the total window time and the idle time, as
the total window time is possibly shorter than the idle time.

Fix by resetting the sampling window start time in the same block where the
current idle time is stored.  While there also prevent a duplicated call to
NOW() and instead re-use the previously fetched value.

Fixes: d6f001cb91 ("x86: Implement cpufreq ondemand policy")
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Roger Pau Monne committed 2026-03-02 17:16:26 +01:00
1 parent 0f410b45de
commit 74867aae25
1 file changed
+2 -1
+2 -1
View File
@@ -117,11 +117,12 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
cur_ns = NOW();
total_ns = cur_ns - this_dbs_info->prev_cpu_wall;
this_dbs_info->prev_cpu_wall = NOW();
if (total_ns < MIN_DBS_INTERVAL)
return;
this_dbs_info->prev_cpu_wall = cur_ns;
/* Get Idle Time */
for_each_cpu(j, policy->cpus) {
uint64_t idle_ns, total_idle_ns;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.