Split out the function a bit more to separate the per-device code.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_command.c | 151 +++++++++++++++++++++-------------------
1 file changed, 80 insertions(+), 71 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 3bf514c817..f185e3a53c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -583,110 +583,63 @@ qemuBuildDeviceAddressProps(virJSONValue *props,
}
-static int
-qemuBuildVirtioDevGetConfig(virDomainDeviceDef *device,
- const char *baseName,
- virQEMUCaps *qemuCaps,
- char **devtype,
- virTristateSwitch *disableLegacy,
- virTristateSwitch *disableModern)
+static void
+qemuBuildVirtioDevGetConfigDev(virDomainDeviceDef *device,
+ bool *has_tmodel,
+ bool *has_ntmodel)
{
- virDomainDeviceInfo *info = virDomainDeviceGetInfo(device);
- g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
- const char *implName = NULL;
- bool has_tmodel = false;
- bool has_ntmodel = false;
-
- *disableLegacy = VIR_TRISTATE_SWITCH_ABSENT;
- *disableModern = VIR_TRISTATE_SWITCH_ABSENT;
-
- switch ((virDomainDeviceAddressType) info->type) {
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
- implName = "pci";
- break;
-
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO:
- implName = "device";
- break;
-
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
- implName = "ccw";
- break;
-
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390:
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE:
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL:
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID:
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB:
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO:
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA:
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM:
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Unexpected address type for '%s'"),
baseName);
- return -1;
-
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE:
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNASSIGNED:
- case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST:
- default:
- virReportEnumRangeError(virDomainDeviceAddressType, info->type);
- return -1;
- }
-
- virBufferAsprintf(&buf, "%s-%s", baseName, implName);
-
switch ((virDomainDeviceType) device->type) {
case VIR_DOMAIN_DEVICE_DISK:
- has_tmodel = device->data.disk->model ==
VIR_DOMAIN_DISK_MODEL_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.disk->model ==
VIR_DOMAIN_DISK_MODEL_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.disk->model ==
VIR_DOMAIN_DISK_MODEL_VIRTIO_TRANSITIONAL;
+ *has_ntmodel = device->data.disk->model ==
VIR_DOMAIN_DISK_MODEL_VIRTIO_NON_TRANSITIONAL;
break;
case VIR_DOMAIN_DEVICE_NET:
- has_tmodel = device->data.net->model ==
VIR_DOMAIN_NET_MODEL_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.net->model ==
VIR_DOMAIN_NET_MODEL_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.net->model ==
VIR_DOMAIN_NET_MODEL_VIRTIO_TRANSITIONAL;
+ *has_ntmodel = device->data.net->model ==
VIR_DOMAIN_NET_MODEL_VIRTIO_NON_TRANSITIONAL;
break;
case VIR_DOMAIN_DEVICE_HOSTDEV:
if (device->data.hostdev->source.subsys.type ==
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST) {
- has_tmodel = device->data.hostdev->source.subsys.u.scsi_host.model
== VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.hostdev->source.subsys.u.scsi_host.model
== VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.hostdev->source.subsys.u.scsi_host.model
== VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_TRANSITIONAL;
+ *has_ntmodel =
device->data.hostdev->source.subsys.u.scsi_host.model ==
VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_NON_TRANSITIONAL;
}
break;
case VIR_DOMAIN_DEVICE_RNG:
- has_tmodel = device->data.rng->model ==
VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.rng->model ==
VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.rng->model ==
VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL;
+ *has_ntmodel = device->data.rng->model ==
VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL;
break;
case VIR_DOMAIN_DEVICE_FS:
- has_tmodel = device->data.fs->model ==
VIR_DOMAIN_FS_MODEL_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.fs->model ==
VIR_DOMAIN_FS_MODEL_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.fs->model ==
VIR_DOMAIN_FS_MODEL_VIRTIO_TRANSITIONAL;
+ *has_ntmodel = device->data.fs->model ==
VIR_DOMAIN_FS_MODEL_VIRTIO_NON_TRANSITIONAL;
break;
case VIR_DOMAIN_DEVICE_MEMBALLOON:
- has_tmodel = device->data.memballoon->model ==
VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.memballoon->model ==
VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.memballoon->model ==
VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO_TRANSITIONAL;
+ *has_ntmodel = device->data.memballoon->model ==
VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO_NON_TRANSITIONAL;
break;
case VIR_DOMAIN_DEVICE_VSOCK:
- has_tmodel = device->data.vsock->model ==
VIR_DOMAIN_VSOCK_MODEL_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.vsock->model ==
VIR_DOMAIN_VSOCK_MODEL_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.vsock->model ==
VIR_DOMAIN_VSOCK_MODEL_VIRTIO_TRANSITIONAL;
+ *has_ntmodel = device->data.vsock->model ==
VIR_DOMAIN_VSOCK_MODEL_VIRTIO_NON_TRANSITIONAL;
break;
case VIR_DOMAIN_DEVICE_INPUT:
if (device->data.input->type == VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH) {
- has_tmodel = device->data.input->model ==
VIR_DOMAIN_INPUT_MODEL_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.input->model ==
VIR_DOMAIN_INPUT_MODEL_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.input->model ==
VIR_DOMAIN_INPUT_MODEL_VIRTIO_TRANSITIONAL;
+ *has_ntmodel = device->data.input->model ==
VIR_DOMAIN_INPUT_MODEL_VIRTIO_NON_TRANSITIONAL;
}
break;
case VIR_DOMAIN_DEVICE_CONTROLLER:
if (device->data.controller->type ==
VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL) {
- has_tmodel = device->data.controller->model ==
VIR_DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.controller->model ==
VIR_DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.controller->model ==
VIR_DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_TRANSITIONAL;
+ *has_ntmodel = device->data.controller->model ==
VIR_DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_NON_TRANSITIONAL;
} else if (device->data.controller->type ==
VIR_DOMAIN_CONTROLLER_TYPE_SCSI) {
- has_tmodel = device->data.controller->model ==
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL;
- has_ntmodel = device->data.controller->model ==
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL;
+ *has_tmodel = device->data.controller->model ==
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL;
+ *has_ntmodel = device->data.controller->model ==
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL;
}
break;
@@ -711,6 +664,62 @@ qemuBuildVirtioDevGetConfig(virDomainDeviceDef *device,
default:
break;
}
+}
+
+
+static int
+qemuBuildVirtioDevGetConfig(virDomainDeviceDef *device,
+ const char *baseName,
+ virQEMUCaps *qemuCaps,
+ char **devtype,
+ virTristateSwitch *disableLegacy,
+ virTristateSwitch *disableModern)
+{
+ virDomainDeviceInfo *info = virDomainDeviceGetInfo(device);
+ g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+ const char *implName = NULL;
+ bool has_tmodel = false;
+ bool has_ntmodel = false;
+
+ *disableLegacy = VIR_TRISTATE_SWITCH_ABSENT;
+ *disableModern = VIR_TRISTATE_SWITCH_ABSENT;
+
+ switch ((virDomainDeviceAddressType) info->type) {
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
+ implName = "pci";
+ break;
+
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO:
+ implName = "device";
+ break;
+
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
+ implName = "ccw";
+ break;
+
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390:
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE:
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL:
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID:
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB:
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO:
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA:
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM:
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Unexpected address type for '%s'"),
baseName);
+ return -1;
+
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE:
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNASSIGNED:
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST:
+ default:
+ virReportEnumRangeError(virDomainDeviceAddressType, info->type);
+ return -1;
+ }
+
+ virBufferAsprintf(&buf, "%s-%s", baseName, implName);
+
+ qemuBuildVirtioDevGetConfigDev(device, &has_tmodel, &has_ntmodel);
if (has_tmodel || has_ntmodel) {
if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
--
2.31.1