Viresh Kumar
92c14bd947
cpufreq: move policy kobj to policy->cpu at resume
...
This is only relevant to implementations with multiple clusters, where clusters
have separate clock lines but all CPUs within a cluster share it.
Consider a dual cluster platform with 2 cores per cluster. During suspend we
start hot unplugging CPUs in order 1 to 3. When CPU2 is removed, policy->kobj
would be moved to CPU3 and when CPU3 goes down we wouldn't free policy or its
kobj as we want to retain permissions/values/etc.
Now on resume, we will get CPU2 before CPU3 and will call __cpufreq_add_dev().
We will recover the old policy and update policy->cpu from 3 to 2 from
update_policy_cpu().
But the kobj is still tied to CPU3 and isn't moved to CPU2. We wouldn't create a
link for CPU2, but would try that for CPU3 while bringing it online. Which will
report errors as CPU3 already has kobj assigned to it.
This bug got introduced with commit 42f921a , which overlooked this scenario.
To fix this, lets move kobj to the new policy->cpu while bringing first CPU of a
cluster back. Also do a WARN_ON() if kobject_move failed, as we would reach here
only for the first CPU of a non-boot cluster. And we can't recover from this
situation, if kobject_move() fails.
Fixes: 42f921a6f1 (cpufreq: remove sysfs files for CPUs which failed to come back after resume)
Cc: 3.13+ <stable@vger.kernel.org> # 3.13+
Reported-and-tested-by: Bu Yitian <ybu@qti.qualcomm.com>
Reported-by: Saravana Kannan <skannan@codeaurora.org>
Reviewed-by: Srivatsa S. Bhat <srivatsa@mit.edu>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2014-07-17 14:23:22 +02: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
arm_big_little.c
cpufreq: Use cpufreq_for_each_* macros for frequency table iteration
2014-04-30 00:06:21 +02:00
arm_big_little.h
arm_big_little_dt.c
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-cpu0.c
cpufreq: cpu0: OPPs can be populated at runtime
2014-07-16 15:12:52 +02:00
cpufreq-nforce2.c
cpufreq: nforce2: remove DEFINE_PCI_DEVICE_TABLE macro
2014-05-17 01:16:15 +02:00
cpufreq.c
cpufreq: move policy kobj to policy->cpu at resume
2014-07-17 14:23:22 +02:00
cpufreq_conservative.c
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_opp.c
PM / OPP: Move cpufreq specific OPP functions out of generic OPP library
2014-05-07 00:39:03 +02:00
cpufreq_performance.c
cpufreq_powersave.c
cpufreq_stats.c
cpufreq: Use cpufreq_for_each_* macros for frequency table iteration
2014-04-30 00:06:21 +02:00
cpufreq_userspace.c
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: Remove cpufreq_generic_exit()
2014-03-12 01:06:00 +01:00
dbx500-cpufreq.c
cpufreq: Use cpufreq_for_each_* macros for frequency table iteration
2014-04-30 00:06:21 +02:00
e_powersaver.c
elanfreq.c
cpufreq: Use cpufreq_for_each_* macros for frequency table iteration
2014-04-30 00:06:21 +02:00
exynos-cpufreq.c
ACPI and power management updates for 3.16-rc1
2014-06-04 08:57:16 -07: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: exynos: Fix driver compilation with ARCH_MULTIPLATFORM
2014-05-31 03:00:25 +09:00
exynos4210-cpufreq.c
cpufreq: exynos: Fix driver compilation with ARCH_MULTIPLATFORM
2014-05-31 03:00:25 +09:00
exynos5250-cpufreq.c
cpufreq: exynos: Fix driver compilation with ARCH_MULTIPLATFORM
2014-05-31 03:00:25 +09:00
exynos5440-cpufreq.c
cpufreq: Use cpufreq_for_each_* macros for frequency table iteration
2014-04-30 00:06:21 +02:00
freq_table.c
cpufreq: Break out early when frequency equals target_freq
2014-05-20 14:02:09 +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
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
cpufreq: imx6q: Remove unused include
2014-05-17 01:34:42 +02:00
integrator-cpufreq.c
cpufreq: Convert existing drivers to use cpufreq_freq_transition_{begin|end}
2014-03-26 16:41:41 +01:00
intel_pstate.c
intel_pstate: Set CPU number before accessing MSRs
2014-07-07 01:24:24 +02:00
Kconfig
cpufreq: cpufreq-cpu0: fix CPU_THERMAL dependency
2014-06-16 22:33:38 +02:00
Kconfig.arm
cpufreq: kirkwood: Reinstate cpufreq driver for ARCH_KIRKWOOD
2014-07-16 15:12:03 +02:00
Kconfig.powerpc
cpufreq: powernv: cpufreq driver for powernv platform
2014-04-07 14:35:27 +02:00
Kconfig.x86
cpufreq: Kconfig: Fix spelling errors
2014-05-01 01:18:19 +02:00
kirkwood-cpufreq.c
cpufreq: create another field .flags in cpufreq_frequency_table
2014-04-07 14:43:50 +02:00
longhaul.c
Merge branch 'cpufreq-macros' into pm-cpufreq
2014-05-01 00:50:47 +02:00
longhaul.h
longrun.c
loongson2_cpufreq.c
MIPS/loongson2_cpufreq: Fix CPU clock rate setting
2014-05-13 00:29:41 +02:00
Makefile
cpufreq: Makefile: fix compilation for davinci platform
2014-07-09 02:54:15 +02:00
maple-cpufreq.c
cpufreq: create another field .flags in cpufreq_frequency_table
2014-04-07 14:43:50 +02:00
omap-cpufreq.c
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: Convert existing drivers to use cpufreq_freq_transition_{begin|end}
2014-03-26 16:41:41 +01:00
pmac32-cpufreq.c
cpufreq: create another field .flags in cpufreq_frequency_table
2014-04-07 14:43:50 +02:00
pmac64-cpufreq.c
cpufreq: create another field .flags in cpufreq_frequency_table
2014-04-07 14:43:50 +02:00
powernow-k6.c
Merge branch 'cpufreq-macros' into pm-cpufreq
2014-05-01 00:50:47 +02:00
powernow-k7.c
cpufreq: powernow-k7: Fix double invocation of cpufreq_freq_transition_begin/end
2014-04-29 01:22:54 +02:00
powernow-k7.h
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: make local function static
2014-05-17 01:25:46 +02:00
ppc-corenet-cpufreq.c
cpufreq: ppc-corenet-cpu-freq: do_div use quotient
2014-06-06 22:50:43 +02: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
ppc_cbe_cpufreq_pervasive.c
ppc_cbe_cpufreq_pmi.c
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
s3c24xx-cpufreq.c
ARM: S3C24XX: cpufreq-utils: don't write raw values to MPLLCON when using ccf
2014-05-09 05:48:44 +09: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
s3c2412-cpufreq.c
s3c2416-cpufreq.c
cpufreq: Use cpufreq_for_each_* macros for frequency table iteration
2014-04-30 00:06:21 +02:00
s3c2440-cpufreq.c
s5pv210-cpufreq.c
cpufreq: s5pv210: drop check for CONFIG_PM_VERBOSE
2014-05-27 01:06:44 +02:00
sa1100-cpufreq.c
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
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
sparc-us3-cpufreq.c
spear-cpufreq.c
cpufreq: use kzalloc() to allocate memory for cpufreq_frequency_table
2014-04-07 14:43:49 +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
cpufreq: create another field .flags in cpufreq_frequency_table
2014-04-07 14:43:50 +02:00
speedstep-lib.c
speedstep-lib.h
speedstep-smi.c
cpufreq: create another field .flags in cpufreq_frequency_table
2014-04-07 14:43:50 +02: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