linux/arch/powerpc/platforms/powernv
Alexey Kardashevskiy 8f5b27347e powerpc/powernv/sriov: Register IOMMU groups for VFs
The compound IOMMU group rework moved iommu_register_group() together
in pnv_pci_ioda_setup_iommu_api() (which is a part of
ppc_md.pcibios_fixup). As the result, pnv_ioda_setup_bus_iommu_group()
does not create groups any more, it only adds devices to groups.

This works fine for boot time devices. However IOMMU groups for
SRIOV's VFs were added by pnv_ioda_setup_bus_iommu_group() so this got
broken: pnv_tce_iommu_bus_notifier() expects a group to be registered
for VF and it is not.

This adds missing group registration and adds a NULL pointer check
into the bus notifier so we won't crash if there is no group, although
it is not expected to happen now because of the change above.

Example oops seen prior to this patch:

  $ echo 1 > /sys/bus/pci/devices/0000\:01\:00.0/sriov_numvfs
  Unable to handle kernel paging request for data at address 0x00000030
  Faulting instruction address: 0xc0000000004a6018
  Oops: Kernel access of bad area, sig: 11 [#1]
  LE SMP NR_CPUS=2048 NUMA PowerNV
  CPU: 46 PID: 7006 Comm: bash Not tainted 4.15-ish
  NIP:  c0000000004a6018 LR: c0000000004a6014 CTR: 0000000000000000
  REGS: c000008fc876b400 TRAP: 0300   Not tainted  (4.15-ish)
  MSR:  900000000280b033 <SF,HV,VEC,VSX,EE,FP,ME,IR,DR,RI,LE>
  CFAR: c000000000d0be20 DAR: 0000000000000030 DSISR: 40000000 SOFTE: 1
  ...
  NIP sysfs_do_create_link_sd.isra.0+0x68/0x150
  LR  sysfs_do_create_link_sd.isra.0+0x64/0x150
  Call Trace:
    pci_dev_type+0x0/0x30 (unreliable)
    iommu_group_add_device+0x8c/0x600
    iommu_add_device+0xe8/0x180
    pnv_tce_iommu_bus_notifier+0xb0/0xf0
    notifier_call_chain+0x9c/0x110
    blocking_notifier_call_chain+0x64/0xa0
    device_add+0x524/0x7d0
    pci_device_add+0x248/0x450
    pci_iov_add_virtfn+0x294/0x3e0
    pci_enable_sriov+0x43c/0x580
    mlx5_core_sriov_configure+0x15c/0x2f0 [mlx5_core]
    sriov_numvfs_store+0x180/0x240
    dev_attr_store+0x3c/0x60
    sysfs_kf_write+0x64/0x90
    kernfs_fop_write+0x1ac/0x240
    __vfs_write+0x3c/0x70
    vfs_write+0xd8/0x220
    SyS_write+0x6c/0x110
    system_call+0x58/0x6c

Fixes: 0bd971676e ("powerpc/powernv/npu: Add compound IOMMU groups")
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reported-by: Santwana Samantray <santwana.samantray@in.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2019-02-19 11:51:18 +11:00
..
Kconfig PCI: consolidate PCI config entry in drivers/pci 2018-11-23 11:45:34 +09:00
Makefile powerpc/powernv: Move TCE manupulation code to its own file 2018-07-16 22:53:07 +10:00
copy-paste.h powerpc/powernv: copy/paste - Mask SO bit in CR 2018-06-04 22:58:41 +10:00
eeh-powernv.c powerpc/powernv/eeh/npu: Fix uninitialized variables in opal_pci_eeh_freeze_status 2018-12-20 22:59:03 +11:00
idle.c powerpc/powernv/idle: Fix build error 2018-08-10 22:12:39 +10:00
memtrace.c powerpc/powernv: hold device_hotplug_lock when calling memtrace_offline_pages() 2018-10-31 08:54:17 -07:00
npu-dma.c powerpc/powernv/npu: Allocate enough memory in pnv_try_setup_npu_table_group() 2019-01-11 23:44:54 +11:00
ocxl.c ocxl: Rename pnv_ocxl_spa_remove_pe to clarify it's action 2018-06-03 20:40:32 +10:00
opal-async.c powerpc/opal: Add opal_async_wait_response_interruptible() to opal-async 2017-11-06 20:39:28 +11:00
opal-dump.c powerpc/powernv/opal-dump : Use IRQ_HANDLED instead of numbers in interrupt handler 2018-07-24 22:03:24 +10:00
opal-elog.c powerpc: Use octal numbers for file permissions 2018-01-22 05:48:33 +11:00
opal-flash.c powerpc/powernv: Always stop secondaries before reboot/shutdown 2018-04-03 22:59:57 +10:00
opal-hmi.c powerpc-opal: fix spelling mistake "Uniterrupted" -> "Uninterrupted" 2018-06-05 11:33:47 +10:00
opal-imc.c powerpc/perf: Unregister thread-imc if core-imc not supported 2018-06-03 20:43:37 +10:00
opal-irqchip.c powerpc/powernv/opal: Use standard interrupts property when available 2018-08-08 00:32:38 +10:00
opal-kmsg.c powerpc/powernv: Implement and use opal_flush_console 2018-07-24 22:09:56 +10:00
opal-lpc.c Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
opal-memory-errors.c powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
opal-msglog.c locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns to READ_ONCE()/WRITE_ONCE() 2017-10-25 11:01:08 +02:00
opal-nvram.c powerpc/powernv: Fix NVRAM sleep in invalid context when crashing 2018-05-18 00:23:07 +10:00
opal-power.c powerpc/powernv: Move opal_power_control_init() call in opal_init(). 2018-12-21 11:32:49 +11:00
opal-powercap.c powerpc: Convert to using %pOFn instead of device_node.name 2018-10-03 15:40:01 +10:00
opal-prd.c vfs: do bulk POLL* -> EPOLL* replacement 2018-02-11 14:34:03 -08:00
opal-psr.c powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
opal-rtc.c powerpc: use time64_t in read_persistent_clock 2018-06-03 20:43:33 +10:00
opal-sensor-groups.c powerpc: Convert to using %pOFn instead of device_node.name 2018-10-03 15:40:01 +10:00
opal-sensor.c powernv: opal-sensor: Add support to read 64bit sensor values 2018-05-21 14:48:02 +10:00
opal-sysparam.c powerpc: Convert to using %pOFn instead of device_node.name 2018-10-03 15:40:01 +10:00
opal-tracepoints.c jump_label: move 'asm goto' support test to Kconfig 2019-01-06 09:46:51 +09:00
opal-wrappers.S jump_label: move 'asm goto' support test to Kconfig 2019-01-06 09:46:51 +09:00
opal-xscom.c powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
opal.c powerpc: Use of_node_name_eq for node name comparisons 2018-12-22 21:29:50 +11:00
pci-cxl.c Revert "powerpc/powernv: Add support for the cxl kernel api on the real phb" 2018-07-02 23:54:32 +10:00
pci-ioda-tce.c powerpc/powernv: Reference iommu_table while it is linked to a group 2018-12-21 16:20:46 +11:00
pci-ioda.c powerpc/powernv/sriov: Register IOMMU groups for VFs 2019-02-19 11:51:18 +11:00
pci.c powerpc/powernv/sriov: Register IOMMU groups for VFs 2019-02-19 11:51:18 +11:00
pci.h powerpc/powernv/npu: Add compound IOMMU groups 2018-12-21 16:20:46 +11:00
powernv.h powerpc/powernv: process all OPAL event interrupts with kopald 2018-06-03 20:40:30 +10:00
rng.c powerpc: Convert to using %pOF instead of full_name 2017-08-23 22:27:04 +10:00
setup.c powerpc/powernv: Make possible for user to force a full ipl cec reboot 2018-10-03 15:39:45 +10:00
smp.c powerpc/64s: Remove POWER9 DD1 support 2018-07-16 11:37:21 +10:00
subcore-asm.S powerpc/powernv: Add support for POWER8 split core on powernv 2014-05-28 13:35:37 +10:00
subcore.c powerpc/64: Use array of paca pointers and allocate pacas individually 2018-03-30 23:34:23 +11:00
subcore.h powernv/powerpc: Add winkle support for offline cpus 2014-12-15 10:46:41 +11:00
vas-debug.c powerpc/powernv/vas: Use DEFINE_SHOW_ATTRIBUTE macro 2018-11-25 17:11:22 +11:00
vas-trace.h powerpc/vas: Add a couple of trace points 2018-03-14 20:13:58 +11:00
vas-window.c ppc: Convert vas ID allocation to new IDA API 2018-08-21 23:54:19 -04:00
vas.c powerpc/vas: Fix cleanup when VAS is not configured 2018-03-14 20:11:37 +11:00
vas.h powerpc: clean the inclusion of stringify.h 2018-07-30 22:48:17 +10:00