linux/arch/s390
Heiko Carstens 0008204ffe s390/idle: fix sequence handling vs cpu hotplug
The s390 idle accounting code uses a sequence counter which gets used
when the per cpu idle statistics get updated and read.

One assumption on read access is that only when the sequence counter is
even and did not change while reading all values the result is valid.
On cpu hotplug however the per cpu data structure gets initialized via
a cpu hotplug notifier on CPU_ONLINE.
CPU_ONLINE however is too late, since the onlined cpu is already running
and might access the per cpu data. Worst case is that the data structure
gets initialized while an idle thread is updating its idle statistics.
This will result in an uneven sequence counter after an update.

As a result user space tools like top, which access /proc/stat in order
to get idle stats, will busy loop waiting for the sequence counter to
become even again, which will never happen until the queried cpu will
update its idle statistics again. And even then the sequence counter
will only have an even value for a couple of cpu cycles.

Fix this by moving the initialization of the per cpu idle statistics
to cpu_init(). I prefer that solution in favor of changing the
notifier to CPU_UP_PREPARE, which would be a different solution to
the problem.

Cc: stable@vger.kernel.org
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2012-07-17 10:34:27 +02:00
..
appldata sched/accounting: Change cpustat fields to an array 2011-12-06 09:06:38 +01:00
boot s390: add various .gitignore files. 2012-05-16 14:42:41 +02:00
crypto Disintegrate asm/system.h for S390 2012-03-28 18:30:02 +01:00
hypfs s390/hypfs: Add missing get_next_ino() 2012-07-16 10:53:21 +02:00
include/asm s390/smp: make absolute lowcore / cpu restart parameter accesses more robust 2012-06-14 09:09:02 +02:00
kernel s390/idle: fix sequence handling vs cpu hotplug 2012-07-17 10:34:27 +02:00
kvm s390/smp/kvm: unifiy sigp definitions 2012-06-05 13:23:35 +02:00
lib s390/headers: replace __s390x__ with CONFIG_64BIT where possible 2012-05-24 10:10:10 +02:00
math-emu s390: change to new flag variable 2011-03-17 14:02:57 +01:00
mm s390/kernel: Introduce memcpy_absolute() function 2012-05-30 09:04:49 +02:00
oprofile s390/irq: split irq stats for cpu-measurement alert facilities 2012-05-23 17:06:52 +02:00
defconfig s390/crypto des: add missing select statement 2012-05-16 14:42:36 +02:00
Kbuild [S390] make arch/s390 subdirectories depend on config option 2011-12-27 11:27:12 +01:00
Kconfig Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2012-05-31 10:51:10 -07:00
Kconfig.debug [S390] Write protect module text and RO data 2011-03-15 17:08:23 +01:00
Makefile s390: Use generic init_task 2012-05-05 13:00:25 +02:00