linux/drivers/cpufreq
Rafael J. Wysocki ffb810563c intel_pstate: Avoid getting stuck in high P-states when idle
Jörg Otte reports that commit a4675fbc4a (cpufreq: intel_pstate:
Replace timers with utilization update callbacks) caused the CPUs in
his Haswell-based system to stay in the very high frequency region
even if the system is completely idle.

That turns out to be an existing problem in the intel_pstate driver's
P-state selection algorithm for Core processors.  Namely, all
decisions made by that algorithm are based on the average frequency
of the CPU between sampling events and on the P-state requested on
the last invocation, so it may get stuck at a very hight frequency
even if the utilization of the CPU is very low (in fact, it may get
stuck in a inadequate P-state regardless of the CPU utilization).
The only way to kick it out of that limbo is a sufficiently long idle
period (3 times longer than the prescribed sampling interval), but if
that doesn't happen often enough (eg. due to a timing change like
after the above commit), the P-state of the CPU may be inadequate
pretty much all the time.

To address the most egregious manifestations of that issue, reset the
core_busy value used to determine the next P-state to request if the
utilization of the CPU, determined with the help of the MPERF
feedback register and the TSC, is below 1%.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=115771
Reported-and-tested-by: Jörg Otte <jrg.otte@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2016-04-10 05:59:10 +02:00
..
acpi-cpufreq.c cpufreq: acpi-cpufreq: make Intel/AMD MSR access, io port access static 2016-03-22 23:09:50 +01:00
amd_freq_sensitivity.c cpufreq: governor: Make governor private data per-policy 2016-03-09 14:41:08 +01:00
arm_big_little_dt.c PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
arm_big_little.c cpufreq: arm_big_little: Add support to register a cpufreq cooling device 2015-12-10 00:14:58 +01:00
arm_big_little.h PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
at32ap-cpufreq.c
blackfin-cpufreq.c blackfin-cpufreq: Mark cpu_set_cclk() as static 2015-12-28 01:51:36 +01:00
cppc_cpufreq.c cpufreq: CPPC: Initialize and check CPUFreq CPU co-ord type correctly 2015-11-23 22:21:18 +01:00
cpufreq_conservative.c cpufreq: governor: Relocate definitions of tuners structures 2016-03-09 14:41:09 +01:00
cpufreq_governor.c cpufreq: governor: Always schedule work on the CPU running update 2016-03-22 23:13:36 +01:00
cpufreq_governor.h cpufreq: governor: Make dbs_data_mutex static 2016-03-09 14:41:09 +01:00
cpufreq_ondemand.c cpufreq: governor: Move per-CPU data to the common code 2016-03-09 14:41:09 +01:00
cpufreq_ondemand.h cpufreq: governor: Relocate definitions of tuners structures 2016-03-09 14:41:09 +01:00
cpufreq_performance.c cpufreq: Clean up default and fallback governor setup 2016-02-05 02:37:42 +01:00
cpufreq_powersave.c cpufreq: Clean up default and fallback governor setup 2016-02-05 02:37:42 +01:00
cpufreq_stats.c cpufreq: stats: drop unnecessary locking 2015-01-23 23:06:45 +01:00
cpufreq_userspace.c cpufreq: Clean up default and fallback governor setup 2016-02-05 02:37:42 +01:00
cpufreq-dt.c cpufreq: dt: Drop stale comment 2016-04-05 03:40:44 +02:00
cpufreq-nforce2.c cpufreq: nforce2: Fix typo in comment to function nforce2_init() 2015-06-15 15:45:24 +02:00
cpufreq.c cpufreq: Always update current frequency before startig governor 2016-03-22 23:13:36 +01:00
cris-artpec3-cpufreq.c
cris-etraxfs-cpufreq.c
davinci-cpufreq.c
dbx500-cpufreq.c
e_powersaver.c ACPI / processor: Drop an unused argument of a cleanup routine 2015-07-22 22:11:16 +02:00
elanfreq.c
exynos5440-cpufreq.c PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
freq_table.c cpufreq: Allow drivers to enable boost support after registering driver 2015-08-07 03:25:23 +02:00
gx-suspmod.c cpufreq: gx-suspmod: Fix two typos in two comments 2015-06-15 15:46:15 +02:00
highbank-cpufreq.c
hisi-acpu-cpufreq.c cpufreq: hisilicon: add acpu driver 2015-04-02 02:24:54 +02:00
ia64-acpi-cpufreq.c cpufreq: ia64: Fix a memory leak in acpi_cpufreq_cpu_exit() 2015-07-22 22:27:40 +02:00
imx6q-cpufreq.c Merge branch 'pm-opp' 2015-11-02 00:54:37 +01:00
integrator-cpufreq.c cpufreq: integrator: Fix module autoload for OF platform driver 2015-09-25 23:29:35 +02:00
intel_pstate.c intel_pstate: Avoid getting stuck in high P-states when idle 2016-04-10 05:59:10 +02:00
Kconfig cpufreq: Select IRQ_WORK if CPU_FREQ_GOV_COMMON is set 2016-03-09 15:01:37 +01:00
Kconfig.arm Merge back earlier cpufreq material for v4.5. 2015-12-21 03:15:15 +01:00
Kconfig.powerpc cpufreq: qoriq: rename the driver 2015-03-18 22:35:16 +01:00
Kconfig.x86 Revert "cpufreq: intel_pstate: Use ACPI perf configuration" 2015-11-19 00:20:42 +01:00
kirkwood-cpufreq.c
longhaul.c Update/Remove soon-to-be-dead email address 2014-12-19 12:56:15 -08:00
longhaul.h
longrun.c
loongson2_cpufreq.c CPUFREQ: Loongson2: Fix broken build due to incorrect include. 2015-08-03 09:24:59 +02:00
ls1x-cpufreq.c MIPS: Loongson: Naming style cleanup and rework 2015-06-21 21:53:59 +02:00
Makefile cpufreq: st: Provide runtime initialised driver for ST's platforms 2015-12-12 02:55:21 +01:00
maple-cpufreq.c
mt8173-cpufreq.c cpufreq: mt8173: migrate to use operating-points-v2 bindings 2016-01-02 00:49:33 +01:00
omap-cpufreq.c
p4-clockmod.c p4-clockmod: Replace cpu_sibling_mask() with topology_sibling_cpumask() 2015-05-27 15:22:16 +02:00
pasemi-cpufreq.c
pcc-cpufreq.c cpufreq: pcc-cpufreq: update default value of cpuinfo_transition_latency 2015-12-10 00:17:03 +01:00
pmac32-cpufreq.c
pmac64-cpufreq.c
powernow-k6.c Update/Remove soon-to-be-dead email address 2014-12-19 12:56:15 -08:00
powernow-k7.c ACPI / processor: Drop an unused argument of a cleanup routine 2015-07-22 22:11:16 +02:00
powernow-k7.h
powernow-k8.c ACPI / processor: Drop an unused argument of a cleanup routine 2015-07-22 22:11:16 +02:00
powernow-k8.h
powernv-cpufreq.c cpufreq: powernv: Add sysfs attributes to show throttle stats 2016-03-22 23:11:18 +01:00
ppc_cbe_cpufreq_pervasive.c
ppc_cbe_cpufreq_pmi.c cpufreq: remove redundant CPUFREQ_INCOMPATIBLE notifier event 2015-09-01 15:50:38 +02:00
ppc_cbe_cpufreq.c
ppc_cbe_cpufreq.h
pxa2xx-cpufreq.c cpufreq: pxa2xx: fix pxa_cpufreq_change_voltage prototype 2016-01-27 23:22:50 +01:00
pxa3xx-cpufreq.c
qoriq-cpufreq.c cpufreq: qoriq: Register cooling device based on device tree 2015-12-10 00:19:35 +01:00
s3c24xx-cpufreq-debugfs.c
s3c24xx-cpufreq.c cpufreq: s3c24xx: Do not mark s3c2410_plls_add as __init 2015-11-27 10:10:32 +09:00
s3c64xx-cpufreq.c
s3c2410-cpufreq.c
s3c2412-cpufreq.c
s3c2416-cpufreq.c cpufreq: s3c: remove incorrect __init annotations 2015-02-19 06:36:53 +01:00
s3c2440-cpufreq.c
s5pv210-cpufreq.c cpufreq: s5pv210-cpufreq: fix wrong do_div() usage 2015-11-05 22:50:48 +01:00
sa1100-cpufreq.c
sa1110-cpufreq.c
sc520_freq.c
scpi-cpufreq.c cpufreq: scpi-cpufreq: signedness bug in scpi_get_dvfs_info() 2015-12-24 02:11:37 +01:00
sfi-cpufreq.c cpufreq: sfi: use kmemdup rather than duplicating its implementation 2015-09-01 15:51:15 +02:00
sh-cpufreq.c
sparc-us2e-cpufreq.c
sparc-us3-cpufreq.c
spear-cpufreq.c
speedstep-centrino.c
speedstep-ich.c speedstep-ich: Replace cpu_sibling_mask() with topology_sibling_cpumask() 2015-05-27 15:22:16 +02:00
speedstep-lib.c cpufreq: speedstep-lib: Use monotonic clock 2015-09-01 15:51:43 +02:00
speedstep-lib.h
speedstep-smi.c cpufreq: speedstep-smi: enable interrupts when waiting 2015-02-12 02:02:52 +01:00
sti-cpufreq.c cpufreq: st: Provide runtime initialised driver for ST's platforms 2015-12-12 02:55:21 +01:00
tegra20-cpufreq.c cpufreq: tegra20: remove superfluous CONFIG_PM ifdefs 2015-09-26 03:00:57 +02:00
tegra124-cpufreq.c cpufreq: Add cpufreq driver for Tegra124 2015-07-16 09:34:09 +02:00
unicore2-cpufreq.c
vexpress-spc-cpufreq.c