linux/arch/powerpc
Gavin Shan feadf7c0a1 powerpc/eeh: Lock module while handling EEH event
The EEH core is talking with the PCI device driver to determine the
action (purely reset, or PCI device removal). During the period, the
driver might be unloaded and in turn causes kernel crash as follows:

EEH: Detected PCI bus error on PHB#4-PE#10000
EEH: This PCI device has failed 3 times in the last hour
lpfc 0004:01:00.0: 0:2710 PCI channel disable preparing for reset
Unable to handle kernel paging request for data at address 0x00000490
Faulting instruction address: 0xd00000000e682c90
cpu 0x1: Vector: 300 (Data Access) at [c000000fc75ffa20]
    pc: d00000000e682c90: .lpfc_io_error_detected+0x30/0x240 [lpfc]
    lr: d00000000e682c8c: .lpfc_io_error_detected+0x2c/0x240 [lpfc]
    sp: c000000fc75ffca0
   msr: 8000000000009032
   dar: 490
 dsisr: 40000000
  current = 0xc000000fc79b88b0
  paca    = 0xc00000000edb0380	 softe: 0	 irq_happened: 0x00
    pid   = 3386, comm = eehd
enter ? for help
[c000000fc75ffca0] c000000fc75ffd30 (unreliable)
[c000000fc75ffd30] c00000000004fd3c .eeh_report_error+0x7c/0xf0
[c000000fc75ffdc0] c00000000004ee00 .eeh_pe_dev_traverse+0xa0/0x180
[c000000fc75ffe70] c00000000004ffd8 .eeh_handle_event+0x68/0x300
[c000000fc75fff00] c0000000000503a0 .eeh_event_handler+0x130/0x1a0
[c000000fc75fff90] c000000000020138 .kernel_thread+0x54/0x70
1:mon>

The patch increases the reference of the corresponding driver modules
while EEH core does the negotiation with PCI device driver so that the
corresponding driver modules can't be unloaded during the period and
we're safe to refer the callbacks.

Cc: stable@vger.kernel.org
Reported-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Gavin Shan <shangw@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2012-09-18 15:32:48 +10:00
..
boot powerpc: Fix build dependencies for c files requiring libfdt.h 2012-09-07 11:44:27 +10:00
configs powerpc: Add denormalisation exception handling for POWER6/7 2012-09-17 16:31:47 +10:00
include/asm powerpc/kprobe: Introduce a new thread flag 2012-09-18 15:32:39 +10:00
kernel powerpc/kprobe: Complete kprobe and migrate exception frame 2012-09-18 15:32:42 +10:00
kvm powerpc/mm: Convert virtual address to vpn 2012-09-17 16:31:49 +10:00
lib powerpc/kprobe: Don't emulate store when kprobe stwu r1 2012-09-18 15:32:45 +10:00
math-emu powerpc/math_emu/efp: Look for errata handler when type mismatches 2011-10-06 23:36:47 -05:00
mm powerpc/mm: Make some of the PGTABLE_RANGE dependency explicit 2012-09-17 16:31:53 +10:00
net powerpc: Start using ___PPC_RA/B/S/T where necessary 2012-07-10 19:18:25 +10:00
oprofile powerpc/oprofile: Fix marked events support on Power7+ not set. 2012-09-07 11:10:54 +10:00
perf Merge branch 'merge' into next 2012-09-07 09:48:59 +10:00
platforms powerpc/eeh: Lock module while handling EEH event 2012-09-18 15:32:48 +10:00
sysdev Merge branch 'merge' into next 2012-09-07 09:48:59 +10:00
xmon powerpc: Add an xmon command to dump one or all pacas 2012-09-18 15:02:36 +10:00
Kconfig powerpc: Add denormalisation exception handling for POWER6/7 2012-09-17 16:31:47 +10:00
Kconfig.debug powerpc: IOMMU fault injection 2012-07-10 19:18:59 +10:00
Makefile crypto: nx - move nx build to driver/crypto Makefile 2012-06-27 14:42:00 +08:00
relocs_check.pl powerpc: Process dynamic relocations for kernel 2011-12-20 10:21:08 -05:00