linux/arch/powerpc
Michael Ellerman 6772faa1ba powerpc/perf: Fix deadlock caused by calling printk() in PMU exception
In commit bc09c21 "Fix finding overflowed PMC in interrupt" we added
a printk() to the PMU exception handler. Unfortunately that is not safe.

The problem is that the PMU exception may run even when interrupts are
soft disabled, aka NMI context. We do this so that we can profile parts
of the kernel that have interrupts soft-disabled.

But by calling printk() from the exception handler, we can potentially
deadlock in the printk code on logbuf_lock, eg:

  [c00000038ba575c0] c000000000081928 .vprintk_emit+0xa8/0x540
  [c00000038ba576a0] c0000000007bcde8 .printk+0x48/0x58
  [c00000038ba57710] c000000000076504 .perf_event_interrupt+0x2d4/0x490
  [c00000038ba57810] c00000000001f6f8 .performance_monitor_exception+0x48/0x60
  [c00000038ba57880] c0000000000032cc performance_monitor_common+0x14c/0x180
  --- Exception: f01 (Performance Monitor) at c0000000007b25d4 ._raw_spin_lock_irq
  +0x64/0xc0
  [c00000038ba57bf0] c00000000007ed90 .devkmsg_read+0xd0/0x5a0
  [c00000038ba57d00] c0000000001c2934 .vfs_read+0xc4/0x1e0
  [c00000038ba57d90] c0000000001c2cd8 .SyS_read+0x58/0xd0
  [c00000038ba57e30] c000000000009d54 syscall_exit+0x0/0x98
  --- Exception: c01 (System Call) at 00001fffffbf6f7c
  SP (3ffff6d4de10) is in userspace

Fix it by making sure we only call printk() when we are not in NMI
context.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Cc: <stable@vger.kernel.org> # 3.9
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2013-06-10 08:36:32 +10:00
..
boot MMC highlights for 3.10: 2013-05-04 13:45:17 -07:00
configs USB: remove remaining instances of USB_SUSPEND 2013-05-15 13:44:44 -04:00
crypto powerpc: Fix compile of sha1-powerpc-asm.S on 32-bit 2013-03-05 16:56:26 +11:00
include powerpc/hw_breakpoints: Add DABRX cpu feature to fix 32-bit regression 2013-06-10 08:36:29 +10:00
kernel powerpc/hw_breakpoints: Add DABRX cpu feature to fix 32-bit regression 2013-06-10 08:36:29 +10:00
kvm powerpc/kvm/book3s: Add support for H_IPOLL and H_XIRR_X in XICS emulation 2013-06-01 08:29:27 +10:00
lib powerpc/pseries: Improve stream generation comments in copypage/user 2013-06-01 08:29:26 +10:00
math-emu
mm powerpc/mm: Always invalidate tlb on hpte invalidate and update 2013-06-01 08:29:26 +10:00
net filter: bpf_jit_comp: refactor and unify BPF JIT image dump output 2013-03-21 17:25:56 -04:00
oprofile Merge branch 'merge' into next 2013-01-29 11:33:37 +11:00
perf powerpc/perf: Fix deadlock caused by calling printk() in PMU exception 2013-06-10 08:36:32 +10:00
platforms powerpc/eeh: Don't check RTAS token to get PE addr 2013-06-10 08:36:16 +10:00
sysdev powerpc/mpic: Fix irq distribution problem when MPIC_SINGLE_DEST_CPU 2013-06-01 08:29:24 +10:00
xmon Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2013-05-02 10:16:16 -07:00
Kconfig Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
Kconfig.debug powerpc: Add an in memory udbg console 2013-05-08 06:36:49 +10:00
Makefile powerpc: Avoid load of static chain register when calling nested functions through a pointer on 64bit 2013-01-10 17:01:27 +11:00
relocs_check.pl