Skip to content
  • David Gibson's avatar
    pci: Replace pci_find_domain() with more general pci_root_bus_path() · 568f0690
    David Gibson authored
    
    
    pci_find_domain() is used in a number of places where we want an id for a
    whole PCI domain (i.e. the subtree under a PCI root bus).  The trouble is
    that many platforms may support multiple independent host bridges with no
    hardware supplied notion of domain number.
    
    This patch, therefore, replaces calls to pci_find_domain() with calls to
    a new pci_root_bus_path() returning a string.  The new call is implemented
    in terms of a new callback in the host bridge class, so it can be defined
    in some way that's well defined for the platform.  When no callback is
    available we fall back on the qbus name.
    
    Most current uses of pci_find_domain() are for error or informational
    messages, so the change in identifiers should be harmless.  The exception
    is pci_get_dev_path(), whose results form part of migration streams.  To
    maintain compatibility with old migration streams, the PIIX PCI host is
    altered to always supply "0000" for this path, which matches the old domain
    number (since the code didn't actually support domains other than 0).
    
    For the pseries (spapr) PCI bridge we use a different platform-unique
    identifier (pseries machines can routinely have dozens of PCI host
    bridges).  Theoretically that breaks migration streams, but given that we
    don't yet have migration support for pseries, it doesn't matter.
    
    Any other machines that have working migration support including PCI
    devices will need to be updated to maintain migration stream compatibility.
    
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    568f0690