Commit b62bd2cf authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branches 'pm-cpuidle' and 'pm-cpufreq'

Merge cpuidle and cpufreq fixes for 6.18-rc3:

 - Revert a cpuidle menu governor change that introduced a serious
   performance regression on Chromebooks with Intel Jasper Lake
   processors (Rafael Wysocki)

 - Fix an amd-pstate driver regression leading to EPP=0 after
   hibernation (Mario Limonciello)

* pm-cpuidle:
  Revert "cpuidle: menu: Avoid discarding useful information"

* pm-cpufreq:
  cpufreq/amd-pstate: Fix a regression leading to EPP 0 after hibernate
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1614,7 +1614,11 @@ static int amd_pstate_cpu_offline(struct cpufreq_policy *policy)
	 * min_perf value across kexec reboots. If this CPU is just onlined normally after this, the
	 * limits, epp and desired perf will get reset to the cached values in cpudata struct
	 */
	return amd_pstate_update_perf(policy, perf.bios_min_perf, 0U, 0U, 0U, false);
	return amd_pstate_update_perf(policy, perf.bios_min_perf,
				     FIELD_GET(AMD_CPPC_DES_PERF_MASK, cpudata->cppc_req_cached),
				     FIELD_GET(AMD_CPPC_MAX_PERF_MASK, cpudata->cppc_req_cached),
				     FIELD_GET(AMD_CPPC_EPP_PERF_MASK, cpudata->cppc_req_cached),
				     false);
}

static int amd_pstate_suspend(struct cpufreq_policy *policy)
+9 −12
Original line number Diff line number Diff line
@@ -188,20 +188,17 @@ static unsigned int get_typical_interval(struct menu_device *data)
	 *
	 * This can deal with workloads that have long pauses interspersed
	 * with sporadic activity with a bunch of short pauses.
	 *
	 * However, if the number of remaining samples is too small to exclude
	 * any more outliers, allow the deepest available idle state to be
	 * selected because there are systems where the time spent by CPUs in
	 * deep idle states is correlated to the maximum frequency the CPUs
	 * can get to.  On those systems, shallow idle states should be avoided
	 * unless there is a clear indication that the given CPU is most likley
	 * going to be woken up shortly.
	 */
	if (divisor * 4 <= INTERVALS * 3) {
		/*
		 * If there are sufficiently many data points still under
		 * consideration after the outliers have been eliminated,
		 * returning without a prediction would be a mistake because it
		 * is likely that the next interval will not exceed the current
		 * maximum, so return the latter in that case.
		 */
		if (divisor >= INTERVALS / 2)
			return max;

	if (divisor * 4 <= INTERVALS * 3)
		return UINT_MAX;
	}

	/* Update the thresholds for the next round. */
	if (avg - min > max - avg)