[libvirt] [PATCH 02/11] qemu: Use switch in qemuDomainDefValidateFeatures()

Andrea Bolognani posted 11 patches 8 years ago
[libvirt] [PATCH 02/11] qemu: Use switch in qemuDomainDefValidateFeatures()
Posted by Andrea Bolognani 8 years ago
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 <abologna@redhat.com>
---
 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
Re: [libvirt] [PATCH 02/11] qemu: Use switch in qemuDomainDefValidateFeatures()
Posted by John Ferlan 7 years, 12 months ago

On 02/06/2018 11:42 AM, Andrea Bolognani wrote:
> 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 <abologna@redhat.com>
> ---
>  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;

You'll have a merge conflict right about here...

Reviewed-by: John Ferlan <jferlan@redhat.com>

John

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list