• Niklas Schnelle's avatar
    s390/pci: fix PF/VF linking on hot plug · b97bf44f
    Niklas Schnelle authored
    Currently there are four places in which a PCI function is scanned
    and made available to drivers:
     1. In pci_scan_root_bus() as part of the initial zbus
        creation.
     2. In zpci_bus_add_devices() when registering
        a device in configured state on a zbus that has already been
        scanned.
     3. When a function is already known to zPCI (in reserved/standby state)
        and configuration is triggered through firmware by PEC 0x301.
     4. When a device is already known to zPCI (in standby/reserved state)
        and configuration is triggered from within Linux using
        enable_slot().
    
    The PF/VF linking step and setting of pdev->is_virtfn introduced with
    commit e5794cf1 ("s390/pci: create links between PFs and VFs") was
    only triggered for the second case, which is where VFs created through
    sriov_numvfs usually land. However unlike some other platforms but like
    POWER VFs can be individually enabled/disabled through
    /sys/bus/pci/slots.
    
    Fix this by doing VF setup as part of pcibios_bus_add_device() which is
    called in all of the above cases.
    
    Finally to remove the PF/VF links call the common code
    pci_iov_remove_virtfn() function to remove linked VFs.
    This takes care of the necessary sysfs cleanup.
    
    Fixes: e5794cf1 ("s390/pci: create links between PFs and VFs")
    Cc: <stable@vger.kernel.org> # 5.8: 2f0230b2: s390/pci: re-introduce zpci_remove_device()
    Cc: <stable@vger.kernel.org> # 5.8
    Acked-by: default avatarPierre Morel <pmorel@linux.ibm.com>
    Signed-off-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
    Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    b97bf44f
pci_bus.c 7.23 KB