linux/arch/powerpc/platforms
Gavin Shan b314427a52 powerpc/powernv: Fix crash on releasing compound PE
The compound PE is created to accommodate the devices attached to
one specific PCI bus that consume multiple M64 segments. The compound
PE is made up of one master PE and possibly multiple slave PEs. The
slave PEs should be destroyed when releasing the master PE. A kernel
crash happens when derferencing @pe->pdev on releasing the slave PE
in pnv_ioda_deconfigure_pe().

  # echo 0 > /sys/bus/pci/slots/C7/power
  iommu: Removing device 0000:01:00.1 from group 0
  iommu: Removing device 0000:01:00.0 from group 0
  Unable to handle kernel paging request for data at address 0x00000010
  Faulting instruction address: 0xc00000000005d898
  cpu 0x1: Vector: 300 (Data Access) at [c000000fe8217620]
      pc: c00000000005d898: pnv_ioda_release_pe+0x288/0x610
      lr: c00000000005dbdc: pnv_ioda_release_pe+0x5cc/0x610
      sp: c000000fe82178a0
     msr: 9000000000009033
     dar: 10
   dsisr: 40000000
    current = 0xc000000fe815ab80
    paca    = 0xc00000000ff00400	 softe: 0	 irq_happened: 0x01
      pid   = 2709, comm = sh
  Linux version 4.8.0-rc5-gavin-00006-g745efdb (gwshan@gwshan) \
  (gcc version 4.9.3 (Buildroot 2016.02-rc2-00093-g5ea3bce) ) #586 SMP \
  Tue Sep 6 13:37:29 AEST 2016
  enter ? for help
  [c000000fe8217940] c00000000005d684 pnv_ioda_release_pe+0x74/0x610
  [c000000fe82179e0] c000000000034460 pcibios_release_device+0x50/0x70
  [c000000fe8217a10] c0000000004aba80 pci_release_dev+0x50/0xa0
  [c000000fe8217a40] c000000000704898 device_release+0x58/0xf0
  [c000000fe8217ac0] c000000000470510 kobject_release+0x80/0xf0
  [c000000fe8217b00] c000000000704dd4 put_device+0x24/0x40
  [c000000fe8217b20] c0000000004af94c pci_remove_bus_device+0x12c/0x150
  [c000000fe8217b60] c000000000034244 pci_hp_remove_devices+0x94/0xd0
  [c000000fe8217ba0] c0000000004ca444 pnv_php_disable_slot+0x64/0xb0
  [c000000fe8217bd0] c0000000004c88c0 power_write_file+0xa0/0x190
  [c000000fe8217c50] c0000000004c248c pci_slot_attr_store+0x3c/0x60
  [c000000fe8217c70] c0000000002d6494 sysfs_kf_write+0x94/0xc0
  [c000000fe8217cb0] c0000000002d50f0 kernfs_fop_write+0x180/0x260
  [c000000fe8217d00] c0000000002334a0 __vfs_write+0x40/0x190
  [c000000fe8217d90] c000000000234738 vfs_write+0xc8/0x240
  [c000000fe8217de0] c000000000236250 SyS_write+0x60/0x110
  [c000000fe8217e30] c000000000009524 system_call+0x38/0x108

It fixes the kernel crash by bypassing releasing resources (DMA,
IO and memory segments, PELTM) because there are no resources assigned
to the slave PE.

Fixes: c5f7700bbd ("powerpc/powernv: Dynamically release PE")
Reported-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2016-09-06 14:54:46 +10:00
..
8xx powerpc updates for 4.8 # 1 2016-07-30 21:01:36 -07:00
40x powerpc updates for 4.8 # 1 2016-07-30 21:01:36 -07:00
44x powerpc updates for 4.8 # 1 2016-07-30 21:01:36 -07:00
52xx powerpc: Move 32-bit probe() machine to later in the boot process 2016-07-21 19:06:42 +10:00
82xx powerpc: Move 32-bit probe() machine to later in the boot process 2016-07-21 19:06:42 +10:00
83xx powerpc: mpc8349emitx: Delete unnecessary assignment for the field "owner" 2016-08-22 11:09:33 +10:00
85xx powerpc updates for 4.8 # 1 2016-07-30 21:01:36 -07:00
86xx powerpc updates for 4.8 # 1 2016-07-30 21:01:36 -07:00
512x powerpc/512x: Delete unnecessary assignment for the field "owner" 2016-08-22 11:09:33 +10:00
amigaone powerpc: Move 32-bit probe() machine to later in the boot process 2016-07-21 19:06:42 +10:00
cell powerpc/cell: Add missing error code in spufs_mkgang() 2016-08-09 14:50:18 +10:00
chrp powerpc: Get rid of ppc_md.init_early() 2016-07-21 19:07:26 +10:00
embedded6xx powerpc: migrate exception table users off module.h and onto extable.h 2016-08-22 11:09:33 +10:00
maple powerpc: Get rid of ppc_md.init_early() 2016-07-21 19:07:26 +10:00
pasemi powerpc/pasemi: Fix coherent_dma_mask for dma engine 2016-08-08 16:19:09 +10:00
powermac treewide: replace obsolete _refok by __ref 2016-08-02 17:31:41 -04:00
powernv powerpc/powernv: Fix crash on releasing compound PE 2016-09-06 14:54:46 +10:00
ps3 RTC for 4.8 2016-08-05 09:48:22 -04:00
pseries powerpc/pseries: Fix little endian build with CONFIG_KEXEC=n 2016-09-06 14:54:08 +10:00
fsl_uli1575.c of/irq: Refactor interrupt-map parsing 2013-10-24 11:43:04 +01:00
Kconfig RTC for 4.8 2016-08-05 09:48:22 -04:00
Kconfig.cputype powerpc32: provide VIRT_CPU_ACCOUNTING 2016-07-09 01:43:50 -05:00
Makefile powerpc: Remove platforms/wsp and associated pieces 2014-06-11 16:35:38 +10:00