Srivatsa S. Bhat
0197fbd212
acpi-cpufreq: Fix CPU hotplug callback registration
...
Subsystems that want to register CPU hotplug callbacks, as well as perform
initialization for the CPUs that are already online, often do it as shown
below:
get_online_cpus();
for_each_online_cpu(cpu)
init_cpu(cpu);
register_cpu_notifier(&foobar_cpu_notifier);
put_online_cpus();
This is wrong, since it is prone to ABBA deadlocks involving the
cpu_add_remove_lock and the cpu_hotplug.lock (when running concurrently
with CPU hotplug operations).
Instead, the correct and race-free way of performing the callback
registration is:
cpu_notifier_register_begin();
for_each_online_cpu(cpu)
init_cpu(cpu);
/* Note the use of the double underscored version of the API */
__register_cpu_notifier(&foobar_cpu_notifier);
cpu_notifier_register_done();
Fix the acpi-cpufreq code by using this latter form of callback registration.
Cc: Ingo Molnar <[email protected] >
Acked-by: Viresh Kumar <[email protected] >
Signed-off-by: Srivatsa S. Bhat <[email protected] >
Signed-off-by: Rafael J. Wysocki <[email protected] >
2014-03-20 13:43:45 +01:00
..
acpi-cpufreq.c
acpi-cpufreq: Fix CPU hotplug callback registration
2014-03-20 13:43:45 +01:00
amd_freq_sensitivity.c
arm_big_little.c
cpufreq: Mark ARM drivers with CPUFREQ_NEED_INITIAL_FREQ_CHECK flag
2014-01-06 14:17:25 +01:00
arm_big_little.h
cpufreq: arm_big_little: add in-kernel switching (IKS) support
2013-10-31 00:10:53 +01:00
arm_big_little_dt.c
PM / OPP: rename header to linux/pm_opp.h
2013-10-25 22:33:23 +02:00
at32ap-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
blackfin-cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
cpufreq-cpu0.c
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
2014-01-24 17:13:49 -08:00
cpufreq-nforce2.c
cpufreq: nforce2: don't initialize part of policy set by core
2013-10-16 00:50:29 +02:00
cpufreq.c
cpufreq: Skip current frequency initialization for ->setpolicy drivers
2014-03-13 00:37:16 +01: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: Fix timer/workqueue corruption by protecting reading governor_enabled
2014-01-06 01:22:02 +01:00
cpufreq_governor.h
cpufreq: Fix timer/workqueue corruption by protecting reading governor_enabled
2014-01-06 01:22:02 +01:00
cpufreq_ondemand.c
cpufreq: ondemand: Remove redundant return statement
2013-11-01 00:44:34 +01:00
cpufreq_performance.c
cpufreq_powersave.c
cpufreq_stats.c
cpufreq: stats: create sysfs entries when cpufreq_stats is a module
2014-01-17 02:00:44 +01:00
cpufreq_userspace.c
cpufreq / governor: Remove fossil comment
2013-10-17 23:00:20 +02:00
cris-artpec3-cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
cris-etraxfs-cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
davinci-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
dbx500-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
e_powersaver.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
elanfreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
exynos-cpufreq.c
cpufreq: exynos: Extend Exynos cpufreq driver to support boost
2014-01-17 02:00:45 +01:00
exynos-cpufreq.h
cpufreq: exynos: move definitions for exynos-cpufreq into drivers/cpufreq/
2013-12-19 05:21:18 +09:00
exynos4x12-cpufreq.c
ACPI and power management updates for 3.14-rc1
2014-01-24 15:51:02 -08:00
exynos4210-cpufreq.c
Samsung cleanup 2nd for v3.14
2013-12-28 15:12:07 -08:00
exynos5250-cpufreq.c
ACPI and power management updates for 3.14-rc1
2014-01-24 15:51:02 -08:00
exynos5440-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
freq_table.c
cpufreq: Add boost frequency support in core
2014-01-17 02:00:44 +01:00
gx-suspmod.c
cpufreq: gx: don't initialize part of policy set by core
2013-10-16 00:50:30 +02:00
highbank-cpufreq.c
cpufreq: highbank-cpufreq: Enable Midway/ECX-2000
2013-10-17 00:53:08 +02:00
ia64-acpi-cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
imx6q-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
integrator-cpufreq.c
cpufreq: Mark ARM drivers with CPUFREQ_NEED_INITIAL_FREQ_CHECK flag
2014-01-06 14:17:25 +01:00
intel_pstate.c
intel_pstate: Change busy calculation to use fixed point math.
2014-02-26 00:56:49 +01:00
Kconfig
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
2014-01-24 17:13:49 -08:00
Kconfig.arm
cpufreq / boost: Kconfig: Support for software-managed BOOST
2014-01-17 02:00:45 +01:00
Kconfig.powerpc
cpufreq: remove CONFIG_CPU_FREQ_TABLE
2013-10-16 00:50:33 +02:00
Kconfig.x86
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2013-11-15 16:47:22 -08:00
kirkwood-cpufreq.c
cpufreq: Mark ARM drivers with CPUFREQ_NEED_INITIAL_FREQ_CHECK flag
2014-01-06 14:17:25 +01:00
longhaul.c
cpufreq: Implement light weight ->target_index() routine
2013-10-25 22:42:24 +02:00
longhaul.h
longrun.c
loongson2_cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
Makefile
cpufreq: arm_big_little: add vexpress SPC interface driver
2013-10-30 00:48:26 +01:00
maple-cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
omap-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
p4-clockmod.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
pasemi-cpufreq.c
ACPI and power management updates for 3.13-rc1
2013-11-14 13:41:48 +09:00
pcc-cpufreq.c
cpufreq: send new set of notification for transition failures
2014-01-06 01:43:44 +01:00
pmac32-cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
pmac64-cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
powernow-k6.c
powernow-k6: reorder frequencies
2014-01-06 15:53:07 +01:00
powernow-k7.c
cpufreq: Implement light weight ->target_index() routine
2013-10-25 22:42:24 +02:00
powernow-k7.h
powernow-k8.c
cpufreq: powernow-k8: Initialize per-cpu data-structures properly
2014-02-19 01:04:56 +01:00
powernow-k8.h
ppc-corenet-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
ppc_cbe_cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
ppc_cbe_cpufreq.h
ppc_cbe_cpufreq_pervasive.c
ppc_cbe_cpufreq_pmi.c
pxa2xx-cpufreq.c
cpufreq: Mark ARM drivers with CPUFREQ_NEED_INITIAL_FREQ_CHECK flag
2014-01-06 14:17:25 +01:00
pxa3xx-cpufreq.c
cpufreq: Mark ARM drivers with CPUFREQ_NEED_INITIAL_FREQ_CHECK flag
2014-01-06 14:17:25 +01:00
s3c24xx-cpufreq-debugfs.c
s3c24xx-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
s3c64xx-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
s3c2410-cpufreq.c
s3c2412-cpufreq.c
s3c2416-cpufreq.c
cpufreq: Mark ARM drivers with CPUFREQ_NEED_INITIAL_FREQ_CHECK flag
2014-01-06 14:17:25 +01:00
s3c2440-cpufreq.c
cpufreq: s3c2440: Staticize local variables
2014-01-06 01:18:33 +01:00
s5pv210-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01: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: Mark ARM drivers with CPUFREQ_NEED_INITIAL_FREQ_CHECK flag
2014-01-06 14:17:25 +01:00
sc520_freq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
sh-cpufreq.c
cpufreq: sh: don't initialize part of policy set by core
2013-10-16 00:50:32 +02:00
sparc-us2e-cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
sparc-us3-cpufreq.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
spear-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
speedstep-centrino.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
speedstep-ich.c
cpufreq: move freq change notifications to cpufreq core
2013-10-31 00:11:08 +01:00
speedstep-lib.c
speedstep-lib.h
speedstep-smi.c
cpufreq: speedstep: remove unused speedstep_get_state
2014-01-17 02:00:43 +01:00
tegra-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
unicore2-cpufreq.c
cpufreq: introduce cpufreq_generic_get() routine
2014-01-17 02:00:44 +01:00
vexpress-spc-cpufreq.c
cpufreq: arm_big_little: add vexpress SPC interface driver
2013-10-30 00:48:26 +01:00