android_kernel_oneplus_msm8998/drivers/cpufreq
Rafael J. Wysocki 8bfa06ea6e cpufreq: Avoid cpufreq_suspend() deadlock on system shutdown
commit 65650b35133ff20f0c9ef0abd5c3c66dbce3ae57 upstream.

It is incorrect to set the cpufreq syscore shutdown callback pointer
to cpufreq_suspend(), because that function cannot be run in the
syscore stage of system shutdown for two reasons: (a) it may attempt
to carry out actions depending on devices that have already been shut
down at that point and (b) the RCU synchronization carried out by it
may not be able to make progress then.

The latter issue has been present since commit 45975c7d21a1 ("rcu:
Define RCU-sched API in terms of RCU for Tree RCU PREEMPT builds"),
but the former one has been there since commit 90de2a4aa9 ("cpufreq:
suspend cpufreq governors on shutdown") regardless.

Fix that by dropping cpufreq_syscore_ops altogether and making
device_shutdown() call cpufreq_suspend() directly before shutting
down devices, which is along the lines of what system-wide power
management does.

Fixes: 45975c7d21a1 ("rcu: Define RCU-sched API in terms of RCU for Tree RCU PREEMPT builds")
Fixes: 90de2a4aa9 ("cpufreq: suspend cpufreq governors on shutdown")
Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Tested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Cc: 4.0+ <stable@vger.kernel.org> # 4.0+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-10-29 09:13:31 +01:00
..
acpi-cpufreq.c cpufreq: acpi_cpufreq: prevent crash on reading freqdomain_cpus 2015-10-08 21:47:13 +02:00
amd_freq_sensitivity.c
arm_big_little.c cpufreq: arm_big_little: fix frequency check when bL switcher is active 2015-11-02 01:58:27 +01:00
arm_big_little.h PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
arm_big_little_dt.c PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02:00
at32ap-cpufreq.c
blackfin-cpufreq.c
cppc_cpufreq.c cpufreq: cppc_cpufreq: Fix cppc_cpufreq_init() failure path 2018-05-30 07:49:11 +02:00
cpufreq-dt.c PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +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: Avoid cpufreq_suspend() deadlock on system shutdown 2019-10-29 09:13:31 +01:00
cpufreq_conservative.c cpufreq: conservative: Allow down_threshold to take values from 1 to 10 2017-06-26 07:13:08 +02:00
cpufreq_governor.c cpufreq: Fix NULL reference crash while accessing policy->governor_data 2016-03-03 15:07:25 -08:00
cpufreq_governor.h cpufreq: Use struct kobj_attribute instead of struct global_attr 2019-03-23 08:44:21 +01:00
cpufreq_ondemand.c cpufreq: ondemand: Drop unnecessary locks from update_sampling_rate() 2015-10-28 09:20:04 +01:00
cpufreq_performance.c
cpufreq_powersave.c
cpufreq_stats.c
cpufreq_userspace.c cpufreq: Fix GOV_LIMITS handling for the userspace governor 2016-09-15 08:27:54 +02: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
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 cpufreq: imx6q: add return value check for voltage scale 2018-12-01 09:46:34 +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 cpufreq: Use struct kobj_attribute instead of struct global_attr 2019-03-23 08:44:21 +01:00
Kconfig cpufreq: Add Loongson machine dependencies 2018-02-03 17:04:27 +01:00
Kconfig.arm cpufreq: CPPC: add ACPI_PROCESSOR dependency 2017-10-21 17:09:06 +02:00
Kconfig.powerpc
Kconfig.x86 Revert "cpufreq: intel_pstate: Use ACPI perf configuration" 2015-11-19 00:20:42 +01:00
kirkwood-cpufreq.c
longhaul.c
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 ARM: SoC driver updates for v4.4 2015-11-10 15:00:03 -08:00
maple-cpufreq.c
mt8173-cpufreq.c PM / OPP: Prefix exported opp routines with dev_pm_opp_ 2015-09-15 02:03:16 +02: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 cpufreq/pasemi: fix use-after-free in pas_cpufreq_cpu_init() 2019-08-25 10:52:47 +02:00
pcc-cpufreq.c
pmac32-cpufreq.c cpufreq: pmac32: fix possible object reference leak 2019-06-11 12:24:01 +02:00
pmac64-cpufreq.c
powernow-k6.c
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 powerpc/powernv: remove FW_FEATURE_OPALv3 and just use FW_FEATURE_OPAL 2018-05-26 08:48:53 +02:00
ppc_cbe_cpufreq.c cpufreq: ppc_cbe: fix possible object reference leak 2019-06-11 12:24:01 +02:00
ppc_cbe_cpufreq.h
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
pxa2xx-cpufreq.c cpufreq: pxa2xx: remove incorrect __init annotation 2019-03-23 08:44:36 +01:00
pxa3xx-cpufreq.c
qoriq-cpufreq.c cpufreq: qoriq: optimize the CPU frequency switching time 2015-06-15 15:47:28 +02:00
s3c24xx-cpufreq-debugfs.c
s3c24xx-cpufreq.c cpufreq: s3c24xx: Fix broken s3c_cpufreq_init() 2018-03-11 16:19:44 +01:00
s3c64xx-cpufreq.c
s3c2410-cpufreq.c
s3c2412-cpufreq.c
s3c2416-cpufreq.c cpufreq: s3c2416: double free on driver init error path 2017-07-05 14:37:22 +02: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 cpufreq/sh: Replace racy task affinity logic 2018-03-24 10:58:41 +01:00
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
tegra20-cpufreq.c cpufreq: tegra20: remove superfluous CONFIG_PM ifdefs 2015-09-26 03:00:57 +02:00
tegra124-cpufreq.c cpufreq: tegra124: add missing of_node_put() 2019-03-23 08:44:36 +01:00
unicore2-cpufreq.c
vexpress-spc-cpufreq.c