]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
cpu: Add virCPUDefUpdateFeature()
authorPeter Krempa <pkrempa@redhat.com>
Mon, 15 Jul 2013 12:36:09 +0000 (14:36 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 16 Jul 2013 08:49:50 +0000 (10:49 +0200)
This new function updates or adds a feature to a existing cpu model
definition. This function will be helpful to allow tuning of
"host-model" features in later patches.

src/conf/cpu_conf.c
src/conf/cpu_conf.h
src/libvirt_private.syms

index e313caddcd55ee3aaee3e5f2b560e4eb342ab231..40fed9638d4cb1b90df4717cc427e9ffb3b75fe0 100644 (file)
@@ -656,19 +656,28 @@ virCPUDefFormatBuf(virBufferPtr buf,
     return 0;
 }
 
-
-int
-virCPUDefAddFeature(virCPUDefPtr def,
-                    const char *name,
-                    int policy)
+static int
+virCPUDefUpdateFeatureInternal(virCPUDefPtr def,
+                               const char *name,
+                               int policy,
+                               bool update)
 {
     size_t i;
 
+    if (def->type == VIR_CPU_TYPE_HOST)
+        policy = -1;
+
     for (i = 0; i < def->nfeatures; i++) {
         if (STREQ(name, def->features[i].name)) {
+            if (update) {
+                def->features[i].policy = policy;
+                return 0;
+            }
+
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            _("CPU feature `%s' specified more than once"),
                            name);
+
             return -1;
         }
     }
@@ -677,9 +686,6 @@ virCPUDefAddFeature(virCPUDefPtr def,
                      def->nfeatures, 1) < 0)
         return -1;
 
-    if (def->type == VIR_CPU_TYPE_HOST)
-        policy = -1;
-
     if (VIR_STRDUP(def->features[def->nfeatures].name, name) < 0)
         return -1;
 
@@ -689,6 +695,22 @@ virCPUDefAddFeature(virCPUDefPtr def,
     return 0;
 }
 
+int
+virCPUDefUpdateFeature(virCPUDefPtr def,
+                       const char *name,
+                       int policy)
+{
+    return virCPUDefUpdateFeatureInternal(def, name, policy, true);
+}
+
+int
+virCPUDefAddFeature(virCPUDefPtr def,
+                    const char *name,
+                    int policy)
+{
+    return virCPUDefUpdateFeatureInternal(def, name, policy, false);
+}
+
 bool
 virCPUDefIsEqual(virCPUDefPtr src,
                  virCPUDefPtr dst)
index 23ea455a2d39c8c30e1f47bf2556c5352467a8a0..2d1854ffa55ede6fb1b642e6d9ec8801d3b8ba22 100644 (file)
@@ -164,4 +164,9 @@ virCPUDefAddFeature(virCPUDefPtr cpu,
                     const char *name,
                     int policy);
 
+int
+virCPUDefUpdateFeature(virCPUDefPtr cpu,
+                       const char *name,
+                       int policy);
+
 #endif /* __VIR_CPU_CONF_H__ */
index 0ab7632564f1302dc1703d1dd0532c0a38ca079e..3c27041ed12987216b763f9d3e3fb7d748638677 100644 (file)
@@ -70,6 +70,7 @@ virCPUDefFormatBuf;
 virCPUDefFree;
 virCPUDefFreeModel;
 virCPUDefParseXML;
+virCPUDefUpdateFeature;
 virCPUModeTypeToString;