]> xenbits.xensource.com Git - libvirt.git/commitdiff
cpu_conf: Pass policy to CPU feature filtering callbacks
authorJiri Denemark <jdenemar@redhat.com>
Thu, 7 Nov 2019 15:25:47 +0000 (16:25 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Tue, 12 Nov 2019 19:14:15 +0000 (20:14 +0100)
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
src/conf/cpu_conf.c
src/conf/cpu_conf.h
src/cpu/cpu_x86.c
src/cpu/cpu_x86.h
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h

index 2b644638a7dc0e7315812cf7da5ec319236b88b6..a38101d024ccc51b187b0b13cb79aa54720085c0 100644 (file)
@@ -147,7 +147,7 @@ virCPUDefCopyModelFilter(virCPUDefPtr dst,
     dst->nfeatures = 0;
 
     for (i = 0; i < src->nfeatures; i++) {
-        if (filter && !filter(src->features[i].name, opaque))
+        if (filter && !filter(src->features[i].name, src->features[i].policy, opaque))
             continue;
 
         n = dst->nfeatures++;
@@ -937,7 +937,7 @@ virCPUDefFilterFeatures(virCPUDefPtr cpu,
     size_t i = 0;
 
     while (i < cpu->nfeatures) {
-        if (filter(cpu->features[i].name, opaque)) {
+        if (filter(cpu->features[i].name, cpu->features[i].policy, opaque)) {
             i++;
             continue;
         }
@@ -972,7 +972,7 @@ virCPUDefCheckFeatures(virCPUDefPtr cpu,
     *features = NULL;
 
     for (i = 0; i < cpu->nfeatures; i++) {
-        if (filter(cpu->features[i].name, opaque)) {
+        if (filter(cpu->features[i].name, cpu->features[i].policy, opaque)) {
             if (virStringListAdd(&list, cpu->features[i].name) < 0)
                 return -1;
             n++;
index 30904fab95c2034f8135d97a2734831d4fd362e9..a9f8abeef1b3f0f0abb51316aa3f8882c25c4e9e 100644 (file)
@@ -161,6 +161,7 @@ virCPUDefCopyModel(virCPUDefPtr dst,
  * Returns true if feature @name should copied, false otherwise.
  */
 typedef bool (*virCPUDefFeatureFilter)(const char *name,
+                                       virCPUFeaturePolicy policy,
                                        void *opaque);
 
 int
index 52d69901cf3f9920a5553699706408f3a40592e4..c83cab0c5331831be5fd7c7ad17b9ddd0ffa78cc 100644 (file)
@@ -3233,6 +3233,15 @@ virCPUx86ExpandFeatures(virCPUDefPtr cpu)
 }
 
 
+static bool
+x86FeatureFilterMigratable(const char *name,
+                           virCPUFeaturePolicy policy G_GNUC_UNUSED,
+                           void *cpu_map)
+{
+    return x86FeatureIsMigratable(name, cpu_map);
+}
+
+
 static virCPUDefPtr
 virCPUx86CopyMigratable(virCPUDefPtr cpu)
 {
@@ -3246,7 +3255,7 @@ virCPUx86CopyMigratable(virCPUDefPtr cpu)
         return NULL;
 
     if (virCPUDefCopyModelFilter(copy, cpu, false,
-                                 x86FeatureIsMigratable, map) < 0)
+                                 x86FeatureFilterMigratable, map) < 0)
         goto error;
 
     return copy;
@@ -3381,6 +3390,7 @@ virCPUx86FeatureIsMSR(const char *name)
  */
 bool
 virCPUx86FeatureFilterSelectMSR(const char *name,
+                                virCPUFeaturePolicy policy G_GNUC_UNUSED,
                                 void *opaque G_GNUC_UNUSED)
 {
     return virCPUx86FeatureIsMSR(name);
@@ -3397,6 +3407,7 @@ virCPUx86FeatureFilterSelectMSR(const char *name,
  */
 bool
 virCPUx86FeatureFilterDropMSR(const char *name,
+                              virCPUFeaturePolicy policy G_GNUC_UNUSED,
                               void *opaque G_GNUC_UNUSED)
 {
     return !virCPUx86FeatureIsMSR(name);
index 3ea38d170166a9750fa05b62af5da0032faa2cf1..3b1aabe98df2d2a397296e1de9f4d405314353f7 100644 (file)
@@ -42,7 +42,9 @@ int virCPUx86DataSetVendor(virCPUDataPtr cpuData,
                            const char *vendor);
 
 bool virCPUx86FeatureFilterSelectMSR(const char *name,
+                                     virCPUFeaturePolicy policy,
                                      void *opaque);
 
 bool virCPUx86FeatureFilterDropMSR(const char *name,
+                                   virCPUFeaturePolicy policy,
                                    void *opaque);
index b27b2e6b8b127a09c20b0a99c300da5a065f3c78..7eb92b68af1af9afe1ae427fd9de5c360d3357d6 100644 (file)
@@ -2908,6 +2908,7 @@ virQEMUCapsProbeQMPSEVCapabilities(virQEMUCapsPtr qemuCaps,
  */
 bool
 virQEMUCapsCPUFilterFeatures(const char *name,
+                             virCPUFeaturePolicy policy G_GNUC_UNUSED,
                              void *opaque)
 {
     virArch *arch = opaque;
index 32e9798cdac409a7fe24742e505e63b476644eb0..aa593396ce6e025acb28d008cbb8695bb1a5c11a 100644 (file)
@@ -667,6 +667,7 @@ bool virQEMUCapsGuestIsNative(virArch host,
                               virArch guest);
 
 bool virQEMUCapsCPUFilterFeatures(const char *name,
+                                  virCPUFeaturePolicy policy,
                                   void *opaque);
 
 const char *