[libvirt] [PATCH 1/5] Also store features blocking migration as CPUx86Data in the cpu map

Ján Tomko jtomko at redhat.com
Thu Feb 5 14:47:52 UTC 2015


Allowing their use with x86Data* helpers for easier filtering.
---
 src/cpu/cpu_x86.c | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index 45be262..f6e8eec 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -90,6 +90,7 @@ struct x86_map {
     struct x86_feature *features;
     struct x86_model *models;
     struct x86_feature *migrate_blockers;
+    virCPUx86Data *migrate_blocker_data;
 };
 
 static struct x86_map* virCPUx86Map;
@@ -689,6 +690,36 @@ x86ParseCPUID(xmlXPathContextPtr ctxt,
 }
 
 
+static virCPUx86Data *
+x86DataFromCPUFeatureList(const struct x86_feature *list,
+                          const struct x86_map *map)
+{
+    virCPUx86Data *data;
+    const struct x86_feature *feat;
+
+    if (VIR_ALLOC(data) < 0)
+        return NULL;
+
+    for (feat = list; feat; feat = feat->next) {
+        const struct x86_feature *feature;
+        if (!(feature = x86FeatureFind(map, feat->name))) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           _("Unknown CPU feature %s"), feat->name);
+            goto error;
+        }
+
+        if (x86DataAdd(data, feature->data) < 0)
+            goto error;
+    }
+
+    return data;
+
+ error:
+    virCPUx86DataFree(data);
+    return NULL;
+}
+
+
 static int
 x86FeatureLoad(xmlXPathContextPtr ctxt,
                struct x86_map *map)
@@ -1139,6 +1170,7 @@ x86MapFree(struct x86_map *map)
         x86FeatureFree(migrate_blocker);
     }
 
+    virCPUx86DataFree(map->migrate_blocker_data);
     VIR_FREE(map);
 }
 
@@ -1221,6 +1253,12 @@ virCPUx86LoadMap(void)
     if (x86MapLoadInternalFeatures(map) < 0)
         goto error;
 
+    map->migrate_blocker_data = x86DataFromCPUFeatureList(map->migrate_blockers,
+                                                          map);
+    if (!map->migrate_blocker_data)
+        goto error;
+
+
     return map;
 
  error:
-- 
2.0.5




More information about the libvir-list mailing list