linux/drivers/cpuidle
Rafael J. Wysocki a9edb70084 cpuidle: menu: Avoid discarding useful information
[ Upstream commit 85975daeaa ]

When giving up on making a high-confidence prediction,
get_typical_interval() always returns UINT_MAX which means that the
next idle interval prediction will be based entirely on the time till
the next timer.  However, the information represented by the most
recent intervals may not be completely useless in those cases.

Namely, the largest recent idle interval is an upper bound on the
recently observed idle duration, so it is reasonable to assume that
the next idle duration is unlikely to exceed it.  Moreover, this is
still true after eliminating the suspected outliers if the sample
set still under consideration is at least as large as 50% of the
maximum sample set size.

Accordingly, make get_typical_interval() return the current maximum
recent interval value in that case instead of UINT_MAX.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reported-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Tested-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Reviewed-by: Christian Loehle <christian.loehle@arm.com>
Tested-by: Christian Loehle <christian.loehle@arm.com>
Tested-by: Aboorva Devarajan <aboorvad@linux.ibm.com>
Link: https://patch.msgid.link/7770672.EvYhyI6sBW@rjwysocki.net
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-06-04 14:40:11 +02:00
..
governors cpuidle: menu: Avoid discarding useful information 2025-06-04 14:40:11 +02:00
coupled.c cpuidle: coupled: Drop duplicate word from a comment 2022-08-31 20:54:01 +02:00
cpuidle-arm.c thermal: cpuidle: Register cpuidle cooling device 2020-05-19 12:58:07 +02:00
cpuidle-at91.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
cpuidle-big_little.c cpuidle: big.LITTLE: enable driver only on Peach-Pit/Pi Chromebooks 2020-10-26 10:15:24 +01:00
cpuidle-calxeda.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
cpuidle-clps711x.c cpuidle: clps711x: convert to devm_platform_ioremap_resource() 2019-12-20 10:04:27 +01:00
cpuidle-cps.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cpuidle-exynos.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
cpuidle-haltpoll.c cpuidle: haltpoll: Call cpuidle_poll_state_init() later 2022-03-09 19:59:45 +01:00
cpuidle-kirkwood.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
cpuidle-mvebu-v7.c cpuidle: mvebu: disable the bind/unbind attributes and use builtin_platform_driver 2015-10-23 12:40:48 +02:00
cpuidle-powernv.c cpuidle: powernv: move from strlcpy() with unused retval to strscpy() 2022-08-31 21:09:54 +02:00
cpuidle-psci-domain.c cpuidle: psci: Move enabling OSI mode after power domains creation 2023-08-23 17:52:17 +02:00
cpuidle-psci.c context_tracking: Take IRQ eqs entrypoints over RCU 2022-07-05 13:32:59 -07:00
cpuidle-psci.h cpuidle: Factor-out power domain related code from PSCI domain driver 2022-03-10 09:29:44 -08:00
cpuidle-pseries.c powerpc/pseries: Rework lppaca_shared_proc() to avoid DEBUG_PREEMPT 2023-09-13 09:42:48 +02:00
cpuidle-qcom-spm.c firmware: qcom: scm: Drop cpumask parameter from set_boot_addr() 2022-02-03 21:54:48 -06:00
cpuidle-riscv-sbi.c cpuidle: riscv-sbi: fix device node release in early exit of for_each_possible_cpu 2025-01-17 13:34:41 +01:00
cpuidle-tegra.c cpuidle: tegra: Check whether PMC is ready 2021-10-05 19:11:40 +02:00
cpuidle-ux500.c mfd/cpuidle: ux500: Rename driver symbol 2021-08-16 13:42:34 +01:00
cpuidle-zynq.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
cpuidle.c More power management updates for 5.20-rc1 2022-08-08 14:29:00 -07:00
cpuidle.h cpuidle: allow governor switch on cpuidle_register_driver() 2019-09-11 17:36:30 +02:00
driver.c cpuidle: Avoid potential overflow in integer multiplication 2024-04-13 13:04:54 +02:00
dt_idle_genpd.c cpuidle: dt_idle_genpd: Add helper function to remove genpd topology 2023-08-16 18:27:22 +02:00
dt_idle_genpd.h cpuidle: dt_idle_genpd: Add helper function to remove genpd topology 2023-08-16 18:27:22 +02:00
dt_idle_states.c cpuidle: dt: Return the correct numbers of parsed idle states 2022-12-31 13:31:55 +01:00
dt_idle_states.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
governor.c cpuidle: Remove redundant check in cpuidle_switch_governor() 2022-09-03 20:14:51 +02:00
Kconfig cpuidle: Add RISC-V SBI CPU idle driver 2022-03-10 09:29:51 -08:00
Kconfig.arm cpuidle: add ARCH_SUSPEND_POSSIBLE dependencies 2023-03-10 09:34:22 +01:00
Kconfig.mips treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Kconfig.powerpc treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Kconfig.riscv cpuidle: Add RISC-V SBI CPU idle driver 2022-03-10 09:29:51 -08:00
Makefile cpuidle: Add RISC-V SBI CPU idle driver 2022-03-10 09:29:51 -08:00
poll_state.c cpuidle: Drop disabled field from struct cpuidle_state 2019-11-29 11:48:39 +01:00
sysfs.c cpuidle: use default_groups in kobj_type 2022-01-05 18:31:17 +01:00