const virDomainDef *def,
virQEMUCaps *qemuCaps)
{
+ g_autoptr(virJSONValue) props = NULL;
const virDomainIOMMUDef *iommu = def->iommu;
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 (virJSONValueObjectAdd(&props,
"s:driver", "intel-iommu",
"S:intremap", qemuOnOffAuto(iommu->intremap),
return -1;
return 0;
- }
case VIR_DOMAIN_IOMMU_MODEL_SMMUV3:
/* There is no -device for SMMUv3, so nothing to be done here */
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);
}
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:
/* 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:
/* 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)) {