The altered code is functionally equivalent to the previous one,
but it's already laid down in a way that will make further
changes easier and less messy.
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
---
src/qemu/qemu_command.c | 18 +++++++++---------
src/qemu/qemu_domain_address.c | 23 ++++++++++++++++++++++-
2 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index d6df50ec73..74e5bac7a2 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -952,6 +952,9 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDef *device,
}
break;
+ case VIR_DOMAIN_DEVICE_IOMMU:
+ break;
+
case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_SOUND:
case VIR_DOMAIN_DEVICE_WATCHDOG:
@@ -966,7 +969,6 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDef *device,
case VIR_DOMAIN_DEVICE_TPM:
case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_MEMORY:
- case VIR_DOMAIN_DEVICE_IOMMU:
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_LAST:
default:
@@ -6540,14 +6542,13 @@ qemuBuildIOMMUCommandLine(virCommand *cmd,
virQEMUCaps *qemuCaps)
{
const virDomainIOMMUDef *iommu = def->iommu;
+ g_autoptr(virJSONValue) props = NULL;
if (!iommu)
return 0;
switch (iommu->model) {
- case VIR_DOMAIN_IOMMU_MODEL_INTEL: {
- g_autoptr(virJSONValue) props = NULL;
-
+ case VIR_DOMAIN_IOMMU_MODEL_INTEL:
if (virJSONValueObjectCreate(&props,
"s:driver", "intel-iommu",
"S:intremap",
qemuOnOffAuto(iommu->intremap),
@@ -6562,7 +6563,6 @@ qemuBuildIOMMUCommandLine(virCommand *cmd,
return -1;
return 0;
- }
case VIR_DOMAIN_IOMMU_MODEL_SMMUV3:
/* There is no -device for SMMUv3, so nothing to be done here */
@@ -7154,14 +7154,14 @@ qemuBuildMachineCommandLine(virCommand *cmd,
if (def->iommu) {
switch (def->iommu->model) {
- case VIR_DOMAIN_IOMMU_MODEL_INTEL:
- /* The 'intel' IOMMu is formatted in qemuBuildIOMMUCommandLine */
- break;
-
case VIR_DOMAIN_IOMMU_MODEL_SMMUV3:
virBufferAddLit(&buf, ",iommu=smmuv3");
break;
+ case VIR_DOMAIN_IOMMU_MODEL_INTEL:
+ /* These IOMMUs are formatted in qemuBuildIOMMUCommandLine */
+ break;
+
case VIR_DOMAIN_IOMMU_MODEL_LAST:
default:
virReportEnumRangeError(virDomainIOMMUModel, def->iommu->model);
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index c43ad23cf5..733fa35444 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -1001,6 +1001,16 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev,
}
break;
+ case VIR_DOMAIN_DEVICE_IOMMU:
+ switch ((virDomainIOMMUModel) dev->data.iommu->model) {
+ case VIR_DOMAIN_IOMMU_MODEL_INTEL:
+ case VIR_DOMAIN_IOMMU_MODEL_SMMUV3:
+ case VIR_DOMAIN_IOMMU_MODEL_LAST:
+ /* These are not PCI devices */
+ return 0;
+ }
+ break;
+
case VIR_DOMAIN_DEVICE_VSOCK:
switch ((virDomainVsockModel) dev->data.vsock->model) {
case VIR_DOMAIN_VSOCK_MODEL_VIRTIO_TRANSITIONAL:
@@ -1040,7 +1050,6 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev,
/* These devices don't even have a DeviceInfo */
case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_GRAPHICS:
- case VIR_DOMAIN_DEVICE_IOMMU:
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_LAST:
case VIR_DOMAIN_DEVICE_NONE:
@@ -2369,6 +2378,18 @@ qemuDomainAssignDevicePCISlots(virDomainDef *def,
/* Nada - none are PCI based (yet) */
}
+ if (def->iommu) {
+ virDomainIOMMUDef *iommu = def->iommu;
+
+ switch ((virDomainIOMMUModel) iommu->model) {
+ case VIR_DOMAIN_IOMMU_MODEL_INTEL:
+ case VIR_DOMAIN_IOMMU_MODEL_SMMUV3:
+ case VIR_DOMAIN_IOMMU_MODEL_LAST:
+ /* These are not PCI devices */
+ break;
+ }
+ }
+
if (def->vsock &&
virDeviceInfoPCIAddressIsWanted(&def->vsock->info)) {
--
2.31.1