spapr: Don't use bus number for building DRC ids
commit05929a6c5dfe1028ef66250b7bbf11939f8e77cd
authorDavid Gibson <david@gibson.dropbear.id.au>
Wed, 10 Apr 2019 01:49:28 +0000 (10 11:49 +1000)
committerDavid Gibson <david@gibson.dropbear.id.au>
Wed, 12 Jun 2019 00:41:49 +0000 (12 10:41 +1000)
treef33ce2839b43b42289bf63e0501a95d1a5c50762
parenta1ec25b287dd64bdb782061168f8e34552102d48
spapr: Don't use bus number for building DRC ids

DRC ids are more or less arbitrary, as long as they're consistent.  For
PCI, we notionally build them from the phb's index along with PCI bus
number, slot and function number.

Using bus number is broken, however, because it can change if the guest
re-enumerates the PCI topology for whatever reason (e.g. due to hotplug
of a bridge, which we don't support yet but want to).

Fortunately, there's an alternative.  Bridges are required to have a unique
non-zero "chassis number" that we can use instead.  Adjust the code to
use that instead.

This looks like it would introduce a guest visible breaking change, but
in fact it does not because we don't yet ever use non-zero bus numbers.
Both chassis and bus number are always 0 for the root bus, so there's no
change for the existing cases.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
hw/ppc/spapr_pci.c