Pablo Greco 40546a
From 296ff8fbba31a8052bdf24e409b0bb9e3c041c8f Mon Sep 17 00:00:00 2001
Pablo Greco 40546a
Message-Id: <296ff8fbba31a8052bdf24e409b0bb9e3c041c8f@dist-git>
Pablo Greco 40546a
From: Jiri Denemark <jdenemar@redhat.com>
Pablo Greco 40546a
Date: Fri, 21 Jun 2019 09:25:46 +0200
Pablo Greco 40546a
Subject: [PATCH] cpu_conf: Introduce virCPUDefFilterFeatures
Pablo Greco 40546a
MIME-Version: 1.0
Pablo Greco 40546a
Content-Type: text/plain; charset=UTF-8
Pablo Greco 40546a
Content-Transfer-Encoding: 8bit
Pablo Greco 40546a
Pablo Greco 40546a
This new internal API can be used for in place filtering of CPU features
Pablo Greco 40546a
in virCPUDef.
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
(cherry picked from commit c145b660b8225f73db16660461077ef931730939)
Pablo Greco 40546a
Pablo Greco 40546a
https://bugzilla.redhat.com/show_bug.cgi?id=1697627
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Pablo Greco 40546a
Message-Id: <b3bd18c6e9cdf5256a7369bd06e5f773e160d9f3.1561068591.git.jdenemar@redhat.com>
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
---
Pablo Greco 40546a
 src/conf/cpu_conf.c      | 22 ++++++++++++++++++++++
Pablo Greco 40546a
 src/conf/cpu_conf.h      |  5 +++++
Pablo Greco 40546a
 src/libvirt_private.syms |  1 +
Pablo Greco 40546a
 3 files changed, 28 insertions(+)
Pablo Greco 40546a
Pablo Greco 40546a
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
Pablo Greco 40546a
index 43a3ab5dcd..51e2a83eae 100644
Pablo Greco 40546a
--- a/src/conf/cpu_conf.c
Pablo Greco 40546a
+++ b/src/conf/cpu_conf.c
Pablo Greco 40546a
@@ -850,6 +850,28 @@ virCPUDefFindFeature(virCPUDefPtr def,
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
 
Pablo Greco 40546a
+int
Pablo Greco 40546a
+virCPUDefFilterFeatures(virCPUDefPtr cpu,
Pablo Greco 40546a
+                        virCPUDefFeatureFilter filter,
Pablo Greco 40546a
+                        void *opaque)
Pablo Greco 40546a
+{
Pablo Greco 40546a
+    size_t i = 0;
Pablo Greco 40546a
+
Pablo Greco 40546a
+    while (i < cpu->nfeatures) {
Pablo Greco 40546a
+        if (filter(cpu->features[i].name, opaque)) {
Pablo Greco 40546a
+            i++;
Pablo Greco 40546a
+            continue;
Pablo Greco 40546a
+        }
Pablo Greco 40546a
+
Pablo Greco 40546a
+        VIR_FREE(cpu->features[i].name);
Pablo Greco 40546a
+        if (VIR_DELETE_ELEMENT_INPLACE(cpu->features, i, cpu->nfeatures) < 0)
Pablo Greco 40546a
+            return -1;
Pablo Greco 40546a
+    }
Pablo Greco 40546a
+
Pablo Greco 40546a
+    return 0;
Pablo Greco 40546a
+}
Pablo Greco 40546a
+
Pablo Greco 40546a
+
Pablo Greco 40546a
 bool
Pablo Greco 40546a
 virCPUDefIsEqual(virCPUDefPtr src,
Pablo Greco 40546a
                  virCPUDefPtr dst,
Pablo Greco 40546a
diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h
Pablo Greco 40546a
index 9f2e7ee264..ad25932b9b 100644
Pablo Greco 40546a
--- a/src/conf/cpu_conf.h
Pablo Greco 40546a
+++ b/src/conf/cpu_conf.h
Pablo Greco 40546a
@@ -220,6 +220,11 @@ virCPUFeatureDefPtr
Pablo Greco 40546a
 virCPUDefFindFeature(virCPUDefPtr def,
Pablo Greco 40546a
                      const char *name);
Pablo Greco 40546a
 
Pablo Greco 40546a
+int
Pablo Greco 40546a
+virCPUDefFilterFeatures(virCPUDefPtr cpu,
Pablo Greco 40546a
+                        virCPUDefFeatureFilter filter,
Pablo Greco 40546a
+                        void *opaque);
Pablo Greco 40546a
+
Pablo Greco 40546a
 virCPUDefPtr *
Pablo Greco 40546a
 virCPUDefListParse(const char **xmlCPUs,
Pablo Greco 40546a
                    unsigned int ncpus,
Pablo Greco 40546a
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
Pablo Greco 40546a
index 9ebc5384fb..57508de0c1 100644
Pablo Greco 40546a
--- a/src/libvirt_private.syms
Pablo Greco 40546a
+++ b/src/libvirt_private.syms
Pablo Greco 40546a
@@ -76,6 +76,7 @@ virCPUDefCopy;
Pablo Greco 40546a
 virCPUDefCopyModel;
Pablo Greco 40546a
 virCPUDefCopyModelFilter;
Pablo Greco 40546a
 virCPUDefCopyWithoutModel;
Pablo Greco 40546a
+virCPUDefFilterFeatures;
Pablo Greco 40546a
 virCPUDefFindFeature;
Pablo Greco 40546a
 virCPUDefFormat;
Pablo Greco 40546a
 virCPUDefFormatBuf;
Pablo Greco 40546a
-- 
Pablo Greco 40546a
2.22.0
Pablo Greco 40546a