cpufreq: intel_pstate: Fix up iowait_boost computation
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 11 Mar 2019 11:57:25 +0000 (12:57 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 12 Mar 2019 08:47:30 +0000 (09:47 +0100)
After commit b8bd1581aa61 ("cpufreq: intel_pstate: Rework iowait
boosting to be less aggressive") the handling of the case when
the SCHED_CPUFREQ_IOWAIT flag is set again after a few iterations of
intel_pstate_update_util() is a bit inconsistent, because the
new value of cpu->iowait_boost may be lower than ONE_EIGHTH_FP
if it was set before, but has not dropped down to zero just yet.

Fix that up by ensuring that the new value of cpu->iowait_boost
will always be at least ONE_EIGHTH_FP then.

Fixes: b8bd1581aa61 ("cpufreq: intel_pstate: Rework iowait boosting to be less aggressive")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/intel_pstate.c

index 002f5169d4ebca567e2753b6f3a7bd509b298c2d..e22f0dbaebb1d97e407d0be2b67da9b25f8af8dc 100644 (file)
@@ -1762,7 +1762,7 @@ static void intel_pstate_update_util(struct update_util_data *data, u64 time,
                /* Start over if the CPU may have been idle. */
                if (delta_ns > TICK_NSEC) {
                        cpu->iowait_boost = ONE_EIGHTH_FP;
-               } else if (cpu->iowait_boost) {
+               } else if (cpu->iowait_boost >= ONE_EIGHTH_FP) {
                        cpu->iowait_boost <<= 1;
                        if (cpu->iowait_boost > int_tofp(1))
                                cpu->iowait_boost = int_tofp(1);