• Alexey Kardashevskiy's avatar
    powerpc/powernv/sriov: Register IOMMU groups for VFs · 8f5b2734
    Alexey Kardashevskiy authored
    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: 0bd97167 ("powerpc/powernv/npu: Add compound IOMMU groups")
    Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Reported-by: default avatarSantwana Samantray <santwana.samantray@in.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    8f5b2734
pci-ioda.c 107 KB