mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-26 14:03:49 +03:00
qemu: Deal with PHB naming conventions
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. As an exception to the exception, the implicit PHB that's added automatically to every pSeries guest creates the 'pci.0' bus. Signed-off-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: Laine Stump <laine@laine.org>
This commit is contained in:
parent
2e7d491696
commit
32f23b8d30
@ -303,6 +303,8 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
|
||||
int ret = -1;
|
||||
char *devStr = NULL;
|
||||
const char *contAlias = NULL;
|
||||
bool contIsPHB = false;
|
||||
int contTargetIndex = 0;
|
||||
|
||||
if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
|
||||
size_t i;
|
||||
@ -315,6 +317,8 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
|
||||
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI &&
|
||||
cont->idx == info->addr.pci.bus) {
|
||||
contAlias = cont->info.alias;
|
||||
contIsPHB = virDomainControllerIsPCIHostBridge(cont);
|
||||
contTargetIndex = cont->opts.pciopts.targetIndex;
|
||||
if (!contAlias) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Device alias was not set for PCI "
|
||||
@ -350,7 +354,17 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
|
||||
}
|
||||
}
|
||||
|
||||
virBufferAsprintf(buf, ",bus=%s", contAlias);
|
||||
if (contIsPHB && contTargetIndex > 0) {
|
||||
/* The PCI bus created by a spapr-pci-host-bridge device with
|
||||
* alias 'x' will be called 'x.0' rather than 'x'; however,
|
||||
* this does not apply to the implicit PHB in a pSeries guest,
|
||||
* which always has the hardcoded name 'pci.0' */
|
||||
virBufferAsprintf(buf, ",bus=%s.0", contAlias);
|
||||
} else {
|
||||
/* For all other controllers, the bus name matches the alias
|
||||
* of the corresponding controller */
|
||||
virBufferAsprintf(buf, ",bus=%s", contAlias);
|
||||
}
|
||||
|
||||
if (info->addr.pci.multi == VIR_TRISTATE_SWITCH_ON)
|
||||
virBufferAddLit(buf, ",multifunction=on");
|
||||
|
Loading…
x
Reference in New Issue
Block a user