|
@@ -1526,6 +1526,15 @@ static void intel_pstate_update_util(struct update_util_data *data, u64 time,
|
|
|
|
|
|
if (flags & SCHED_CPUFREQ_IOWAIT) {
|
|
|
cpu->iowait_boost = int_tofp(1);
|
|
|
+ cpu->last_update = time;
|
|
|
+ /*
|
|
|
+ * The last time the busy was 100% so P-state was max anyway
|
|
|
+ * so avoid overhead of computation.
|
|
|
+ */
|
|
|
+ if (fp_toint(cpu->sample.busy_scaled) == 100)
|
|
|
+ return;
|
|
|
+
|
|
|
+ goto set_pstate;
|
|
|
} else if (cpu->iowait_boost) {
|
|
|
/* Clear iowait_boost if the CPU may have been idle. */
|
|
|
delta_ns = time - cpu->last_update;
|
|
@@ -1537,6 +1546,7 @@ static void intel_pstate_update_util(struct update_util_data *data, u64 time,
|
|
|
if ((s64)delta_ns < INTEL_PSTATE_DEFAULT_SAMPLING_INTERVAL)
|
|
|
return;
|
|
|
|
|
|
+set_pstate:
|
|
|
if (intel_pstate_sample(cpu, time)) {
|
|
|
int target_pstate;
|
|
|
|