From d9afab48af981a669bee7567458e26f3148aa216 Mon Sep 17 00:00:00 2001 From: Andrea Bolognani Date: Mon, 8 Aug 2022 17:38:42 +0200 Subject: [PATCH] conf: Simplify IOMMU device validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of duplicating the list of attributes that are not allowed for some of the IOMMU models, use two separate switch statements: one for the attributes and one for the address. Signed-off-by: Andrea Bolognani Reviewed-by: Pavel Hrdina Reviewed-by: Ján Tomko --- src/conf/domain_validate.c | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 88205c64e0..1c78a3d31c 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2633,27 +2633,6 @@ virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu) { switch (iommu->model) { case VIR_DOMAIN_IOMMU_MODEL_SMMUV3: - if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT || - iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT || - iommu->eim != VIR_TRISTATE_SWITCH_ABSENT || - iommu->iotlb != VIR_TRISTATE_SWITCH_ABSENT || - iommu->aw_bits != 0) { - virReportError(VIR_ERR_XML_ERROR, - _("iommu model '%s' doesn't support additional attributes"), - virDomainIOMMUModelTypeToString(iommu->model)); - return -1; - } - G_GNUC_FALLTHROUGH; - - case VIR_DOMAIN_IOMMU_MODEL_INTEL: - if (iommu->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { - virReportError(VIR_ERR_XML_ERROR, - _("iommu model '%s' can't have address"), - virDomainIOMMUModelTypeToString(iommu->model)); - return -1; - } - break; - case VIR_DOMAIN_IOMMU_MODEL_VIRTIO: if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT || iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT || @@ -2667,6 +2646,23 @@ virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu) } break; + case VIR_DOMAIN_IOMMU_MODEL_INTEL: + case VIR_DOMAIN_IOMMU_MODEL_LAST: + break; + } + + switch (iommu->model) { + case VIR_DOMAIN_IOMMU_MODEL_SMMUV3: + case VIR_DOMAIN_IOMMU_MODEL_INTEL: + if (iommu->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + virReportError(VIR_ERR_XML_ERROR, + _("iommu model '%s' can't have address"), + virDomainIOMMUModelTypeToString(iommu->model)); + return -1; + } + break; + + case VIR_DOMAIN_IOMMU_MODEL_VIRTIO: case VIR_DOMAIN_IOMMU_MODEL_LAST: break; }