• Gavin Shan's avatar
    powerpc/powernv: Fix IOMMU group lost · 7ff8d594
    Gavin Shan authored
    commit 763fe0ad upstream.
    
    When we take full hotplug to recover from EEH errors, PCI buses
    could be involved. For the case, the child devices of involved
    PCI buses can't be attached to IOMMU group properly, which is
    caused by commit 3f28c5af ("powerpc/powernv: Reduce multi-hit of
    iommu_add_device()").
    
    When adding the PCI devices of the newly created PCI buses to
    the system, the IOMMU group is expected to be added in (C).
    (A) fails to bind the IOMMU group because bus->is_added is
    false. (B) fails because the device doesn't have binding IOMMU
    table yet. bus->is_added is set to true at end of (C) and
    pdev->is_added is set to true at (D).
    
       pcibios_add_pci_devices()
          pci_scan_bridge()
             pci_scan_child_bus()
                pci_scan_slot()
                   pci_scan_single_device()
                      pci_scan_device()
                      pci_device_add()
                         pcibios_add_device()           A: Ignore
                         device_add()                   B: Ignore
                      pcibios_fixup_bus()
                         pcibios_setup_bus_devices()
                            pcibios_setup_device()      C: Hit
          pcibios_finish_adding_to_bus()
             pci_bus_add_devices()
                pci_bus_add_device()                    D: Add device
    
    If the parent PCI bus isn't involved in hotplug, the IOMMU
    group is expected to be bound in (B). (A) should fail as the
    sysfs entries aren't populated.
    
    The patch fixes the issue by reverting commit 3f28c5af and remove
    WARN_ON() in iommu_add_device() to allow calling the function
    even the specified device already has associated IOMMU group.
    Reported-by: default avatarThadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
    Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
    Acked-by: default avatarWei Yang <weiyang@linux.vnet.ibm.com>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7ff8d594
pci-ioda.c 38.9 KB