• Niklas Schnelle's avatar
    s390/pci: separate zbus registration from scanning · 14c87ba8
    Niklas Schnelle authored
    Now that the zbus can be created without being scanned we can go one
    step further and make registering a device to a zbus independent from
    scanning it. This way the zbus handling becomes much more natural
    in that functions can be registered on the zbus to be scanned later more
    closely resembling the handling of both real PCI hardware and other
    virtual PCI busses like Hyper-V's virtual PCI bus (see for example
    drivers/pci/controller/pci-hyperv.c:create_root_hv_pci_bus()).
    
    Having zbus registration separate from scanning allows us to return
    fully initialized but still disabled zdevs from zpci_create_device()
    which can then be configured just as we would configure a zdev from
    standby (minus the SCLP Configure already done by the platform).  There
    is still the exception that a PCI function with non-zero devfn can be
    plugged before its PCI bus, which depends on the function with zero
    devfn, is created. In this case the zdev returend from
    zpci_create_device() is still missing its bus, hotplug slot, and
    resources which need to be created later but at least it doesn't wait in
    the enabled state and can otherwise be treated as initialized.
    
    With this we also separate the initial PCI scan using CLP List PCI
    Functions into two phases. In the CLP loop's callback we only register
    each function with a virtual zbus creating the latter as needed. Then,
    after we have built this virtual PCI topology based on our list of
    zbusses, we can make use of the common code functionality to scan each
    complete zbus as a separate child bus.
    Reviewed-by: default avatarMatthew Rosato <mjrosato@linux.ibm.com>
    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>
    14c87ba8
pci_bus.h 996 Bytes