Srivatsa S. Bhat
43ea953649
xen, balloon: 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).
The xen balloon driver doesn't take get/put_online_cpus() around this code,
but that is also buggy, since it can miss CPU hotplug events in between the
initialization and callback registration:
for_each_online_cpu(cpu)
init_cpu(cpu);
^
| Race window; Can miss CPU hotplug events here.
v
register_cpu_notifier(&foobar_cpu_notifier);
Interestingly, the balloon code in xen can simply be reorganized as shown
below, to have a race-free method to register hotplug callbacks, without even
taking get/put_online_cpus(). This is because the initialization performed for
already online CPUs is exactly the same as that performed for CPUs that come
online later. Moreover, the code has checks in place to avoid double
initialization.
register_cpu_notifier(&foobar_cpu_notifier);
get_online_cpus();
for_each_online_cpu(cpu)
init_cpu(cpu);
put_online_cpus();
A hotplug operation that occurs between registering the notifier and calling
get_online_cpus(), won't disrupt anything, because the code takes care to
perform the memory allocations only once.
So reorganize the balloon code in xen this way to fix the issues with CPU
hotplug callback registration.
Cc: Konrad Rzeszutek Wilk <[email protected] >
Cc: David Vrabel <[email protected] >
Cc: Ingo Molnar <[email protected] >
Reviewed-by: Boris Ostrovsky <[email protected] >
Signed-off-by: Srivatsa S. Bhat <[email protected] >
Signed-off-by: Rafael J. Wysocki <[email protected] >
2014-03-20 13:43:48 +01:00
..
accessibility
acpi
ACPI / sleep: Add extra checks for HW Reduced ACPI mode sleep states
2014-03-13 22:11:39 +01:00
amba
ata
Merge branch 'for-3.14-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata
2014-03-10 12:56:24 -07:00
atm
auxdisplay
base
drivers/base/topology.c: Fix CPU hotplug callback registration
2014-03-20 13:43:45 +01:00
bcma
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
2014-01-30 17:20:32 -08:00
block
Merge branch 'for-linus' of git://git.kernel.dk/linux-block
2014-03-07 09:59:44 -08:00
bluetooth
bus
drivers: bus: fix CCI driver kcalloc call parameters swap
2014-01-31 15:15:13 -08:00
cdrom
Merge branch 'for-3.14/drivers' of git://git.kernel.dk/linux-block
2014-01-30 11:40:10 -08:00
char
Char/Misc fixes for 3.14-rc3
2014-02-14 16:13:00 -08:00
clk
Single fix for a clock driver merged in 3.14-rc1. Without this fix the
2014-03-08 10:51:30 -08:00
clocksource
clocksource, dummy-timer: Fix CPU hotplug callback registration
2014-03-20 13:43:45 +01:00
connector
cpufreq
acpi-cpufreq: Fix CPU hotplug callback registration
2014-03-20 13:43:45 +01:00
cpuidle
powerpc/powernv/cpuidle: Back-end cpuidle driver for powernv platform.
2014-01-29 17:02:24 +11:00
crypto
crypto/nx/nx-842: Fix handling of vmalloc addresses
2014-02-11 11:24:49 +11:00
dca
devfreq
Merge branches 'pm-cpufreq' and 'pm-devfreq'
2014-01-29 11:48:23 +01:00
dio
dma
Merge branch 'fixes' of git://git.infradead.org/users/vkoul/slave-dma
2014-03-01 21:30:43 -06:00
edac
i7300_edac: Fix device reference count
2014-02-25 09:43:13 +01:00
eisa
extcon
ASoC: dapm: Add locking to snd_soc_dapm_xxxx_pin functions
2014-02-20 18:40:07 +09:00
firewire
Merge branch 'for-3.14-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
2014-03-08 11:51:13 -08:00
firmware
firmware/google: drop 'select EFI' to avoid recursive dependency
2014-01-27 21:02:40 -08:00
fmc
drivers/fmc/fmc-write-eeprom.c: fix decimal permissions
2014-02-25 15:25:43 -08:00
gpio
gpio: tb10x: GPIO_TB10X needs to select GENERIC_IRQ_CHIP
2014-02-05 11:13:59 +01:00
gpu
Merge tag 'ttm-fixes-3.14-2014-03-12' of git://people.freedesktop.org/~thomash/linux into drm-fixes
2014-03-13 17:31:24 +10:00
hid
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
2014-02-18 16:29:46 -08:00
hsi
hv
Drivers: hv: vmbus: Don't timeout during the initial connection with host
2014-02-07 08:27:34 -08:00
hwmon
hwmon, via-cputemp: Fix CPU hotplug callback registration
2014-03-20 13:43:48 +01:00
hwspinlock
i2c
i2c: Remove usage of orphaned symbol OF_I2C
2014-03-13 22:33:44 +01:00
ide
drivers: ide: Include appropriate header file in ide-pio-blacklist.c
2014-01-28 23:35:09 -08:00
idle
intel-idle: Fix CPU hotplug callback registration
2014-03-20 13:43:46 +01:00
iio
iio:gyro: bug on L3GD20H gyroscope support
2014-02-18 10:24:49 +00:00
infiniband
Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
2014-03-09 13:50:14 -07:00
input
ASoC: dapm: Add locking to snd_soc_dapm_xxxx_pin functions
2014-02-20 18:40:07 +09:00
iommu
drivers/iommu/omap-iommu-debug.c: fix decimal permissions
2014-02-25 15:25:42 -08:00
ipack
irqchip
irq-metag*: stop set_affinity vectoring to offline cpus
2014-02-25 22:35:06 +00:00
isdn
isdn/hisax: hex vs decimal typo in prfeatureind()
2014-02-06 21:18:06 -08:00
leds
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds
2014-01-28 18:53:01 -08:00
lguest
macintosh
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
2014-01-27 21:11:26 -08:00
mailbox
md
dm cache: fix access beyond end of origin device
2014-03-12 13:52:00 -04:00
media
[media] adv7842: Composite free-run platfrom-data fix
2014-02-04 06:46:10 -02:00
memory
memstick
drivers/memstick/host/rtsx_pci_ms.c: fix ms card data transfer bug
2014-01-23 16:37:04 -08:00
message
drivers/message/i2o/i2o_config.c: fix deadlock in compat_ioctl(I2OGETIOPS)
2014-02-10 16:01:40 -08:00
mfd
sound fixes for 3.14-rc4
2014-02-21 09:55:32 -08:00
misc
mm: fix GFP_THISNODE callers and clarify
2014-03-10 17:26:19 -07:00
mmc
Fix uses of dma_max_pfn() when converting to a limiting address
2014-02-17 23:08:41 +00:00
mtd
Just a single fix for the UBI module unload path which makes sure we do not
2014-02-27 10:36:50 -08:00
net
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2014-03-13 20:38:36 -07:00
nfc
ntb
nubus
of
Device tree compatible match order bug fix
2014-02-21 14:35:05 -08:00
oprofile
oprofile, nmi-timer: Fix CPU hotplug callback registration
2014-03-20 13:43:46 +01:00
parisc
parport
pci
PCI: Don't check resource_size() in pci_bus_alloc_resource()
2014-03-12 11:19:20 -06:00
pcmcia
phy
phy: let phy_provider_register be the last step in registering PHY
2014-02-18 12:13:16 -08:00
pinctrl
ARM: SoC fixes for 3.14-rc
2014-03-09 19:27:31 -07:00
platform
platform/chrome: Cleanups and improvements
2014-01-29 20:06:01 -08:00
pnp
PNP / ACPI: proper handling of ACPI IO/Memory resource parsing failures
2014-03-11 21:22:10 +01:00
power
Few fixes:
2014-02-14 10:32:28 -08:00
powercap
powercap, intel-rapl: Fix CPU hotplug callback registration
2014-03-20 13:43:44 +01:00
pps
ps3
ptp
pwm
pwm: lp3943: Fix potential memory leak during request
2014-02-26 15:45:12 +01:00
rapidio
rapidio/tsi721: fix tasklet termination in dma channel release
2014-03-04 07:55:49 -08:00
regulator
regulator: Fixes for v3.14-rc5
2014-03-04 08:41:42 -08:00
remoteproc
reset
rpmsg
rtc
drivers/rtc/rtc-s3c.c: fix incorrect way of save/restore of S3C2410_TICNT for TYPE_S3C64XX
2014-03-04 07:55:48 -08:00
s390
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2014-03-04 08:44:32 -08:00
sbus
Sparc: sparc_cpu_model isn't in asm/system.h any more [ver #2 ]
2014-02-20 13:34:11 -05:00
scsi
scsi, fcoe: Fix CPU hotplug callback registration
2014-03-20 13:43:45 +01:00
sfi
sh
sn
spi
Merge remote-tracking branches 'spi/fix/ath79', 'spi/fix/atmel', 'spi/fix/coldfire', 'spi/fix/fsl-dspi', 'spi/fix/imx' and 'spi/fix/topcliff-pch' into spi-linus
2014-03-07 11:08:13 +08:00
ssb
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
2014-01-30 17:20:32 -08:00
staging
staging/cxt1e1/linux.c: Correct arbitrary memory write in c4_ioctl()
2014-03-04 16:20:01 -08:00
target
Target/sbc: Fix sbc_copy_prot for offset scatters
2014-03-06 20:52:11 -08:00
tc
thermal
thermal, x86-pkg-temp: Fix CPU hotplug callback registration
2014-03-20 13:43:47 +01:00
tty
Revert "tty: Set correct tty name in 'active' sysfs attribute"
2014-02-22 14:31:04 -08:00
uio
usb
Revert "xhci 1.0: Limit arbitrarily-aligned scatter gather."
2014-03-07 11:48:13 -08:00
uwb
vfio
mm: close PageTail race
2014-03-04 07:55:47 -08:00
vhost
Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
2014-03-01 21:33:09 -06:00
video
video: Kconfig: Allow more broad selection of the imxfb framebuffer driver.
2014-02-14 10:44:52 +02:00
virt
virtio
vlynq
vme
VME: Correct read/write alignment algorithm
2014-02-07 08:16:14 -08:00
w1
drivers/w1/masters/w1-gpio.c: add strong pullup emulation
2014-01-23 16:37:04 -08:00
watchdog
octeon, watchdog: Fix CPU hotplug callback registration
2014-03-20 13:43:46 +01:00
xen
xen, balloon: Fix CPU hotplug callback registration
2014-03-20 13:43:48 +01:00
zorro
Kconfig
Makefile