Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'pm-6.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull power management fixes from Rafael Wysocki:
"These revert a cpuidle menu governor commit leading to a performance
regression, fix an amd-pstate driver regression introduced recently,
and fix new conditional guard definitions for runtime PM.

- Add missing _RET == 0 condition to recently introduced conditional
guard definitions for runtime PM (Rafael Wysocki)

- 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)"

* tag 'pm-6.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
PM: runtime: Fix conditional guard definitions
Revert "cpuidle: menu: Avoid discarding useful information"
cpufreq/amd-pstate: Fix a regression leading to EPP 0 after hibernate

+18 -17
+5 -1
drivers/cpufreq/amd-pstate.c
··· 1614 1614 * min_perf value across kexec reboots. If this CPU is just onlined normally after this, the 1615 1615 * limits, epp and desired perf will get reset to the cached values in cpudata struct 1616 1616 */ 1617 - return amd_pstate_update_perf(policy, perf.bios_min_perf, 0U, 0U, 0U, false); 1617 + return amd_pstate_update_perf(policy, perf.bios_min_perf, 1618 + FIELD_GET(AMD_CPPC_DES_PERF_MASK, cpudata->cppc_req_cached), 1619 + FIELD_GET(AMD_CPPC_MAX_PERF_MASK, cpudata->cppc_req_cached), 1620 + FIELD_GET(AMD_CPPC_EPP_PERF_MASK, cpudata->cppc_req_cached), 1621 + false); 1618 1622 } 1619 1623 1620 1624 static int amd_pstate_suspend(struct cpufreq_policy *policy)
+9 -12
drivers/cpuidle/governors/menu.c
··· 188 188 * 189 189 * This can deal with workloads that have long pauses interspersed 190 190 * with sporadic activity with a bunch of short pauses. 191 + * 192 + * However, if the number of remaining samples is too small to exclude 193 + * any more outliers, allow the deepest available idle state to be 194 + * selected because there are systems where the time spent by CPUs in 195 + * deep idle states is correlated to the maximum frequency the CPUs 196 + * can get to. On those systems, shallow idle states should be avoided 197 + * unless there is a clear indication that the given CPU is most likley 198 + * going to be woken up shortly. 191 199 */ 192 - if (divisor * 4 <= INTERVALS * 3) { 193 - /* 194 - * If there are sufficiently many data points still under 195 - * consideration after the outliers have been eliminated, 196 - * returning without a prediction would be a mistake because it 197 - * is likely that the next interval will not exceed the current 198 - * maximum, so return the latter in that case. 199 - */ 200 - if (divisor >= INTERVALS / 2) 201 - return max; 202 - 200 + if (divisor * 4 <= INTERVALS * 3) 203 201 return UINT_MAX; 204 - } 205 202 206 203 /* Update the thresholds for the next round. */ 207 204 if (avg - min > max - avg)
+4 -4
include/linux/pm_runtime.h
··· 629 629 * device. 630 630 */ 631 631 DEFINE_GUARD_COND(pm_runtime_active, _try, 632 - pm_runtime_get_active(_T, RPM_TRANSPARENT)) 632 + pm_runtime_get_active(_T, RPM_TRANSPARENT), _RET == 0) 633 633 DEFINE_GUARD_COND(pm_runtime_active, _try_enabled, 634 - pm_runtime_resume_and_get(_T)) 634 + pm_runtime_resume_and_get(_T), _RET == 0) 635 635 DEFINE_GUARD_COND(pm_runtime_active_auto, _try, 636 - pm_runtime_get_active(_T, RPM_TRANSPARENT)) 636 + pm_runtime_get_active(_T, RPM_TRANSPARENT), _RET == 0) 637 637 DEFINE_GUARD_COND(pm_runtime_active_auto, _try_enabled, 638 - pm_runtime_resume_and_get(_T)) 638 + pm_runtime_resume_and_get(_T), _RET == 0) 639 639 640 640 /** 641 641 * pm_runtime_put_sync - Drop device usage counter and run "idle check" if 0.