linux/arch/s390/kernel
Heiko Carstens 9acf73b7d0 s390/smp: lost IPIs on cpu hotplug
IPIs might be lost when a cpu gets brought offline:

When stop_machine executes its state machine there is a race window
for the state STOPMACHINE_DISABLE_IRQ where the to be brought offline
cpu might already have irqs disabled but a different cpu still may
have irqs enabled.
If the enabled cpu receives an interrupt and as a result sends an IPI
to the to be offlined cpu in its bottom halve context, the IPI won't
be noticed before the cpu is offline.

In fact the race window is much larger since there is no guarantee
when an IPI will be received.

To fix this check for enqueued but not yet received IPIs in the
cpu_disable() path and call the respective handlers before the cpu
is marked offline.

Reported-by: Juergen Doelle <juergen.doelle@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2013-05-27 09:16:15 +02:00
..
vdso32
vdso64
.gitignore
Makefile s390/mem_detect: move memory detection code to mm folder 2013-05-02 15:50:22 +02:00
asm-offsets.c s390: system call path micro optimization 2013-04-26 09:07:05 +02:00
audit.c
audit.h
base.S
bitmap.c
cache.c
compat_audit.c
compat_exec_domain.c
compat_linux.c merge compat sys_ipc instances 2013-03-03 23:00:27 -05:00
compat_linux.h merge compat sys_ipc instances 2013-03-03 23:00:27 -05:00
compat_ptrace.h
compat_signal.c s390/signal: Add BEA to compat signal handler parameters 2013-04-17 14:07:35 +02:00
compat_wrapper.S switch compat_sys_sysctl to COMPAT_SYSCALL_DEFINE 2013-05-09 14:53:20 -04:00
cpcmd.c
crash_dump.c s390/mem_detect: remove artificial kdump memory types 2013-05-03 14:21:15 +02:00
debug.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-02-26 20:16:07 -08:00
diag.c
dis.c s390/disassembler: prevent endless loop in print_fn_code() 2013-05-07 14:11:55 +02:00
dumpstack.c dump_stack: unify debug information printed by show_regs() 2013-04-30 17:04:02 -07:00
early.c s390/mem_detect: limit memory detection loop to "mem=" parameter 2013-05-02 15:50:26 +02:00
ebcdic.c
entry.S s390: system call path micro optimization 2013-04-26 09:07:05 +02:00
entry.h s390/hibernate: Save and restore absolute zero pages 2013-04-17 14:07:30 +02:00
entry64.S s390: system call path micro optimization 2013-04-26 09:07:05 +02:00
ftrace.c s390/ftrace: fix mcount adjustment 2013-05-15 13:09:09 +02:00
head.S
head31.S
head64.S
head_kdump.S
ipl.c s390/ipl: Implement diag308 loop for zfcpdump 2013-02-14 15:55:05 +01:00
irq.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-05-01 17:51:54 -07:00
jump_label.c
kprobes.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
lgr.c
machine_kexec.c s390/kdump: Add PM notifier for kdump 2013-04-15 13:34:44 +02:00
mcount.S s390/ftrace: fix mcount adjustment 2013-05-15 13:09:09 +02:00
mcount64.S s390/ftrace: fix mcount adjustment 2013-05-15 13:09:09 +02:00
module.c s390/module: fix compile warning 2013-02-28 09:37:13 +01:00
nmi.c s390/time: rename tod clock access functions 2013-02-14 15:55:10 +01:00
os_info.c Include missing linux/slab.h inclusions 2013-04-29 15:42:01 -04:00
perf_cpum_cf.c s390/perf: cpum_cf: fallback to software sampling events 2013-02-14 15:55:15 +01:00
perf_event.c
pgm_check.S
process.c s390: Use generic idle loop 2013-04-08 17:39:27 +02:00
processor.c
ptrace.c
reipl.S
reipl64.S
relocate_kernel.S
relocate_kernel64.S
runtime_instr.c s390/irq: remove split irq fields from /proc/stat 2013-01-08 10:57:07 +01:00
s390_ksyms.c
sclp.S
setup.c s390/mem_detect: remove artificial kdump memory types 2013-05-03 14:21:15 +02:00
signal.c s390/uaccess: remove pointless access_ok() checks 2013-02-28 09:37:09 +01:00
smp.c s390/smp: lost IPIs on cpu hotplug 2013-05-27 09:16:15 +02:00
stacktrace.c
suspend.c s390/hibernate: Save and restore absolute zero pages 2013-04-17 14:07:30 +02:00
swsusp_asm64.S s390/hibernate: Save and restore absolute zero pages 2013-04-17 14:07:30 +02:00
sys_s390.c teach SYSCALL_DEFINE<n> how to deal with long long/unsigned long long 2013-03-03 22:46:22 -05:00
syscalls.S switch compat_sys_sysctl to COMPAT_SYSCALL_DEFINE 2013-05-09 14:53:20 -04:00
sysinfo.c
time.c s390/time: rename tod clock access functions 2013-02-14 15:55:10 +01:00
topology.c s390/topology: export cpu_topology 2013-01-08 10:57:10 +01:00
traps.c s390/dumpstack: fix call chain walking 2013-04-17 14:07:28 +02:00
vdso.c
vmlinux.lds.S s390/linker skript: discard exit.data at runtime 2013-02-14 15:55:21 +01:00
vtime.c s390: Use generic idle loop 2013-04-08 17:39:27 +02:00