linux/arch/s390
Heiko Carstens db7e007fd6 s390/udelay: make udelay have busy loop semantics
When using systemtap it was observed that our udelay implementation is
rather suboptimal if being called from a kprobe handler installed by
systemtap.

The problem observed when a kprobe was installed on lock_acquired().
When the probe was hit the kprobe handler did call udelay, which set
up an (internal) timer and reenabled interrupts (only the clock comparator
interrupt) and waited for the interrupt.
This is an optimization to avoid that the cpu is busy looping while waiting
that enough time passes. The problem is that the interrupt handler still
does call irq_enter()/irq_exit() which then again can lead to a deadlock,
since some accounting functions may take locks as well.

If one of these locks is the same, which caused lock_acquired() to be
called, we have a nice deadlock.

This patch reworks the udelay code for the interrupts disabled case to
immediately leave the low level interrupt handler when the clock
comparator interrupt happens. That way no C code is being called and the
deadlock cannot happen anymore.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Reviewed-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2015-10-14 14:32:13 +02:00
..
appldata s390: appldata: drop owner assignment from platform_drivers 2014-10-20 16:20:13 +02:00
boot s390/boot/decompression: disable floating point in decompressor 2015-09-29 14:45:10 +02:00
configs s390/defconfig: set SCSI_DH=y 2015-10-01 10:48:36 +02:00
crypto s390/crypto: add cpu feature modaliases for crypto modules 2015-07-22 09:58:02 +02:00
hypfs s390/diag: add a statistic for diagnose calls 2015-10-14 14:32:06 +02:00
include s390/udelay: make udelay have busy loop semantics 2015-10-14 14:32:13 +02:00
kernel s390/udelay: make udelay have busy loop semantics 2015-10-14 14:32:13 +02:00
kvm s390/fpu: always enable the vector facility if it is available 2015-10-14 14:32:08 +02:00
lib s390/udelay: make udelay have busy loop semantics 2015-10-14 14:32:13 +02:00
mm s390/cpumf: rework program parameter setting to detect guest samples 2015-10-14 14:32:12 +02:00
net bpf: s390: Fix build error caused by the struct bpf_array member name changed 2015-08-11 11:49:40 -07:00
numa s390/numa: write kernel message when emu_size has been increased 2015-10-14 14:31:59 +02:00
oprofile s390/oprofile: fix compile error 2015-07-01 09:34:39 +02:00
pci dma-mapping: consolidate dma_set_mask 2015-09-10 13:29:01 -07:00
defconfig s390: new default configuration 2015-06-25 09:39:25 +02:00
Kbuild s390/numa: add core infrastructure 2015-08-03 18:40:25 +02:00
Kconfig s390/mm: implement soft-dirty bits for user memory change tracking 2015-10-14 14:32:05 +02:00
Kconfig.debug Kconfig: consolidate CONFIG_DEBUG_STRICT_USER_COPY_CHECKS 2013-04-30 17:04:09 -07:00
Makefile s390/sclp: convert early sclp console code to C 2015-07-29 09:11:39 +02:00