diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2026-03-12 13:01:37 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2026-03-12 13:01:37 -0700 |
| commit | 0257f64bdac7fdca30fa3cae0df8b9ecbec7733a (patch) | |
| tree | 65dae98b02dff81f8882eb5fe287bac66ba94f0c /kernel/sched | |
| parent | 61c0b2ae734fc9d33ede9cbf7d3cad67a7b0ce28 (diff) | |
| parent | a076cc74744d83fb9f70147a154b99278945a3d2 (diff) | |
| download | linux-master.tar.gz linux-master.zip | |
Pull power management fixes from Rafael Wysocki:
- Make the idle loop skip the cpuidle governor .reflect() callback
after it has skipped the .select() one (Rafael Wysocki)
- Fix swapped power/energy unit labels in cpupower (Kaushlendra Kumar)
- Add support for setting EPP via systemd service and intel_pstate
turbo boost support to cpupower (Jan Kiszka, Zhang Rui)
* tag 'pm-7.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
sched: idle: Make skipping governor callbacks more consistent
cpupower: Add intel_pstate turbo boost support for Intel platforms
cpupower: Add support for setting EPP via systemd service
cpupower: fix swapped power/energy unit labels
Diffstat (limited to 'kernel/sched')
| -rw-r--r-- | kernel/sched/idle.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c index 3681b6ad9276..b95449165122 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c @@ -221,7 +221,7 @@ static void cpuidle_idle_call(void) next_state = cpuidle_find_deepest_state(drv, dev, max_latency_ns); call_cpuidle(drv, dev, next_state); - } else { + } else if (drv->state_count > 1) { bool stop_tick = true; /* @@ -239,6 +239,15 @@ static void cpuidle_idle_call(void) * Give the governor an opportunity to reflect on the outcome */ cpuidle_reflect(dev, entered_state); + } else { + tick_nohz_idle_retain_tick(); + + /* + * If there is only a single idle state (or none), there is + * nothing meaningful for the governor to choose. Skip the + * governor and always use state 0. + */ + call_cpuidle(drv, dev, 0); } exit_idle: |
