[libvirt] [PATCH 17/26] qemu: Deal with PHB naming convention

Andrea Bolognani abologna at redhat.com
Wed Jun 14 03:16:27 UTC 2017

On Tue, 2017-06-13 at 22:10 -0400, Laine Stump wrote:
> > Usually, a controller with alias 'x' will create a bus with the
> > same name; however, the bus created by a PHBs with alias 'x' will
> > be named 'x.0' instead, so we need to account for that.
> This doesn't make sense to me. My recollection (without going through
> the code again) is that for PCI controllers, the alias for pci-root is
> "pci.0" as long as the qemu binary supports multiple PCI controllers
> (otherwise it is just "pci"), and the alias is pcie.0 for pcie-root,
> then all other PCI controllers have the alias (i.e. value of "contAlias"
> in this function) of pci.x (where "x" is the index of the controller).

That's correct.

> What you're saying here doesn't match that. Unless you're saying that
> the PHBs will have aliases named something like "pci.1.0" (which isn't
> what I see in the test cases in 19/26).

So here's the subtle bit: for all PCI controllers *except*
spapr-pci-host-brigde, the bus name for a controller will
match the controller alias, so you'll have

  -device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1
  -device virtio-scsi-pci,id=scsi0,bus=pci.1,addr=0x1

spapr-pci-host-bridge will behave slightly differently, in
that a controller with alias x will create a bus with name
x.0, so you'll have to use

  -device spapr-pci-host-bridge,index=1,id=pci.1
  -device virtio-scsi-pci,id=scsi0,bus=pci.1.0,addr=0x1

instead. To add to the fun, the implicit PHB (despite being
an instance of the same device) will create a bus named pci.0
just like you'd expect. Hence this patch :)

You can see this in action in patch 22/26; later patches will
also move more devices to separate PHBs, so by the end of the
series there will be a bunch of test cases covering this

Andrea Bolognani / Red Hat / Virtualization

More information about the libvir-list mailing list