The compiler can make sure we are handling all features.
While reworking the logic, also change error messages to a more
consistent style.
Signed-off-by: Andrea Bolognani
---
src/libvirt_private.syms | 2 ++
src/qemu/qemu_domain.c | 57
2 files changed, 45 insertions(+), 14 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 0bce0bbfb..17c3b71e0 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -345,6 +345,8 @@ virDomainDiskSetDriver;
virDomainDiskSetFormat;
virDomainDiskSetSource;
virDomainDiskSetType;
+virDomainFeatureTypeFromString;
+virDomainFeatureTypeToString;
virDomainFSDefFree;
virDomainFSDefNew;
virDomainFSIndexByName;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 27a4751e9..dd36b42eb 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -3226,21 +3226,50 @@ qemuDomainDefGetVcpuHotplugGranularity(const
virDomainDef *def)
static int
qemuDomainDefValidateFeatures(const virDomainDef *def)
{
-if (def->features[VIR_DOMAIN_FEATURE_IOAPIC] == VIR_TRISTATE_SWITCH_ON &&
-!ARCH_IS_X86(def->os.arch)) {
-virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("I/O APIC tuning is not supported "
- "for '%s' architecture"),
- virArchToString(def->os.arch));
-return -1;
-}
+size_t i;
-if (def->features[VIR_DOMAIN_FEATURE_HPT] == VIR_TRISTATE_SWITCH_ON &&
-!qemuDomainIsPSeries(def)) {
-virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- "%s",
- _("HPT tuning is only supported for pSeries guests"));
-return -1;
+for (i = 0; i < VIR_DOMAIN_FEATURE_LAST; i++) {
+const char *featureName = virDomainFeatureTypeToString(i);
+
+switch ((virDomainFeature) i) {
+case VIR_DOMAIN_FEATURE_IOAPIC:
+if (def->features[i] == VIR_TRISTATE_SWITCH_ON &&
+!ARCH_IS_X86(def->os.arch)) {
+virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("The '%s' feature is only supported for %s
guests"),
+ featureName, "x86");
+return -1;
+}
+break;
+
+case VIR_DOMAIN_FEATURE_HPT:
+if (def->features[i] == VIR_TRISTATE_SWITCH_ON &&
+!qemuDomainIsPSeries(def)) {
+virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("The '%s' feature is only supported for %s
guests"),
+ featureName, "pSeries");
+return -1;
+}
+break;
+
+case VIR_DOMAIN_FEATURE_ACPI:
+case VIR_DOMAIN_FEATURE_APIC:
+case VIR_DOMAIN_FEATURE_PAE:
+case VIR_DOMAIN_FEATURE_HAP:
+case VIR_DOMAIN_FEATURE_VIRIDIAN:
+case VIR_DOMAIN_FEATURE_PRIVNET:
+case VIR_DOMAIN_FEATURE_HYPERV:
+case VIR_DOMAIN_FEATURE_KVM:
+case VIR_DOMAIN_FEATURE_PVSPINLOCK:
+case VIR_DOMAIN_FEATURE_CAPABILITIES:
+case VIR_DOMAIN_FEATURE_PMU:
+case VIR_DOMAIN_FEATURE_VMPORT:
+case VIR_DOMAIN_FEATURE_GIC:
+case VIR_DOMAIN_FEATURE_SMM:
+case VIR_DOMAIN_FEATURE_VMCOREINFO:
+case VIR_DOMAIN_FEATURE_LAST:
+break;
+}
}
return 0;
--
2.14.3
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list