linux_dsm_epyc7002/drivers/cpuidle
Rafael J. Wysocki 32b91ca153 cpuidle: menu: Allow tick to be stopped if PM QoS is used
After commit 554c8aa8ec ("sched: idle: Select idle state before
stopping the tick") the menu governor prevents the scheduler tick from
being stopped (unless stopped already) if there is a PM QoS latency
constraint for the given CPU and the target residency of the deepest
idle state matching that constraint is below the tick boundary.

However, that is problematic if CPUs with PM QoS latency constraints
are idle for long times, because it effectively causes the tick to
run on them all the time which is wasteful.  [It is also confusing
and questionable if they are full dynticks CPUs.]

To address that issue, make the menu governor allow the tick to be
stopped only if the idle duration predicted by it is beyond the tick
boundary, except when the shallowest idle state is selected upfront
and it is not a "polling" one.

Fixes: 554c8aa8ec ("sched: idle: Select idle state before stopping the tick")
Link: https://lore.kernel.org/lkml/79b247b3-e056-610e-9a07-e685dfdaa6c9@gmail.com/
Reported-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Tested-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2019-08-05 11:02:44 +02:00
..
governors cpuidle: menu: Allow tick to be stopped if PM QoS is used 2019-08-05 11:02:44 +02:00
coupled.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
cpuidle-arm.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
cpuidle-at91.c drivers/cpuidle: Convert non-modular drivers to use builtin_platform_driver 2015-06-16 14:12:38 -04:00
cpuidle-big_little.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
cpuidle-calxeda.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
cpuidle-clps711x.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07: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: disable host side polling when kvm virtualized 2019-07-30 17:27:37 +02:00
cpuidle-kirkwood.c ARM: cpuidle: Remove duplicate header inclusion 2015-03-23 18:03:11 +01: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 powernv/cpuidle: Use parsed device tree values for cpuidle_init 2018-07-31 19:56:44 +10:00
cpuidle-pseries.c powerpc/pseries/cpuidle: Fix preempt warning 2018-12-04 19:45:01 +11:00
cpuidle-ux500.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
cpuidle-zynq.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
cpuidle.c cpuidle: add poll_limit_ns to cpuidle_device structure 2019-07-30 17:27:37 +02:00
cpuidle.h cpuidle: Add cpuidle.governor= command line parameter 2018-12-11 12:08:44 +01:00
driver.c cpuidle: Make drivers initialize polling state 2017-08-30 03:06:33 +02:00
dt_idle_states.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02: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 PM / QOS: Rename __dev_pm_qos_read_value() and dev_pm_qos_raw_read_value() 2019-07-04 10:40:54 +02:00
Kconfig cpuidle: add haltpoll governor 2019-07-30 17:27:37 +02:00
Kconfig.arm treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02: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
Makefile add cpuidle-haltpoll driver 2019-07-30 17:27:37 +02:00
poll_state.c cpuidle: add poll_limit_ns to cpuidle_device structure 2019-07-30 17:27:37 +02:00
sysfs.c cpuidle: add poll_limit_ns to cpuidle_device structure 2019-07-30 17:27:37 +02:00