]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: capabilities: Refactor API for setting guest capability features
authorPeter Krempa <pkrempa@redhat.com>
Tue, 12 Nov 2019 12:57:23 +0000 (13:57 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 13 Nov 2019 07:19:37 +0000 (08:19 +0100)
Remove the need to pass around strings and switch to the enum values
instead.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/conf/capabilities.c
src/conf/capabilities.h
src/libvirt_private.syms
src/libxl/libxl_capabilities.c
src/qemu/qemu_capabilities.c
src/test/test_driver.c
tests/testutilsqemu.c

index 67776b4fd3326895e6ca6bbad8b1fe201a480102..5c41a530517621ec7ac56ad1f34367cb59581604 100644 (file)
@@ -557,49 +557,55 @@ static const struct virCapsGuestFeatureInfo virCapsGuestFeatureInfos[VIR_CAPS_GU
 };
 
 
+static void
+virCapabilitiesAddGuestFeatureInternal(virCapsGuestPtr guest,
+                                       virCapsGuestFeatureType feature,
+                                       bool defaultOn,
+                                       bool toggle)
+{
+    guest->features[feature].present = true;
+
+    if (virCapsGuestFeatureInfos[feature].togglesRequired) {
+        guest->features[feature].defaultOn = virTristateSwitchFromBool(defaultOn);
+        guest->features[feature].toggle = virTristateBoolFromBool(toggle);
+    }
+}
+
+
 /**
  * virCapabilitiesAddGuestFeature:
  * @guest: guest to associate feature with
- * @name: name of feature ('pae', 'acpi', 'apic')
- * @defaultOn: true if it defaults to on
- * @toggle: true if its state can be toggled
+ * @feature: feature to add
  *
  * Registers a feature for a guest domain.
  */
-virCapsGuestFeaturePtr
+void
 virCapabilitiesAddGuestFeature(virCapsGuestPtr guest,
-                               const char *name,
-                               bool defaultOn,
-                               bool toggle)
+                               virCapsGuestFeatureType feature)
 {
-    virCapsGuestFeaturePtr feature = NULL;
-    bool togglesRequired = false;
-    size_t i;
-
-    for (i = 0; i < VIR_CAPS_GUEST_FEATURE_TYPE_LAST; i++) {
-        if (STRNEQ(name, virCapsGuestFeatureInfos[i].name))
-            continue;
-
-        feature = guest->features + i;
-        togglesRequired = virCapsGuestFeatureInfos[i].togglesRequired;
-    }
-
-    if (!feature) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("invalid feature '%s'"), name);
-        return NULL;
-    }
-
-    feature->present = true;
+    virCapabilitiesAddGuestFeatureInternal(guest, feature, false, false);
+}
 
-    if (togglesRequired) {
-        feature->defaultOn = virTristateSwitchFromBool(defaultOn);
-        feature->toggle = virTristateBoolFromBool(toggle);
-    }
 
-    return feature;
+/**
+ * virCapabilitiesAddGuestFeatureWithToggle:
+ * @guest: guest to associate feature with
+ * @feature: feature to add
+ * @defaultOn: true if it defaults to on
+ * @toggle: true if its state can be toggled
+ *
+ * Registers a feature with toggles for a guest domain.
+ */
+void
+virCapabilitiesAddGuestFeatureWithToggle(virCapsGuestPtr guest,
+                                         virCapsGuestFeatureType feature,
+                                         bool defaultOn,
+                                         bool toggle)
+{
+    virCapabilitiesAddGuestFeatureInternal(guest, feature, defaultOn, toggle);
 }
 
+
 /**
  * virCapabilitiesHostSecModelAddBaseLabel
  * @secmodel: Security model to add a base label for
index dd972b1a677880aa0a7467b985ef0e3668fa2c29..8a7137d7eb3494a100cfe28eb4707a8c749b1189 100644 (file)
@@ -283,11 +283,14 @@ virCapabilitiesAddGuestDomain(virCapsGuestPtr guest,
                               int nmachines,
                               virCapsGuestMachinePtr *machines);
 
-virCapsGuestFeaturePtr
+void
 virCapabilitiesAddGuestFeature(virCapsGuestPtr guest,
-                               const char *name,
-                               bool defaultOn,
-                               bool toggle);
+                               virCapsGuestFeatureType feature);
+void
+virCapabilitiesAddGuestFeatureWithToggle(virCapsGuestPtr guest,
+                                         virCapsGuestFeatureType feature,
+                                         bool defaultOn,
+                                         bool toggle);
 
 int
 virCapabilitiesAddStoragePool(virCapsPtr caps,
index 5787338e92b3a5123b6a254d940f19f5acba50cc..4d0d03c580f8b8257b1500b01de8f983e6c5c685 100644 (file)
@@ -46,6 +46,7 @@ virAccessPermStorageVolTypeToString;
 virCapabilitiesAddGuest;
 virCapabilitiesAddGuestDomain;
 virCapabilitiesAddGuestFeature;
+virCapabilitiesAddGuestFeatureWithToggle;
 virCapabilitiesAddHostFeature;
 virCapabilitiesAddHostMigrateTransport;
 virCapabilitiesAddHostNUMACell;
index 3b88121dcadfeb61f21e6b8415e39610d7a87bf1..fe792e9a82ae46e9643415374be2f47946127fbc 100644 (file)
@@ -547,46 +547,26 @@ libxlCapsInitGuests(libxl_ctx *ctx, virCapsPtr caps)
                                           NULL) == NULL)
             return -1;
 
-        if (guest_archs[i].pae &&
-            virCapabilitiesAddGuestFeature(guest,
-                                           "pae",
-                                           1,
-                                           0) == NULL)
-            return -1;
+        if (guest_archs[i].pae)
+            virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_PAE);
 
-        if (guest_archs[i].nonpae &&
-            virCapabilitiesAddGuestFeature(guest,
-                                           "nonpae",
-                                           1,
-                                           0) == NULL)
-            return -1;
+        if (guest_archs[i].nonpae)
+            virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_NONPAE);
 
-        if (guest_archs[i].ia64_be &&
-            virCapabilitiesAddGuestFeature(guest,
-                                           "ia64_be",
-                                           1,
-                                           0) == NULL)
-            return -1;
+        if (guest_archs[i].ia64_be)
+            virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_IA64_BE);
 
         if (guest_archs[i].hvm) {
-            if (virCapabilitiesAddGuestFeature(guest,
-                                               "acpi",
-                                               1,
-                                               1) == NULL)
-                return -1;
-
-            if (virCapabilitiesAddGuestFeature(guest, "apic",
-                                               1,
-                                               0) == NULL)
-                return -1;
+            virCapabilitiesAddGuestFeatureWithToggle(guest, VIR_CAPS_GUEST_FEATURE_TYPE_ACPI,
+                                                     true, true);
+
+            virCapabilitiesAddGuestFeatureWithToggle(guest, VIR_CAPS_GUEST_FEATURE_TYPE_APIC,
+                                                     true, false);
         }
 
         if (guest_archs[i].hvm || guest_archs[i].pvh) {
-            if (virCapabilitiesAddGuestFeature(guest,
-                                               "hap",
-                                               1,
-                                               1) == NULL)
-                return -1;
+            virCapabilitiesAddGuestFeatureWithToggle(guest, VIR_CAPS_GUEST_FEATURE_TYPE_HAP,
+                                                     true, true);
         }
     }
 
index 7eb92b68af1af9afe1ae427fd9de5c360d3357d6..b03abcd0d3a74481b79dc596f176e79406ee274a 100644 (file)
@@ -849,14 +849,10 @@ virQEMUCapsInitGuestFromBinary(virCapsPtr caps,
 
     /* CPU selection is always available, because all QEMU versions
      * we support can use at least '-cpu host' */
