libvirt/SOURCES/libvirt-cpu_conf-Pass-polic...

166 lines
5.8 KiB
Diff

From acb2d441abd4b584c40748cbaf4f6f7a376753aa Mon Sep 17 00:00:00 2001
Message-Id: <acb2d441abd4b584c40748cbaf4f6f7a376753aa@dist-git>
From: Jiri Denemark <jdenemar@redhat.com>
Date: Fri, 15 Nov 2019 17:52:32 +0100
Subject: [PATCH] cpu_conf: Pass policy to CPU feature filtering callbacks
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit 668797dc5cb474585609559dbe610e09517e23e6)
https://bugzilla.redhat.com/show_bug.cgi?id=1749672
https://bugzilla.redhat.com/show_bug.cgi?id=1756156
https://bugzilla.redhat.com/show_bug.cgi?id=1721608
Conflicts:
src/cpu/cpu_x86.c
src/qemu/qemu_capabilities.c
- no glib stuff downstream
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Message-Id: <e35cd40bd84f7304288051c24fa0d4581c3d43cb.1573836581.git.jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
---
src/conf/cpu_conf.c | 6 +++---
src/conf/cpu_conf.h | 1 +
src/cpu/cpu_x86.c | 13 ++++++++++++-
src/cpu/cpu_x86.h | 2 ++
src/qemu/qemu_capabilities.c | 1 +
src/qemu/qemu_capabilities.h | 1 +
6 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
index 4cccea9981..d4e3c81145 100644
--- a/src/conf/cpu_conf.c
+++ b/src/conf/cpu_conf.c
@@ -135,7 +135,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++;
@@ -858,7 +858,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;
}
@@ -893,7 +893,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++;
diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h
index cba0ec7c81..687e1b09d2 100644
--- a/src/conf/cpu_conf.h
+++ b/src/conf/cpu_conf.h
@@ -162,6 +162,7 @@ virCPUDefCopyModel(virCPUDefPtr dst,
* Returns true if feature @name should copied, false otherwise.
*/
typedef bool (*virCPUDefFeatureFilter)(const char *name,
+ virCPUFeaturePolicy policy,
void *opaque);
int
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
index 9104bdbf1e..cf5ef442e7 100644
--- a/src/cpu/cpu_x86.c
+++ b/src/cpu/cpu_x86.c
@@ -3260,6 +3260,15 @@ virCPUx86ExpandFeatures(virCPUDefPtr cpu)
}
+static bool
+x86FeatureFilterMigratable(const char *name,
+ virCPUFeaturePolicy policy ATTRIBUTE_UNUSED,
+ void *cpu_map)
+{
+ return x86FeatureIsMigratable(name, cpu_map);
+}
+
+
static virCPUDefPtr
virCPUx86CopyMigratable(virCPUDefPtr cpu)
{
@@ -3273,7 +3282,7 @@ virCPUx86CopyMigratable(virCPUDefPtr cpu)
return NULL;
if (virCPUDefCopyModelFilter(copy, cpu, false,
- x86FeatureIsMigratable, map) < 0)
+ x86FeatureFilterMigratable, map) < 0)
goto error;
return copy;
@@ -3408,6 +3417,7 @@ virCPUx86FeatureIsMSR(const char *name)
*/
bool
virCPUx86FeatureFilterSelectMSR(const char *name,
+ virCPUFeaturePolicy policy ATTRIBUTE_UNUSED,
void *opaque ATTRIBUTE_UNUSED)
{
return virCPUx86FeatureIsMSR(name);
@@ -3424,6 +3434,7 @@ virCPUx86FeatureFilterSelectMSR(const char *name,
*/
bool
virCPUx86FeatureFilterDropMSR(const char *name,
+ virCPUFeaturePolicy policy ATTRIBUTE_UNUSED,
void *opaque ATTRIBUTE_UNUSED)
{
return !virCPUx86FeatureIsMSR(name);
diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h
index 5126679985..866fe17e88 100644
--- a/src/cpu/cpu_x86.h
+++ b/src/cpu/cpu_x86.h
@@ -46,9 +46,11 @@ 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);
#endif /* __VIR_CPU_X86_H__ */
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index fbfe74d45b..c25d8c3e1a 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2753,6 +2753,7 @@ virQEMUCapsProbeQMPSEVCapabilities(virQEMUCapsPtr qemuCaps,
bool
virQEMUCapsCPUFilterFeatures(const char *name,
+ virCPUFeaturePolicy policy ATTRIBUTE_UNUSED,
void *opaque)
{
virArch *arch = opaque;
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 1767b2ab6c..a4055d5458 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -629,6 +629,7 @@ bool virQEMUCapsGuestIsNative(virArch host,
virArch guest);
bool virQEMUCapsCPUFilterFeatures(const char *name,
+ virCPUFeaturePolicy policy,
void *opaque);
const char *
--
2.24.0