qemuUSBId() is just constructing what should already be in the alias
for the USB controller that has the same index as the bus number
listed for the device being connected, so replace calls to qemuUSBId()
with the controller's alias.
---
Pointed out by John during review.
This is new in V2. It will be merged into 3/9 before pushing, but is
split out here for easy review.
src/qemu/qemu_command.c | 32 +++++++++++---------------------
1 file changed, 11 insertions(+), 21 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 81305c1..eead482 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2599,15 +2599,6 @@ qemuAssignDevicePCISlots(virDomainDefPtr def,
return -1;
}
-static void
-qemuUSBId(virBufferPtr buf, int idx)
-{
- if (idx == 0)
- virBufferAddLit(buf, "usb");
- else
- virBufferAsprintf(buf, "usb%d", idx);
-}
-
static int
qemuBuildDeviceAddressStr(virBufferPtr buf,
virDomainDefPtr domainDef,
@@ -2616,9 +2607,9 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
{
int ret = -1;
char *devStr = NULL;
+ const char *contAlias = NULL;
if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
- const char *contAlias = NULL;
size_t i;
if (!(devStr = virDomainPCIAddressAsString(&info->addr.pci)))
@@ -2681,9 +2672,11 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
if (info->addr.pci.function != 0)
virBufferAsprintf(buf, ".0x%x", info->addr.pci.function);
} else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) {
- virBufferAddLit(buf, ",bus=");
- qemuUSBId(buf, info->addr.usb.bus);
- virBufferAsprintf(buf, ".0,port=%s", info->addr.usb.port);
+ if (!(contAlias = virDomainControllerAliasFind(domainDef,
+ VIR_DOMAIN_CONTROLLER_TYPE_USB,
+ info->addr.usb.bus)))
+ goto cleanup;
+ virBufferAsprintf(buf, ",bus=%s.0,port=%s", contAlias,
info->addr.usb.port);
} else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) {
if (info->addr.spaprvio.has_reg)
virBufferAsprintf(buf, ",reg=0x%llx", info->addr.spaprvio.reg);
@@ -4450,14 +4443,11 @@ qemuBuildUSBControllerDevStr(virDomainDefPtr domainDef,
virBufferAsprintf(buf, "%s", smodel);
- if (def->info.mastertype == VIR_DOMAIN_CONTROLLER_MASTER_USB) {
- virBufferAddLit(buf, ",masterbus=");
- qemuUSBId(buf, def->idx);
- virBufferAsprintf(buf, ".0,firstport=%d",
def->info.master.usb.startport);
- } else {
- virBufferAddLit(buf, ",id=");
- qemuUSBId(buf, def->idx);
- }
+ if (def->info.mastertype == VIR_DOMAIN_CONTROLLER_MASTER_USB)
+ virBufferAsprintf(buf, ",masterbus=%s.0,firstport=%d",
+ def->info.alias, def->info.master.usb.startport);
+ else
+ virBufferAsprintf(buf, ",id=%s", def->info.alias);
return 0;
}
--
2.1.0