linux/arch/powerpc/platforms
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
..
8xx Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
40x
44x powerpc: Fix assmption of end_of_DRAM() returns end address 2012-07-03 14:14:49 +10:00
52xx powerpc: Mark const init data with __initconst instead of __initdata 2012-04-02 14:00:03 +10:00
82xx powerpc/82xx: add SPI support for mgcoge 2012-07-10 07:07:20 -05:00
83xx powerpc/83xx: fix RGMII AC values workaround for km83xx 2012-07-10 07:07:20 -05:00
85xx Merge remote-tracking branch 'kumar/merge' into merge 2012-07-31 15:18:31 +10:00
86xx PCI changes for the 3.6 merge window: 2012-07-24 16:17:07 -07:00
512x irq_domain/powerpc: constify irq_domain_ops 2012-02-16 06:11:24 -07:00
amigaone
cell powerpc/mm: Convert virtual address to vpn 2012-09-17 16:31:49 +10:00
chrp powerpc/mpic: Remove duplicate MPIC_WANTS_RESET flag 2012-02-23 10:50:00 +11:00
embedded6xx Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
maple Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
pasemi powerpc: Remove all includes of <asm/abs_addr.h> 2012-09-05 15:19:33 +10:00
powermac Merge branch 'merge' into next 2012-05-09 10:57:57 +10:00
powernv powerpc/powernv: Remove unused functions 2012-09-17 16:35:16 +10:00
prep
ps3 powerpc/mm: Convert virtual address to vpn 2012-09-17 16:31:49 +10:00
pseries powerpc/eeh: Lock module while handling EEH event 2012-09-18 15:32:48 +10:00
wsp Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
fsl_uli1575.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
Kconfig KVM: PPC: Factor out guest epapr initialization 2012-05-30 11:43:10 +02:00
Kconfig.cputype powerpc/e500: add paravirt QEMU platform 2012-07-11 07:49:36 -05:00
Makefile powerpc: Remove the main legacy iSerie platform code 2012-03-09 10:35:11 +11:00