linux/drivers/cpufreq
Viresh Kumar c75de0ac07 cpufreq: Schedule work for the first-online CPU on resume
All CPUs leaving the first-online CPU are hotplugged out on suspend and
and cpufreq core stops managing them.

On resume, we need to call cpufreq_update_policy() for this CPU's policy
to make sure its frequency is in sync with cpufreq's cached value, as it
might have got updated by hardware during suspend/resume.

The policies are always added to the top of the policy-list. So, in
normal circumstances, CPU 0's policy will be the last one in the list.
And so the code checks for the last policy.

But there are cases where it will fail. Consider quad-core system, with
policy-per core. If CPU0 is hotplugged out and added back again, the
last policy will be on CPU1 :(

To fix this in a proper way, always look for the policy of the first
online CPU. That way we will be sure that we are calling
cpufreq_update_policy() for the only CPU that wasn't hotplugged out.

Cc: 3.15+ <stable@vger.kernel.org> # 3.15+
Fixes: 2f0aea9363 ("cpufreq: suspend governors on system suspend/hibernate")
Reported-by: Saravana Kannan <skannan@codeaurora.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Saravana Kannan <skannan@codeaurora.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2015-04-03 12:59:47 +02:00
..
Kconfig rcu: Make SRCU optional by using CONFIG_SRCU 2015-01-06 11:04:29 -08:00
Kconfig.arm cpufreq: exynos: allow modular build 2015-01-31 14:56:27 -04:00
Kconfig.powerpc clk: ppc-corenet: rename driver to clk-qoriq 2015-01-20 10:09:12 -08:00
Kconfig.x86 cpufreq: Add SFI based cpufreq driver support 2014-12-20 13:37:37 -05:00
Makefile Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal 2015-02-19 17:51:22 -08:00
acpi-cpufreq.c cpufreq: Use cpufreq_for_each_* macros for frequency table iteration 2014-04-30 00:06:21 +02:00
amd_freq_sensitivity.c cpufreq: AMD "frequency sensitivity feedback" powersave bias for ondemand governor 2013-04-10 13:19:26 +02:00
arm_big_little.c cpufreq: arm_big_little: free OPP table created during ->init() 2014-12-02 00:01:24 +01:00
arm_big_little.h cpufreq: arm_big_little: free OPP table created during ->init() 2014-12-02 00:01:24 +01:00
arm_big_little_dt.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
at32ap-cpufreq.c cpufreq: at32ap: don't declare local variable as static 2014-04-07 14:31:33 +02:00
blackfin-cpufreq.c cpufreq: Remove cpufreq_generic_exit() 2014-03-12 01:06:00 +01:00
cpufreq-dt.c cpufreq-dt: Drop unnecessary check before cpufreq_cooling_unregister() invocation 2015-02-03 23:28:37 +01:00
cpufreq-nforce2.c cpufreq: nforce2: remove DEFINE_PCI_DEVICE_TABLE macro 2014-05-17 01:16:15 +02:00
cpufreq.c cpufreq: Schedule work for the first-online CPU on resume 2015-04-03 12:59:47 +02:00
cpufreq_conservative.c cpufreq: conservative: set requested_freq to policy max when it is over policy max 2013-11-12 23:18:20 +01:00
cpufreq_governor.c cpufreq: governor: remove copy_prev_load from 'struct cpu_dbs_common_info' 2014-06-09 12:58:21 +02:00
cpufreq_governor.h cpufreq: governor: remove copy_prev_load from 'struct cpu_dbs_common_info' 2014-06-09 12:58:21 +02:00
cpufreq_ondemand.c cpufreq: ondemand: Eliminate the deadband effect 2014-07-21 13:43:19 +02:00
cpufreq_opp.c cpufreq / OPP: Fix the order of arguments for kcalloc() 2014-09-08 00:02:58 +02:00
cpufreq_performance.c cpufreq: Clean up header files included in the core 2013-08-07 23:34:09 +02:00
cpufreq_powersave.c cpufreq: Clean up header files included in the core 2013-08-07 23:34:09 +02:00
cpufreq_stats.c cpufreq: stats: drop unnecessary locking 2015-01-23 23:06:45 +01:00
cpufreq_userspace.c cpufreq / governor: Remove fossil comment 2013-10-17 23:00:20 +02:00
cris-artpec3-cpufreq.c cpufreq: create another field .flags in cpufreq_frequency_table 2014-04-07 14:43:50 +02:00
cris-etraxfs-cpufreq.c cpufreq: create another field .flags in cpufreq_frequency_table 2014-04-07 14:43:50 +02:00
davinci-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
dbx500-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
e_powersaver.c cpufreq: add 'freq_table' in struct cpufreq_policy 2014-03-12 01:06:00 +01:00
elanfreq.c cpufreq: Use cpufreq_for_each_* macros for frequency table iteration 2014-04-30 00:06:21 +02:00
exynos-cpufreq.c cpufreq: exynos: Use simple approach to asses if cpu cooling can be used 2015-03-02 10:04:52 +01:00
exynos-cpufreq.h ACPI and power management updates for 3.16-rc1 2014-06-04 08:57:16 -07:00
exynos4x12-cpufreq.c cpufreq: cpu0: rename driver and internals to 'cpufreq_dt' 2014-10-03 15:37:54 +02:00
exynos4210-cpufreq.c cpufreq: cpu0: rename driver and internals to 'cpufreq_dt' 2014-10-03 15:37:54 +02:00
exynos5250-cpufreq.c cpufreq: cpu0: rename driver and internals to 'cpufreq_dt' 2014-10-03 15:37:54 +02:00
exynos5440-cpufreq.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
freq_table.c cpufreq: Introduce new relation for freq selection 2014-07-21 13:43:19 +02:00
gx-suspmod.c cpufreq: Convert existing drivers to use cpufreq_freq_transition_{begin|end} 2014-03-26 16:41:41 +01:00
highbank-cpufreq.c Merge branch 'mailbox-for-linus' of git://git.linaro.org/landing-teams/working/fujitsu/integration 2014-10-21 11:21:19 -07:00
ia64-acpi-cpufreq.c cpufreq: use kzalloc() to allocate memory for cpufreq_frequency_table 2014-04-07 14:43:49 +02:00
imx6q-cpufreq.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
integrator-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
intel_pstate.c intel_pstate: provide option to only use intel_pstate with HWP 2015-02-06 22:54:18 +01:00
kirkwood-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
longhaul.c Update/Remove soon-to-be-dead email address 2014-12-19 12:56:15 -08:00
longhaul.h cpufreq: delete __cpuinit usage from all cpufreq files 2013-07-14 19:36:57 -04:00
longrun.c cpufreq: add new routine cpufreq_verify_within_cpu_limits() 2013-10-16 00:50:23 +02:00
loongson2_cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
ls1x-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2015-01-23 22:19:15 +01:00
maple-cpufreq.c cpufreq: create another field .flags in cpufreq_frequency_table 2014-04-07 14:43:50 +02:00
omap-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
p4-clockmod.c cpufreq: create another field .flags in cpufreq_frequency_table 2014-04-07 14:43:50 +02:00
pasemi-cpufreq.c cpufreq: Use cpufreq_for_each_* macros for frequency table iteration 2014-04-30 00:06:21 +02:00
pcc-cpufreq.c cpufreq: pcc: Enable autoload of pcc-cpufreq for ACPI processors 2014-11-14 00:16:25 +01:00
pmac32-cpufreq.c powerpc: Remove powerpc specific cmd_line 2014-10-02 17:33:55 +10:00
pmac64-cpufreq.c of: Migrate of_find_node_by_name() users to for_each_node_by_name() 2014-06-26 17:12:24 +01:00
powernow-k6.c Update/Remove soon-to-be-dead email address 2014-12-19 12:56:15 -08:00
powernow-k7.c Update/Remove soon-to-be-dead email address 2014-12-19 12:56:15 -08:00
powernow-k7.h [CPUFREQ] Move x86 drivers to drivers/cpufreq/ 2011-05-19 18:51:07 -04:00
powernow-k8.c cpufreq: powernow-k8: Suppress checkpatch warnings 2014-05-17 01:27:01 +02:00
powernow-k8.h cpufreq: powernow-k8: Suppress checkpatch warnings 2014-05-17 01:27:01 +02:00
powernv-cpufreq.c cpufreq: powernv: Set the cpus to nominal frequency during reboot/kexec 2014-09-29 15:53:04 +02:00
ppc-corenet-cpufreq.c cpufreq: ppc: Add missing #include <asm/smp.h> 2015-03-04 14:14:54 +01:00
ppc_cbe_cpufreq.c cpufreq: Use cpufreq_for_each_* macros for frequency table iteration 2014-04-30 00:06:21 +02:00
ppc_cbe_cpufreq.h cpufreq: powerpc/platforms/cell: move cpufreq driver to drivers/cpufreq 2013-04-10 13:19:26 +02:00
ppc_cbe_cpufreq_pervasive.c cpufreq: powerpc/platforms/cell: move cpufreq driver to drivers/cpufreq 2013-04-10 13:19:26 +02:00
ppc_cbe_cpufreq_pmi.c cpufreq: powerpc/platforms/cell: move cpufreq driver to drivers/cpufreq 2013-04-10 13:19:26 +02:00
pxa2xx-cpufreq.c cpufreq: Remove cpufreq_generic_exit() 2014-03-12 01:06:00 +01:00
pxa3xx-cpufreq.c cpufreq: Remove cpufreq_generic_exit() 2014-03-12 01:06:00 +01:00
s3c24xx-cpufreq-debugfs.c cpufreq: s3c24xx: move cpufreq driver to drivers/cpufreq 2013-05-20 23:04:28 +09:00
s3c24xx-cpufreq.c cpufreq: s3c: remove last use of resume_clocks callback 2015-02-19 06:36:53 +01:00
s3c64xx-cpufreq.c cpufreq: Use cpufreq_for_each_* macros for frequency table iteration 2014-04-30 00:06:21 +02:00
s3c2410-cpufreq.c cpufreq: s3c24xx: Remove some dead code 2014-07-19 04:24:59 +09:00
s3c2412-cpufreq.c cpufreq: s3c24xx: Remove some dead code 2014-07-19 04:24:59 +09:00
s3c2416-cpufreq.c cpufreq: s3c: remove incorrect __init annotations 2015-02-19 06:36:53 +01:00
s3c2440-cpufreq.c cpufreq: s3c24xx: Remove some dead code 2014-07-19 04:24:59 +09:00
s5pv210-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
sa1100-cpufreq.c cpufreq: Mark ARM drivers with CPUFREQ_NEED_INITIAL_FREQ_CHECK flag 2014-01-06 14:17:25 +01:00
sa1110-cpufreq.c cpufreq: sa1110: set memory type for h3600 2014-07-16 14:30:17 +02:00
sc520_freq.c cpufreq: create another field .flags in cpufreq_frequency_table 2014-04-07 14:43:50 +02:00
sfi-cpufreq.c cpufreq: Add SFI based cpufreq driver support 2014-12-20 13:37:37 -05:00
sh-cpufreq.c cpufreq: Convert existing drivers to use cpufreq_freq_transition_{begin|end} 2014-03-26 16:41:41 +01:00
sparc-us2e-cpufreq.c cpufreq: add 'freq_table' in struct cpufreq_policy 2014-03-12 01:06:00 +01:00
sparc-us3-cpufreq.c cpufreq: add 'freq_table' in struct cpufreq_policy 2014-03-12 01:06:00 +01:00
spear-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00
speedstep-centrino.c cpufreq: Make linux-pm@vger.kernel.org official mailing list 2014-05-01 01:15:32 +02:00
speedstep-ich.c Update/Remove soon-to-be-dead email address 2014-12-19 12:56:15 -08:00
speedstep-lib.c cpufreq: speedstep-smi: enable interrupts when waiting 2015-02-12 02:02:52 +01:00
speedstep-lib.h [CPUFREQ] Move x86 drivers to drivers/cpufreq/ 2011-05-19 18:51:07 -04:00
speedstep-smi.c cpufreq: speedstep-smi: enable interrupts when waiting 2015-02-12 02:02:52 +01:00
tegra-cpufreq.c cpufreq: tegra: update comment for clarity 2014-06-10 22:50:50 +02:00
unicore2-cpufreq.c cpufreq: unicore32: replace IS_ERR and PTR_ERR with PTR_ERR_OR_ZERO 2014-04-21 23:42:27 +02:00
vexpress-spc-cpufreq.c cpufreq: drop owner assignment from platform_drivers 2014-10-20 16:20:24 +02:00