-    if (!virCapabilitiesAddGuestFeature(guest, "cpuselection", true, false))
-        goto cleanup;
-
-    if (!virCapabilitiesAddGuestFeature(guest, "deviceboot", true, false))
-        goto cleanup;
-
-    if (!virCapabilitiesAddGuestFeature(guest, "disksnapshot", true, false))
-        goto cleanup;
+    virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_CPUSELECTION);
+    virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_DEVICEBOOT);
+    virCapabilitiesAddGuestFeatureWithToggle(guest, VIR_CAPS_GUEST_FEATURE_TYPE_DISKSNAPSHOT,
+                                             true, false);
 
     if (virCapabilitiesAddGuestDomain(guest,
                                       VIR_DOMAIN_VIRT_QEMU,
@@ -877,20 +873,18 @@ virQEMUCapsInitGuestFromBinary(virCapsPtr caps,
         }
     }
 
-    if ((ARCH_IS_X86(guestarch) || guestarch == VIR_ARCH_AARCH64) &&
-        virCapabilitiesAddGuestFeature(guest, "acpi", true, true) == NULL) {
-        goto cleanup;
-    }
+    if ((ARCH_IS_X86(guestarch) || guestarch == VIR_ARCH_AARCH64))
+        virCapabilitiesAddGuestFeatureWithToggle(guest, VIR_CAPS_GUEST_FEATURE_TYPE_ACPI,
+                                                 true, true);
 
-    if (ARCH_IS_X86(guestarch) &&
-        virCapabilitiesAddGuestFeature(guest, "apic", true, false) == NULL) {
-        goto cleanup;
-    }
+    if (ARCH_IS_X86(guestarch))
+        virCapabilitiesAddGuestFeatureWithToggle(guest, VIR_CAPS_GUEST_FEATURE_TYPE_APIC,
+                                                 true, false);
 
-    if ((guestarch == VIR_ARCH_I686) &&
-        (virCapabilitiesAddGuestFeature(guest, "pae", true, false) == NULL ||
-         virCapabilitiesAddGuestFeature(guest, "nonpae", true, false) == NULL))
-        goto cleanup;
+    if (guestarch == VIR_ARCH_I686) {
+        virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_PAE);
+        virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_NONPAE);
+    }
 
     ret = 0;
 
index 331f721502c1f90b5636a3ac492a87a51ca97fbd..5883722d604cb80718aa5472fe6a738a00def750 100644 (file)
@@ -350,10 +350,8 @@ testBuildCapabilities(virConnectPtr conn)
                                           NULL) == NULL)
             goto error;
 
-        if (virCapabilitiesAddGuestFeature(guest, "pae", true, true) == NULL)
-            goto error;
-        if (virCapabilitiesAddGuestFeature(guest, "nonpae", true, true) == NULL)
-            goto error;
+        virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_PAE);
+        virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_NONPAE);
     }
 
     caps->host.nsecModels = 1;
index 1eaa56ccb309eca007676955d03645c78c872dbd..6fe385e545ab7c7bf40f1bd0984abe83a4d8c59d 100644 (file)
@@ -110,8 +110,7 @@ testQemuAddI686Guest(virCapsPtr caps)
                                           machines)))
         goto error;
 
-    if (!virCapabilitiesAddGuestFeature(guest, "cpuselection", true, false))
-        goto error;
+    virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_CPUSELECTION);
 
     machines = NULL;
 
@@ -161,8 +160,7 @@ testQemuAddX86_64Guest(virCapsPtr caps)
                                           machines)))
         goto error;
 
-    if (!virCapabilitiesAddGuestFeature(guest, "cpuselection", true, false))
-        goto error;
+    virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_CPUSELECTION);
 
     machines = NULL;