The commandline generator for a virtio-serial device had a hardcoded
printf of "virtio-serial%d" as the id of the virtio-serial
controller. This patch changes it to use the alias of the controller
instead. Because the function that finds a controller alias requires a
pointer to the domainDef in order to get the list of controllers, the
arglist of a few functions had to have this added.
Once this was done, the literal string QEMU_VIRTIO_SERIAL_PREFIX was
no longer needed, so it has been removed.
---
src/qemu/qemu_command.c | 28 +++++++++++++++++-----------
src/qemu/qemu_command.h | 1 -
2 files changed, 17 insertions(+), 12 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 7adce0a..7f7f3f4 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6300,10 +6300,13 @@ qemuBuildChrArgStr(virDomainChrSourceDefPtr dev, const char
*prefix)
static char *
-qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev,
+qemuBuildVirtioSerialPortDevStr(virDomainDefPtr def,
+ virDomainChrDefPtr dev,
virQEMUCapsPtr qemuCaps)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
+ const char *contAlias;
+
switch (dev->deviceType) {
case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE:
virBufferAddLit(&buf, "virtconsole");
@@ -6335,12 +6338,13 @@ qemuBuildVirtioSerialPortDevStr(virDomainChrDefPtr dev,
goto error;
}
- virBufferAsprintf(&buf,
- ",bus=" QEMU_VIRTIO_SERIAL_PREFIX "%d.%d",
- dev->info.addr.vioserial.controller,
- dev->info.addr.vioserial.bus);
- virBufferAsprintf(&buf,
- ",nr=%d",
+ contAlias = virDomainControllerAliasFind(def,
VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL,
+
dev->info.addr.vioserial.controller);
+ if (!contAlias)
+ goto error;
+
+ virBufferAsprintf(&buf, ",bus=%s.%d,nr=%d", contAlias,
+ dev->info.addr.vioserial.bus,
dev->info.addr.vioserial.port);
}
@@ -10889,6 +10893,7 @@ qemuBuildParallelChrDeviceStr(char **deviceStr,
static int
qemuBuildChannelChrDeviceStr(char **deviceStr,
+ virDomainDefPtr def,
virDomainChrDefPtr chr,
virQEMUCapsPtr qemuCaps)
{
@@ -10911,7 +10916,7 @@ qemuBuildChannelChrDeviceStr(char **deviceStr,
break;
case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
- if (!(*deviceStr = qemuBuildVirtioSerialPortDevStr(chr, qemuCaps)))
+ if (!(*deviceStr = qemuBuildVirtioSerialPortDevStr(def, chr, qemuCaps)))
goto cleanup;
break;
@@ -10928,6 +10933,7 @@ qemuBuildChannelChrDeviceStr(char **deviceStr,
static int
qemuBuildConsoleChrDeviceStr(char **deviceStr,
+ virDomainDefPtr def,
virDomainChrDefPtr chr,
virQEMUCapsPtr qemuCaps)
{
@@ -10941,7 +10947,7 @@ qemuBuildConsoleChrDeviceStr(char **deviceStr,
break;
case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO:
- if (!(*deviceStr = qemuBuildVirtioSerialPortDevStr(chr, qemuCaps)))
+ if (!(*deviceStr = qemuBuildVirtioSerialPortDevStr(def, chr, qemuCaps)))
goto cleanup;
break;
@@ -10985,11 +10991,11 @@ qemuBuildChrDeviceStr(char **deviceStr,
break;
case VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL:
- ret = qemuBuildChannelChrDeviceStr(deviceStr, chr, qemuCaps);
+ ret = qemuBuildChannelChrDeviceStr(deviceStr, vmdef, chr, qemuCaps);
break;
case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE:
- ret = qemuBuildConsoleChrDeviceStr(deviceStr, chr, qemuCaps);
+ ret = qemuBuildConsoleChrDeviceStr(deviceStr, vmdef, chr, qemuCaps);
break;
case VIR_DOMAIN_CHR_DEVICE_TYPE_LAST:
diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
index d066953..51e7f1f 100644
--- a/src/qemu/qemu_command.h
+++ b/src/qemu/qemu_command.h
@@ -36,7 +36,6 @@
# define QEMU_CONFIG_FORMAT_ARGV "qemu-argv"
# define QEMU_DRIVE_HOST_PREFIX "drive-"
-# define QEMU_VIRTIO_SERIAL_PREFIX "virtio-serial"
# define QEMU_FSDEV_HOST_PREFIX "fsdev-"
/* These are only defaults, they can be changed now in qemu.conf and
--
2.1.0