Merge remote-tracking branch 'origin/a9' into a9-ppc64le
This commit is contained in:
commit
9be283d1f1
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/libvirt-9.5.0.tar.xz
|
||||
SOURCES/libvirt-10.0.0.tar.xz
|
||||
|
@ -1 +1 @@
|
||||
472f6871651d8d3b41b2a2602adfcdb18629049d SOURCES/libvirt-9.5.0.tar.xz
|
||||
7a2e402bfb1ad295544de6cd527c4c04e85c5096 SOURCES/libvirt-10.0.0.tar.xz
|
||||
|
78
SOURCES/conf-cpu-Introduce-virCPUDefListFeatures.patch
Normal file
78
SOURCES/conf-cpu-Introduce-virCPUDefListFeatures.patch
Normal file
@ -0,0 +1,78 @@
|
||||
From 577c4ca414b26c8586f2586978e55c948bec0a32 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Mon, 11 Mar 2024 15:37:32 +0100
|
||||
Subject: [PATCH] conf: cpu: Introduce virCPUDefListFeatures
|
||||
|
||||
The function returns a list of explicitly mentioned features in the CPU
|
||||
definition.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
---
|
||||
src/conf/cpu_conf.c | 24 ++++++++++++++++++++++++
|
||||
src/conf/cpu_conf.h | 3 +++
|
||||
src/libvirt_private.syms | 1 +
|
||||
3 files changed, 28 insertions(+)
|
||||
|
||||
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
|
||||
index 6e6e1b9a897..4dca7e57ec7 100644
|
||||
--- a/src/conf/cpu_conf.c
|
||||
+++ b/src/conf/cpu_conf.c
|
||||
@@ -982,6 +982,30 @@ virCPUDefFindFeature(const virCPUDef *def,
|
||||
}
|
||||
|
||||
|
||||
+/**
|
||||
+ * virCPUDefListExplicitFeatures:
|
||||
+ * @def: CPU definition
|
||||
+ *
|
||||
+ * Provides a list of feature names explicitly mentioned in the CPU definition
|
||||
+ * regardless of the policy. The caller is responsible for freeing the list.
|
||||
+ *
|
||||
+ * Returns a NULL-terminated list of feature names.
|
||||
+ */
|
||||
+char **
|
||||
+virCPUDefListExplicitFeatures(const virCPUDef *def)
|
||||
+{
|
||||
+ char **list;
|
||||
+ size_t i;
|
||||
+
|
||||
+ list = g_new0(char *, def->nfeatures + 1);
|
||||
+
|
||||
+ for (i = 0; i < def->nfeatures; i++)
|
||||
+ list[i] = g_strdup(def->features[i].name);
|
||||
+
|
||||
+ return list;
|
||||
+}
|
||||
+
|
||||
+
|
||||
int
|
||||
virCPUDefFilterFeatures(virCPUDef *cpu,
|
||||
virCPUDefFeatureFilter filter,
|
||||
diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h
|
||||
index 2694022fed1..b10c23ee828 100644
|
||||
--- a/src/conf/cpu_conf.h
|
||||
+++ b/src/conf/cpu_conf.h
|
||||
@@ -270,6 +270,9 @@ virCPUDefCheckFeatures(virCPUDef *cpu,
|
||||
void *opaque,
|
||||
char ***features);
|
||||
|
||||
+char **
|
||||
+virCPUDefListExplicitFeatures(const virCPUDef *def);
|
||||
+
|
||||
virCPUDef **
|
||||
virCPUDefListParse(const char **xmlCPUs,
|
||||
unsigned int ncpus,
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index 98a925933ef..6b6bcc368ac 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -111,6 +111,7 @@ virCPUDefFree;
|
||||
virCPUDefFreeFeatures;
|
||||
virCPUDefFreeModel;
|
||||
virCPUDefIsEqual;
|
||||
+virCPUDefListExplicitFeatures;
|
||||
virCPUDefListFree;
|
||||
virCPUDefListParse;
|
||||
virCPUDefNew;
|
@ -0,0 +1,212 @@
|
||||
From 5fbfa5ab8a3bf914d2deacd0d281b16aafd593b5 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:50:48 +0100
|
||||
Subject: [PATCH] cpu: x86: Add support for adding features to existing CPU
|
||||
models
|
||||
|
||||
This is not a good idea in general, but we can (and have to) do it in
|
||||
specific cases when a feature has always been part of a CPU model in
|
||||
hypervisor's definition, but we ignored it and did not include the
|
||||
feature in our definition.
|
||||
|
||||
Blindly adding the features to the CPU map and not adding them to
|
||||
existing CPU models breaks migration between old and new libvirt in both
|
||||
directions. New libvirt would complain the features got unexpectedly
|
||||
enabled (as they were not mentioned in the incoming domain XML) even
|
||||
though they were also enabled on the source and the old libvirt just
|
||||
didn't know about them. On the other hand, old libvirt would refuse to
|
||||
accept incoming migration of a domain started by new libvirt because the
|
||||
domain XML would contain CPU features unknown to the old libvirt.
|
||||
|
||||
This is exactly what happened when several vmx-* features were added a
|
||||
few releases back. Migration between libvirt releases before and after
|
||||
the addition is now broken.
|
||||
|
||||
This patch adds support for added these features to existing CPU models
|
||||
by marking them with added='yes'. The features will not be considered
|
||||
part of the CPU model and will be described explicitly via additional
|
||||
<feature/> elements, but the compatibility check will not complain if
|
||||
they are enabled by the hypervisor even though they were not explicitly
|
||||
mentioned in the CPU definition and incoming migration from old libvirt
|
||||
will succeed.
|
||||
|
||||
To fix outgoing migration to old libvirt, we also need to drop all those
|
||||
features from domain XML unless they were explicitly requested by the
|
||||
user. This will be handled by a later patch.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 74 ++++++++++++++++++++++++++++++++++++++--
|
||||
src/cpu/cpu_x86.h | 3 ++
|
||||
src/libvirt_private.syms | 1 +
|
||||
3 files changed, 75 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index e8409ce616f..0fad761809c 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -148,6 +148,17 @@ struct _virCPUx86Model {
|
||||
virCPUx86Signatures *signatures;
|
||||
virCPUx86Data data;
|
||||
GStrv removedFeatures;
|
||||
+
|
||||
+ /* Features added to the CPU model after its original version was released.
|
||||
+ * Such features are not really considered part of the model, but the
|
||||
+ * compatibility check will not complain if they are enabled by the
|
||||
+ * hypervisor even though they were not explicitly mentioned in the CPU
|
||||
+ * definition. This should only be used for features which were always
|
||||
+ * included in the CPU model by the hypervisor, but libvirt didn't support
|
||||
+ * them when introducing the CPU model. In other words, they were enabled,
|
||||
+ * but we ignored them.
|
||||
+ */
|
||||
+ GStrv addedFeatures;
|
||||
};
|
||||
|
||||
typedef struct _virCPUx86Map virCPUx86Map;
|
||||
@@ -1276,6 +1287,7 @@ x86ModelFree(virCPUx86Model *model)
|
||||
virCPUx86SignaturesFree(model->signatures);
|
||||
virCPUx86DataClear(&model->data);
|
||||
g_strfreev(model->removedFeatures);
|
||||
+ g_strfreev(model->addedFeatures);
|
||||
g_free(model);
|
||||
}
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree);
|
||||
@@ -1291,6 +1303,7 @@ x86ModelCopy(virCPUx86Model *model)
|
||||
copy->signatures = virCPUx86SignaturesCopy(model->signatures);
|
||||
x86DataCopy(©->data, &model->data);
|
||||
copy->removedFeatures = g_strdupv(model->removedFeatures);
|
||||
+ copy->addedFeatures = g_strdupv(model->addedFeatures);
|
||||
copy->vendor = model->vendor;
|
||||
|
||||
return g_steal_pointer(©);
|
||||
@@ -1596,17 +1609,20 @@ x86ModelParseFeatures(virCPUx86Model *model,
|
||||
g_autofree xmlNodePtr *nodes = NULL;
|
||||
size_t i;
|
||||
size_t nremoved = 0;
|
||||
+ size_t nadded = 0;
|
||||
int n;
|
||||
|
||||
if ((n = virXPathNodeSet("./feature", ctxt, &nodes)) <= 0)
|
||||
return n;
|
||||
|
||||
model->removedFeatures = g_new0(char *, n + 1);
|
||||
+ model->addedFeatures = g_new0(char *, n + 1);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
g_autofree char *ftname = NULL;
|
||||
virCPUx86Feature *feature;
|
||||
virTristateBool rem;
|
||||
+ virTristateBool added;
|
||||
|
||||
if (!(ftname = virXMLPropString(nodes[i], "name"))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
@@ -1632,10 +1648,21 @@ x86ModelParseFeatures(virCPUx86Model *model,
|
||||
continue;
|
||||
}
|
||||
|
||||
+ if (virXMLPropTristateBool(nodes[i], "added",
|
||||
+ VIR_XML_PROP_NONE,
|
||||
+ &added) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (added == VIR_TRISTATE_BOOL_YES) {
|
||||
+ model->addedFeatures[nadded++] = g_strdup(ftname);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
x86DataAdd(&model->data, &feature->data);
|
||||
}
|
||||
|
||||
model->removedFeatures = g_renew(char *, model->removedFeatures, nremoved + 1);
|
||||
+ model->addedFeatures = g_renew(char *, model->addedFeatures, nadded + 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -3022,11 +3049,18 @@ virCPUx86UpdateLive(virCPUDef *cpu,
|
||||
if (expected == VIR_CPU_FEATURE_DISABLE &&
|
||||
x86DataIsSubset(&enabled, &feature->data)) {
|
||||
VIR_DEBUG("Feature '%s' enabled by the hypervisor", feature->name);
|
||||
- if (cpu->check == VIR_CPU_CHECK_FULL)
|
||||
+
|
||||
+ /* Extra features enabled by the hypervisor are ignored by
|
||||
+ * check='full' in case they were added to the model later for
|
||||
+ * backward compatibility with the older definition of the model.
|
||||
+ */
|
||||
+ if (cpu->check == VIR_CPU_CHECK_FULL &&
|
||||
+ !g_strv_contains((const char **) model->addedFeatures, feature->name)) {
|
||||
virBufferAsprintf(&bufAdded, "%s,", feature->name);
|
||||
- else if (virCPUDefUpdateFeature(cpu, feature->name,
|
||||
- VIR_CPU_FEATURE_REQUIRE) < 0)
|
||||
+ } else if (virCPUDefUpdateFeature(cpu, feature->name,
|
||||
+ VIR_CPU_FEATURE_REQUIRE) < 0) {
|
||||
return -1;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (x86DataIsSubset(&disabled, &feature->data) ||
|
||||
@@ -3491,6 +3525,40 @@ virCPUx86FeatureFilterDropMSR(const char *name,
|
||||
}
|
||||
|
||||
|
||||
+/**
|
||||
+ * virCPUx86GetAddedFeatures:
|
||||
+ * @modelName: CPU model
|
||||
+ * @features: where to store a pointer to the list of added features
|
||||
+ *
|
||||
+ * Gets a list of features added to a specified CPU model after its original
|
||||
+ * version was already released. The @features will be set to NULL if the list
|
||||
+ * is empty or it will point to internal structures and thus it must not be
|
||||
+ * freed or modified by the caller. The pointer is valid for the whole lifetime
|
||||
+ * of the process.
|
||||
+ *
|
||||
+ * Returns 0 on success, -1 otherwise.
|
||||
+ */
|
||||
+int
|
||||
+virCPUx86GetAddedFeatures(const char *modelName,
|
||||
+ const char * const **features)
|
||||
+{
|
||||
+ virCPUx86Map *map;
|
||||
+ virCPUx86Model *model;
|
||||
+
|
||||
+ if (!(map = virCPUx86GetMap()))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (!(model = x86ModelFind(map, modelName))) {
|
||||
+ virReportError(VIR_ERR_INVALID_ARG,
|
||||
+ _("unknown CPU model %1$s"), modelName);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ *features = (const char **) model->addedFeatures;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
struct cpuArchDriver cpuDriverX86 = {
|
||||
.name = "x86",
|
||||
.arch = archs,
|
||||
diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h
|
||||
index 2721fc90970..2cd965fea4c 100644
|
||||
--- a/src/cpu/cpu_x86.h
|
||||
+++ b/src/cpu/cpu_x86.h
|
||||
@@ -48,3 +48,6 @@ bool virCPUx86FeatureFilterSelectMSR(const char *name,
|
||||
bool virCPUx86FeatureFilterDropMSR(const char *name,
|
||||
virCPUFeaturePolicy policy,
|
||||
void *opaque);
|
||||
+
|
||||
+int virCPUx86GetAddedFeatures(const char *modelName,
|
||||
+ const char * const **features);
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index 887659784a6..98a925933ef 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -1543,6 +1543,7 @@ virCPUx86DataSetSignature;
|
||||
virCPUx86DataSetVendor;
|
||||
virCPUx86FeatureFilterDropMSR;
|
||||
virCPUx86FeatureFilterSelectMSR;
|
||||
+virCPUx86GetAddedFeatures;
|
||||
|
||||
# datatypes.h
|
||||
virConnectClass;
|
358
SOURCES/libvirt-Add-vmx-features-to-Broadwell.patch
Normal file
358
SOURCES/libvirt-Add-vmx-features-to-Broadwell.patch
Normal file
@ -0,0 +1,358 @@
|
||||
From ce330dd7e5405573c77801a418345804049315ab Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:00:15 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Broadwell*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Broadwell-IBRS.xml | 75 ++++++++++++++++++++++++
|
||||
src/cpu_map/x86_Broadwell-noTSX-IBRS.xml | 75 ++++++++++++++++++++++++
|
||||
src/cpu_map/x86_Broadwell-noTSX.xml | 75 ++++++++++++++++++++++++
|
||||
src/cpu_map/x86_Broadwell.xml | 75 ++++++++++++++++++++++++
|
||||
4 files changed, 300 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Broadwell-IBRS.xml b/src/cpu_map/x86_Broadwell-IBRS.xml
|
||||
index 9033d5fcd51..14849032981 100644
|
||||
--- a/src/cpu_map/x86_Broadwell-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell-IBRS.xml
|
||||
@@ -59,6 +59,81 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
diff --git a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
|
||||
index c044b60e36e..13f08435b76 100644
|
||||
--- a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
|
||||
@@ -57,6 +57,81 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
diff --git a/src/cpu_map/x86_Broadwell-noTSX.xml b/src/cpu_map/x86_Broadwell-noTSX.xml
|
||||
index 637f29ba1cf..4293b3aeee3 100644
|
||||
--- a/src/cpu_map/x86_Broadwell-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell-noTSX.xml
|
||||
@@ -56,6 +56,81 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
diff --git a/src/cpu_map/x86_Broadwell.xml b/src/cpu_map/x86_Broadwell.xml
|
||||
index 82939a45091..37dd1dabcfb 100644
|
||||
--- a/src/cpu_map/x86_Broadwell.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell.xml
|
||||
@@ -58,6 +58,81 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
184
SOURCES/libvirt-Add-vmx-features-to-Cascadelake.patch
Normal file
184
SOURCES/libvirt-Add-vmx-features-to-Cascadelake.patch
Normal file
@ -0,0 +1,184 @@
|
||||
From 5db61952252fa2ab88cc79f064f8f1b61b6c95cb Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:01:25 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Cascadelake*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 76 ++++++++++++++++++++
|
||||
src/cpu_map/x86_Cascadelake-Server.xml | 74 +++++++++++++++++++
|
||||
2 files changed, 150 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
index bfd4629836b..056f43d0887 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
@@ -70,6 +70,82 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
+ <feature name='vmx-xsaves' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server.xml b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
index 335e9cb5841..88e51c20678 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
@@ -72,6 +72,80 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
47
SOURCES/libvirt-Add-vmx-features-to-Conroe.patch
Normal file
47
SOURCES/libvirt-Add-vmx-features-to-Conroe.patch
Normal file
@ -0,0 +1,47 @@
|
||||
From 9cb8c372cd75647e09fac96e6995adab5e8dde79 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:04:45 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Conroe
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Conroe.xml | 26 ++++++++++++++++++++++++++
|
||||
1 file changed, 26 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Conroe.xml b/src/cpu_map/x86_Conroe.xml
|
||||
index 4cacee6142e..955297ffc30 100644
|
||||
--- a/src/cpu_map/x86_Conroe.xml
|
||||
+++ b/src/cpu_map/x86_Conroe.xml
|
||||
@@ -31,5 +31,31 @@
|
||||
<feature name='ssse3'/>
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
98
SOURCES/libvirt-Add-vmx-features-to-Cooperlake.patch
Normal file
98
SOURCES/libvirt-Add-vmx-features-to-Cooperlake.patch
Normal file
@ -0,0 +1,98 @@
|
||||
From cbee851581fc82ea95d7b6309b85e22f9d1ba0d3 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:05:01 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Cooperlake
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Cooperlake.xml | 76 ++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 76 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Cooperlake.xml b/src/cpu_map/x86_Cooperlake.xml
|
||||
index ceca687334f..af428f2781c 100644
|
||||
--- a/src/cpu_map/x86_Cooperlake.xml
|
||||
+++ b/src/cpu_map/x86_Cooperlake.xml
|
||||
@@ -81,6 +81,82 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
+ <feature name='vmx-xsaves' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
350
SOURCES/libvirt-Add-vmx-features-to-Haswell.patch
Normal file
350
SOURCES/libvirt-Add-vmx-features-to-Haswell.patch
Normal file
@ -0,0 +1,350 @@
|
||||
From b44679c31f2d46e88ce655c03aef4c3e9ab621ac Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:01:50 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Haswell*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Haswell-IBRS.xml | 73 ++++++++++++++++++++++++++
|
||||
src/cpu_map/x86_Haswell-noTSX-IBRS.xml | 73 ++++++++++++++++++++++++++
|
||||
src/cpu_map/x86_Haswell-noTSX.xml | 73 ++++++++++++++++++++++++++
|
||||
src/cpu_map/x86_Haswell.xml | 73 ++++++++++++++++++++++++++
|
||||
4 files changed, 292 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Haswell-IBRS.xml b/src/cpu_map/x86_Haswell-IBRS.xml
|
||||
index 0ffe2bae0d4..57b980d14fe 100644
|
||||
--- a/src/cpu_map/x86_Haswell-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Haswell-IBRS.xml
|
||||
@@ -55,6 +55,79 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
diff --git a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
|
||||
index 75d709c0098..fcae023ffb5 100644
|
||||
--- a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
|
||||
@@ -53,6 +53,79 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
diff --git a/src/cpu_map/x86_Haswell-noTSX.xml b/src/cpu_map/x86_Haswell-noTSX.xml
|
||||
index b0a0faa856d..7404052065a 100644
|
||||
--- a/src/cpu_map/x86_Haswell-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Haswell-noTSX.xml
|
||||
@@ -52,6 +52,79 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
diff --git a/src/cpu_map/x86_Haswell.xml b/src/cpu_map/x86_Haswell.xml
|
||||
index ee16b30f198..99986c5c45c 100644
|
||||
--- a/src/cpu_map/x86_Haswell.xml
|
||||
+++ b/src/cpu_map/x86_Haswell.xml
|
||||
@@ -54,6 +54,79 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
183
SOURCES/libvirt-Add-vmx-features-to-Icelake.patch
Normal file
183
SOURCES/libvirt-Add-vmx-features-to-Icelake.patch
Normal file
@ -0,0 +1,183 @@
|
||||
From a6f3eafc402fbaf18b2e23e93c8c7339317c7d97 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:02:47 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Icelake*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Icelake-Server-noTSX.xml | 77 ++++++++++++++++++++++++
|
||||
src/cpu_map/x86_Icelake-Server.xml | 72 ++++++++++++++++++++++
|
||||
2 files changed, 149 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
index 7c9c32c9776..072f8145c42 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
@@ -80,6 +80,83 @@
|
||||
<feature name='umip'/>
|
||||
<feature name='vaes'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-5' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
+ <feature name='vmx-xsaves' added='yes'/>
|
||||
<feature name='vpclmulqdq'/>
|
||||
<feature name='wbnoinvd'/>
|
||||
<feature name='x2apic'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server.xml b/src/cpu_map/x86_Icelake-Server.xml
|
||||
index b4685bead05..3a35145d7f0 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Server.xml
|
||||
@@ -82,6 +82,78 @@
|
||||
<feature name='umip'/>
|
||||
<feature name='vaes'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='vpclmulqdq'/>
|
||||
<feature name='wbnoinvd'/>
|
||||
<feature name='x2apic'/>
|
168
SOURCES/libvirt-Add-vmx-features-to-IvyBridge.patch
Normal file
168
SOURCES/libvirt-Add-vmx-features-to-IvyBridge.patch
Normal file
@ -0,0 +1,168 @@
|
||||
From 4b707f8bb0003b87f67474bfac02a2feac26c96f Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:04:01 +0100
|
||||
Subject: [PATCH] Add vmx-* features to IvyBridge*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_IvyBridge-IBRS.xml | 67 ++++++++++++++++++++++++++++++
|
||||
src/cpu_map/x86_IvyBridge.xml | 67 ++++++++++++++++++++++++++++++
|
||||
2 files changed, 134 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_IvyBridge-IBRS.xml b/src/cpu_map/x86_IvyBridge-IBRS.xml
|
||||
index 430bc3232db..27d85d86c4e 100644
|
||||
--- a/src/cpu_map/x86_IvyBridge-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_IvyBridge-IBRS.xml
|
||||
@@ -47,6 +47,73 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
diff --git a/src/cpu_map/x86_IvyBridge.xml b/src/cpu_map/x86_IvyBridge.xml
|
||||
index eaf5d02e827..72031cfdc62 100644
|
||||
--- a/src/cpu_map/x86_IvyBridge.xml
|
||||
+++ b/src/cpu_map/x86_IvyBridge.xml
|
||||
@@ -46,6 +46,73 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
154
SOURCES/libvirt-Add-vmx-features-to-Nehalem.patch
Normal file
154
SOURCES/libvirt-Add-vmx-features-to-Nehalem.patch
Normal file
@ -0,0 +1,154 @@
|
||||
From a539910c942f5993b967f8265756e3a10363e4f4 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:04:21 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Nehalem*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Nehalem-IBRS.xml | 61 ++++++++++++++++++++++++++++++++
|
||||
src/cpu_map/x86_Nehalem.xml | 61 ++++++++++++++++++++++++++++++++
|
||||
2 files changed, 122 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Nehalem-IBRS.xml b/src/cpu_map/x86_Nehalem-IBRS.xml
|
||||
index 00d0d2fe51a..0cfee14c0f7 100644
|
||||
--- a/src/cpu_map/x86_Nehalem-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Nehalem-IBRS.xml
|
||||
@@ -38,5 +38,66 @@
|
||||
<feature name='ssse3'/>
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
||||
diff --git a/src/cpu_map/x86_Nehalem.xml b/src/cpu_map/x86_Nehalem.xml
|
||||
index 9968001fe79..74ee64ce1c3 100644
|
||||
--- a/src/cpu_map/x86_Nehalem.xml
|
||||
+++ b/src/cpu_map/x86_Nehalem.xml
|
||||
@@ -37,5 +37,66 @@
|
||||
<feature name='ssse3'/>
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
50
SOURCES/libvirt-Add-vmx-features-to-Penryn.patch
Normal file
50
SOURCES/libvirt-Add-vmx-features-to-Penryn.patch
Normal file
@ -0,0 +1,50 @@
|
||||
From c6fadbb2807c80bd2b812eebd932eb4a34067ccd Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:05:20 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Penryn
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Penryn.xml | 29 +++++++++++++++++++++++++++++
|
||||
1 file changed, 29 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Penryn.xml b/src/cpu_map/x86_Penryn.xml
|
||||
index 29d4cd635b8..b31f96fa431 100644
|
||||
--- a/src/cpu_map/x86_Penryn.xml
|
||||
+++ b/src/cpu_map/x86_Penryn.xml
|
||||
@@ -33,5 +33,34 @@
|
||||
<feature name='ssse3'/>
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
160
SOURCES/libvirt-Add-vmx-features-to-SandyBridge.patch
Normal file
160
SOURCES/libvirt-Add-vmx-features-to-SandyBridge.patch
Normal file
@ -0,0 +1,160 @@
|
||||
From 29d492d6488e35db2e96a017ac3fb2712dcb638c Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:03:18 +0100
|
||||
Subject: [PATCH] Add vmx-* features to SandyBridge*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_SandyBridge-IBRS.xml | 63 ++++++++++++++++++++++++++++
|
||||
src/cpu_map/x86_SandyBridge.xml | 63 ++++++++++++++++++++++++++++
|
||||
2 files changed, 126 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_SandyBridge-IBRS.xml b/src/cpu_map/x86_SandyBridge-IBRS.xml
|
||||
index fbdb4f2bf64..297eea8e882 100644
|
||||
--- a/src/cpu_map/x86_SandyBridge-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_SandyBridge-IBRS.xml
|
||||
@@ -41,6 +41,69 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
||||
diff --git a/src/cpu_map/x86_SandyBridge.xml b/src/cpu_map/x86_SandyBridge.xml
|
||||
index 7c85ed42df1..20ea378c471 100644
|
||||
--- a/src/cpu_map/x86_SandyBridge.xml
|
||||
+++ b/src/cpu_map/x86_SandyBridge.xml
|
||||
@@ -40,6 +40,69 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xsave'/>
|
||||
</model>
|
99
SOURCES/libvirt-Add-vmx-features-to-SapphireRapids.patch
Normal file
99
SOURCES/libvirt-Add-vmx-features-to-SapphireRapids.patch
Normal file
@ -0,0 +1,99 @@
|
||||
From e67004ec1cec850baa65177d88c6db09376869d3 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:05:34 +0100
|
||||
Subject: [PATCH] Add vmx-* features to SapphireRapids
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_SapphireRapids.xml | 77 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 77 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_SapphireRapids.xml b/src/cpu_map/x86_SapphireRapids.xml
|
||||
index 2297feeeca2..40164a47e2a 100644
|
||||
--- a/src/cpu_map/x86_SapphireRapids.xml
|
||||
+++ b/src/cpu_map/x86_SapphireRapids.xml
|
||||
@@ -103,6 +103,83 @@
|
||||
<feature name='umip'/>
|
||||
<feature name='vaes'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-5' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
+ <feature name='vmx-xsaves' added='yes'/>
|
||||
<feature name='vpclmulqdq'/>
|
||||
<feature name='wbnoinvd'/>
|
||||
<feature name='x2apic'/>
|
520
SOURCES/libvirt-Add-vmx-features-to-Skylake.patch
Normal file
520
SOURCES/libvirt-Add-vmx-features-to-Skylake.patch
Normal file
@ -0,0 +1,520 @@
|
||||
From aa064b38fdbafd39d296a0933b7d1b8987eb4cb5 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:00:53 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Skylake*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Skylake-Client-IBRS.xml | 71 +++++++++++++++++
|
||||
src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml | 72 ++++++++++++++++++
|
||||
src/cpu_map/x86_Skylake-Client.xml | 71 +++++++++++++++++
|
||||
src/cpu_map/x86_Skylake-Server-IBRS.xml | 74 ++++++++++++++++++
|
||||
src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 76 +++++++++++++++++++
|
||||
src/cpu_map/x86_Skylake-Server.xml | 74 ++++++++++++++++++
|
||||
6 files changed, 438 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-IBRS.xml b/src/cpu_map/x86_Skylake-Client-IBRS.xml
|
||||
index 5709e7c2f95..1c77f9595b6 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-IBRS.xml
|
||||
@@ -67,6 +67,77 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
index ffba34502a4..dca117028cd 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
@@ -65,6 +65,78 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
+ <feature name='vmx-xsaves' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client.xml b/src/cpu_map/x86_Skylake-Client.xml
|
||||
index 14cd57e1768..68e5d2d0388 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client.xml
|
||||
@@ -66,6 +66,77 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-IBRS.xml b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
index 9fb34888094..e467b76242b 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
@@ -69,6 +69,80 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
index c162c0acc31..b8601da0cbc 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
@@ -67,6 +67,82 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
+ <feature name='vmx-xsaves' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server.xml b/src/cpu_map/x86_Skylake-Server.xml
|
||||
index e022d94c847..cc1e9ddd7f7 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server.xml
|
||||
@@ -68,6 +68,80 @@
|
||||
<feature name='tsc'/>
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
98
SOURCES/libvirt-Add-vmx-features-to-Snowridge.patch
Normal file
98
SOURCES/libvirt-Add-vmx-features-to-Snowridge.patch
Normal file
@ -0,0 +1,98 @@
|
||||
From 64e3c1138a81b98f14e5f1aa1e8e2bb85cfdd1e5 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:05:53 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Snowridge
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Snowridge.xml | 76 +++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 76 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Snowridge.xml b/src/cpu_map/x86_Snowridge.xml
|
||||
index 383a24d367c..bc410bd8f80 100644
|
||||
--- a/src/cpu_map/x86_Snowridge.xml
|
||||
+++ b/src/cpu_map/x86_Snowridge.xml
|
||||
@@ -62,6 +62,82 @@
|
||||
<feature name='tsc-deadline'/>
|
||||
<feature name='umip'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-register' added='yes'/>
|
||||
+ <feature name='vmx-apicv-vid' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-eptad' added='yes'/>
|
||||
+ <feature name='vmx-eptp-switching' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invpcid-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-pml' added='yes'/>
|
||||
+ <feature name='vmx-posted-intr' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdrand-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdseed-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-shadow-vmcs' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vmfunc' added='yes'/>
|
||||
+ <feature name='vmx-vmwrite-vmexit-fields' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
+ <feature name='vmx-xsaves' added='yes'/>
|
||||
<feature name='x2apic'/>
|
||||
<feature name='xgetbv1'/>
|
||||
<feature name='xsave'/>
|
158
SOURCES/libvirt-Add-vmx-features-to-Westmere.patch
Normal file
158
SOURCES/libvirt-Add-vmx-features-to-Westmere.patch
Normal file
@ -0,0 +1,158 @@
|
||||
From 6898b7cd8d61d46db7e92f6cf81daf085b85f724 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:03:38 +0100
|
||||
Subject: [PATCH] Add vmx-* features to Westmere*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Westmere-IBRS.xml | 63 +++++++++++++++++++++++++++++++
|
||||
src/cpu_map/x86_Westmere.xml | 63 +++++++++++++++++++++++++++++++
|
||||
2 files changed, 126 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Westmere-IBRS.xml b/src/cpu_map/x86_Westmere-IBRS.xml
|
||||
index c7898f0c226..a5abe8a1e18 100644
|
||||
--- a/src/cpu_map/x86_Westmere-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Westmere-IBRS.xml
|
||||
@@ -36,5 +36,68 @@
|
||||
<feature name='ssse3'/>
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
||||
diff --git a/src/cpu_map/x86_Westmere.xml b/src/cpu_map/x86_Westmere.xml
|
||||
index 16e4ad6c309..161f1a078e3 100644
|
||||
--- a/src/cpu_map/x86_Westmere.xml
|
||||
+++ b/src/cpu_map/x86_Westmere.xml
|
||||
@@ -37,5 +37,68 @@
|
||||
<feature name='ssse3'/>
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-x2apic' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr3-load-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr3-store-noexit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-desc-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-entry-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-entry-noload-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-ept' added='yes'/>
|
||||
+ <feature name='vmx-ept-1gb' added='yes'/>
|
||||
+ <feature name='vmx-ept-2mb' added='yes'/>
|
||||
+ <feature name='vmx-ept-execonly' added='yes'/>
|
||||
+ <feature name='vmx-ept-wb' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-load-perf-global-ctrl' added='yes'/>
|
||||
+ <feature name='vmx-exit-nosave-debugctl' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-efer' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-pat' added='yes'/>
|
||||
+ <feature name='vmx-exit-save-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invept' added='yes'/>
|
||||
+ <feature name='vmx-invept-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invept-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-invvpid' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-all-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-addr' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context' added='yes'/>
|
||||
+ <feature name='vmx-invvpid-single-context-noglobals' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mtf' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-page-walk-4' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-preemption-timer' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtscp-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-store-lma' added='yes'/>
|
||||
+ <feature name='vmx-true-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-unrestricted-guest' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
+ <feature name='vmx-vpid' added='yes'/>
|
||||
+ <feature name='vmx-wbinvd-exit' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
76
SOURCES/libvirt-Add-vmx-features-to-core2duo.patch
Normal file
76
SOURCES/libvirt-Add-vmx-features-to-core2duo.patch
Normal file
@ -0,0 +1,76 @@
|
||||
From 823c7005a3b0d5275b30ca811479995bfa5820e9 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:06:13 +0100
|
||||
Subject: [PATCH] Add vmx-* features to core{,2}duo
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_core2duo.xml | 26 ++++++++++++++++++++++++++
|
||||
src/cpu_map/x86_coreduo.xml | 18 ++++++++++++++++++
|
||||
2 files changed, 44 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_core2duo.xml b/src/cpu_map/x86_core2duo.xml
|
||||
index 412039fe559..ea23a6c6629 100644
|
||||
--- a/src/cpu_map/x86_core2duo.xml
|
||||
+++ b/src/cpu_map/x86_core2duo.xml
|
||||
@@ -30,5 +30,31 @@
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-apicv-xapic' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-ins-outs' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-secondary-ctls' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
+ <feature name='vmx-vnmi' added='yes'/>
|
||||
+ <feature name='vmx-vnmi-pending' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
||||
diff --git a/src/cpu_map/x86_coreduo.xml b/src/cpu_map/x86_coreduo.xml
|
||||
index e2fda9a1d48..24900e637fa 100644
|
||||
--- a/src/cpu_map/x86_coreduo.xml
|
||||
+++ b/src/cpu_map/x86_coreduo.xml
|
||||
@@ -26,5 +26,23 @@
|
||||
<feature name='sse2'/>
|
||||
<feature name='tsc'/>
|
||||
<feature name='vme'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
70
SOURCES/libvirt-Add-vmx-features-to-kvm.patch
Normal file
70
SOURCES/libvirt-Add-vmx-features-to-kvm.patch
Normal file
@ -0,0 +1,70 @@
|
||||
From 1d03f78c5d0fa2d3422e76bef4c9369ab623bd52 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 7 Mar 2024 14:06:37 +0100
|
||||
Subject: [PATCH] Add vmx-* features to kvm*
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_kvm32.xml | 18 ++++++++++++++++++
|
||||
src/cpu_map/x86_kvm64.xml | 20 ++++++++++++++++++++
|
||||
2 files changed, 38 insertions(+)
|
||||
|
||||
diff --git a/src/cpu_map/x86_kvm32.xml b/src/cpu_map/x86_kvm32.xml
|
||||
index 9dd96d5b569..ac28c53bd0b 100644
|
||||
--- a/src/cpu_map/x86_kvm32.xml
|
||||
+++ b/src/cpu_map/x86_kvm32.xml
|
||||
@@ -23,5 +23,23 @@
|
||||
<feature name='sse'/>
|
||||
<feature name='sse2'/>
|
||||
<feature name='tsc'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-msr-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
||||
diff --git a/src/cpu_map/x86_kvm64.xml b/src/cpu_map/x86_kvm64.xml
|
||||
index 185af06f784..970a8e73d50 100644
|
||||
--- a/src/cpu_map/x86_kvm64.xml
|
||||
+++ b/src/cpu_map/x86_kvm64.xml
|
||||
@@ -27,5 +27,25 @@
|
||||
<feature name='sse2'/>
|
||||
<feature name='syscall'/>
|
||||
<feature name='tsc'/>
|
||||
+ <feature name='vmx-activity-hlt' added='yes'/>
|
||||
+ <feature name='vmx-cr8-load-exit' added='yes'/>
|
||||
+ <feature name='vmx-cr8-store-exit' added='yes'/>
|
||||
+ <feature name='vmx-entry-ia32e-mode' added='yes'/>
|
||||
+ <feature name='vmx-exit-ack-intr' added='yes'/>
|
||||
+ <feature name='vmx-flexpriority' added='yes'/>
|
||||
+ <feature name='vmx-hlt-exit' added='yes'/>
|
||||
+ <feature name='vmx-intr-exit' added='yes'/>
|
||||
+ <feature name='vmx-invlpg-exit' added='yes'/>
|
||||
+ <feature name='vmx-io-bitmap' added='yes'/>
|
||||
+ <feature name='vmx-io-exit' added='yes'/>
|
||||
+ <feature name='vmx-monitor-exit' added='yes'/>
|
||||
+ <feature name='vmx-movdr-exit' added='yes'/>
|
||||
+ <feature name='vmx-mwait-exit' added='yes'/>
|
||||
+ <feature name='vmx-nmi-exit' added='yes'/>
|
||||
+ <feature name='vmx-pause-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdpmc-exit' added='yes'/>
|
||||
+ <feature name='vmx-rdtsc-exit' added='yes'/>
|
||||
+ <feature name='vmx-tsc-offset' added='yes'/>
|
||||
+ <feature name='vmx-vintr-pending' added='yes'/>
|
||||
</model>
|
||||
</cpus>
|
@ -0,0 +1,679 @@
|
||||
From 9a31f486329e36bbe6f6156eb89d4d455fc0a7d8 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <9a31f486329e36bbe6f6156eb89d4d455fc0a7d8.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 29 Jan 2024 15:50:27 +0100
|
||||
Subject: [PATCH] Don't overwrite error message from 'virXPathNodeSet'
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
'virXPathNodeSet' returns -1 only when 'ctxt' or 'xpath' are NULL or
|
||||
when the 'xpath' string is invalid. Both are programming errors. It
|
||||
doesn't make sense for the code to overwrite the error message for
|
||||
anything supposedly more relevant.
|
||||
|
||||
The majority of calls to 'virXPathNodeSet' already didn't do this, so
|
||||
this patch fixes the rest to prevent it from spreading again.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit a9f76d6ab7278864150d9f4776750ea22d7ef508)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-22314 [9.4.0]
|
||||
---
|
||||
src/conf/domain_conf.c | 78 +++++++------------------------
|
||||
src/conf/network_conf.c | 80 ++++++++------------------------
|
||||
src/conf/node_device_conf.c | 17 ++-----
|
||||
src/conf/numa_conf.c | 15 +++---
|
||||
src/cpu/cpu_ppc64.c | 5 +-
|
||||
src/qemu/qemu_capabilities.c | 30 +++---------
|
||||
src/qemu/qemu_domain.c | 23 +++------
|
||||
src/qemu/qemu_migration_cookie.c | 5 +-
|
||||
src/qemu/qemu_nbdkit.c | 5 +-
|
||||
src/vz/vz_sdk.c | 5 +-
|
||||
10 files changed, 72 insertions(+), 191 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index ac06fa39f6..52a5796ad2 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -17765,11 +17765,8 @@ virDomainResctrlMonDefParse(virDomainDef *def,
|
||||
|
||||
ctxt->node = node;
|
||||
|
||||
- if ((n = virXPathNodeSet("./monitor", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("Cannot extract monitor nodes"));
|
||||
+ if ((n = virXPathNodeSet("./monitor", ctxt, &nodes)) < 0)
|
||||
goto cleanup;
|
||||
- }
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
domresmon = g_new0(virDomainResctrlMonDef, 1);
|
||||
@@ -17897,11 +17894,8 @@ virDomainCachetuneDefParse(virDomainDef *def,
|
||||
if (virBitmapIsAllClear(vcpus))
|
||||
return 0;
|
||||
|
||||
- if ((n = virXPathNodeSet("./cache", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("Cannot extract cache nodes under cachetune"));
|
||||
+ if ((n = virXPathNodeSet("./cache", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (virDomainResctrlVcpuMatch(def, vcpus, &resctrl) < 0)
|
||||
return -1;
|
||||
@@ -18167,11 +18161,8 @@ virDomainDefParseMemory(virDomainDef *def,
|
||||
|
||||
if (virXPathNode("./memoryBacking/hugepages", ctxt)) {
|
||||
/* hugepages will be used */
|
||||
- if ((n = virXPathNodeSet("./memoryBacking/hugepages/page", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("cannot extract hugepages nodes"));
|
||||
+ if ((n = virXPathNodeSet("./memoryBacking/hugepages/page", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (n) {
|
||||
def->mem.hugepages = g_new0(virDomainHugePage, n);
|
||||
@@ -18255,11 +18246,8 @@ virDomainMemorytuneDefParse(virDomainDef *def,
|
||||
if (virBitmapIsAllClear(vcpus))
|
||||
return 0;
|
||||
|
||||
- if ((n = virXPathNodeSet("./node", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("Cannot extract memory nodes under memorytune"));
|
||||
+ if ((n = virXPathNodeSet("./node", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (virDomainResctrlVcpuMatch(def, vcpus, &resctrl) < 0)
|
||||
return -1;
|
||||
@@ -18326,11 +18314,9 @@ virDomainDefTunablesParse(virDomainDef *def,
|
||||
&def->blkio.weight) < 0)
|
||||
def->blkio.weight = 0;
|
||||
|
||||
- if ((n = virXPathNodeSet("./blkiotune/device", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "%s", _("cannot extract blkiotune nodes"));
|
||||
+ if ((n = virXPathNodeSet("./blkiotune/device", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
if (n)
|
||||
def->blkio.devices = g_new0(virBlkioDevice, n);
|
||||
|
||||
@@ -18441,11 +18427,8 @@ virDomainDefTunablesParse(virDomainDef *def,
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
- if ((n = virXPathNodeSet("./cputune/emulatorpin", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("cannot extract emulatorpin nodes"));
|
||||
+ if ((n = virXPathNodeSet("./cputune/emulatorpin", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (n) {
|
||||
if (n > 1) {
|
||||
@@ -18460,11 +18443,8 @@ virDomainDefTunablesParse(virDomainDef *def,
|
||||
VIR_FREE(nodes);
|
||||
|
||||
|
||||
- if ((n = virXPathNodeSet("./cputune/iothreadpin", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("cannot extract iothreadpin nodes"));
|
||||
+ if ((n = virXPathNodeSet("./cputune/iothreadpin", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (virDomainIOThreadPinDefParseXML(nodes[i], def) < 0)
|
||||
@@ -18472,11 +18452,8 @@ virDomainDefTunablesParse(virDomainDef *def,
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
- if ((n = virXPathNodeSet("./cputune/vcpusched", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("cannot extract vcpusched nodes"));
|
||||
+ if ((n = virXPathNodeSet("./cputune/vcpusched", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (virDomainVcpuThreadSchedParse(nodes[i], def) < 0)
|
||||
@@ -18484,11 +18461,8 @@ virDomainDefTunablesParse(virDomainDef *def,
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
- if ((n = virXPathNodeSet("./cputune/iothreadsched", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("cannot extract iothreadsched nodes"));
|
||||
+ if ((n = virXPathNodeSet("./cputune/iothreadsched", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (virDomainIOThreadSchedParse(nodes[i], def) < 0)
|
||||
@@ -18496,11 +18470,8 @@ virDomainDefTunablesParse(virDomainDef *def,
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
- if ((n = virXPathNodeSet("./cputune/emulatorsched", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("cannot extract emulatorsched nodes"));
|
||||
+ if ((n = virXPathNodeSet("./cputune/emulatorsched", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (n) {
|
||||
if (n > 1) {
|
||||
@@ -18514,11 +18485,8 @@ virDomainDefTunablesParse(virDomainDef *def,
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
- if ((n = virXPathNodeSet("./cputune/cachetune", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("cannot extract cachetune nodes"));
|
||||
+ if ((n = virXPathNodeSet("./cputune/cachetune", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (virDomainCachetuneDefParse(def, ctxt, nodes[i], flags) < 0)
|
||||
@@ -18526,11 +18494,8 @@ virDomainDefTunablesParse(virDomainDef *def,
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
- if ((n = virXPathNodeSet("./cputune/memorytune", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("cannot extract memorytune nodes"));
|
||||
+ if ((n = virXPathNodeSet("./cputune/memorytune", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (virDomainMemorytuneDefParse(def, ctxt, nodes[i], flags) < 0)
|
||||
@@ -18834,11 +18799,8 @@ virDomainDefParseXML(xmlXPathContextPtr ctxt,
|
||||
!virDomainIOThreadIDArrayHasPin(def))
|
||||
def->placement_mode = VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO;
|
||||
|
||||
- if ((n = virXPathNodeSet("./resource", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "%s", _("cannot extract resource nodes"));
|
||||
+ if ((n = virXPathNodeSet("./resource", ctxt, &nodes)) < 0)
|
||||
return NULL;
|
||||
- }
|
||||
|
||||
if (n > 1) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
@@ -18886,11 +18848,9 @@ virDomainDefParseXML(xmlXPathContextPtr ctxt,
|
||||
return NULL;
|
||||
|
||||
/* analysis of the resource leases */
|
||||
- if ((n = virXPathNodeSet("./devices/lease", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "%s", _("cannot extract device leases"));
|
||||
+ if ((n = virXPathNodeSet("./devices/lease", ctxt, &nodes)) < 0)
|
||||
return NULL;
|
||||
- }
|
||||
+
|
||||
if (n)
|
||||
def->leases = g_new0(virDomainLeaseDef *, n);
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -19009,11 +18969,9 @@ virDomainDefParseXML(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
- if ((n = virXPathNodeSet("./devices/console", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "%s", _("cannot extract console devices"));
|
||||
+ if ((n = virXPathNodeSet("./devices/console", ctxt, &nodes)) < 0)
|
||||
return NULL;
|
||||
- }
|
||||
+
|
||||
if (n)
|
||||
def->consoles = g_new0(virDomainChrDef *, n);
|
||||
|
||||
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
|
||||
index 6f8a0d2d0b..52c90e53f8 100644
|
||||
--- a/src/conf/network_conf.c
|
||||
+++ b/src/conf/network_conf.c
|
||||
@@ -892,13 +892,9 @@ virNetworkDNSDefParseXML(const char *networkName,
|
||||
&def->forwardPlainNames) < 0)
|
||||
return -1;
|
||||
|
||||
- nfwds = virXPathNodeSet("./forwarder", ctxt, &fwdNodes);
|
||||
- if (nfwds < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <forwarder> element found in <dns> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((nfwds = virXPathNodeSet("./forwarder", ctxt, &fwdNodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
if (nfwds > 0) {
|
||||
def->forwarders = g_new0(virNetworkDNSForwarder, nfwds);
|
||||
|
||||
@@ -922,13 +918,9 @@ virNetworkDNSDefParseXML(const char *networkName,
|
||||
}
|
||||
}
|
||||
|
||||
- nhosts = virXPathNodeSet("./host", ctxt, &hostNodes);
|
||||
- if (nhosts < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <host> element found in <dns> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((nhosts = virXPathNodeSet("./host", ctxt, &hostNodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
if (nhosts > 0) {
|
||||
def->hosts = g_new0(virNetworkDNSHostDef, nhosts);
|
||||
|
||||
@@ -941,13 +933,9 @@ virNetworkDNSDefParseXML(const char *networkName,
|
||||
}
|
||||
}
|
||||
|
||||
- nsrvs = virXPathNodeSet("./srv", ctxt, &srvNodes);
|
||||
- if (nsrvs < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <srv> element found in <dns> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((nsrvs = virXPathNodeSet("./srv", ctxt, &srvNodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
if (nsrvs > 0) {
|
||||
def->srvs = g_new0(virNetworkDNSSrvDef, nsrvs);
|
||||
|
||||
@@ -960,13 +948,9 @@ virNetworkDNSDefParseXML(const char *networkName,
|
||||
}
|
||||
}
|
||||
|
||||
- ntxts = virXPathNodeSet("./txt", ctxt, &txtNodes);
|
||||
- if (ntxts < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <txt> element found in <dns> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((ntxts = virXPathNodeSet("./txt", ctxt, &txtNodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
if (ntxts > 0) {
|
||||
def->txts = g_new0(virNetworkDNSTxtDef, ntxts);
|
||||
|
||||
@@ -1222,13 +1206,10 @@ virNetworkForwardNatDefParseXML(const char *networkName,
|
||||
return -1;
|
||||
|
||||
/* addresses for SNAT */
|
||||
- nNatAddrs = virXPathNodeSet("./address", ctxt, &natAddrNodes);
|
||||
- if (nNatAddrs < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <address> element found in <forward> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((nNatAddrs = virXPathNodeSet("./address", ctxt, &natAddrNodes)) < 0)
|
||||
return -1;
|
||||
- } else if (nNatAddrs > 1) {
|
||||
+
|
||||
+ if (nNatAddrs > 1) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("Only one <address> element is allowed in <nat> in <forward> in network %1$s"),
|
||||
networkName);
|
||||
@@ -1284,13 +1265,10 @@ virNetworkForwardNatDefParseXML(const char *networkName,
|
||||
}
|
||||
|
||||
/* ports for SNAT and MASQUERADE */
|
||||
- nNatPorts = virXPathNodeSet("./port", ctxt, &natPortNodes);
|
||||
- if (nNatPorts < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <port> element found in <forward> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((nNatPorts = virXPathNodeSet("./port", ctxt, &natPortNodes)) < 0)
|
||||
return -1;
|
||||
- } else if (nNatPorts > 1) {
|
||||
+
|
||||
+ if (nNatPorts > 1) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("Only one <port> element is allowed in <nat> in <forward> in network %1$s"),
|
||||
networkName);
|
||||
@@ -1358,37 +1336,19 @@ virNetworkForwardDefParseXML(const char *networkName,
|
||||
}
|
||||
|
||||
/* bridge and hostdev modes can use a pool of physical interfaces */
|
||||
- nForwardIfs = virXPathNodeSet("./interface", ctxt, &forwardIfNodes);
|
||||
- if (nForwardIfs < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <interface> element found in <forward> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((nForwardIfs = virXPathNodeSet("./interface", ctxt, &forwardIfNodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
- nForwardAddrs = virXPathNodeSet("./address", ctxt, &forwardAddrNodes);
|
||||
- if (nForwardAddrs < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <address> element found in <forward> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((nForwardAddrs = virXPathNodeSet("./address", ctxt, &forwardAddrNodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
- nForwardPfs = virXPathNodeSet("./pf", ctxt, &forwardPfNodes);
|
||||
- if (nForwardPfs < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <pf> element found in <forward> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((nForwardPfs = virXPathNodeSet("./pf", ctxt, &forwardPfNodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
- nForwardNats = virXPathNodeSet("./nat", ctxt, &forwardNatNodes);
|
||||
- if (nForwardNats < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR,
|
||||
- _("invalid <nat> element found in <forward> of network %1$s"),
|
||||
- networkName);
|
||||
+ if ((nForwardNats = virXPathNodeSet("./nat", ctxt, &forwardNatNodes)) < 0)
|
||||
return -1;
|
||||
- } else if (nForwardNats > 1) {
|
||||
+
|
||||
+ if (nForwardNats > 1) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("Only one <nat> element is allowed in <forward> of network %1$s"),
|
||||
networkName);
|
||||
diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
|
||||
index 95de77abe9..dd174d3020 100644
|
||||
--- a/src/conf/node_device_conf.c
|
||||
+++ b/src/conf/node_device_conf.c
|
||||
@@ -960,11 +960,9 @@ virNodeDeviceCapVPDParseCustomFields(xmlXPathContextPtr ctxt, virPCIVPDResource
|
||||
g_autofree xmlNodePtr *nodes = NULL;
|
||||
size_t i = 0;
|
||||
|
||||
- if ((nfields = virXPathNodeSet("./vendor_field[@index]", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
- _("failed to evaluate <vendor_field> elements"));
|
||||
+ if ((nfields = virXPathNodeSet("./vendor_field[@index]", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
for (i = 0; i < nfields; i++) {
|
||||
g_autofree char *value = NULL;
|
||||
g_autofree char *index = NULL;
|
||||
@@ -989,11 +987,9 @@ virNodeDeviceCapVPDParseCustomFields(xmlXPathContextPtr ctxt, virPCIVPDResource
|
||||
VIR_FREE(nodes);
|
||||
|
||||
if (!readOnly) {
|
||||
- if ((nfields = virXPathNodeSet("./system_field[@index]", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
- _("failed to evaluate <system_field> elements"));
|
||||
+ if ((nfields = virXPathNodeSet("./system_field[@index]", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
for (i = 0; i < nfields; i++) {
|
||||
g_autofree char *value = NULL;
|
||||
g_autofree char *index = NULL;
|
||||
@@ -1074,11 +1070,8 @@ virNodeDeviceCapVPDParseXML(xmlXPathContextPtr ctxt, virPCIVPDResource **res)
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if ((nfields = virXPathNodeSet("./fields[@access]", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
- _("no VPD <fields> elements with an access type attribute found"));
|
||||
+ if ((nfields = virXPathNodeSet("./fields[@access]", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
for (i = 0; i < nfields; i++) {
|
||||
g_autofree char *access = NULL;
|
||||
diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
|
||||
index bcd7838e00..d8120de6d2 100644
|
||||
--- a/src/conf/numa_conf.c
|
||||
+++ b/src/conf/numa_conf.c
|
||||
@@ -135,11 +135,8 @@ virDomainNumatuneNodeParseXML(virDomainNuma *numa,
|
||||
size_t i = 0;
|
||||
g_autofree xmlNodePtr *nodes = NULL;
|
||||
|
||||
- if ((n = virXPathNodeSet("./numatune/memnode", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("Cannot extract memnode nodes"));
|
||||
+ if ((n = virXPathNodeSet("./numatune/memnode", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (!n)
|
||||
return 0;
|
||||
@@ -700,7 +697,10 @@ virDomainNumaDefNodeDistanceParseXML(virDomainNuma *def,
|
||||
if (!virXPathNode("./distances[1]", ctxt))
|
||||
return 0;
|
||||
|
||||
- if ((sibling = virXPathNodeSet("./distances[1]/sibling", ctxt, &nodes)) <= 0) {
|
||||
+ if ((sibling = virXPathNodeSet("./distances[1]/sibling", ctxt, &nodes)) < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ if (sibling == 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("NUMA distances defined without siblings"));
|
||||
goto cleanup;
|
||||
@@ -852,7 +852,10 @@ virDomainNumaDefParseXML(virDomainNuma *def,
|
||||
if (!virXPathNode("./cpu/numa[1]", ctxt))
|
||||
return 0;
|
||||
|
||||
- if ((n = virXPathNodeSet("./cpu/numa[1]/cell", ctxt, &cell)) <= 0) {
|
||||
+ if ((n = virXPathNodeSet("./cpu/numa[1]/cell", ctxt, &cell)) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (n == 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("NUMA topology defined without NUMA cells"));
|
||||
return -1;
|
||||
diff --git a/src/cpu/cpu_ppc64.c b/src/cpu/cpu_ppc64.c
|
||||
index e13cdbdf6b..448a0a7d85 100644
|
||||
--- a/src/cpu/cpu_ppc64.c
|
||||
+++ b/src/cpu/cpu_ppc64.c
|
||||
@@ -334,7 +334,10 @@ ppc64ModelParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
}
|
||||
|
||||
- if ((n = virXPathNodeSet("./pvr", ctxt, &nodes)) <= 0) {
|
||||
+ if ((n = virXPathNodeSet("./pvr", ctxt, &nodes)) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (n == 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Missing PVR information for CPU model %1$s"),
|
||||
model->name);
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index e13df2b27d..10090e0986 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -4015,11 +4015,8 @@ virQEMUCapsLoadCPUModels(virArch arch,
|
||||
int n;
|
||||
xmlNodePtr node;
|
||||
|
||||
- if ((n = virXPathNodeSet(xpath, ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("failed to parse qemu capabilities cpus"));
|
||||
+ if ((n = virXPathNodeSet(xpath, ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (n == 0)
|
||||
return 0;
|
||||
@@ -4057,11 +4054,8 @@ virQEMUCapsLoadCPUModels(virArch arch,
|
||||
nblockers = virXPathNodeSet("./blocker", ctxt, &blockerNodes);
|
||||
ctxt->node = node;
|
||||
|
||||
- if (nblockers < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("failed to parse CPU blockers in QEMU capabilities"));
|
||||
+ if (nblockers < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (nblockers > 0) {
|
||||
size_t j;
|
||||
@@ -4100,11 +4094,8 @@ virQEMUCapsLoadMachines(virQEMUCapsAccel *caps,
|
||||
size_t i;
|
||||
int n;
|
||||
|
||||
- if ((n = virXPathNodeSet(xpath, ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("failed to parse qemu capabilities machines"));
|
||||
+ if ((n = virXPathNodeSet(xpath, ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (n == 0)
|
||||
return 0;
|
||||
@@ -4317,11 +4308,8 @@ virQEMUCapsParseSGXInfo(virQEMUCaps *qemuCaps,
|
||||
ctxt->node = sgxSections;
|
||||
nSgxSections = virXPathNodeSet("./section", ctxt, §ionNodes);
|
||||
|
||||
- if (nSgxSections < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("failed to parse SGX sections in QEMU capabilities cache"));
|
||||
+ if (nSgxSections < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
sgx->nSgxSections = nSgxSections;
|
||||
sgx->sgxSections = g_new0(virSGXSection, nSgxSections);
|
||||
@@ -4404,11 +4392,8 @@ virQEMUCapsParseFlags(virQEMUCaps *qemuCaps, xmlXPathContextPtr ctxt)
|
||||
size_t i;
|
||||
int n;
|
||||
|
||||
- if ((n = virXPathNodeSet("./flag", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("failed to parse qemu capabilities flags"));
|
||||
+ if ((n = virXPathNodeSet("./flag", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
VIR_DEBUG("Got flags %d", n);
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -4442,11 +4427,8 @@ virQEMUCapsParseGIC(virQEMUCaps *qemuCaps, xmlXPathContextPtr ctxt)
|
||||
size_t i;
|
||||
int n;
|
||||
|
||||
- if ((n = virXPathNodeSet("./gic", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("failed to parse qemu capabilities gic"));
|
||||
+ if ((n = virXPathNodeSet("./gic", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
if (n > 0) {
|
||||
unsigned int uintValue;
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index e2a1bf2c13..97520bb49c 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -3155,11 +3155,8 @@ qemuDomainObjPrivateXMLParseSlirpFeatures(xmlNodePtr featuresNode,
|
||||
|
||||
ctxt->node = featuresNode;
|
||||
|
||||
- if ((n = virXPathNodeSet("./feature", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "%s", _("failed to parse slirp-helper features"));
|
||||
+ if ((n = virXPathNodeSet("./feature", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
g_autofree char *str = virXMLPropString(nodes[i], "name");
|
||||
@@ -3273,11 +3270,9 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
- if ((n = virXPathNodeSet("./qemuCaps/flag", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "%s", _("failed to parse qemu capabilities flags"));
|
||||
+ if ((n = virXPathNodeSet("./qemuCaps/flag", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
if (n > 0) {
|
||||
qemuCaps = virQEMUCapsNew();
|
||||
|
||||
@@ -3305,11 +3300,9 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt,
|
||||
|
||||
priv->fakeReboot = virXPathBoolean("boolean(./fakereboot)", ctxt) == 1;
|
||||
|
||||
- if ((n = virXPathNodeSet("./devices/device", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("failed to parse qemu device list"));
|
||||
+ if ((n = virXPathNodeSet("./devices/device", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
if (n > 0) {
|
||||
/* NULL-terminated list */
|
||||
priv->qemuDevices = g_new0(char *, n + 1);
|
||||
@@ -3325,11 +3318,9 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
- if ((n = virXPathNodeSet("./slirp/helper", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("failed to parse slirp helper list"));
|
||||
+ if ((n = virXPathNodeSet("./slirp/helper", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
+
|
||||
for (i = 0; i < n; i++) {
|
||||
g_autofree char *alias = virXMLPropString(nodes[i], "alias");
|
||||
g_autofree char *pid = virXMLPropString(nodes[i], "pid");
|
||||
diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
|
||||
index 5505fdaf22..4361949cca 100644
|
||||
--- a/src/qemu/qemu_migration_cookie.c
|
||||
+++ b/src/qemu/qemu_migration_cookie.c
|
||||
@@ -947,11 +947,8 @@ qemuMigrationCookieNetworkXMLParse(xmlXPathContextPtr ctxt)
|
||||
g_autofree xmlNodePtr *interfaces = NULL;
|
||||
VIR_XPATH_NODE_AUTORESTORE(ctxt)
|
||||
|
||||
- if ((n = virXPathNodeSet("./network/interface", ctxt, &interfaces)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "%s", _("missing interface information"));
|
||||
+ if ((n = virXPathNodeSet("./network/interface", ctxt, &interfaces)) < 0)
|
||||
return NULL;
|
||||
- }
|
||||
|
||||
optr->nnets = n;
|
||||
optr->net = g_new0(qemuMigrationCookieNetData, optr->nnets);
|
||||
diff --git a/src/qemu/qemu_nbdkit.c b/src/qemu/qemu_nbdkit.c
|
||||
index 85e61be44c..3343241aaf 100644
|
||||
--- a/src/qemu/qemu_nbdkit.c
|
||||
+++ b/src/qemu/qemu_nbdkit.c
|
||||
@@ -400,11 +400,8 @@ qemuNbdkitCapsParseFlags(qemuNbdkitCaps *nbdkitCaps,
|
||||
size_t i;
|
||||
int n;
|
||||
|
||||
- if ((n = virXPathNodeSet("./flag", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("failed to parse qemu capabilities flags"));
|
||||
+ if ((n = virXPathNodeSet("./flag", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
VIR_DEBUG("Got flags %d", n);
|
||||
for (i = 0; i < n; i++) {
|
||||
diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
|
||||
index 6a15d60577..ce4586a3f5 100644
|
||||
--- a/src/vz/vz_sdk.c
|
||||
+++ b/src/vz/vz_sdk.c
|
||||
@@ -4612,11 +4612,8 @@ prlsdkParseSnapshotTree(const char *treexml)
|
||||
"ParallelsSavedStates", &ctxt, NULL, false)))
|
||||
goto cleanup;
|
||||
|
||||
- if ((n = virXPathNodeSet("//SavedStateItem", ctxt, &nodes)) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("cannot extract snapshot nodes"));
|
||||
+ if ((n = virXPathNodeSet("//SavedStateItem", ctxt, &nodes)) < 0)
|
||||
goto cleanup;
|
||||
- }
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (nodes[i]->parent == xmlDocGetRootElement(xml))
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,46 @@
|
||||
From 68f2278d84fe560123c2ec34275380ed1086b706 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <68f2278d84fe560123c2ec34275380ed1086b706.1713796876.git.jdenemar@redhat.com>
|
||||
From: Martin Kletzander <mkletzan@redhat.com>
|
||||
Date: Tue, 27 Feb 2024 16:20:12 +0100
|
||||
Subject: [PATCH] Fix off-by-one error in udevListInterfacesByStatus
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Ever since this function was introduced in 2012 it could've tried
|
||||
filling in an extra interface name. That was made worse in 2019 when
|
||||
the caller functions started accepting NULL arrays of size 0.
|
||||
|
||||
This is assigned CVE-2024-1441.
|
||||
|
||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
Reported-by: Alexander Kuznetsov <kuznetsovam@altlinux.org>
|
||||
Fixes: 5a33366f5c0b18c93d161bd144f9f079de4ac8ca
|
||||
Fixes: d6064e2759a24e0802f363e3a810dc5a7d7ebb15
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit c664015fe3a7bf59db26686e9ed69af011c6ebb8)
|
||||
|
||||
Conflicts:
|
||||
- NEWS.rst: Removed the hunk
|
||||
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-25081
|
||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
---
|
||||
src/interface/interface_backend_udev.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c
|
||||
index fb6799ed94..4091483060 100644
|
||||
--- a/src/interface/interface_backend_udev.c
|
||||
+++ b/src/interface/interface_backend_udev.c
|
||||
@@ -222,7 +222,7 @@ udevListInterfacesByStatus(virConnectPtr conn,
|
||||
g_autoptr(virInterfaceDef) def = NULL;
|
||||
|
||||
/* Ensure we won't exceed the size of our array */
|
||||
- if (count > names_len)
|
||||
+ if (count >= names_len)
|
||||
break;
|
||||
|
||||
path = udev_list_entry_get_name(dev_entry);
|
||||
--
|
||||
2.44.0
|
@ -0,0 +1,44 @@
|
||||
From 676946491ea25cacc4f6fd11f27bd9989b84767d Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <676946491ea25cacc4f6fd11f27bd9989b84767d.1708614745.git.jdenemar@redhat.com>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Fri, 16 Feb 2024 12:43:59 -0500
|
||||
Subject: [PATCH] Set stubDriverName from hostdev driver model attribute during
|
||||
pci device setup
|
||||
|
||||
commit v9.10.0-129-g8b93d78c83 (first appearing in libvirt-10.0.0) was
|
||||
supposed to allow forcing a PCI hostdev to be bound to a particular
|
||||
driver by adding <driver model='blah'/> to the XML for the
|
||||
device. Unfortunately, a single line was missed during the final
|
||||
changes to the patch prior to pushing, and the result was that the
|
||||
driver model could be set to *anything* and it would be accepted but
|
||||
just ignored.
|
||||
|
||||
This patch adds the missing line, which will set the stubDriverName
|
||||
field of the virPCIDevice object from the hostdev object as the
|
||||
virPCIDevice is being created. This ends up being used by
|
||||
virPCIDeviceBindToStub() as the driver that it binds the device to.
|
||||
|
||||
Fixes: 8b93d78c8325f1fba5db98848350f3db43f5e7d5
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 41fe8524870facae02be067097ea494c475d77f0)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-25858 [9.4.0]
|
||||
---
|
||||
src/hypervisor/virhostdev.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/hypervisor/virhostdev.c b/src/hypervisor/virhostdev.c
|
||||
index 40f8a4bc2c..185ec2ca50 100644
|
||||
--- a/src/hypervisor/virhostdev.c
|
||||
+++ b/src/hypervisor/virhostdev.c
|
||||
@@ -242,6 +242,7 @@ virHostdevGetPCIHostDevice(const virDomainHostdevDef *hostdev,
|
||||
return -1;
|
||||
|
||||
virPCIDeviceSetManaged(actual, hostdev->managed);
|
||||
+ virPCIDeviceSetStubDriverName(actual, pcisrc->driver.model);
|
||||
|
||||
if (pcisrc->driver.name == VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO) {
|
||||
virPCIDeviceSetStubDriverType(actual, VIR_PCI_STUB_DRIVER_VFIO);
|
||||
--
|
||||
2.43.2
|
@ -0,0 +1,144 @@
|
||||
From 5359921ef11b68dab549b6b28ba11a784e6946a5 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <5359921ef11b68dab549b6b28ba11a784e6946a5.1706524416.git.jdenemar@redhat.com>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 24 Jan 2024 19:23:54 +0100
|
||||
Subject: [PATCH] build: Make daemons depend on generated *_protocol.[ch]
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This should fix build failures when a daemon code is compiled before the
|
||||
included *_protocol.h headers are ready, such as:
|
||||
|
||||
FAILED: src/virtqemud.p/remote_remote_daemon_config.c.o
|
||||
../src/remote/remote_daemon_config.c: In function ‘daemonConfigNew’:
|
||||
../src/remote/remote_daemon_config.c:111:30: error:
|
||||
‘REMOTE_AUTH_POLKIT’ undeclared (first use in this function)
|
||||
111 | data->auth_unix_rw = REMOTE_AUTH_POLKIT;
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
../src/remote/remote_daemon_config.c:111:30: note: each undeclared
|
||||
identifier is reported only once for each function it appears in
|
||||
../src/remote/remote_daemon_config.c:115:30: error:
|
||||
‘REMOTE_AUTH_NONE’ undeclared (first use in this function)
|
||||
115 | data->auth_unix_rw = REMOTE_AUTH_NONE;
|
||||
| ^~~~~~~~~~~~~~~~
|
||||
../src/remote/remote_daemon_config.c: In function
|
||||
‘daemonConfigLoadOptions’:
|
||||
../src/remote/remote_daemon_config.c:252:31: error:
|
||||
‘REMOTE_AUTH_POLKIT’ undeclared (first use in this function)
|
||||
252 | if (data->auth_unix_rw == REMOTE_AUTH_POLKIT) {
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
|
||||
or
|
||||
|
||||
FAILED: src/virtqemud.p/remote_remote_daemon_dispatch.c.o
|
||||
In file included from ../src/remote/remote_daemon.h:28,
|
||||
from ../src/remote/remote_daemon_dispatch.c:26:
|
||||
src/remote/lxc_protocol.h:13:5: error:
|
||||
unknown type name ‘remote_nonnull_domain’
|
||||
13 | remote_nonnull_domain dom;
|
||||
| ^~~~~~~~~~~~~~~~~~~~~
|
||||
In file included from ../src/remote/remote_daemon.h:29,
|
||||
from ../src/remote/remote_daemon_dispatch.c:26:
|
||||
src/remote/qemu_protocol.h:13:5: error:
|
||||
unknown type name ‘remote_nonnull_domain’
|
||||
13 | remote_nonnull_domain dom;
|
||||
| ^~~~~~~~~~~~~~~~~~~~~
|
||||
src/remote/qemu_protocol.h:14:5: error:
|
||||
unknown type name ‘remote_nonnull_string’
|
||||
14 | remote_nonnull_string cmd;
|
||||
| ^~~~~~~~~~~~~~~~~~~~~
|
||||
...
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit dcfe548cb01d64e2bdeac456c428e578158232b9)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-15267
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
po/meson.build | 1 +
|
||||
src/meson.build | 6 +++++-
|
||||
src/remote/meson.build | 15 +++++++++++----
|
||||
3 files changed, 17 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/po/meson.build b/po/meson.build
|
||||
index a20877ad34..592b254447 100644
|
||||
--- a/po/meson.build
|
||||
+++ b/po/meson.build
|
||||
@@ -20,6 +20,7 @@ potfiles_dep = [
|
||||
access_gen_sources,
|
||||
admin_client_generated,
|
||||
admin_driver_generated,
|
||||
+ remote_protocol_generated,
|
||||
remote_driver_generated,
|
||||
remote_daemon_generated,
|
||||
]
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 6538c43628..f52d2d5994 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -616,7 +616,11 @@ foreach daemon : virt_daemons
|
||||
bin = executable(
|
||||
daemon['name'],
|
||||
[
|
||||
- daemon.get('sources', [ remote_daemon_sources, remote_daemon_generated ]),
|
||||
+ daemon.get('sources', [
|
||||
+ remote_protocol_generated,
|
||||
+ remote_daemon_sources,
|
||||
+ remote_daemon_generated
|
||||
+ ]),
|
||||
dtrace_gen_objects,
|
||||
],
|
||||
c_args: [
|
||||
diff --git a/src/remote/meson.build b/src/remote/meson.build
|
||||
index 16b903fcaf..43bf2d0083 100644
|
||||
--- a/src/remote/meson.build
|
||||
+++ b/src/remote/meson.build
|
||||
@@ -7,8 +7,6 @@ remote_driver_generated = []
|
||||
|
||||
foreach name : [ 'remote', 'qemu', 'lxc' ]
|
||||
client_bodies_h = '@0@_client_bodies.h'.format(name)
|
||||
- protocol_c = '@0@_protocol.c'.format(name)
|
||||
- protocol_h = '@0@_protocol.h'.format(name)
|
||||
protocol_x = '@0@_protocol.x'.format(name)
|
||||
|
||||
remote_driver_generated += custom_target(
|
||||
@@ -20,8 +18,16 @@ foreach name : [ 'remote', 'qemu', 'lxc' ]
|
||||
],
|
||||
capture: true,
|
||||
)
|
||||
+endforeach
|
||||
|
||||
- remote_driver_generated += custom_target(
|
||||
+remote_protocol_generated = []
|
||||
+
|
||||
+foreach name : [ 'remote', 'qemu', 'lxc' ]
|
||||
+ protocol_c = '@0@_protocol.c'.format(name)
|
||||
+ protocol_h = '@0@_protocol.h'.format(name)
|
||||
+ protocol_x = '@0@_protocol.x'.format(name)
|
||||
+
|
||||
+ remote_protocol_generated += custom_target(
|
||||
protocol_h,
|
||||
input: protocol_x,
|
||||
output: protocol_h,
|
||||
@@ -32,7 +38,7 @@ foreach name : [ 'remote', 'qemu', 'lxc' ]
|
||||
],
|
||||
)
|
||||
|
||||
- remote_driver_generated += custom_target(
|
||||
+ remote_protocol_generated += custom_target(
|
||||
protocol_c,
|
||||
input: protocol_x,
|
||||
output: protocol_c,
|
||||
@@ -143,6 +149,7 @@ if conf.has('WITH_REMOTE')
|
||||
remote_driver_lib = static_library(
|
||||
'virt_remote_driver',
|
||||
[
|
||||
+ remote_protocol_generated,
|
||||
remote_driver_sources,
|
||||
remote_driver_generated,
|
||||
],
|
||||
--
|
||||
2.43.0
|
976
SOURCES/libvirt-conf-Allow-specifying-CPU-clusters.patch
Normal file
976
SOURCES/libvirt-conf-Allow-specifying-CPU-clusters.patch
Normal file
@ -0,0 +1,976 @@
|
||||
From 413d6c8c6490caa5ec5479ab10aa493677cc45c0 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <413d6c8c6490caa5ec5479ab10aa493677cc45c0.1706524416.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 5 Jan 2024 18:20:14 +0100
|
||||
Subject: [PATCH] conf: Allow specifying CPU clusters
|
||||
|
||||
The default number of CPU clusters is 1, and values other than
|
||||
that one are currently rejected by all hypervisor drivers.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit ef5c397584b1d03a81c74c27074ec4b1a05d3339)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/bhyve/bhyve_command.c | 5 +++++
|
||||
src/conf/cpu_conf.c | 16 +++++++++++++++-
|
||||
src/conf/cpu_conf.h | 1 +
|
||||
src/conf/domain_conf.c | 1 +
|
||||
src/conf/schemas/cputypes.rng | 5 +++++
|
||||
src/cpu/cpu.c | 1 +
|
||||
src/libxl/libxl_capabilities.c | 1 +
|
||||
src/qemu/qemu_command.c | 5 +++++
|
||||
src/vmx/vmx.c | 7 +++++++
|
||||
.../x86_64-host+guest,model486-result.xml | 2 +-
|
||||
.../x86_64-host+guest,models-result.xml | 2 +-
|
||||
tests/cputestdata/x86_64-host+guest-result.xml | 2 +-
|
||||
tests/cputestdata/x86_64-host+guest.xml | 2 +-
|
||||
.../x86_64-host+host-model-nofallback.xml | 2 +-
|
||||
...host-Haswell-noTSX+Haswell,haswell-result.xml | 2 +-
|
||||
...aswell-noTSX+Haswell-noTSX,haswell-result.xml | 2 +-
|
||||
...4-host-Haswell-noTSX+Haswell-noTSX-result.xml | 2 +-
|
||||
.../x86_64-host-worse+guest-result.xml | 2 +-
|
||||
.../ppc64-modern-bulk-result-conf.xml | 2 +-
|
||||
.../ppc64-modern-bulk-result-live.xml | 2 +-
|
||||
.../ppc64-modern-individual-result-conf.xml | 2 +-
|
||||
.../ppc64-modern-individual-result-live.xml | 2 +-
|
||||
.../x86-modern-bulk-result-conf.xml | 2 +-
|
||||
.../x86-modern-bulk-result-live.xml | 2 +-
|
||||
.../x86-modern-individual-add-result-conf.xml | 2 +-
|
||||
.../x86-modern-individual-add-result-live.xml | 2 +-
|
||||
...e-timeout+graphics-spice-timeout-password.xml | 2 +-
|
||||
.../qemuhotplug-graphics-spice-timeout.xml | 2 +-
|
||||
.../fd-memory-no-numa-topology.xml | 2 +-
|
||||
.../qemuxml2argvdata/fd-memory-numa-topology.xml | 2 +-
|
||||
.../fd-memory-numa-topology2.xml | 2 +-
|
||||
.../fd-memory-numa-topology3.xml | 2 +-
|
||||
tests/qemuxml2argvdata/hugepages-nvdimm.xml | 2 +-
|
||||
.../memfd-memory-default-hugepage.xml | 2 +-
|
||||
tests/qemuxml2argvdata/memfd-memory-numa.xml | 2 +-
|
||||
.../memory-hotplug-nvdimm-access.xml | 2 +-
|
||||
.../memory-hotplug-nvdimm-align.xml | 2 +-
|
||||
.../memory-hotplug-nvdimm-label.xml | 2 +-
|
||||
.../memory-hotplug-nvdimm-pmem.xml | 2 +-
|
||||
.../memory-hotplug-nvdimm-readonly.xml | 2 +-
|
||||
tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml | 2 +-
|
||||
.../memory-hotplug-virtio-mem.xml | 2 +-
|
||||
.../memory-hotplug-virtio-pmem.xml | 2 +-
|
||||
.../cpu-numa-disjoint.x86_64-latest.xml | 2 +-
|
||||
.../cpu-numa-disordered.x86_64-latest.xml | 2 +-
|
||||
.../cpu-numa-memshared.x86_64-latest.xml | 2 +-
|
||||
.../cpu-numa-no-memory-element.x86_64-latest.xml | 2 +-
|
||||
.../cpu-numa1.x86_64-latest.xml | 2 +-
|
||||
.../cpu-numa2.x86_64-latest.xml | 2 +-
|
||||
.../memory-hotplug-dimm-addr.x86_64-latest.xml | 2 +-
|
||||
.../memory-hotplug-dimm.x86_64-latest.xml | 2 +-
|
||||
.../memory-hotplug-multiple.x86_64-latest.xml | 2 +-
|
||||
...plug-nvdimm-ppc64-abi-update.ppc64-latest.xml | 2 +-
|
||||
.../memory-hotplug-nvdimm-ppc64.ppc64-latest.xml | 2 +-
|
||||
.../memory-hotplug.x86_64-latest.xml | 2 +-
|
||||
...mad-auto-memory-vcpu-cpuset.x86_64-latest.xml | 2 +-
|
||||
...cpu-no-cpuset-and-placement.x86_64-latest.xml | 2 +-
|
||||
...numad-auto-vcpu-no-numatune.x86_64-latest.xml | 2 +-
|
||||
...mad-static-vcpu-no-numatune.x86_64-latest.xml | 2 +-
|
||||
.../pci-expander-bus.x86_64-latest.xml | 2 +-
|
||||
.../pcie-expander-bus.x86_64-latest.xml | 2 +-
|
||||
.../pseries-phb-numa-node.ppc64-latest.xml | 2 +-
|
||||
tests/vmx2xmldata/esx-in-the-wild-10.xml | 2 +-
|
||||
tests/vmx2xmldata/esx-in-the-wild-8.xml | 2 +-
|
||||
tests/vmx2xmldata/esx-in-the-wild-9.xml | 2 +-
|
||||
65 files changed, 97 insertions(+), 57 deletions(-)
|
||||
|
||||
diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
|
||||
index 5b388c7a8f..d05b01ae5d 100644
|
||||
--- a/src/bhyve/bhyve_command.c
|
||||
+++ b/src/bhyve/bhyve_command.c
|
||||
@@ -672,6 +672,11 @@ virBhyveProcessBuildBhyveCmd(struct _bhyveConn *driver, virDomainDef *def,
|
||||
_("Only 1 die per socket is supported"));
|
||||
return NULL;
|
||||
}
|
||||
+ if (def->cpu->clusters != 1) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("Only 1 cluster per die is supported"));
|
||||
+ return NULL;
|
||||
+ }
|
||||
if (nvcpus != def->cpu->sockets * def->cpu->cores * def->cpu->threads) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("Invalid CPU topology: total number of vCPUs must equal the product of sockets, cores, and threads"));
|
||||
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
|
||||
index 7abe489733..6e6e1b9a89 100644
|
||||
--- a/src/conf/cpu_conf.c
|
||||
+++ b/src/conf/cpu_conf.c
|
||||
@@ -241,6 +241,7 @@ virCPUDefCopyWithoutModel(const virCPUDef *cpu)
|
||||
copy->fallback = cpu->fallback;
|
||||
copy->sockets = cpu->sockets;
|
||||
copy->dies = cpu->dies;
|
||||
+ copy->clusters = cpu->clusters;
|
||||
copy->cores = cpu->cores;
|
||||
copy->threads = cpu->threads;
|
||||
copy->arch = cpu->arch;
|
||||
@@ -572,6 +573,12 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ if (virXMLPropUIntDefault(topology, "clusters", 10,
|
||||
+ VIR_XML_PROP_NONZERO,
|
||||
+ &def->clusters, 1) < 0) {
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
if (virXMLPropUInt(topology, "cores", 10,
|
||||
VIR_XML_PROP_REQUIRED | VIR_XML_PROP_NONZERO,
|
||||
&def->cores) < 0) {
|
||||
@@ -827,10 +834,11 @@ virCPUDefFormatBuf(virBuffer *buf,
|
||||
virBufferAddLit(buf, "/>\n");
|
||||
}
|
||||
|
||||
- if (def->sockets && def->dies && def->cores && def->threads) {
|
||||
+ if (def->sockets && def->dies && def->clusters && def->cores && def->threads) {
|
||||
virBufferAddLit(buf, "<topology");
|
||||
virBufferAsprintf(buf, " sockets='%u'", def->sockets);
|
||||
virBufferAsprintf(buf, " dies='%u'", def->dies);
|
||||
+ virBufferAsprintf(buf, " clusters='%u'", def->clusters);
|
||||
virBufferAsprintf(buf, " cores='%u'", def->cores);
|
||||
virBufferAsprintf(buf, " threads='%u'", def->threads);
|
||||
virBufferAddLit(buf, "/>\n");
|
||||
@@ -1106,6 +1114,12 @@ virCPUDefIsEqual(virCPUDef *src,
|
||||
return false;
|
||||
}
|
||||
|
||||
+ if (src->clusters != dst->clusters) {
|
||||
+ MISMATCH(_("Target CPU clusters %1$d does not match source %2$d"),
|
||||
+ dst->clusters, src->clusters);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
if (src->cores != dst->cores) {
|
||||
MISMATCH(_("Target CPU cores %1$d does not match source %2$d"),
|
||||
dst->cores, src->cores);
|
||||
diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h
|
||||
index 3e4c53675c..2694022fed 100644
|
||||
--- a/src/conf/cpu_conf.h
|
||||
+++ b/src/conf/cpu_conf.h
|
||||
@@ -148,6 +148,7 @@ struct _virCPUDef {
|
||||
unsigned int microcodeVersion;
|
||||
unsigned int sockets;
|
||||
unsigned int dies;
|
||||
+ unsigned int clusters;
|
||||
unsigned int cores;
|
||||
unsigned int threads;
|
||||
unsigned int sigFamily;
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 5d55d2acda..6211d2a51b 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -2316,6 +2316,7 @@ virDomainDefGetVcpusTopology(const virDomainDef *def,
|
||||
|
||||
/* multiplication of 32bit numbers fits into a 64bit variable */
|
||||
if ((tmp *= def->cpu->dies) > UINT_MAX ||
|
||||
+ (tmp *= def->cpu->clusters) > UINT_MAX ||
|
||||
(tmp *= def->cpu->cores) > UINT_MAX ||
|
||||
(tmp *= def->cpu->threads) > UINT_MAX) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
diff --git a/src/conf/schemas/cputypes.rng b/src/conf/schemas/cputypes.rng
|
||||
index db1aa57158..3a8910e09f 100644
|
||||
--- a/src/conf/schemas/cputypes.rng
|
||||
+++ b/src/conf/schemas/cputypes.rng
|
||||
@@ -92,6 +92,11 @@
|
||||
<ref name="positiveInteger"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <attribute name="clusters">
|
||||
+ <ref name="positiveInteger"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
<attribute name="cores">
|
||||
<ref name="positiveInteger"/>
|
||||
</attribute>
|
||||
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
|
||||
index bc43aa4e93..4f048d0dad 100644
|
||||
--- a/src/cpu/cpu.c
|
||||
+++ b/src/cpu/cpu.c
|
||||
@@ -435,6 +435,7 @@ virCPUGetHost(virArch arch,
|
||||
if (nodeInfo) {
|
||||
cpu->sockets = nodeInfo->sockets;
|
||||
cpu->dies = 1;
|
||||
+ cpu->clusters = 1;
|
||||
cpu->cores = nodeInfo->cores;
|
||||
cpu->threads = nodeInfo->threads;
|
||||
}
|
||||
diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c
|
||||
index dfb602ca2f..522256777d 100644
|
||||
--- a/src/libxl/libxl_capabilities.c
|
||||
+++ b/src/libxl/libxl_capabilities.c
|
||||
@@ -152,6 +152,7 @@ libxlCapsInitCPU(virCaps *caps, libxl_physinfo *phy_info)
|
||||
cpu->cores = phy_info->cores_per_socket;
|
||||
cpu->threads = phy_info->threads_per_core;
|
||||
cpu->dies = 1;
|
||||
+ cpu->clusters = 1;
|
||||
cpu->sockets = phy_info->nr_cpus / (cpu->cores * cpu->threads);
|
||||
|
||||
if (!(data = libxlCapsNodeData(cpu, phy_info->hw_cap)) ||
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 653817173b..71daa85e55 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -7226,6 +7226,11 @@ qemuBuildSmpCommandLine(virCommand *cmd,
|
||||
_("Only 1 die per socket is supported"));
|
||||
return -1;
|
||||
}
|
||||
+ if (def->cpu->clusters != 1) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("Only 1 cluster per die is supported"));
|
||||
+ return -1;
|
||||
+ }
|
||||
virBufferAsprintf(&buf, ",sockets=%u", def->cpu->sockets);
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_DIES))
|
||||
virBufferAsprintf(&buf, ",dies=%u", def->cpu->dies);
|
||||
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
|
||||
index 26b89776e1..4ac2320251 100644
|
||||
--- a/src/vmx/vmx.c
|
||||
+++ b/src/vmx/vmx.c
|
||||
@@ -1583,6 +1583,7 @@ virVMXParseConfig(virVMXContext *ctx,
|
||||
goto cleanup;
|
||||
}
|
||||
cpu->dies = 1;
|
||||
+ cpu->clusters = 1;
|
||||
cpu->cores = coresPerSocket;
|
||||
cpu->threads = 1;
|
||||
|
||||
@@ -3377,6 +3378,12 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOption *xmlopt, virDomainDef
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
+ if (def->cpu->clusters != 1) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("Only 1 cluster per die is supported"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
calculated_vcpus = def->cpu->sockets * def->cpu->cores;
|
||||
if (calculated_vcpus != maxvcpus) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
diff --git a/tests/cputestdata/x86_64-host+guest,model486-result.xml b/tests/cputestdata/x86_64-host+guest,model486-result.xml
|
||||
index ea8e2d3a48..b533f22b88 100644
|
||||
--- a/tests/cputestdata/x86_64-host+guest,model486-result.xml
|
||||
+++ b/tests/cputestdata/x86_64-host+guest,model486-result.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>486</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='1'/>
|
||||
<feature policy='require' name='de'/>
|
||||
<feature policy='require' name='tsc'/>
|
||||
<feature policy='require' name='msr'/>
|
||||
diff --git a/tests/cputestdata/x86_64-host+guest,models-result.xml b/tests/cputestdata/x86_64-host+guest,models-result.xml
|
||||
index 42664a48b4..e975d9bc18 100644
|
||||
--- a/tests/cputestdata/x86_64-host+guest,models-result.xml
|
||||
+++ b/tests/cputestdata/x86_64-host+guest,models-result.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='1'/>
|
||||
<feature policy='force' name='pbe'/>
|
||||
<feature policy='force' name='monitor'/>
|
||||
<feature policy='require' name='ssse3'/>
|
||||
diff --git a/tests/cputestdata/x86_64-host+guest-result.xml b/tests/cputestdata/x86_64-host+guest-result.xml
|
||||
index 28e3152cbf..cf41b3f872 100644
|
||||
--- a/tests/cputestdata/x86_64-host+guest-result.xml
|
||||
+++ b/tests/cputestdata/x86_64-host+guest-result.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>Penryn</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='1'/>
|
||||
<feature policy='require' name='dca'/>
|
||||
<feature policy='require' name='xtpr'/>
|
||||
<feature policy='disable' name='sse4.2'/>
|
||||
diff --git a/tests/cputestdata/x86_64-host+guest.xml b/tests/cputestdata/x86_64-host+guest.xml
|
||||
index 28e3152cbf..cf41b3f872 100644
|
||||
--- a/tests/cputestdata/x86_64-host+guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-host+guest.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>Penryn</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='1'/>
|
||||
<feature policy='require' name='dca'/>
|
||||
<feature policy='require' name='xtpr'/>
|
||||
<feature policy='disable' name='sse4.2'/>
|
||||
diff --git a/tests/cputestdata/x86_64-host+host-model-nofallback.xml b/tests/cputestdata/x86_64-host+host-model-nofallback.xml
|
||||
index 16d6e1daf2..881eea7bd0 100644
|
||||
--- a/tests/cputestdata/x86_64-host+host-model-nofallback.xml
|
||||
+++ b/tests/cputestdata/x86_64-host+host-model-nofallback.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='forbid'>Penryn</model>
|
||||
<vendor>Intel</vendor>
|
||||
- <topology sockets='1' dies='1' cores='2' threads='1'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='2' threads='1'/>
|
||||
<feature policy='require' name='dca'/>
|
||||
<feature policy='require' name='xtpr'/>
|
||||
<feature policy='require' name='tm2'/>
|
||||
diff --git a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml
|
||||
index 8eda6684a0..67994c62cc 100644
|
||||
--- a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml
|
||||
+++ b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>Haswell</model>
|
||||
- <topology sockets='1' dies='1' cores='2' threads='2'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='2' threads='2'/>
|
||||
<feature policy='disable' name='rtm'/>
|
||||
<feature policy='disable' name='hle'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml
|
||||
index cb02449d60..4804c0b818 100644
|
||||
--- a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml
|
||||
+++ b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>Haswell</model>
|
||||
- <topology sockets='1' dies='1' cores='2' threads='2'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='2' threads='2'/>
|
||||
<feature policy='disable' name='hle'/>
|
||||
<feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml
|
||||
index 7ee926aba8..c21b331248 100644
|
||||
--- a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml
|
||||
+++ b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml
|
||||
@@ -1,4 +1,4 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>Haswell-noTSX</model>
|
||||
- <topology sockets='1' dies='1' cores='2' threads='2'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='2' threads='2'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-host-worse+guest-result.xml b/tests/cputestdata/x86_64-host-worse+guest-result.xml
|
||||
index 9d54c66a8f..712c3ad341 100644
|
||||
--- a/tests/cputestdata/x86_64-host-worse+guest-result.xml
|
||||
+++ b/tests/cputestdata/x86_64-host-worse+guest-result.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
<model fallback='allow'>Penryn</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='1'/>
|
||||
<feature policy='disable' name='dca'/>
|
||||
<feature policy='disable' name='xtpr'/>
|
||||
<feature policy='disable' name='sse4.2'/>
|
||||
diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml
|
||||
index ad11b2f8a6..1a0d28257e 100644
|
||||
--- a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml
|
||||
+++ b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml
|
||||
@@ -44,7 +44,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>POWER9</model>
|
||||
- <topology sockets='1' dies='1' cores='4' threads='8'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='4' threads='8'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml
|
||||
index 2a3b4a495f..b127883b36 100644
|
||||
--- a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml
|
||||
+++ b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml
|
||||
@@ -44,7 +44,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>POWER9</model>
|
||||
- <topology sockets='1' dies='1' cores='4' threads='8'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='4' threads='8'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml
|
||||
index 34aec9b965..29f1a5ac45 100644
|
||||
--- a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml
|
||||
+++ b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml
|
||||
@@ -44,7 +44,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>POWER9</model>
|
||||
- <topology sockets='1' dies='1' cores='4' threads='8'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='4' threads='8'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml
|
||||
index 5ce2cfd0b0..76a85ac9f0 100644
|
||||
--- a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml
|
||||
+++ b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml
|
||||
@@ -44,7 +44,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>POWER9</model>
|
||||
- <topology sockets='1' dies='1' cores='4' threads='8'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='4' threads='8'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml
|
||||
index 8d52ffedb4..bec46987ff 100644
|
||||
--- a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml
|
||||
+++ b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml
|
||||
@@ -20,7 +20,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='4' dies='1' cores='2' threads='1'/>
|
||||
+ <topology sockets='4' dies='1' clusters='1' cores='2' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml
|
||||
index f416397e33..be9769c686 100644
|
||||
--- a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml
|
||||
+++ b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml
|
||||
@@ -20,7 +20,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='4' dies='1' cores='2' threads='1'/>
|
||||
+ <topology sockets='4' dies='1' clusters='1' cores='2' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml
|
||||
index 0bd2af8e43..539f607818 100644
|
||||
--- a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml
|
||||
+++ b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml
|
||||
@@ -20,7 +20,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='4' dies='1' cores='2' threads='1'/>
|
||||
+ <topology sockets='4' dies='1' clusters='1' cores='2' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml
|
||||
index b31e6ebe55..acbdd3cfd5 100644
|
||||
--- a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml
|
||||
+++ b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml
|
||||
@@ -20,7 +20,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='4' dies='1' cores='2' threads='1'/>
|
||||
+ <topology sockets='4' dies='1' clusters='1' cores='2' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-graphics-spice-timeout+graphics-spice-timeout-password.xml b/tests/qemuhotplugtestdomains/qemuhotplug-graphics-spice-timeout+graphics-spice-timeout-password.xml
|
||||
index 03964ad01c..ee53339338 100644
|
||||
--- a/tests/qemuhotplugtestdomains/qemuhotplug-graphics-spice-timeout+graphics-spice-timeout-password.xml
|
||||
+++ b/tests/qemuhotplugtestdomains/qemuhotplug-graphics-spice-timeout+graphics-spice-timeout-password.xml
|
||||
@@ -18,7 +18,7 @@
|
||||
<cpu mode='custom' match='exact' check='partial'>
|
||||
<model fallback='allow'>core2duo</model>
|
||||
<vendor>Intel</vendor>
|
||||
- <topology sockets='1' dies='1' cores='2' threads='1'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='2' threads='1'/>
|
||||
<feature policy='require' name='lahf_lm'/>
|
||||
<feature policy='require' name='xtpr'/>
|
||||
<feature policy='require' name='cx16'/>
|
||||
diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-graphics-spice-timeout.xml b/tests/qemuhotplugtestdomains/qemuhotplug-graphics-spice-timeout.xml
|
||||
index e6b0cc833a..eb9b902fc5 100644
|
||||
--- a/tests/qemuhotplugtestdomains/qemuhotplug-graphics-spice-timeout.xml
|
||||
+++ b/tests/qemuhotplugtestdomains/qemuhotplug-graphics-spice-timeout.xml
|
||||
@@ -18,7 +18,7 @@
|
||||
<cpu mode='custom' match='exact' check='partial'>
|
||||
<model fallback='allow'>core2duo</model>
|
||||
<vendor>Intel</vendor>
|
||||
- <topology sockets='1' dies='1' cores='2' threads='1'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='2' threads='1'/>
|
||||
<feature policy='require' name='lahf_lm'/>
|
||||
<feature policy='require' name='xtpr'/>
|
||||
<feature policy='require' name='cx16'/>
|
||||
diff --git a/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml b/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml
|
||||
index 2090bb8288..92f418fb88 100644
|
||||
--- a/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml
|
||||
+++ b/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='8' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='8' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology.xml b/tests/qemuxml2argvdata/fd-memory-numa-topology.xml
|
||||
index 2f94690656..543509d832 100644
|
||||
--- a/tests/qemuxml2argvdata/fd-memory-numa-topology.xml
|
||||
+++ b/tests/qemuxml2argvdata/fd-memory-numa-topology.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='1' dies='1' cores='8' threads='1'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='8' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7' memory='14680064' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml b/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml
|
||||
index 3a4e9b478e..d3b98da3c6 100644
|
||||
--- a/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml
|
||||
+++ b/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='1' dies='1' cores='20' threads='1'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='20' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7,16-19' memory='14680064' unit='KiB'/>
|
||||
<cell id='1' cpus='8-15' memory='14680064' unit='KiB' memAccess='shared'/>
|
||||
diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml b/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml
|
||||
index 0f7f74283b..459d1b9d1d 100644
|
||||
--- a/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml
|
||||
+++ b/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='1' dies='1' cores='32' threads='1'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='32' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1,6-31' memory='14680064' unit='KiB'/>
|
||||
<cell id='1' cpus='2-3' memory='14680064' unit='KiB' memAccess='shared'/>
|
||||
diff --git a/tests/qemuxml2argvdata/hugepages-nvdimm.xml b/tests/qemuxml2argvdata/hugepages-nvdimm.xml
|
||||
index 1a1500895b..b786b0d3dd 100644
|
||||
--- a/tests/qemuxml2argvdata/hugepages-nvdimm.xml
|
||||
+++ b/tests/qemuxml2argvdata/hugepages-nvdimm.xml
|
||||
@@ -17,7 +17,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml
|
||||
index 238d4c6b52..a70bd53134 100644
|
||||
--- a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml
|
||||
+++ b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml
|
||||
@@ -19,7 +19,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='1' dies='1' cores='8' threads='1'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='8' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7' memory='14680064' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.xml b/tests/qemuxml2argvdata/memfd-memory-numa.xml
|
||||
index 1ac87e3aef..0c5d7ba4ef 100644
|
||||
--- a/tests/qemuxml2argvdata/memfd-memory-numa.xml
|
||||
+++ b/tests/qemuxml2argvdata/memfd-memory-numa.xml
|
||||
@@ -22,7 +22,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='1' dies='1' cores='8' threads='1'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='8' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7' memory='14680064' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml
|
||||
index bee0346aca..84baf82bf5 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</idmap>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
|
||||
index decf87db63..664418e805 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</idmap>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml
|
||||
index 8a0dab3908..f998f7f276 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</idmap>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
|
||||
index a712adfe1e..d66481fd35 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</idmap>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml
|
||||
index 57629ccb8c..56d6b7b712 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</idmap>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml
|
||||
index 865ddcf0ea..ff6e3b7b0f 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</idmap>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.xml b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.xml
|
||||
index c578209d8a..52fa6b14e9 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.xml
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.xml
|
||||
@@ -11,7 +11,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='2095104' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.xml b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.xml
|
||||
index a8b22dd3c5..2786a739ad 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.xml
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.xml
|
||||
@@ -11,7 +11,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='2095104' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2xmloutdata/cpu-numa-disjoint.x86_64-latest.xml b/tests/qemuxml2xmloutdata/cpu-numa-disjoint.x86_64-latest.xml
|
||||
index fa2ec31463..4f33094949 100644
|
||||
--- a/tests/qemuxml2xmloutdata/cpu-numa-disjoint.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/cpu-numa-disjoint.x86_64-latest.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='2'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='2'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-3,8-11' memory='109550' unit='KiB'/>
|
||||
<cell id='1' cpus='4-7,12-15' memory='109550' unit='KiB'/>
|
||||
diff --git a/tests/qemuxml2xmloutdata/cpu-numa-disordered.x86_64-latest.xml b/tests/qemuxml2xmloutdata/cpu-numa-disordered.x86_64-latest.xml
|
||||
index 1b4d0bfa67..75dcb8c9e2 100644
|
||||
--- a/tests/qemuxml2xmloutdata/cpu-numa-disordered.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/cpu-numa-disordered.x86_64-latest.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='2'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='2'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-5' memory='109550' unit='KiB'/>
|
||||
<cell id='1' cpus='11-15' memory='109550' unit='KiB'/>
|
||||
diff --git a/tests/qemuxml2xmloutdata/cpu-numa-memshared.x86_64-latest.xml b/tests/qemuxml2xmloutdata/cpu-numa-memshared.x86_64-latest.xml
|
||||
index 47ed9efd69..c45e295921 100644
|
||||
--- a/tests/qemuxml2xmloutdata/cpu-numa-memshared.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/cpu-numa-memshared.x86_64-latest.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='2'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='2'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7' memory='109550' unit='KiB' memAccess='shared'/>
|
||||
<cell id='1' cpus='8-15' memory='109550' unit='KiB' memAccess='private'/>
|
||||
diff --git a/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.x86_64-latest.xml b/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.x86_64-latest.xml
|
||||
index 57bbacdff0..663d137ff5 100644
|
||||
--- a/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.x86_64-latest.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='2'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='2'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
|
||||
<cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
|
||||
diff --git a/tests/qemuxml2xmloutdata/cpu-numa1.x86_64-latest.xml b/tests/qemuxml2xmloutdata/cpu-numa1.x86_64-latest.xml
|
||||
index 57bbacdff0..663d137ff5 100644
|
||||
--- a/tests/qemuxml2xmloutdata/cpu-numa1.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/cpu-numa1.x86_64-latest.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='2'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='2'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
|
||||
<cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
|
||||
diff --git a/tests/qemuxml2xmloutdata/cpu-numa2.x86_64-latest.xml b/tests/qemuxml2xmloutdata/cpu-numa2.x86_64-latest.xml
|
||||
index 57bbacdff0..663d137ff5 100644
|
||||
--- a/tests/qemuxml2xmloutdata/cpu-numa2.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/cpu-numa2.x86_64-latest.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='2'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='2'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
|
||||
<cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
|
||||
diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-dimm-addr.x86_64-latest.xml b/tests/qemuxml2xmloutdata/memory-hotplug-dimm-addr.x86_64-latest.xml
|
||||
index 0a32d5491a..38b41e6719 100644
|
||||
--- a/tests/qemuxml2xmloutdata/memory-hotplug-dimm-addr.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/memory-hotplug-dimm-addr.x86_64-latest.xml
|
||||
@@ -11,7 +11,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-dimm.x86_64-latest.xml b/tests/qemuxml2xmloutdata/memory-hotplug-dimm.x86_64-latest.xml
|
||||
index 7c1b7b2c5d..7f0dc85c0e 100644
|
||||
--- a/tests/qemuxml2xmloutdata/memory-hotplug-dimm.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/memory-hotplug-dimm.x86_64-latest.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
</idmap>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-multiple.x86_64-latest.xml b/tests/qemuxml2xmloutdata/memory-hotplug-multiple.x86_64-latest.xml
|
||||
index 42b0f7b880..b3306fb569 100644
|
||||
--- a/tests/qemuxml2xmloutdata/memory-hotplug-multiple.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/memory-hotplug-multiple.x86_64-latest.xml
|
||||
@@ -11,7 +11,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='2095104' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64-abi-update.ppc64-latest.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64-abi-update.ppc64-latest.xml
|
||||
index ae157c4849..4cc0c674df 100644
|
||||
--- a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64-abi-update.ppc64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64-abi-update.ppc64-latest.xml
|
||||
@@ -11,7 +11,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>POWER9</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64.ppc64-latest.xml b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64.ppc64-latest.xml
|
||||
index 3c1cbc731d..a5c26e3c5b 100644
|
||||
--- a/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64.ppc64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-ppc64.ppc64-latest.xml
|
||||
@@ -11,7 +11,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>POWER9</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2xmloutdata/memory-hotplug.x86_64-latest.xml b/tests/qemuxml2xmloutdata/memory-hotplug.x86_64-latest.xml
|
||||
index 083102e8d6..697819387f 100644
|
||||
--- a/tests/qemuxml2xmloutdata/memory-hotplug.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/memory-hotplug.x86_64-latest.xml
|
||||
@@ -11,7 +11,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
|
||||
</numa>
|
||||
diff --git a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.x86_64-latest.xml b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.x86_64-latest.xml
|
||||
index 2d04bc23c2..6068a76464 100644
|
||||
--- a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.x86_64-latest.xml
|
||||
@@ -13,7 +13,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.x86_64-latest.xml b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.x86_64-latest.xml
|
||||
index 80f7284126..6c558526e9 100644
|
||||
--- a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.x86_64-latest.xml
|
||||
@@ -13,7 +13,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.x86_64-latest.xml b/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.x86_64-latest.xml
|
||||
index 724209f6e3..6e1fecb488 100644
|
||||
--- a/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.x86_64-latest.xml
|
||||
@@ -13,7 +13,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.x86_64-latest.xml b/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.x86_64-latest.xml
|
||||
index 2a4ee0d496..c42d7066f9 100644
|
||||
--- a/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.x86_64-latest.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='1'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/qemuxml2xmloutdata/pci-expander-bus.x86_64-latest.xml b/tests/qemuxml2xmloutdata/pci-expander-bus.x86_64-latest.xml
|
||||
index b63c8c145a..2a6c329a40 100644
|
||||
--- a/tests/qemuxml2xmloutdata/pci-expander-bus.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/pci-expander-bus.x86_64-latest.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='2'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='2'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
|
||||
<cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
|
||||
diff --git a/tests/qemuxml2xmloutdata/pcie-expander-bus.x86_64-latest.xml b/tests/qemuxml2xmloutdata/pcie-expander-bus.x86_64-latest.xml
|
||||
index a441be8ebe..99612740b2 100644
|
||||
--- a/tests/qemuxml2xmloutdata/pcie-expander-bus.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/pcie-expander-bus.x86_64-latest.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
- <topology sockets='2' dies='1' cores='4' threads='2'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='4' threads='2'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
|
||||
<cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
|
||||
diff --git a/tests/qemuxml2xmloutdata/pseries-phb-numa-node.ppc64-latest.xml b/tests/qemuxml2xmloutdata/pseries-phb-numa-node.ppc64-latest.xml
|
||||
index 59015846fb..0a044f50b0 100644
|
||||
--- a/tests/qemuxml2xmloutdata/pseries-phb-numa-node.ppc64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/pseries-phb-numa-node.ppc64-latest.xml
|
||||
@@ -14,7 +14,7 @@
|
||||
</os>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>POWER9</model>
|
||||
- <topology sockets='2' dies='1' cores='1' threads='4'/>
|
||||
+ <topology sockets='2' dies='1' clusters='1' cores='1' threads='4'/>
|
||||
<numa>
|
||||
<cell id='0' cpus='0-3' memory='1048576' unit='KiB'/>
|
||||
<cell id='1' cpus='4-7' memory='1048576' unit='KiB'/>
|
||||
diff --git a/tests/vmx2xmldata/esx-in-the-wild-10.xml b/tests/vmx2xmldata/esx-in-the-wild-10.xml
|
||||
index 47ed637920..78129682bd 100644
|
||||
--- a/tests/vmx2xmldata/esx-in-the-wild-10.xml
|
||||
+++ b/tests/vmx2xmldata/esx-in-the-wild-10.xml
|
||||
@@ -12,7 +12,7 @@
|
||||
<type arch='x86_64'>hvm</type>
|
||||
</os>
|
||||
<cpu>
|
||||
- <topology sockets='1' dies='1' cores='2' threads='1'/>
|
||||
+ <topology sockets='1' dies='1' clusters='1' cores='2' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/vmx2xmldata/esx-in-the-wild-8.xml b/tests/vmx2xmldata/esx-in-the-wild-8.xml
|
||||
index 0eea610709..47d22ced2a 100644
|
||||
--- a/tests/vmx2xmldata/esx-in-the-wild-8.xml
|
||||
+++ b/tests/vmx2xmldata/esx-in-the-wild-8.xml
|
||||
@@ -11,7 +11,7 @@
|
||||
<type arch='x86_64'>hvm</type>
|
||||
</os>
|
||||
<cpu>
|
||||
- <topology sockets='4' dies='1' cores='2' threads='1'/>
|
||||
+ <topology sockets='4' dies='1' clusters='1' cores='2' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
diff --git a/tests/vmx2xmldata/esx-in-the-wild-9.xml b/tests/vmx2xmldata/esx-in-the-wild-9.xml
|
||||
index 66eca400dd..ee6be2527f 100644
|
||||
--- a/tests/vmx2xmldata/esx-in-the-wild-9.xml
|
||||
+++ b/tests/vmx2xmldata/esx-in-the-wild-9.xml
|
||||
@@ -12,7 +12,7 @@
|
||||
<type arch='x86_64'>hvm</type>
|
||||
</os>
|
||||
<cpu>
|
||||
- <topology sockets='4' dies='1' cores='4' threads='1'/>
|
||||
+ <topology sockets='4' dies='1' clusters='1' cores='4' threads='1'/>
|
||||
</cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,152 @@
|
||||
From de94232ffb9eef84bb72631979f59bbadfc3cb9e Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <de94232ffb9eef84bb72631979f59bbadfc3cb9e.1707394626.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 4 Jan 2024 10:03:36 +0100
|
||||
Subject: [PATCH] conf: Introduce dynamicMemslots attribute for virtio-mem
|
||||
|
||||
Introduced in v8.2.0-rc0~74^2~2, QEMU now allows setting
|
||||
.dynamic-memslots attribute for virtio-mem-pci devices. When
|
||||
turned on, it allows memory exposed to guest to be split into
|
||||
multiple memslots and thus smaller memory footprint (see the
|
||||
original commit for detailed explanation).
|
||||
|
||||
Therefore, introduce new <target/> attribute which will control
|
||||
that QEMU knob.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 53258205854e649bc82310542373df004a4734ab)
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-15316
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomain.rst | 13 +++++++++++++
|
||||
src/conf/domain_conf.c | 18 +++++++++++++++++-
|
||||
src/conf/domain_conf.h | 1 +
|
||||
src/conf/schemas/domaincommon.rng | 5 +++++
|
||||
.../memory-hotplug-virtio-mem.xml | 2 +-
|
||||
5 files changed, 37 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
|
||||
index 298ad46a45..34b2564909 100644
|
||||
--- a/docs/formatdomain.rst
|
||||
+++ b/docs/formatdomain.rst
|
||||
@@ -8437,6 +8437,19 @@ Example: usage of the memory devices
|
||||
The ``node`` subelement configures the guest NUMA node to attach the memory
|
||||
to. The element shall be used only if the guest has NUMA nodes configured.
|
||||
|
||||
+ For ``virtio-mem`` optional attribute ``dynamicMemslots`` can be specified
|
||||
+ (accepted values "yes"/"no") which allows hypervisor to spread memory into
|
||||
+ multiple memory slots (allocate them dynamically based on the amount of
|
||||
+ memory exposed to the guest), resulting in smaller memory footprint. But be
|
||||
+ aware this may affect vhost-user devices. When enabled, older vhost-user
|
||||
+ device implementations (such as virtiofs) may refuse to initialize resulting
|
||||
+ in failed domain startup or device hotplug. When only modern vhost-user
|
||||
+ based devices will be used or when no vhost-user devices are expected to be
|
||||
+ used it's beneficial to enable this feature. The current default is
|
||||
+ hypervisor dependant (for QEMU is "no"). If the default changes and you are
|
||||
+ having difficulties with vhost-user devices, try toggling this to "no".
|
||||
+ :since:`Since 10.1.0 and QEMU 8.2.0`
|
||||
+
|
||||
The following optional elements may be used:
|
||||
|
||||
``label``
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 6211d2a51b..ac06fa39f6 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -13543,6 +13543,10 @@ virDomainMemoryTargetDefParseXML(xmlNodePtr node,
|
||||
&def->target.virtio_mem.requestedsize, false, false) < 0)
|
||||
return -1;
|
||||
|
||||
+ if (virXMLPropTristateBool(node, "dynamicMemslots", VIR_XML_PROP_NONE,
|
||||
+ &def->target.virtio_mem.dynamicMemslots) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
addrNode = virXPathNode("./address", ctxt);
|
||||
addr = &def->target.virtio_mem.address;
|
||||
break;
|
||||
@@ -21217,6 +21221,12 @@ virDomainMemoryDefCheckABIStability(virDomainMemoryDef *src,
|
||||
src->target.virtio_mem.address);
|
||||
return false;
|
||||
}
|
||||
+
|
||||
+ if (src->target.virtio_mem.dynamicMemslots != dst->target.virtio_mem.dynamicMemslots) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("Target memory device 'dynamicMemslots' property doesn't match source memory device"));
|
||||
+ return false;
|
||||
+ }
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_MEMORY_MODEL_DIMM:
|
||||
@@ -25432,6 +25442,7 @@ virDomainMemoryTargetDefFormat(virBuffer *buf,
|
||||
unsigned int flags)
|
||||
{
|
||||
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
virBufferAsprintf(&childBuf, "<size unit='KiB'>%llu</size>\n", def->size);
|
||||
if (def->targetNode >= 0)
|
||||
@@ -25471,6 +25482,11 @@ virDomainMemoryTargetDefFormat(virBuffer *buf,
|
||||
if (def->target.virtio_mem.address)
|
||||
virBufferAsprintf(&childBuf, "<address base='0x%llx'/>\n",
|
||||
def->target.virtio_mem.address);
|
||||
+
|
||||
+ if (def->target.virtio_mem.dynamicMemslots) {
|
||||
+ virBufferAsprintf(&attrBuf, " dynamicMemslots='%s'",
|
||||
+ virTristateBoolTypeToString(def->target.virtio_mem.dynamicMemslots));
|
||||
+ }
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC:
|
||||
@@ -25480,7 +25496,7 @@ virDomainMemoryTargetDefFormat(virBuffer *buf,
|
||||
break;
|
||||
}
|
||||
|
||||
- virXMLFormatElement(buf, "target", NULL, &childBuf);
|
||||
+ virXMLFormatElement(buf, "target", &attrBuf, &childBuf);
|
||||
}
|
||||
|
||||
static int
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index d176bda5f8..bd283d42df 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -2676,6 +2676,7 @@ struct _virDomainMemoryDef {
|
||||
unsigned long long currentsize; /* kibibytes, valid for an active
|
||||
domain only and parsed */
|
||||
unsigned long long address; /* address where memory is mapped */
|
||||
+ virTristateBool dynamicMemslots;
|
||||
} virtio_mem;
|
||||
struct {
|
||||
} sgx_epc;
|
||||
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
|
||||
index a34427c330..df44cd9857 100644
|
||||
--- a/src/conf/schemas/domaincommon.rng
|
||||
+++ b/src/conf/schemas/domaincommon.rng
|
||||
@@ -7268,6 +7268,11 @@
|
||||
|
||||
<define name="memorydev-target">
|
||||
<element name="target">
|
||||
+ <optional>
|
||||
+ <attribute name="dynamicMemslots">
|
||||
+ <ref name="virYesNo"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
<interleave>
|
||||
<element name="size">
|
||||
<ref name="scaledInteger"/>
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.xml b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.xml
|
||||
index 52fa6b14e9..20282a131b 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.xml
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.xml
|
||||
@@ -60,7 +60,7 @@
|
||||
<nodemask>1-3</nodemask>
|
||||
<pagesize unit='KiB'>2048</pagesize>
|
||||
</source>
|
||||
- <target>
|
||||
+ <target dynamicMemslots='yes'>
|
||||
<size unit='KiB'>2097152</size>
|
||||
<node>0</node>
|
||||
<block unit='KiB'>2048</block>
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,684 @@
|
||||
From 130768f856aef1a4fa09a4654fd5ddcaad985795 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <130768f856aef1a4fa09a4654fd5ddcaad985795.1706524416.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 5 Jan 2024 16:03:54 +0100
|
||||
Subject: [PATCH] conf: Report CPU clusters in capabilities XML
|
||||
|
||||
For machines that don't expose useful information through sysfs,
|
||||
the dummy ID 0 is used.
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 5fc56aefb67a085a2f0fd3d2a157c7c029d2ef60)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/conf/capabilities.c | 5 +-
|
||||
src/conf/capabilities.h | 1 +
|
||||
src/conf/schemas/capability.rng | 3 ++
|
||||
src/libvirt_linux.syms | 1 +
|
||||
src/util/virhostcpu.c | 22 +++++++++
|
||||
src/util/virhostcpu.h | 1 +
|
||||
tests/capabilityschemadata/caps-qemu-kvm.xml | 32 ++++++-------
|
||||
.../vircaps-aarch64-basic-clusters.xml | 16 +++----
|
||||
.../vircaps2xmldata/vircaps-aarch64-basic.xml | 32 ++++++-------
|
||||
.../vircaps-x86_64-basic-dies.xml | 24 +++++-----
|
||||
.../vircaps2xmldata/vircaps-x86_64-basic.xml | 32 ++++++-------
|
||||
.../vircaps2xmldata/vircaps-x86_64-caches.xml | 16 +++----
|
||||
tests/vircaps2xmldata/vircaps-x86_64-hmat.xml | 48 +++++++++----------
|
||||
.../vircaps-x86_64-resctrl-cdp.xml | 24 +++++-----
|
||||
.../vircaps-x86_64-resctrl-cmt.xml | 24 +++++-----
|
||||
.../vircaps-x86_64-resctrl-fake-feature.xml | 24 +++++-----
|
||||
.../vircaps-x86_64-resctrl-skx-twocaches.xml | 2 +-
|
||||
.../vircaps-x86_64-resctrl-skx.xml | 2 +-
|
||||
.../vircaps-x86_64-resctrl.xml | 24 +++++-----
|
||||
19 files changed, 182 insertions(+), 151 deletions(-)
|
||||
|
||||
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
|
||||
index 32badee7b3..02298e40a3 100644
|
||||
--- a/src/conf/capabilities.c
|
||||
+++ b/src/conf/capabilities.c
|
||||
@@ -811,9 +811,10 @@ virCapsHostNUMACellCPUFormat(virBuffer *buf,
|
||||
return -1;
|
||||
|
||||
virBufferAsprintf(&childBuf,
|
||||
- " socket_id='%d' die_id='%d' core_id='%d' siblings='%s'",
|
||||
+ " socket_id='%d' die_id='%d' cluster_id='%d' core_id='%d' siblings='%s'",
|
||||
cpus[j].socket_id,
|
||||
cpus[j].die_id,
|
||||
+ cpus[j].cluster_id,
|
||||
cpus[j].core_id,
|
||||
siblings);
|
||||
}
|
||||
@@ -1453,6 +1454,7 @@ virCapabilitiesFillCPUInfo(int cpu_id G_GNUC_UNUSED,
|
||||
|
||||
if (virHostCPUGetSocket(cpu_id, &cpu->socket_id) < 0 ||
|
||||
virHostCPUGetDie(cpu_id, &cpu->die_id) < 0 ||
|
||||
+ virHostCPUGetCluster(cpu_id, &cpu->cluster_id) < 0 ||
|
||||
virHostCPUGetCore(cpu_id, &cpu->core_id) < 0)
|
||||
return -1;
|
||||
|
||||
@@ -1712,6 +1714,7 @@ virCapabilitiesHostNUMAInitFake(virCapsHostNUMA *caps)
|
||||
if (tmp) {
|
||||
cpus[cid].id = id;
|
||||
cpus[cid].die_id = 0;
|
||||
+ cpus[cid].cluster_id = 0;
|
||||
cpus[cid].socket_id = s;
|
||||
cpus[cid].core_id = c;
|
||||
cpus[cid].siblings = virBitmapNewCopy(siblings);
|
||||
diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
|
||||
index 9eaf6e2807..52e395de14 100644
|
||||
--- a/src/conf/capabilities.h
|
||||
+++ b/src/conf/capabilities.h
|
||||
@@ -89,6 +89,7 @@ struct _virCapsHostNUMACellCPU {
|
||||
unsigned int id;
|
||||
unsigned int socket_id;
|
||||
unsigned int die_id;
|
||||
+ unsigned int cluster_id;
|
||||
unsigned int core_id;
|
||||
virBitmap *siblings;
|
||||
};
|
||||
diff --git a/src/conf/schemas/capability.rng b/src/conf/schemas/capability.rng
|
||||
index b1968df258..a1606941e7 100644
|
||||
--- a/src/conf/schemas/capability.rng
|
||||
+++ b/src/conf/schemas/capability.rng
|
||||
@@ -201,6 +201,9 @@
|
||||
<attribute name="die_id">
|
||||
<ref name="unsignedInt"/>
|
||||
</attribute>
|
||||
+ <attribute name="cluster_id">
|
||||
+ <ref name="unsignedInt"/>
|
||||
+ </attribute>
|
||||
<attribute name="core_id">
|
||||
<ref name="unsignedInt"/>
|
||||
</attribute>
|
||||
diff --git a/src/libvirt_linux.syms b/src/libvirt_linux.syms
|
||||
index 55649ae39c..004cbfee97 100644
|
||||
--- a/src/libvirt_linux.syms
|
||||
+++ b/src/libvirt_linux.syms
|
||||
@@ -3,6 +3,7 @@
|
||||
#
|
||||
|
||||
# util/virhostcpu.h
|
||||
+virHostCPUGetCluster;
|
||||
virHostCPUGetCore;
|
||||
virHostCPUGetDie;
|
||||
virHostCPUGetInfoPopulateLinux;
|
||||
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
|
||||
index 4027547e1e..a3781ca870 100644
|
||||
--- a/src/util/virhostcpu.c
|
||||
+++ b/src/util/virhostcpu.c
|
||||
@@ -232,6 +232,28 @@ virHostCPUGetDie(unsigned int cpu, unsigned int *die)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int
|
||||
+virHostCPUGetCluster(unsigned int cpu, unsigned int *cluster)
|
||||
+{
|
||||
+ int cluster_id;
|
||||
+ int ret = virFileReadValueInt(&cluster_id,
|
||||
+ "%s/cpu/cpu%u/topology/cluster_id",
|
||||
+ SYSFS_SYSTEM_PATH, cpu);
|
||||
+
|
||||
+ if (ret == -1)
|
||||
+ return -1;
|
||||
+
|
||||
+ /* If the file doesn't exists (old kernel) or the value contained
|
||||
+ * in it is -1 (architecture without CPU clusters), report 0 to
|
||||
+ * indicate the lack of information */
|
||||
+ if (ret == -2 || cluster_id < 0)
|
||||
+ cluster_id = 0;
|
||||
+
|
||||
+ *cluster = cluster_id;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
int
|
||||
virHostCPUGetCore(unsigned int cpu, unsigned int *core)
|
||||
{
|
||||
diff --git a/src/util/virhostcpu.h b/src/util/virhostcpu.h
|
||||
index 5f0d43e069..d7e09bff22 100644
|
||||
--- a/src/util/virhostcpu.h
|
||||
+++ b/src/util/virhostcpu.h
|
||||
@@ -68,6 +68,7 @@ int virHostCPUStatsAssign(virNodeCPUStatsPtr param,
|
||||
#ifdef __linux__
|
||||
int virHostCPUGetSocket(unsigned int cpu, unsigned int *socket);
|
||||
int virHostCPUGetDie(unsigned int cpu, unsigned int *die);
|
||||
+int virHostCPUGetCluster(unsigned int cpu, unsigned int *cluster);
|
||||
int virHostCPUGetCore(unsigned int cpu, unsigned int *core);
|
||||
|
||||
virBitmap *virHostCPUGetSiblingsList(unsigned int cpu);
|
||||
diff --git a/tests/capabilityschemadata/caps-qemu-kvm.xml b/tests/capabilityschemadata/caps-qemu-kvm.xml
|
||||
index acdbb362cc..317fa0885f 100644
|
||||
--- a/tests/capabilityschemadata/caps-qemu-kvm.xml
|
||||
+++ b/tests/capabilityschemadata/caps-qemu-kvm.xml
|
||||
@@ -64,14 +64,14 @@
|
||||
<sibling id='1' value='21'/>
|
||||
</distances>
|
||||
<cpus num='8'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
- <cpu id='2' socket_id='0' die_id='0' core_id='1' siblings='2'/>
|
||||
- <cpu id='4' socket_id='0' die_id='0' core_id='2' siblings='4'/>
|
||||
- <cpu id='6' socket_id='0' die_id='0' core_id='3' siblings='6'/>
|
||||
- <cpu id='8' socket_id='0' die_id='0' core_id='4' siblings='8'/>
|
||||
- <cpu id='10' socket_id='0' die_id='0' core_id='5' siblings='10'/>
|
||||
- <cpu id='12' socket_id='0' die_id='0' core_id='6' siblings='12'/>
|
||||
- <cpu id='14' socket_id='0' die_id='0' core_id='7' siblings='14'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='2' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='2'/>
|
||||
+ <cpu id='4' socket_id='0' die_id='0' cluster_id='0' core_id='2' siblings='4'/>
|
||||
+ <cpu id='6' socket_id='0' die_id='0' cluster_id='0' core_id='3' siblings='6'/>
|
||||
+ <cpu id='8' socket_id='0' die_id='0' cluster_id='0' core_id='4' siblings='8'/>
|
||||
+ <cpu id='10' socket_id='0' die_id='0' cluster_id='0' core_id='5' siblings='10'/>
|
||||
+ <cpu id='12' socket_id='0' die_id='0' cluster_id='0' core_id='6' siblings='12'/>
|
||||
+ <cpu id='14' socket_id='0' die_id='0' cluster_id='0' core_id='7' siblings='14'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='1'>
|
||||
@@ -84,14 +84,14 @@
|
||||
<sibling id='1' value='10'/>
|
||||
</distances>
|
||||
<cpus num='8'>
|
||||
- <cpu id='1' socket_id='1' die_id='0' core_id='0' siblings='1'/>
|
||||
- <cpu id='3' socket_id='1' die_id='0' core_id='1' siblings='3'/>
|
||||
- <cpu id='5' socket_id='1' die_id='0' core_id='2' siblings='5'/>
|
||||
- <cpu id='7' socket_id='1' die_id='0' core_id='3' siblings='7'/>
|
||||
- <cpu id='9' socket_id='1' die_id='0' core_id='4' siblings='9'/>
|
||||
- <cpu id='11' socket_id='1' die_id='0' core_id='5' siblings='11'/>
|
||||
- <cpu id='13' socket_id='1' die_id='0' core_id='6' siblings='13'/>
|
||||
- <cpu id='15' socket_id='1' die_id='0' core_id='7' siblings='15'/>
|
||||
+ <cpu id='1' socket_id='1' die_id='0' cluster_id='0' core_id='0' siblings='1'/>
|
||||
+ <cpu id='3' socket_id='1' die_id='0' cluster_id='0' core_id='1' siblings='3'/>
|
||||
+ <cpu id='5' socket_id='1' die_id='0' cluster_id='0' core_id='2' siblings='5'/>
|
||||
+ <cpu id='7' socket_id='1' die_id='0' cluster_id='0' core_id='3' siblings='7'/>
|
||||
+ <cpu id='9' socket_id='1' die_id='0' cluster_id='0' core_id='4' siblings='9'/>
|
||||
+ <cpu id='11' socket_id='1' die_id='0' cluster_id='0' core_id='5' siblings='11'/>
|
||||
+ <cpu id='13' socket_id='1' die_id='0' cluster_id='0' core_id='6' siblings='13'/>
|
||||
+ <cpu id='15' socket_id='1' die_id='0' cluster_id='0' core_id='7' siblings='15'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-aarch64-basic-clusters.xml b/tests/vircaps2xmldata/vircaps-aarch64-basic-clusters.xml
|
||||
index fe61fc42cc..b37c8e7a20 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-aarch64-basic-clusters.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-aarch64-basic-clusters.xml
|
||||
@@ -14,10 +14,10 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='0' socket_id='36' die_id='0' core_id='0' siblings='0-1'/>
|
||||
- <cpu id='1' socket_id='36' die_id='0' core_id='0' siblings='0-1'/>
|
||||
- <cpu id='2' socket_id='36' die_id='0' core_id='1' siblings='2-3'/>
|
||||
- <cpu id='3' socket_id='36' die_id='0' core_id='1' siblings='2-3'/>
|
||||
+ <cpu id='0' socket_id='36' die_id='0' cluster_id='0' core_id='0' siblings='0-1'/>
|
||||
+ <cpu id='1' socket_id='36' die_id='0' cluster_id='0' core_id='0' siblings='0-1'/>
|
||||
+ <cpu id='2' socket_id='36' die_id='0' cluster_id='1' core_id='1' siblings='2-3'/>
|
||||
+ <cpu id='3' socket_id='36' die_id='0' cluster_id='1' core_id='1' siblings='2-3'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='1'>
|
||||
@@ -26,10 +26,10 @@
|
||||
<pages unit='KiB' size='2048'>6144</pages>
|
||||
<pages unit='KiB' size='1048576'>8192</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='4' socket_id='3180' die_id='0' core_id='256' siblings='4-5'/>
|
||||
- <cpu id='5' socket_id='3180' die_id='0' core_id='256' siblings='4-5'/>
|
||||
- <cpu id='6' socket_id='3180' die_id='0' core_id='257' siblings='6-7'/>
|
||||
- <cpu id='7' socket_id='3180' die_id='0' core_id='257' siblings='6-7'/>
|
||||
+ <cpu id='4' socket_id='3180' die_id='0' cluster_id='256' core_id='256' siblings='4-5'/>
|
||||
+ <cpu id='5' socket_id='3180' die_id='0' cluster_id='256' core_id='256' siblings='4-5'/>
|
||||
+ <cpu id='6' socket_id='3180' die_id='0' cluster_id='257' core_id='257' siblings='6-7'/>
|
||||
+ <cpu id='7' socket_id='3180' die_id='0' cluster_id='257' core_id='257' siblings='6-7'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-aarch64-basic.xml b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml
|
||||
index 0a04052c40..5533ae0586 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-aarch64-basic.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml
|
||||
@@ -16,10 +16,10 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
- <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
|
||||
- <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
|
||||
- <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='1' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='1'/>
|
||||
+ <cpu id='2' socket_id='0' die_id='0' cluster_id='0' core_id='2' siblings='2'/>
|
||||
+ <cpu id='3' socket_id='0' die_id='0' cluster_id='0' core_id='3' siblings='3'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='1'>
|
||||
@@ -28,10 +28,10 @@
|
||||
<pages unit='KiB' size='2048'>6144</pages>
|
||||
<pages unit='KiB' size='1048576'>8192</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='4' socket_id='1' die_id='0' core_id='4' siblings='4'/>
|
||||
- <cpu id='5' socket_id='1' die_id='0' core_id='5' siblings='5'/>
|
||||
- <cpu id='6' socket_id='1' die_id='0' core_id='6' siblings='6'/>
|
||||
- <cpu id='7' socket_id='1' die_id='0' core_id='7' siblings='7'/>
|
||||
+ <cpu id='4' socket_id='1' die_id='0' cluster_id='0' core_id='4' siblings='4'/>
|
||||
+ <cpu id='5' socket_id='1' die_id='0' cluster_id='0' core_id='5' siblings='5'/>
|
||||
+ <cpu id='6' socket_id='1' die_id='0' cluster_id='0' core_id='6' siblings='6'/>
|
||||
+ <cpu id='7' socket_id='1' die_id='0' cluster_id='0' core_id='7' siblings='7'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='2'>
|
||||
@@ -40,10 +40,10 @@
|
||||
<pages unit='KiB' size='2048'>8192</pages>
|
||||
<pages unit='KiB' size='1048576'>10240</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='8' socket_id='2' die_id='0' core_id='8' siblings='8'/>
|
||||
- <cpu id='9' socket_id='2' die_id='0' core_id='9' siblings='9'/>
|
||||
- <cpu id='10' socket_id='2' die_id='0' core_id='10' siblings='10'/>
|
||||
- <cpu id='11' socket_id='2' die_id='0' core_id='11' siblings='11'/>
|
||||
+ <cpu id='8' socket_id='2' die_id='0' cluster_id='0' core_id='8' siblings='8'/>
|
||||
+ <cpu id='9' socket_id='2' die_id='0' cluster_id='0' core_id='9' siblings='9'/>
|
||||
+ <cpu id='10' socket_id='2' die_id='0' cluster_id='0' core_id='10' siblings='10'/>
|
||||
+ <cpu id='11' socket_id='2' die_id='0' cluster_id='0' core_id='11' siblings='11'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='3'>
|
||||
@@ -52,10 +52,10 @@
|
||||
<pages unit='KiB' size='2048'>10240</pages>
|
||||
<pages unit='KiB' size='1048576'>12288</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='12' socket_id='3' die_id='0' core_id='12' siblings='12'/>
|
||||
- <cpu id='13' socket_id='3' die_id='0' core_id='13' siblings='13'/>
|
||||
- <cpu id='14' socket_id='3' die_id='0' core_id='14' siblings='14'/>
|
||||
- <cpu id='15' socket_id='3' die_id='0' core_id='15' siblings='15'/>
|
||||
+ <cpu id='12' socket_id='3' die_id='0' cluster_id='0' core_id='12' siblings='12'/>
|
||||
+ <cpu id='13' socket_id='3' die_id='0' cluster_id='0' core_id='13' siblings='13'/>
|
||||
+ <cpu id='14' socket_id='3' die_id='0' cluster_id='0' core_id='14' siblings='14'/>
|
||||
+ <cpu id='15' socket_id='3' die_id='0' cluster_id='0' core_id='15' siblings='15'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml b/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml
|
||||
index 8a3ca2d13c..c86dc4defc 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml
|
||||
@@ -14,18 +14,18 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='12'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
- <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
|
||||
- <cpu id='2' socket_id='0' die_id='1' core_id='0' siblings='2'/>
|
||||
- <cpu id='3' socket_id='0' die_id='1' core_id='1' siblings='3'/>
|
||||
- <cpu id='4' socket_id='0' die_id='2' core_id='0' siblings='4'/>
|
||||
- <cpu id='5' socket_id='0' die_id='2' core_id='1' siblings='5'/>
|
||||
- <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
|
||||
- <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
|
||||
- <cpu id='8' socket_id='1' die_id='1' core_id='0' siblings='8'/>
|
||||
- <cpu id='9' socket_id='1' die_id='1' core_id='1' siblings='9'/>
|
||||
- <cpu id='10' socket_id='1' die_id='2' core_id='0' siblings='10'/>
|
||||
- <cpu id='11' socket_id='1' die_id='2' core_id='1' siblings='11'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='1' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='1'/>
|
||||
+ <cpu id='2' socket_id='0' die_id='1' cluster_id='0' core_id='0' siblings='2'/>
|
||||
+ <cpu id='3' socket_id='0' die_id='1' cluster_id='0' core_id='1' siblings='3'/>
|
||||
+ <cpu id='4' socket_id='0' die_id='2' cluster_id='0' core_id='0' siblings='4'/>
|
||||
+ <cpu id='5' socket_id='0' die_id='2' cluster_id='0' core_id='1' siblings='5'/>
|
||||
+ <cpu id='6' socket_id='1' die_id='0' cluster_id='0' core_id='0' siblings='6'/>
|
||||
+ <cpu id='7' socket_id='1' die_id='0' cluster_id='0' core_id='1' siblings='7'/>
|
||||
+ <cpu id='8' socket_id='1' die_id='1' cluster_id='0' core_id='0' siblings='8'/>
|
||||
+ <cpu id='9' socket_id='1' die_id='1' cluster_id='0' core_id='1' siblings='9'/>
|
||||
+ <cpu id='10' socket_id='1' die_id='2' cluster_id='0' core_id='0' siblings='10'/>
|
||||
+ <cpu id='11' socket_id='1' die_id='2' cluster_id='0' core_id='1' siblings='11'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-basic.xml b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml
|
||||
index 4da09f889c..9ae155d571 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-basic.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml
|
||||
@@ -14,10 +14,10 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
- <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
|
||||
- <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
|
||||
- <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='1' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='1'/>
|
||||
+ <cpu id='2' socket_id='0' die_id='0' cluster_id='0' core_id='2' siblings='2'/>
|
||||
+ <cpu id='3' socket_id='0' die_id='0' cluster_id='0' core_id='3' siblings='3'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='1'>
|
||||
@@ -26,10 +26,10 @@
|
||||
<pages unit='KiB' size='2048'>6144</pages>
|
||||
<pages unit='KiB' size='1048576'>8192</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='4' socket_id='1' die_id='0' core_id='4' siblings='4'/>
|
||||
- <cpu id='5' socket_id='1' die_id='0' core_id='5' siblings='5'/>
|
||||
- <cpu id='6' socket_id='1' die_id='0' core_id='6' siblings='6'/>
|
||||
- <cpu id='7' socket_id='1' die_id='0' core_id='7' siblings='7'/>
|
||||
+ <cpu id='4' socket_id='1' die_id='0' cluster_id='0' core_id='4' siblings='4'/>
|
||||
+ <cpu id='5' socket_id='1' die_id='0' cluster_id='0' core_id='5' siblings='5'/>
|
||||
+ <cpu id='6' socket_id='1' die_id='0' cluster_id='0' core_id='6' siblings='6'/>
|
||||
+ <cpu id='7' socket_id='1' die_id='0' cluster_id='0' core_id='7' siblings='7'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='2'>
|
||||
@@ -38,10 +38,10 @@
|
||||
<pages unit='KiB' size='2048'>8192</pages>
|
||||
<pages unit='KiB' size='1048576'>10240</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='8' socket_id='2' die_id='0' core_id='8' siblings='8'/>
|
||||
- <cpu id='9' socket_id='2' die_id='0' core_id='9' siblings='9'/>
|
||||
- <cpu id='10' socket_id='2' die_id='0' core_id='10' siblings='10'/>
|
||||
- <cpu id='11' socket_id='2' die_id='0' core_id='11' siblings='11'/>
|
||||
+ <cpu id='8' socket_id='2' die_id='0' cluster_id='0' core_id='8' siblings='8'/>
|
||||
+ <cpu id='9' socket_id='2' die_id='0' cluster_id='0' core_id='9' siblings='9'/>
|
||||
+ <cpu id='10' socket_id='2' die_id='0' cluster_id='0' core_id='10' siblings='10'/>
|
||||
+ <cpu id='11' socket_id='2' die_id='0' cluster_id='0' core_id='11' siblings='11'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='3'>
|
||||
@@ -50,10 +50,10 @@
|
||||
<pages unit='KiB' size='2048'>10240</pages>
|
||||
<pages unit='KiB' size='1048576'>12288</pages>
|
||||
<cpus num='4'>
|
||||
- <cpu id='12' socket_id='3' die_id='0' core_id='12' siblings='12'/>
|
||||
- <cpu id='13' socket_id='3' die_id='0' core_id='13' siblings='13'/>
|
||||
- <cpu id='14' socket_id='3' die_id='0' core_id='14' siblings='14'/>
|
||||
- <cpu id='15' socket_id='3' die_id='0' core_id='15' siblings='15'/>
|
||||
+ <cpu id='12' socket_id='3' die_id='0' cluster_id='0' core_id='12' siblings='12'/>
|
||||
+ <cpu id='13' socket_id='3' die_id='0' cluster_id='0' core_id='13' siblings='13'/>
|
||||
+ <cpu id='14' socket_id='3' die_id='0' cluster_id='0' core_id='14' siblings='14'/>
|
||||
+ <cpu id='15' socket_id='3' die_id='0' cluster_id='0' core_id='15' siblings='15'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-caches.xml b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml
|
||||
index 28f00c0a90..05b33147b7 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-caches.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml
|
||||
@@ -17,14 +17,14 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='8'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0,4'/>
|
||||
- <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1,5'/>
|
||||
- <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2,6'/>
|
||||
- <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3,7'/>
|
||||
- <cpu id='4' socket_id='0' die_id='0' core_id='0' siblings='0,4'/>
|
||||
- <cpu id='5' socket_id='0' die_id='0' core_id='1' siblings='1,5'/>
|
||||
- <cpu id='6' socket_id='0' die_id='0' core_id='2' siblings='2,6'/>
|
||||
- <cpu id='7' socket_id='0' die_id='0' core_id='3' siblings='3,7'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0,4'/>
|
||||
+ <cpu id='1' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='1,5'/>
|
||||
+ <cpu id='2' socket_id='0' die_id='0' cluster_id='0' core_id='2' siblings='2,6'/>
|
||||
+ <cpu id='3' socket_id='0' die_id='0' cluster_id='0' core_id='3' siblings='3,7'/>
|
||||
+ <cpu id='4' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0,4'/>
|
||||
+ <cpu id='5' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='1,5'/>
|
||||
+ <cpu id='6' socket_id='0' die_id='0' cluster_id='0' core_id='2' siblings='2,6'/>
|
||||
+ <cpu id='7' socket_id='0' die_id='0' cluster_id='0' core_id='3' siblings='3,7'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-hmat.xml b/tests/vircaps2xmldata/vircaps-x86_64-hmat.xml
|
||||
index 6fe5751666..2b97354bf3 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-hmat.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-hmat.xml
|
||||
@@ -25,30 +25,30 @@
|
||||
<line value='16' unit='B'/>
|
||||
</cache>
|
||||
<cpus num='24'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
- <cpu id='1' socket_id='1' die_id='0' core_id='0' siblings='1'/>
|
||||
- <cpu id='2' socket_id='2' die_id='0' core_id='0' siblings='2'/>
|
||||
- <cpu id='3' socket_id='3' die_id='0' core_id='0' siblings='3'/>
|
||||
- <cpu id='4' socket_id='4' die_id='0' core_id='0' siblings='4'/>
|
||||
- <cpu id='5' socket_id='5' die_id='0' core_id='0' siblings='5'/>
|
||||
- <cpu id='6' socket_id='6' die_id='0' core_id='0' siblings='6'/>
|
||||
- <cpu id='7' socket_id='7' die_id='0' core_id='0' siblings='7'/>
|
||||
- <cpu id='8' socket_id='8' die_id='0' core_id='0' siblings='8'/>
|
||||
- <cpu id='9' socket_id='9' die_id='0' core_id='0' siblings='9'/>
|
||||
- <cpu id='10' socket_id='10' die_id='0' core_id='0' siblings='10'/>
|
||||
- <cpu id='11' socket_id='11' die_id='0' core_id='0' siblings='11'/>
|
||||
- <cpu id='12' socket_id='12' die_id='0' core_id='0' siblings='12'/>
|
||||
- <cpu id='13' socket_id='13' die_id='0' core_id='0' siblings='13'/>
|
||||
- <cpu id='14' socket_id='14' die_id='0' core_id='0' siblings='14'/>
|
||||
- <cpu id='15' socket_id='15' die_id='0' core_id='0' siblings='15'/>
|
||||
- <cpu id='16' socket_id='16' die_id='0' core_id='0' siblings='16'/>
|
||||
- <cpu id='17' socket_id='17' die_id='0' core_id='0' siblings='17'/>
|
||||
- <cpu id='18' socket_id='18' die_id='0' core_id='0' siblings='18'/>
|
||||
- <cpu id='19' socket_id='19' die_id='0' core_id='0' siblings='19'/>
|
||||
- <cpu id='20' socket_id='20' die_id='0' core_id='0' siblings='20'/>
|
||||
- <cpu id='21' socket_id='21' die_id='0' core_id='0' siblings='21'/>
|
||||
- <cpu id='22' socket_id='22' die_id='0' core_id='0' siblings='22'/>
|
||||
- <cpu id='23' socket_id='23' die_id='0' core_id='0' siblings='23'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='1' socket_id='1' die_id='0' cluster_id='0' core_id='0' siblings='1'/>
|
||||
+ <cpu id='2' socket_id='2' die_id='0' cluster_id='0' core_id='0' siblings='2'/>
|
||||
+ <cpu id='3' socket_id='3' die_id='0' cluster_id='0' core_id='0' siblings='3'/>
|
||||
+ <cpu id='4' socket_id='4' die_id='0' cluster_id='0' core_id='0' siblings='4'/>
|
||||
+ <cpu id='5' socket_id='5' die_id='0' cluster_id='0' core_id='0' siblings='5'/>
|
||||
+ <cpu id='6' socket_id='6' die_id='0' cluster_id='0' core_id='0' siblings='6'/>
|
||||
+ <cpu id='7' socket_id='7' die_id='0' cluster_id='0' core_id='0' siblings='7'/>
|
||||
+ <cpu id='8' socket_id='8' die_id='0' cluster_id='0' core_id='0' siblings='8'/>
|
||||
+ <cpu id='9' socket_id='9' die_id='0' cluster_id='0' core_id='0' siblings='9'/>
|
||||
+ <cpu id='10' socket_id='10' die_id='0' cluster_id='0' core_id='0' siblings='10'/>
|
||||
+ <cpu id='11' socket_id='11' die_id='0' cluster_id='0' core_id='0' siblings='11'/>
|
||||
+ <cpu id='12' socket_id='12' die_id='0' cluster_id='0' core_id='0' siblings='12'/>
|
||||
+ <cpu id='13' socket_id='13' die_id='0' cluster_id='0' core_id='0' siblings='13'/>
|
||||
+ <cpu id='14' socket_id='14' die_id='0' cluster_id='0' core_id='0' siblings='14'/>
|
||||
+ <cpu id='15' socket_id='15' die_id='0' cluster_id='0' core_id='0' siblings='15'/>
|
||||
+ <cpu id='16' socket_id='16' die_id='0' cluster_id='0' core_id='0' siblings='16'/>
|
||||
+ <cpu id='17' socket_id='17' die_id='0' cluster_id='0' core_id='0' siblings='17'/>
|
||||
+ <cpu id='18' socket_id='18' die_id='0' cluster_id='0' core_id='0' siblings='18'/>
|
||||
+ <cpu id='19' socket_id='19' die_id='0' cluster_id='0' core_id='0' siblings='19'/>
|
||||
+ <cpu id='20' socket_id='20' die_id='0' cluster_id='0' core_id='0' siblings='20'/>
|
||||
+ <cpu id='21' socket_id='21' die_id='0' cluster_id='0' core_id='0' siblings='21'/>
|
||||
+ <cpu id='22' socket_id='22' die_id='0' cluster_id='0' core_id='0' siblings='22'/>
|
||||
+ <cpu id='23' socket_id='23' die_id='0' cluster_id='0' core_id='0' siblings='23'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='1'>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml
|
||||
index ee26fe9464..167b217d8e 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml
|
||||
@@ -17,12 +17,12 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='6'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
- <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
|
||||
- <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
|
||||
- <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
|
||||
- <cpu id='4' socket_id='0' die_id='0' core_id='4' siblings='4'/>
|
||||
- <cpu id='5' socket_id='0' die_id='0' core_id='5' siblings='5'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='1' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='1'/>
|
||||
+ <cpu id='2' socket_id='0' die_id='0' cluster_id='0' core_id='2' siblings='2'/>
|
||||
+ <cpu id='3' socket_id='0' die_id='0' cluster_id='0' core_id='3' siblings='3'/>
|
||||
+ <cpu id='4' socket_id='0' die_id='0' cluster_id='0' core_id='4' siblings='4'/>
|
||||
+ <cpu id='5' socket_id='0' die_id='0' cluster_id='0' core_id='5' siblings='5'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='1'>
|
||||
@@ -31,12 +31,12 @@
|
||||
<pages unit='KiB' size='2048'>6144</pages>
|
||||
<pages unit='KiB' size='1048576'>8192</pages>
|
||||
<cpus num='6'>
|
||||
- <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
|
||||
- <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
|
||||
- <cpu id='8' socket_id='1' die_id='0' core_id='2' siblings='8'/>
|
||||
- <cpu id='9' socket_id='1' die_id='0' core_id='3' siblings='9'/>
|
||||
- <cpu id='10' socket_id='1' die_id='0' core_id='4' siblings='10'/>
|
||||
- <cpu id='11' socket_id='1' die_id='0' core_id='5' siblings='11'/>
|
||||
+ <cpu id='6' socket_id='1' die_id='0' cluster_id='0' core_id='0' siblings='6'/>
|
||||
+ <cpu id='7' socket_id='1' die_id='0' cluster_id='0' core_id='1' siblings='7'/>
|
||||
+ <cpu id='8' socket_id='1' die_id='0' cluster_id='0' core_id='2' siblings='8'/>
|
||||
+ <cpu id='9' socket_id='1' die_id='0' cluster_id='0' core_id='3' siblings='9'/>
|
||||
+ <cpu id='10' socket_id='1' die_id='0' cluster_id='0' core_id='4' siblings='10'/>
|
||||
+ <cpu id='11' socket_id='1' die_id='0' cluster_id='0' core_id='5' siblings='11'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml
|
||||
index acdd97ec58..311bb58e6a 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml
|
||||
@@ -17,12 +17,12 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='6'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
- <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
|
||||
- <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
|
||||
- <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
|
||||
- <cpu id='4' socket_id='0' die_id='0' core_id='4' siblings='4'/>
|
||||
- <cpu id='5' socket_id='0' die_id='0' core_id='5' siblings='5'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='1' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='1'/>
|
||||
+ <cpu id='2' socket_id='0' die_id='0' cluster_id='0' core_id='2' siblings='2'/>
|
||||
+ <cpu id='3' socket_id='0' die_id='0' cluster_id='0' core_id='3' siblings='3'/>
|
||||
+ <cpu id='4' socket_id='0' die_id='0' cluster_id='0' core_id='4' siblings='4'/>
|
||||
+ <cpu id='5' socket_id='0' die_id='0' cluster_id='0' core_id='5' siblings='5'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='1'>
|
||||
@@ -31,12 +31,12 @@
|
||||
<pages unit='KiB' size='2048'>6144</pages>
|
||||
<pages unit='KiB' size='1048576'>8192</pages>
|
||||
<cpus num='6'>
|
||||
- <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
|
||||
- <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
|
||||
- <cpu id='8' socket_id='1' die_id='0' core_id='2' siblings='8'/>
|
||||
- <cpu id='9' socket_id='1' die_id='0' core_id='3' siblings='9'/>
|
||||
- <cpu id='10' socket_id='1' die_id='0' core_id='4' siblings='10'/>
|
||||
- <cpu id='11' socket_id='1' die_id='0' core_id='5' siblings='11'/>
|
||||
+ <cpu id='6' socket_id='1' die_id='0' cluster_id='0' core_id='0' siblings='6'/>
|
||||
+ <cpu id='7' socket_id='1' die_id='0' cluster_id='0' core_id='1' siblings='7'/>
|
||||
+ <cpu id='8' socket_id='1' die_id='0' cluster_id='0' core_id='2' siblings='8'/>
|
||||
+ <cpu id='9' socket_id='1' die_id='0' cluster_id='0' core_id='3' siblings='9'/>
|
||||
+ <cpu id='10' socket_id='1' die_id='0' cluster_id='0' core_id='4' siblings='10'/>
|
||||
+ <cpu id='11' socket_id='1' die_id='0' cluster_id='0' core_id='5' siblings='11'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml
|
||||
index 1327d85c98..d85407f0b1 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml
|
||||
@@ -17,12 +17,12 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='6'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
- <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
|
||||
- <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
|
||||
- <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
|
||||
- <cpu id='4' socket_id='0' die_id='0' core_id='4' siblings='4'/>
|
||||
- <cpu id='5' socket_id='0' die_id='0' core_id='5' siblings='5'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='1' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='1'/>
|
||||
+ <cpu id='2' socket_id='0' die_id='0' cluster_id='0' core_id='2' siblings='2'/>
|
||||
+ <cpu id='3' socket_id='0' die_id='0' cluster_id='0' core_id='3' siblings='3'/>
|
||||
+ <cpu id='4' socket_id='0' die_id='0' cluster_id='0' core_id='4' siblings='4'/>
|
||||
+ <cpu id='5' socket_id='0' die_id='0' cluster_id='0' core_id='5' siblings='5'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='1'>
|
||||
@@ -31,12 +31,12 @@
|
||||
<pages unit='KiB' size='2048'>6144</pages>
|
||||
<pages unit='KiB' size='1048576'>8192</pages>
|
||||
<cpus num='6'>
|
||||
- <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
|
||||
- <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
|
||||
- <cpu id='8' socket_id='1' die_id='0' core_id='2' siblings='8'/>
|
||||
- <cpu id='9' socket_id='1' die_id='0' core_id='3' siblings='9'/>
|
||||
- <cpu id='10' socket_id='1' die_id='0' core_id='4' siblings='10'/>
|
||||
- <cpu id='11' socket_id='1' die_id='0' core_id='5' siblings='11'/>
|
||||
+ <cpu id='6' socket_id='1' die_id='0' cluster_id='0' core_id='0' siblings='6'/>
|
||||
+ <cpu id='7' socket_id='1' die_id='0' cluster_id='0' core_id='1' siblings='7'/>
|
||||
+ <cpu id='8' socket_id='1' die_id='0' cluster_id='0' core_id='2' siblings='8'/>
|
||||
+ <cpu id='9' socket_id='1' die_id='0' cluster_id='0' core_id='3' siblings='9'/>
|
||||
+ <cpu id='10' socket_id='1' die_id='0' cluster_id='0' core_id='4' siblings='10'/>
|
||||
+ <cpu id='11' socket_id='1' die_id='0' cluster_id='0' core_id='5' siblings='11'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml
|
||||
index 6769bd0591..eb53eb2142 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml
|
||||
@@ -17,7 +17,7 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='1'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml
|
||||
index bc52480905..38ea0bdc27 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml
|
||||
@@ -17,7 +17,7 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='1'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml
|
||||
index b638bbd1c9..fd854ee91e 100644
|
||||
--- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml
|
||||
+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml
|
||||
@@ -17,12 +17,12 @@
|
||||
<pages unit='KiB' size='2048'>4096</pages>
|
||||
<pages unit='KiB' size='1048576'>6144</pages>
|
||||
<cpus num='6'>
|
||||
- <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
|
||||
- <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
|
||||
- <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
|
||||
- <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
|
||||
- <cpu id='4' socket_id='0' die_id='0' core_id='4' siblings='4'/>
|
||||
- <cpu id='5' socket_id='0' die_id='0' core_id='5' siblings='5'/>
|
||||
+ <cpu id='0' socket_id='0' die_id='0' cluster_id='0' core_id='0' siblings='0'/>
|
||||
+ <cpu id='1' socket_id='0' die_id='0' cluster_id='0' core_id='1' siblings='1'/>
|
||||
+ <cpu id='2' socket_id='0' die_id='0' cluster_id='0' core_id='2' siblings='2'/>
|
||||
+ <cpu id='3' socket_id='0' die_id='0' cluster_id='0' core_id='3' siblings='3'/>
|
||||
+ <cpu id='4' socket_id='0' die_id='0' cluster_id='0' core_id='4' siblings='4'/>
|
||||
+ <cpu id='5' socket_id='0' die_id='0' cluster_id='0' core_id='5' siblings='5'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
<cell id='1'>
|
||||
@@ -31,12 +31,12 @@
|
||||
<pages unit='KiB' size='2048'>6144</pages>
|
||||
<pages unit='KiB' size='1048576'>8192</pages>
|
||||
<cpus num='6'>
|
||||
- <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
|
||||
- <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
|
||||
- <cpu id='8' socket_id='1' die_id='0' core_id='2' siblings='8'/>
|
||||
- <cpu id='9' socket_id='1' die_id='0' core_id='3' siblings='9'/>
|
||||
- <cpu id='10' socket_id='1' die_id='0' core_id='4' siblings='10'/>
|
||||
- <cpu id='11' socket_id='1' die_id='0' core_id='5' siblings='11'/>
|
||||
+ <cpu id='6' socket_id='1' die_id='0' cluster_id='0' core_id='0' siblings='6'/>
|
||||
+ <cpu id='7' socket_id='1' die_id='0' cluster_id='0' core_id='1' siblings='7'/>
|
||||
+ <cpu id='8' socket_id='1' die_id='0' cluster_id='0' core_id='2' siblings='8'/>
|
||||
+ <cpu id='9' socket_id='1' die_id='0' cluster_id='0' core_id='3' siblings='9'/>
|
||||
+ <cpu id='10' socket_id='1' die_id='0' cluster_id='0' core_id='4' siblings='10'/>
|
||||
+ <cpu id='11' socket_id='1' die_id='0' cluster_id='0' core_id='5' siblings='11'/>
|
||||
</cpus>
|
||||
</cell>
|
||||
</cells>
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,138 @@
|
||||
From 8d84e4af4cbb93d73f4d9967f517552257f025f5 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <8d84e4af4cbb93d73f4d9967f517552257f025f5.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 29 Jan 2024 18:26:29 +0100
|
||||
Subject: [PATCH] conf: node_device: Refactor
|
||||
'virNodeDeviceCapVPDParseCustomFields' to fix error reporting
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The errors raised in virNodeDeviceCapVPDParseCustomFields were actually
|
||||
ignored by continuing the parse rather than raised.
|
||||
|
||||
Rather than just replace 'continue' by 'return -1' this patch refactors
|
||||
the whole parser to simplify it as well as report reasonable errors.
|
||||
|
||||
Parsing of individual fields is done without XPath and is extracted into
|
||||
a common helper.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit ea8d864d9ecf3ee72910ccc1497244f1ef74e948)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-22314 [9.4.0]
|
||||
---
|
||||
src/conf/node_device_conf.c | 81 ++++++++++++++++++-------------------
|
||||
1 file changed, 40 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
|
||||
index d7e1a23034..0f2c341967 100644
|
||||
--- a/src/conf/node_device_conf.c
|
||||
+++ b/src/conf/node_device_conf.c
|
||||
@@ -953,63 +953,62 @@ virNodeDevCapMdevTypesParseXML(xmlXPathContextPtr ctxt,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+
|
||||
static int
|
||||
-virNodeDeviceCapVPDParseCustomFields(xmlXPathContextPtr ctxt, virPCIVPDResource *res, bool readOnly)
|
||||
+virNodeDeviceCapVPDParseCustomFieldOne(xmlNodePtr node,
|
||||
+ virPCIVPDResource *res,
|
||||
+ bool read_only,
|
||||
+ const char keyword_prefix)
|
||||
+{
|
||||
+ g_autofree char *value = NULL;
|
||||
+ g_autofree char *index = NULL;
|
||||
+ g_autofree char *keyword = NULL;
|
||||
+
|
||||
+ if (!(index = virXMLPropStringRequired(node, "index")))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (strlen(index) != 1) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("'%1$s' 'index' value '%2$s' malformed"),
|
||||
+ node->name, index);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ keyword = g_strdup_printf("%c%c", keyword_prefix, index[0]);
|
||||
+
|
||||
+ if (!(value = virXMLNodeContentString(node)))
|
||||
+ return -1;
|
||||
+
|
||||
+ virPCIVPDResourceUpdateKeyword(res, read_only, keyword, value);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+virNodeDeviceCapVPDParseCustomFields(xmlXPathContextPtr ctxt,
|
||||
+ virPCIVPDResource *res,
|
||||
+ bool readOnly)
|
||||
{
|
||||
int nfields = -1;
|
||||
g_autofree xmlNodePtr *nodes = NULL;
|
||||
size_t i = 0;
|
||||
|
||||
- if ((nfields = virXPathNodeSet("./vendor_field[@index]", ctxt, &nodes)) < 0)
|
||||
+ if ((nfields = virXPathNodeSet("./vendor_field", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < nfields; i++) {
|
||||
- g_autofree char *value = NULL;
|
||||
- g_autofree char *index = NULL;
|
||||
- VIR_XPATH_NODE_AUTORESTORE(ctxt)
|
||||
- g_autofree char *keyword = NULL;
|
||||
-
|
||||
- ctxt->node = nodes[i];
|
||||
- if (!(index = virXPathString("string(./@index[1])", ctxt)) ||
|
||||
- strlen(index) > 1) {
|
||||
- virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
- _("<vendor_field> evaluation has failed"));
|
||||
- continue;
|
||||
- }
|
||||
- if (!(value = virXPathString("string(./text())", ctxt))) {
|
||||
- virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
- _("<vendor_field> value evaluation has failed"));
|
||||
- continue;
|
||||
- }
|
||||
- keyword = g_strdup_printf("V%c", index[0]);
|
||||
- virPCIVPDResourceUpdateKeyword(res, readOnly, keyword, value);
|
||||
+ if (virNodeDeviceCapVPDParseCustomFieldOne(nodes[i], res, readOnly, 'V') < 0)
|
||||
+ return -1;
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
|
||||
if (!readOnly) {
|
||||
- if ((nfields = virXPathNodeSet("./system_field[@index]", ctxt, &nodes)) < 0)
|
||||
+ if ((nfields = virXPathNodeSet("./system_field", ctxt, &nodes)) < 0)
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < nfields; i++) {
|
||||
- g_autofree char *value = NULL;
|
||||
- g_autofree char *index = NULL;
|
||||
- g_autofree char *keyword = NULL;
|
||||
- VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
||||
-
|
||||
- ctxt->node = nodes[i];
|
||||
- if (!(index = virXPathString("string(./@index[1])", ctxt)) ||
|
||||
- strlen(index) > 1) {
|
||||
- virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
- _("<system_field> evaluation has failed"));
|
||||
- continue;
|
||||
- }
|
||||
- if (!(value = virXPathString("string(./text())", ctxt))) {
|
||||
- virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
- _("<system_field> value evaluation has failed"));
|
||||
- continue;
|
||||
- }
|
||||
- keyword = g_strdup_printf("Y%c", index[0]);
|
||||
- virPCIVPDResourceUpdateKeyword(res, readOnly, keyword, value);
|
||||
+ if (virNodeDeviceCapVPDParseCustomFieldOne(nodes[i], res, readOnly, 'Y') < 0)
|
||||
+ return -1;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,47 @@
|
||||
From 15145b5ecb2e9186e42bbb295e1d44f93ff25cfb Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <15145b5ecb2e9186e42bbb295e1d44f93ff25cfb.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 24 Jan 2024 16:27:35 +0100
|
||||
Subject: [PATCH] conf: virNodeDeviceCapVPDParse*: Remove pointless NULL checks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The function are never called with NULL argument so the checks can be
|
||||
removed.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit fb69acf5c255f6baedefe2a2535325af8088ced5)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-22314 [9.4.0]
|
||||
---
|
||||
src/conf/node_device_conf.c | 6 ------
|
||||
1 file changed, 6 deletions(-)
|
||||
|
||||
diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
|
||||
index dd174d3020..d7e1a23034 100644
|
||||
--- a/src/conf/node_device_conf.c
|
||||
+++ b/src/conf/node_device_conf.c
|
||||
@@ -1023,9 +1023,6 @@ virNodeDeviceCapVPDParseReadOnlyFields(xmlXPathContextPtr ctxt, virPCIVPDResourc
|
||||
"serial_number", "part_number", NULL};
|
||||
size_t i = 0;
|
||||
|
||||
- if (res == NULL)
|
||||
- return -1;
|
||||
-
|
||||
res->ro = virPCIVPDResourceRONew();
|
||||
|
||||
while (keywords[i]) {
|
||||
@@ -1061,9 +1058,6 @@ virNodeDeviceCapVPDParseXML(xmlXPathContextPtr ctxt, virPCIVPDResource **res)
|
||||
size_t i = 0;
|
||||
g_autoptr(virPCIVPDResource) newres = g_new0(virPCIVPDResource, 1);
|
||||
|
||||
- if (res == NULL)
|
||||
- return -1;
|
||||
-
|
||||
if (!(newres->name = virXPathString("string(./name)", ctxt))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("Could not read a device name from the <name> element"));
|
||||
--
|
||||
2.43.0
|
@ -1,62 +0,0 @@
|
||||
From b5a226f307b01bb1b58a88c95d29da34c246757f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b5a226f307b01bb1b58a88c95d29da34c246757f@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 12 Jul 2022 16:10:08 +0200
|
||||
Subject: [PATCH] docs: Document TPM portion of domcaps
|
||||
|
||||
Surprisingly, we don't document TPM part of domain capabilities.
|
||||
Fortunately, the information exposed is pretty much self
|
||||
explanatory, but we should document it regardless.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 6a00c565c4d0f0ec970e043ea2686bd30396ed79)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103119
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomaincaps.rst | 29 +++++++++++++++++++++++++++++
|
||||
1 file changed, 29 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomaincaps.rst b/docs/formatdomaincaps.rst
|
||||
index 933469b2a2..3c425a9a4a 100644
|
||||
--- a/docs/formatdomaincaps.rst
|
||||
+++ b/docs/formatdomaincaps.rst
|
||||
@@ -494,6 +494,35 @@ instance:
|
||||
``driverType``
|
||||
Options for the ``type`` attribute of the <filesystem><driver> element.
|
||||
|
||||
+TPM device
|
||||
+^^^^^^^^^^
|
||||
+
|
||||
+TPM device capabilities are exposed under the ``tpm`` element. For instance:
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ <domainCapabilities>
|
||||
+ ...
|
||||
+ <devices>
|
||||
+ <tpm supported='yes'>
|
||||
+ <enum name='model'>
|
||||
+ <value>tpm-tis</value>
|
||||
+ <value>tpm-crb</value>
|
||||
+ </enum>
|
||||
+ <enum name='backendModel'>
|
||||
+ <value>passthrough</value>
|
||||
+ <value>emulator</value>
|
||||
+ </enum>
|
||||
+ </tpm>
|
||||
+ ...
|
||||
+ </devices>
|
||||
+ </domainCapabilities>
|
||||
+
|
||||
+``model``
|
||||
+ Options for the ``model`` attribute of the ``<tpm/>`` element.
|
||||
+``backendModel``
|
||||
+ Options for the ``type`` attribute of the ``<tpm><backend/>`` element.
|
||||
+
|
||||
Features
|
||||
~~~~~~~~
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,96 +0,0 @@
|
||||
From a39ce54007de67ce6909c1770a7759b09c41bfd6 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a39ce54007de67ce6909c1770a7759b09c41bfd6@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 7 Jul 2022 16:29:18 +0200
|
||||
Subject: [PATCH] domain_conf: Format <defaultiothread/> more often
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The <defaultiothread/> element is formatted inside
|
||||
virDomainDefaultIOThreadDefFormat() which is called only from
|
||||
virDomainDefIOThreadsFormat() (so that IOThread related stuff is
|
||||
formatted calling one function). However, when there are no
|
||||
<iothreadids/> defined (or only autoallocated ones are present),
|
||||
then the outer formatting function exits early never calling the
|
||||
<defaultiothread/> formatter.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 24fa7004e47ce86b92bc23c1f2ef9c3d6152c3a8)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2059511
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 46 ++++++++++++++++++++----------------------
|
||||
1 file changed, 22 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 709ca53790..207a45d9ae 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -27763,40 +27763,38 @@ static void
|
||||
virDomainDefIOThreadsFormat(virBuffer *buf,
|
||||
const virDomainDef *def)
|
||||
{
|
||||
- g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
- size_t i;
|
||||
-
|
||||
- if (def->niothreadids == 0)
|
||||
- return;
|
||||
+ if (def->niothreadids > 0) {
|
||||
+ virBufferAsprintf(buf, "<iothreads>%zu</iothreads>\n",
|
||||
+ def->niothreadids);
|
||||
+ }
|
||||
|
||||
- virBufferAsprintf(buf, "<iothreads>%zu</iothreads>\n",
|
||||
- def->niothreadids);
|
||||
+ if (virDomainDefIothreadShouldFormat(def)) {
|
||||
+ g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+ size_t i;
|
||||
|
||||
- if (!virDomainDefIothreadShouldFormat(def))
|
||||
- return;
|
||||
+ for (i = 0; i < def->niothreadids; i++) {
|
||||
+ virDomainIOThreadIDDef *iothread = def->iothreadids[i];
|
||||
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
- for (i = 0; i < def->niothreadids; i++) {
|
||||
- virDomainIOThreadIDDef *iothread = def->iothreadids[i];
|
||||
- g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ virBufferAsprintf(&attrBuf, " id='%u'",
|
||||
+ iothread->iothread_id);
|
||||
|
||||
- virBufferAsprintf(&attrBuf, " id='%u'",
|
||||
- iothread->iothread_id);
|
||||
+ if (iothread->thread_pool_min >= 0) {
|
||||
+ virBufferAsprintf(&attrBuf, " thread_pool_min='%d'",
|
||||
+ iothread->thread_pool_min);
|
||||
+ }
|
||||
|
||||
- if (iothread->thread_pool_min >= 0) {
|
||||
- virBufferAsprintf(&attrBuf, " thread_pool_min='%d'",
|
||||
- iothread->thread_pool_min);
|
||||
- }
|
||||
+ if (iothread->thread_pool_max >= 0) {
|
||||
+ virBufferAsprintf(&attrBuf, " thread_pool_max='%d'",
|
||||
+ iothread->thread_pool_max);
|
||||
+ }
|
||||
|
||||
- if (iothread->thread_pool_max >= 0) {
|
||||
- virBufferAsprintf(&attrBuf, " thread_pool_max='%d'",
|
||||
- iothread->thread_pool_max);
|
||||
+ virXMLFormatElement(&childrenBuf, "iothread", &attrBuf, NULL);
|
||||
}
|
||||
|
||||
- virXMLFormatElement(&childrenBuf, "iothread", &attrBuf, NULL);
|
||||
+ virXMLFormatElement(buf, "iothreadids", NULL, &childrenBuf);
|
||||
}
|
||||
|
||||
- virXMLFormatElement(buf, "iothreadids", NULL, &childrenBuf);
|
||||
-
|
||||
virDomainDefaultIOThreadDefFormat(buf, def);
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,61 +0,0 @@
|
||||
From 711cf329b9847c4d42994389d89a7e7b83c71596 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <711cf329b9847c4d42994389d89a7e7b83c71596@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 7 Jul 2022 16:29:33 +0200
|
||||
Subject: [PATCH] domain_conf: Format iothread IDs more often
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
When formatting IOThreads (in virDomainDefIOThreadsFormat()), we
|
||||
may only output the number of IOThreads, or the full list of IOThreads too:
|
||||
|
||||
<iothreads>4</iothreads>
|
||||
<iothreadids>
|
||||
<iothread id='1' thread_pool_max='10'/>
|
||||
<iothread id='2' thread_pool_min='2' thread_pool_max='10'/>
|
||||
<iothread id='3'/>
|
||||
<iothread id='4'/>
|
||||
</iothreadids>
|
||||
|
||||
Now, the deciding factor here is whether those individual
|
||||
IOThreads were so called 'autofill-ed' or user provided. Well, we
|
||||
need to take another factor in: if an IOThread has pool size
|
||||
limit set, then we ought to format the full list.
|
||||
|
||||
But how can we get into a situation when a thread is autofilled
|
||||
(i.e. not provided by user in the XML) and yet it has pool size
|
||||
limit set? virDomainSetIOThreadParams() is the answer.
|
||||
|
||||
Sure, we could also unset the autofill flag whenever a pool size
|
||||
limit is being set. But this approach allows us to not format
|
||||
anything if the limits are reset (we don't lose the autofill
|
||||
information).
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 5aa24958546c94a48fb8f8d6022213ca7c07c8a7)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2059511
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 207a45d9ae..fbc285d981 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -27728,7 +27728,9 @@ virDomainDefIothreadShouldFormat(const virDomainDef *def)
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < def->niothreadids; i++) {
|
||||
- if (!def->iothreadids[i]->autofill)
|
||||
+ if (!def->iothreadids[i]->autofill ||
|
||||
+ def->iothreadids[i]->thread_pool_min >= 0 ||
|
||||
+ def->iothreadids[i]->thread_pool_max >= 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,123 @@
|
||||
From 8d48d5fe02c0afcf5bbe68e0a182ee11f9a108dc Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <8d48d5fe02c0afcf5bbe68e0a182ee11f9a108dc.1708614745.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Mon, 19 Feb 2024 15:37:16 +0100
|
||||
Subject: [PATCH] domain_validate: Account for NVDIMM label size properly when
|
||||
checking for memory conflicts
|
||||
|
||||
As of v9.8.0-rc1~7 we check whether two <memory/> devices don't
|
||||
overlap (since we allow setting where a <memory/> device should
|
||||
be mapped to). We do this pretty straightforward, by comparing
|
||||
start and end address of each <memory/> device combination.
|
||||
But since only the start address is given (an exposed in the
|
||||
XML), the end address is computed trivially as:
|
||||
|
||||
start + mem->size * 1024
|
||||
|
||||
And for majority of memory device types this works. Except for
|
||||
NVDIMMs. For them the <memory/> device consists of two separate
|
||||
regions: 1) actual memory device, and 2) label.
|
||||
|
||||
Label is where NVDIMM stores some additional information like
|
||||
namespaces partition and so on. But it's not mapped into the
|
||||
guest the same way as actual memory device. In fact, mem->size is
|
||||
a sum of both actual memory device and label sizes. And to make
|
||||
things a bit worse, both sizes are subject to alignment (either
|
||||
the alignsize value specified in XML, or system page size if not
|
||||
specified in XML).
|
||||
|
||||
Therefore, to get the size of actual memory device we need to
|
||||
take mem->size and substract label size rounded up to alignment.
|
||||
|
||||
If we don't do this we report there's an overlap between two
|
||||
NVDIMMs even when in reality there's none.
|
||||
|
||||
Fixes: 3fd64fb0e236fc80ffa2cc977c0d471f11fc39bf
|
||||
Fixes: 91f9a9fb4fc0d34ed8d7a869de3d9f87687c3618
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-4452?focusedId=23805174#comment-23805174
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit 4545f313c23e7000451d1cec793ebc8da1a2c25f)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_validate.c | 51 ++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 49 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
|
||||
index 46479f10f2..faa7659f07 100644
|
||||
--- a/src/conf/domain_validate.c
|
||||
+++ b/src/conf/domain_validate.c
|
||||
@@ -2225,6 +2225,53 @@ virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev)
|
||||
}
|
||||
|
||||
|
||||
+/**
|
||||
+ * virDomainMemoryGetMappedSize:
|
||||
+ * @mem: memory device definition
|
||||
+ *
|
||||
+ * For given memory device definition (@mem) calculate size mapped into
|
||||
+ * the guest. This is usually mem->size, except for NVDIMM where its
|
||||
+ * label is mapped elsewhere.
|
||||
+ *
|
||||
+ * Returns: Number of bytes a memory device takes when mapped into a
|
||||
+ * guest.
|
||||
+ */
|
||||
+static unsigned long long
|
||||
+virDomainMemoryGetMappedSize(const virDomainMemoryDef *mem)
|
||||
+{
|
||||
+ unsigned long long ret = mem->size;
|
||||
+
|
||||
+ if (mem->model == VIR_DOMAIN_MEMORY_MODEL_NVDIMM) {
|
||||
+ unsigned long long alignsize = mem->source.nvdimm.alignsize;
|
||||
+ unsigned long long labelsize = 0;
|
||||
+
|
||||
+ /* For NVDIMM the situation is a bit more complicated. Firstly,
|
||||
+ * its <label/> is not mapped as a part of memory device, so we
|
||||
+ * must subtract label size from NVDIMM size. Secondly,
|
||||
+ * remaining memory is then aligned again (rounded down). But
|
||||
+ * for our purposes we might just round label size up and
|
||||
+ * achieve the same (numeric) result. */
|
||||
+
|
||||
+ if (alignsize == 0) {
|
||||
+ long pagesize = virGetSystemPageSizeKB();
|
||||
+
|
||||
+ /* If no alignment is specified in the XML, fallback to
|
||||
+ * system page size alignment. */
|
||||
+ if (pagesize > 0)
|
||||
+ alignsize = pagesize;
|
||||
+ }
|
||||
+
|
||||
+ if (alignsize > 0) {
|
||||
+ labelsize = VIR_ROUND_UP(mem->target.nvdimm.labelsize, alignsize);
|
||||
+
|
||||
+ ret -= labelsize;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return ret * 1024;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem,
|
||||
const virDomainDef *def)
|
||||
@@ -2259,7 +2306,7 @@ virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem,
|
||||
}
|
||||
|
||||
/* thisStart and thisEnd are in bytes, mem->size in kibibytes */
|
||||
- thisEnd = thisStart + mem->size * 1024;
|
||||
+ thisEnd = thisStart + virDomainMemoryGetMappedSize(mem);
|
||||
|
||||
for (i = 0; i < def->nmems; i++) {
|
||||
const virDomainMemoryDef *other = def->mems[i];
|
||||
@@ -2316,7 +2363,7 @@ virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem,
|
||||
if (thisStart == 0 || otherStart == 0)
|
||||
continue;
|
||||
|
||||
- otherEnd = otherStart + other->size * 1024;
|
||||
+ otherEnd = otherStart + virDomainMemoryGetMappedSize(other);
|
||||
|
||||
if ((thisStart <= otherStart && thisEnd > otherStart) ||
|
||||
(otherStart <= thisStart && otherEnd > thisStart)) {
|
||||
--
|
||||
2.43.2
|
@ -0,0 +1,53 @@
|
||||
From d3593c911c3e02cf5c9c876cddf2fc8ba2eede06 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <d3593c911c3e02cf5c9c876cddf2fc8ba2eede06.1706524416.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 19 Jan 2024 08:22:13 +0100
|
||||
Subject: [PATCH] domain_validate: Check for domain address conflicts fully
|
||||
|
||||
Current implementation of virDomainMemoryDefCheckConflict() does
|
||||
only a one way comparison, i.e. if there's a memory device within
|
||||
def->mems[] which address falls in [mem->address, mem->address +
|
||||
mem->size] range (mem is basically an iterator within
|
||||
def->mems[]). And for static XML this works just fine. Problem is
|
||||
with hot/cold plugging of a memory device. Then mem points to
|
||||
freshly parsed memory device and these half checks are
|
||||
insufficient. Not only we must check whether an existing memory
|
||||
device doesn't clash with freshly parsed memory device, but also
|
||||
whether freshly parsed memory device does not fall into range of
|
||||
already existing memory device.
|
||||
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-4452
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 91f9a9fb4fc0d34ed8d7a869de3d9f87687c3618)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_validate.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
|
||||
index d485ec4fb1..46479f10f2 100644
|
||||
--- a/src/conf/domain_validate.c
|
||||
+++ b/src/conf/domain_validate.c
|
||||
@@ -2264,6 +2264,7 @@ virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem,
|
||||
for (i = 0; i < def->nmems; i++) {
|
||||
const virDomainMemoryDef *other = def->mems[i];
|
||||
unsigned long long otherStart = 0;
|
||||
+ unsigned long long otherEnd = 0;
|
||||
|
||||
if (other == mem)
|
||||
continue;
|
||||
@@ -2315,7 +2316,10 @@ virDomainMemoryDefCheckConflict(const virDomainMemoryDef *mem,
|
||||
if (thisStart == 0 || otherStart == 0)
|
||||
continue;
|
||||
|
||||
- if (thisStart <= otherStart && thisEnd > otherStart) {
|
||||
+ otherEnd = otherStart + other->size * 1024;
|
||||
+
|
||||
+ if ((thisStart <= otherStart && thisEnd > otherStart) ||
|
||||
+ (otherStart <= thisStart && otherEnd > thisStart)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("memory device address [0x%1$llx:0x%2$llx] overlaps with other memory device (0x%3$llx)"),
|
||||
thisStart, thisEnd, otherStart);
|
||||
--
|
||||
2.43.0
|
@ -1,74 +0,0 @@
|
||||
From 266e8c9174249b4d5a53dc8a43a3d7d9481d8b1c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <266e8c9174249b4d5a53dc8a43a3d7d9481d8b1c@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 12 Jul 2022 15:58:12 +0200
|
||||
Subject: [PATCH] domcaps: Introduce TPM backendVersion
|
||||
|
||||
We accept TPM version in the domain XML. However, supported
|
||||
version depends on the host (swtpm_setup binary) and thus it may
|
||||
be tricky for users (or mgmt applications) chose a version.
|
||||
Introduce machinery for reporting supported version in domain
|
||||
capabilities.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 1277a9c884039e92765c977917420511f45e52e8)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103119
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomaincaps.rst | 6 ++++++
|
||||
src/conf/domain_capabilities.c | 1 +
|
||||
src/conf/domain_capabilities.h | 1 +
|
||||
3 files changed, 8 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomaincaps.rst b/docs/formatdomaincaps.rst
|
||||
index 3c425a9a4a..70f46b972a 100644
|
||||
--- a/docs/formatdomaincaps.rst
|
||||
+++ b/docs/formatdomaincaps.rst
|
||||
@@ -513,6 +513,10 @@ TPM device capabilities are exposed under the ``tpm`` element. For instance:
|
||||
<value>passthrough</value>
|
||||
<value>emulator</value>
|
||||
</enum>
|
||||
+ <enum name='backendVersion'>
|
||||
+ <value>1.2</value>
|
||||
+ <value>2.0</value>
|
||||
+ </enum>
|
||||
</tpm>
|
||||
...
|
||||
</devices>
|
||||
@@ -522,6 +526,8 @@ TPM device capabilities are exposed under the ``tpm`` element. For instance:
|
||||
Options for the ``model`` attribute of the ``<tpm/>`` element.
|
||||
``backendModel``
|
||||
Options for the ``type`` attribute of the ``<tpm><backend/>`` element.
|
||||
+``backendVersion``
|
||||
+ Options for the ``version`` attribute of the ``<tpm><backend/>`` element.
|
||||
|
||||
Features
|
||||
~~~~~~~~
|
||||
diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
|
||||
index 895e8d00e8..33570a51db 100644
|
||||
--- a/src/conf/domain_capabilities.c
|
||||
+++ b/src/conf/domain_capabilities.c
|
||||
@@ -539,6 +539,7 @@ virDomainCapsDeviceTPMFormat(virBuffer *buf,
|
||||
|
||||
ENUM_PROCESS(tpm, model, virDomainTPMModelTypeToString);
|
||||
ENUM_PROCESS(tpm, backendModel, virDomainTPMBackendTypeToString);
|
||||
+ ENUM_PROCESS(tpm, backendVersion, virDomainTPMVersionTypeToString);
|
||||
|
||||
FORMAT_EPILOGUE(tpm);
|
||||
}
|
||||
diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
|
||||
index f2eed80b15..a526969cda 100644
|
||||
--- a/src/conf/domain_capabilities.h
|
||||
+++ b/src/conf/domain_capabilities.h
|
||||
@@ -127,6 +127,7 @@ struct _virDomainCapsDeviceTPM {
|
||||
virTristateBool supported;
|
||||
virDomainCapsEnum model; /* virDomainTPMModel */
|
||||
virDomainCapsEnum backendModel; /* virDomainTPMBackendType */
|
||||
+ virDomainCapsEnum backendVersion; /* virDomainTPMVersion */
|
||||
};
|
||||
|
||||
STATIC_ASSERT_ENUM(VIR_DOMAIN_FS_DRIVER_TYPE_LAST);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,59 +0,0 @@
|
||||
From 332386ae7bc02618d1860f726065448324a6734a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <332386ae7bc02618d1860f726065448324a6734a@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Mon, 5 Sep 2022 12:37:16 +0200
|
||||
Subject: [PATCH] kbase: Document QEMU private mount NS limitations
|
||||
|
||||
There are two points I've taken for granted:
|
||||
|
||||
1) the mount points are set before starting a guest,
|
||||
2) the / and its submounts are marked as shared, so that mount
|
||||
events propagate into child namespaces when assumption 1) is
|
||||
not held.
|
||||
|
||||
But what's obvious to me might not be obvious to our users.
|
||||
Document these known limitations.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2123196
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit d3397885d589c25b8962ae221fd0a71ced5597cb)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2152083
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/kbase/qemu-passthrough-security.rst | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/docs/kbase/qemu-passthrough-security.rst b/docs/kbase/qemu-passthrough-security.rst
|
||||
index 4381d9f3a6..106c3cc5b9 100644
|
||||
--- a/docs/kbase/qemu-passthrough-security.rst
|
||||
+++ b/docs/kbase/qemu-passthrough-security.rst
|
||||
@@ -156,3 +156,25 @@ will affect all virtual machines. These settings are all made in
|
||||
|
||||
* Cgroups - set ``cgroup_device_acl`` to include the desired device node, or
|
||||
``cgroup_controllers = [...]`` to exclude the ``devices`` controller.
|
||||
+
|
||||
+Private monunt namespace
|
||||
+----------------------------
|
||||
+
|
||||
+As mentioned above, libvirt launches each QEMU process in its own ``mount``
|
||||
+namespace. It's recommended that all mount points are set up prior starting any
|
||||
+guest. For cases when that can't be assured, mount points in the namespace are
|
||||
+marked as slave so that mount events happening in the parent namespace are
|
||||
+propagated into this child namespace. But this may require an additional step:
|
||||
+mounts in the parent namespace need to be marked as shared (if the distribution
|
||||
+doesn't do that by default). This can be achieved by running the following
|
||||
+command before any guest is started:
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ # mount --make-rshared /
|
||||
+
|
||||
+Another requirement for dynamic mount point propagation is to not place
|
||||
+``hugetlbfs`` mount points under ``/dev`` because these won't be propagated as
|
||||
+corresponding directories do not exist in the private namespace. Or just use
|
||||
+``memfd`` memory backend instead which does not require ``hugetlbfs`` mount
|
||||
+points.
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,48 +0,0 @@
|
||||
From 08c8ef5eb30983d6ca004e84a11fe7f2547f984e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <08c8ef5eb30983d6ca004e84a11fe7f2547f984e@dist-git>
|
||||
From: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Date: Tue, 23 Aug 2022 12:28:02 -0500
|
||||
Subject: [PATCH] nodedev: wait a bit longer for new node devices
|
||||
|
||||
Openstack developers reported that newly-created mdevs were not
|
||||
recognized by libvirt until after a libvirt daemon restart. The source
|
||||
of the problem appears to be that when libvirt gets the udev 'add'
|
||||
event, the sysfs tree for that device might not be ready and so libvirt
|
||||
waits 100ms for it to appear (max 100 waits of 1ms each). But in the
|
||||
OpenStack environment, the sysfs tree for new mediated devices was
|
||||
taking closer to 250ms to appear and therefore libvirt gave up waiting
|
||||
and didn't add these new devices to its list of nodedevs.
|
||||
|
||||
By changing the wait time to 1 second (max 100 waits of 10ms each), this
|
||||
should provide enough time to enable these deployments to recognize
|
||||
newly-created mediated devices, but it shouldn't increase the delay for
|
||||
more traditional deployments too much.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2109450
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||
(cherry picked from commit e4f9682ebc442bb5dfee807ba618c8863355776d)
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2141364
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
---
|
||||
src/node_device/node_device_udev.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
|
||||
index 3d69bdedae..1f63162e23 100644
|
||||
--- a/src/node_device/node_device_udev.c
|
||||
+++ b/src/node_device/node_device_udev.c
|
||||
@@ -1036,7 +1036,7 @@ udevProcessMediatedDevice(struct udev_device *dev,
|
||||
|
||||
linkpath = g_strdup_printf("%s/mdev_type", udev_device_get_syspath(dev));
|
||||
|
||||
- if (virFileWaitForExists(linkpath, 1, 100) < 0) {
|
||||
+ if (virFileWaitForExists(linkpath, 10, 100) < 0) {
|
||||
virReportSystemError(errno,
|
||||
_("failed to wait for file '%s' to appear"),
|
||||
linkpath);
|
||||
--
|
||||
2.38.1
|
||||
|
@ -1,183 +0,0 @@
|
||||
From b020ddee84458afd8de70d9f296b91fa2b6a95fd Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b020ddee84458afd8de70d9f296b91fa2b6a95fd@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Fri, 15 Jul 2022 14:16:54 +0200
|
||||
Subject: [PATCH] qemu: Always assume support for
|
||||
QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE
|
||||
|
||||
The 'xbzrle-cache-size' parameter was added in qemu-2.11 thus all
|
||||
supported qemu versions now use the new code path.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 06e0ba3da71ec6c58024efe57d0f55d3d1352d60)
|
||||
|
||||
This commit is not strictly needed for fixing the following BZ, but it
|
||||
removes a code which will be never executed in RHEL 9 and backporting it
|
||||
avoids conflicts with the actual bug fix.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 56 +++++++++-----------------------
|
||||
src/qemu/qemu_migration_params.c | 18 ----------
|
||||
2 files changed, 16 insertions(+), 58 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 17e4c23199..256e126ae1 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -13172,10 +13172,8 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr dom,
|
||||
{
|
||||
virQEMUDriver *driver = dom->conn->privateData;
|
||||
virDomainObj *vm;
|
||||
- qemuDomainObjPrivate *priv;
|
||||
g_autoptr(qemuMigrationParams) migParams = NULL;
|
||||
int ret = -1;
|
||||
- int rc;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
@@ -13191,8 +13189,6 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr dom,
|
||||
if (virDomainObjCheckActive(vm) < 0)
|
||||
goto endjob;
|
||||
|
||||
- priv = vm->privateData;
|
||||
-
|
||||
if (!qemuMigrationCapsGet(vm, QEMU_MIGRATION_CAP_XBZRLE)) {
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("Compressed migration is not supported by "
|
||||
@@ -13200,22 +13196,14 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr dom,
|
||||
goto endjob;
|
||||
}
|
||||
|
||||
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE)) {
|
||||
- if (qemuMigrationParamsFetch(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- &migParams) < 0)
|
||||
- goto endjob;
|
||||
+ if (qemuMigrationParamsFetch(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
+ &migParams) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
- if (qemuMigrationParamsGetULL(migParams,
|
||||
- QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
|
||||
- cacheSize) < 0)
|
||||
- goto endjob;
|
||||
- } else {
|
||||
- qemuDomainObjEnterMonitor(driver, vm);
|
||||
- rc = qemuMonitorGetMigrationCacheSize(priv->mon, cacheSize);
|
||||
- qemuDomainObjExitMonitor(vm);
|
||||
- if (rc < 0)
|
||||
- goto endjob;
|
||||
- }
|
||||
+ if (qemuMigrationParamsGetULL(migParams,
|
||||
+ QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
|
||||
+ cacheSize) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
ret = 0;
|
||||
|
||||
@@ -13234,10 +13222,8 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr dom,
|
||||
{
|
||||
virQEMUDriver *driver = dom->conn->privateData;
|
||||
virDomainObj *vm;
|
||||
- qemuDomainObjPrivate *priv;
|
||||
g_autoptr(qemuMigrationParams) migParams = NULL;
|
||||
int ret = -1;
|
||||
- int rc;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
@@ -13253,8 +13239,6 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr dom,
|
||||
if (virDomainObjCheckActive(vm) < 0)
|
||||
goto endjob;
|
||||
|
||||
- priv = vm->privateData;
|
||||
-
|
||||
if (!qemuMigrationCapsGet(vm, QEMU_MIGRATION_CAP_XBZRLE)) {
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("Compressed migration is not supported by "
|
||||
@@ -13263,25 +13247,17 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr dom,
|
||||
}
|
||||
|
||||
VIR_DEBUG("Setting compression cache to %llu B", cacheSize);
|
||||
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE)) {
|
||||
- if (!(migParams = qemuMigrationParamsNew()))
|
||||
- goto endjob;
|
||||
+ if (!(migParams = qemuMigrationParamsNew()))
|
||||
+ goto endjob;
|
||||
|
||||
- if (qemuMigrationParamsSetULL(migParams,
|
||||
- QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
|
||||
- cacheSize) < 0)
|
||||
- goto endjob;
|
||||
+ if (qemuMigrationParamsSetULL(migParams,
|
||||
+ QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
|
||||
+ cacheSize) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
- if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- migParams, 0) < 0)
|
||||
- goto endjob;
|
||||
- } else {
|
||||
- qemuDomainObjEnterMonitor(driver, vm);
|
||||
- rc = qemuMonitorSetMigrationCacheSize(priv->mon, cacheSize);
|
||||
- qemuDomainObjExitMonitor(vm);
|
||||
- if (rc < 0)
|
||||
- goto endjob;
|
||||
- }
|
||||
+ if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
+ migParams, 0) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
ret = 0;
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 6ea0bde13a..0bce358ac3 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -886,10 +886,8 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
unsigned long apiFlags)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
- bool xbzrleCacheSize_old = false;
|
||||
g_autoptr(virJSONValue) params = NULL;
|
||||
g_autoptr(virJSONValue) caps = NULL;
|
||||
- qemuMigrationParam xbzrle = QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE;
|
||||
bool postcopyResume = !!(apiFlags & VIR_MIGRATE_POSTCOPY_RESUME);
|
||||
int ret = -1;
|
||||
|
||||
@@ -917,19 +915,6 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
}
|
||||
}
|
||||
|
||||
- /* If QEMU is too old to support xbzrle-cache-size migration parameter,
|
||||
- * we need to set it via migrate-set-cache-size and tell
|
||||
- * qemuMonitorSetMigrationParams to ignore this parameter.
|
||||
- */
|
||||
- if (migParams->params[xbzrle].set &&
|
||||
- !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE)) {
|
||||
- if (qemuMonitorSetMigrationCacheSize(priv->mon,
|
||||
- migParams->params[xbzrle].value.ull) < 0)
|
||||
- goto cleanup;
|
||||
- xbzrleCacheSize_old = true;
|
||||
- migParams->params[xbzrle].set = false;
|
||||
- }
|
||||
-
|
||||
if (!(params = qemuMigrationParamsToJSON(migParams, postcopyResume)))
|
||||
goto cleanup;
|
||||
|
||||
@@ -942,9 +927,6 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
cleanup:
|
||||
qemuDomainObjExitMonitor(vm);
|
||||
|
||||
- if (xbzrleCacheSize_old)
|
||||
- migParams->params[xbzrle].set = true;
|
||||
-
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
139
SOURCES/libvirt-qemu-Fix-migration-with-custom-XML.patch
Normal file
139
SOURCES/libvirt-qemu-Fix-migration-with-custom-XML.patch
Normal file
@ -0,0 +1,139 @@
|
||||
From 68a98ee089f39edeb2d07f6268cbbcb12629ee8b Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <68a98ee089f39edeb2d07f6268cbbcb12629ee8b.1713796876.git.jdenemar@redhat.com>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 16 Apr 2024 12:57:22 +0200
|
||||
Subject: [PATCH] qemu: Fix migration with custom XML
|
||||
|
||||
Ages ago origCPU in domain private data was introduced to provide
|
||||
backward compatibility when migrating to an old libvirt, which did not
|
||||
support fetching updated CPU definition from QEMU. Thus origCPU will
|
||||
contain the original CPU definition before such update. But only if the
|
||||
update actually changed anything. Let's always fill origCPU with the
|
||||
original definition when starting a domain so that we can rely on it
|
||||
being always set, even if it matches the updated definition.
|
||||
|
||||
This fixes migration or save operations with custom domain XML after
|
||||
commit v10.1.0-88-g14d3517410, which expected origCPU to be always set
|
||||
to the CPU definition from inactive XML to check features explicitly
|
||||
requested by a user.
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-30622
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Tested-by: Han Han <hhan@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 4331048257071211fb98c21453b187919d42dae7)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-32654
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_domain.c | 33 ++++++++++++++++++++-------------
|
||||
src/qemu/qemu_process.c | 19 +++++++------------
|
||||
2 files changed, 27 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index 1daa53dd1b..341c543280 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -10868,12 +10868,13 @@ virSaveCookieCallbacks virQEMUDriverDomainSaveCookie = {
|
||||
* @vm: domain which is being started
|
||||
* @cpu: CPU updated when the domain was running previously (before migration,
|
||||
* snapshot, or save)
|
||||
- * @origCPU: where to store the original CPU from vm->def in case @cpu was
|
||||
- * used instead
|
||||
+ * @origCPU: where to store the original CPU from vm->def
|
||||
*
|
||||
- * Replace the CPU definition with the updated one when QEMU is new enough to
|
||||
- * allow us to check extra features it is about to enable or disable when
|
||||
- * starting a domain. The original CPU is stored in @origCPU.
|
||||
+ * Save the original CPU definition from inactive XML in @origCPU so that we
|
||||
+ * can safely update it and still be able to check what exactly a user asked
|
||||
+ * for. The domain definition will either contain a copy of the original CPU
|
||||
+ * definition or a copy of @cpu in case the domain was already running and
|
||||
+ * we're just restoring a saved state or preparing for incoming migration.
|
||||
*
|
||||
* Returns 0 on success, -1 on error.
|
||||
*/
|
||||
@@ -10886,18 +10887,24 @@ qemuDomainUpdateCPU(virDomainObj *vm,
|
||||
|
||||
*origCPU = NULL;
|
||||
|
||||
- if (!cpu || !vm->def->cpu ||
|
||||
- !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION) ||
|
||||
- virCPUDefIsEqual(vm->def->cpu, cpu, false))
|
||||
+ if (!vm->def->cpu)
|
||||
return 0;
|
||||
|
||||
- if (!(cpu = virCPUDefCopy(cpu)))
|
||||
- return -1;
|
||||
+ if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION))
|
||||
+ return 0;
|
||||
+
|
||||
+ /* nothing to do if only topology part of CPU def is used */
|
||||
+ if (vm->def->cpu->mode == VIR_CPU_MODE_CUSTOM && !vm->def->cpu->model)
|
||||
+ return 0;
|
||||
+
|
||||
+ VIR_DEBUG("Replacing CPU definition");
|
||||
|
||||
- VIR_DEBUG("Replacing CPU def with the updated one");
|
||||
+ *origCPU = g_steal_pointer(&vm->def->cpu);
|
||||
|
||||
- *origCPU = vm->def->cpu;
|
||||
- vm->def->cpu = cpu;
|
||||
+ if (cpu)
|
||||
+ vm->def->cpu = virCPUDefCopy(cpu);
|
||||
+ else
|
||||
+ vm->def->cpu = virCPUDefCopy(*origCPU);
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||
index 3563ad215c..b75599de68 100644
|
||||
--- a/src/qemu/qemu_process.c
|
||||
+++ b/src/qemu/qemu_process.c
|
||||
@@ -4402,8 +4402,6 @@ qemuProcessUpdateLiveGuestCPU(virDomainObj *vm,
|
||||
virCPUData *disabled)
|
||||
{
|
||||
virDomainDef *def = vm->def;
|
||||
- qemuDomainObjPrivate *priv = vm->privateData;
|
||||
- g_autoptr(virCPUDef) orig = NULL;
|
||||
int rc;
|
||||
|
||||
if (!enabled)
|
||||
@@ -4414,19 +4412,11 @@ qemuProcessUpdateLiveGuestCPU(virDomainObj *vm,
|
||||
!def->cpu->model))
|
||||
return 0;
|
||||
|
||||
- orig = virCPUDefCopy(def->cpu);
|
||||
-
|
||||
- if ((rc = virCPUUpdateLive(def->os.arch, def->cpu, enabled, disabled)) < 0) {
|
||||
+ if ((rc = virCPUUpdateLive(def->os.arch, def->cpu, enabled, disabled)) < 0)
|
||||
return -1;
|
||||
- } else if (rc == 0) {
|
||||
- /* Store the original CPU in priv if QEMU changed it and we didn't
|
||||
- * get the original CPU via migration, restore, or snapshot revert.
|
||||
- */
|
||||
- if (!priv->origCPU && !virCPUDefIsEqual(def->cpu, orig, false))
|
||||
- priv->origCPU = g_steal_pointer(&orig);
|
||||
|
||||
+ if (rc == 0)
|
||||
def->cpu->check = VIR_CPU_CHECK_FULL;
|
||||
- }
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -9144,6 +9134,11 @@ qemuProcessReconnect(void *opaque)
|
||||
|
||||
qemuDomainVcpuPersistOrder(obj->def);
|
||||
|
||||
+ /* Make sure the original CPU is always preserved in priv->origCPU. */
|
||||
+ if (!priv->origCPU &&
|
||||
+ qemuDomainUpdateCPU(obj, NULL, &priv->origCPU) < 0)
|
||||
+ goto error;
|
||||
+
|
||||
if (qemuProcessRefreshCPU(driver, obj) < 0)
|
||||
goto error;
|
||||
|
||||
--
|
||||
2.44.0
|
@ -0,0 +1,111 @@
|
||||
From e622970c8785ec1f7e142d72f792d89f870e07d0 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 12 Jun 2024 16:44:28 +0200
|
||||
Subject: [PATCH] qemu: Fix migration with disabled vmx-* CPU features
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
When starting a domain on a host which lacks a vmx-* CPU feature which
|
||||
is expected to be enabled by the CPU model specified in the domain XML,
|
||||
libvirt properly marks such feature as disabled in the active domain
|
||||
XML. But migrating the domain to a similar host which lacks the same
|
||||
vmx-* feature will fail with libvirt reporting the feature as missing.
|
||||
This is because of a bug in the hack ensuring backward compatibility
|
||||
libvirt running on the destination thinks the missing feature is
|
||||
expected to be enabled.
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-40899
|
||||
|
||||
Fixes: v10.1.0-85-g5fbfa5ab8a
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 50 ++++++++++++++++++++++++++++-------------------
|
||||
1 file changed, 30 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 7a70eed9e7f..fcbce0ec467 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3023,10 +3023,7 @@ virCPUx86UpdateLive(virCPUDef *cpu,
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
return -1;
|
||||
|
||||
- if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
- return -1;
|
||||
-
|
||||
- if (hostPassthrough &&
|
||||
+ if (!(model = x86ModelFromCPU(cpu, map, -1)) ||
|
||||
!(modelDisabled = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)))
|
||||
return -1;
|
||||
|
||||
@@ -3039,39 +3036,52 @@ virCPUx86UpdateLive(virCPUDef *cpu,
|
||||
for (i = 0; i < map->nfeatures; i++) {
|
||||
virCPUx86Feature *feature = map->features[i];
|
||||
virCPUFeaturePolicy expected = VIR_CPU_FEATURE_LAST;
|
||||
+ bool explicit = false;
|
||||
+ bool ignore = false;
|
||||
|
||||
- if (x86DataIsSubset(&model->data, &feature->data))
|
||||
+ if (x86DataIsSubset(&model->data, &feature->data)) {
|
||||
+ explicit = true;
|
||||
expected = VIR_CPU_FEATURE_REQUIRE;
|
||||
- else if (!hostPassthrough ||
|
||||
- x86DataIsSubset(&modelDisabled->data, &feature->data))
|
||||
+ } else if (x86DataIsSubset(&modelDisabled->data, &feature->data)) {
|
||||
+ explicit = true;
|
||||
+ expected = VIR_CPU_FEATURE_DISABLE;
|
||||
+ } else if (!hostPassthrough) {
|
||||
+ /* implicitly disabled */
|
||||
expected = VIR_CPU_FEATURE_DISABLE;
|
||||
+ }
|
||||
+
|
||||
+ /* Features enabled or disabled by the hypervisor are ignored by
|
||||
+ * check='full' in case they were added to the model later and not
|
||||
+ * explicitly mentioned in the CPU definition. This matches how libvirt
|
||||
+ * behaved before the features were added.
|
||||
+ */
|
||||
+ if (!explicit &&
|
||||
+ g_strv_contains((const char **) model->addedFeatures, feature->name))
|
||||
+ ignore = true;
|
||||
|
||||
if (expected == VIR_CPU_FEATURE_DISABLE &&
|
||||
x86DataIsSubset(&enabled, &feature->data)) {
|
||||
VIR_DEBUG("Feature '%s' enabled by the hypervisor", feature->name);
|
||||
|
||||
- /* Extra features enabled by the hypervisor are ignored by
|
||||
- * check='full' in case they were added to the model later for
|
||||
- * backward compatibility with the older definition of the model.
|
||||
- */
|
||||
- if (cpu->check == VIR_CPU_CHECK_FULL &&
|
||||
- !g_strv_contains((const char **) model->addedFeatures, feature->name)) {
|
||||
+ if (cpu->check == VIR_CPU_CHECK_FULL && !ignore)
|
||||
virBufferAsprintf(&bufAdded, "%s,", feature->name);
|
||||
- } else if (virCPUDefUpdateFeature(cpu, feature->name,
|
||||
- VIR_CPU_FEATURE_REQUIRE) < 0) {
|
||||
+ else if (virCPUDefUpdateFeature(cpu, feature->name,
|
||||
+ VIR_CPU_FEATURE_REQUIRE) < 0)
|
||||
return -1;
|
||||
- }
|
||||
}
|
||||
|
||||
if (x86DataIsSubset(&disabled, &feature->data) ||
|
||||
(expected == VIR_CPU_FEATURE_REQUIRE &&
|
||||
!x86DataIsSubset(&enabled, &feature->data))) {
|
||||
VIR_DEBUG("Feature '%s' disabled by the hypervisor", feature->name);
|
||||
- if (cpu->check == VIR_CPU_CHECK_FULL)
|
||||
+
|
||||
+ if (cpu->check == VIR_CPU_CHECK_FULL && !ignore) {
|
||||
virBufferAsprintf(&bufRemoved, "%s,", feature->name);
|
||||
- else if (virCPUDefUpdateFeature(cpu, feature->name,
|
||||
- VIR_CPU_FEATURE_DISABLE) < 0)
|
||||
- return -1;
|
||||
+ } else {
|
||||
+ if (virCPUDefUpdateFeature(cpu, feature->name, VIR_CPU_FEATURE_DISABLE) < 0)
|
||||
+ return -1;
|
||||
+ x86DataSubtract(&disabled, &feature->data);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
@ -1,86 +0,0 @@
|
||||
From 5da85fb944db3dd8213a7302deaffa3b294acd64 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5da85fb944db3dd8213a7302deaffa3b294acd64@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 9 Aug 2022 16:16:09 +0200
|
||||
Subject: [PATCH] qemu: Implement qemuDomainGetStatsCpu fallback for
|
||||
qemu:///session
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
For domains started under session URI, we don't set up CGroups
|
||||
(well, how could we since we're not running as root anyways).
|
||||
Nevertheless, fetching CPU statistics exits early because of
|
||||
lacking cpuacct controller. But with recent extension to
|
||||
virProcessGetStatInfo() we can get the values we need from the
|
||||
proc filesystem. Implement the fallback for the session URI as
|
||||
some of virt tools rely on cpu.* stats to be reported (virt-top,
|
||||
virt-manager).
|
||||
|
||||
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/353
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1693707
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 044b8744d65f8571038f85685b3c4b241162977b)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2157094
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 35 +++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 33 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 84cf2c6a4f..ac210d8069 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -18042,6 +18042,30 @@ qemuDomainGetStatsCpuCgroup(virDomainObj *dom,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+
|
||||
+static int
|
||||
+qemuDomainGetStatsCpuProc(virDomainObj *vm,
|
||||
+ virTypedParamList *params)
|
||||
+{
|
||||
+ unsigned long long cpuTime = 0;
|
||||
+ unsigned long long sysTime = 0;
|
||||
+ unsigned long long userTime = 0;
|
||||
+
|
||||
+ if (virProcessGetStatInfo(&cpuTime, &sysTime, &userTime,
|
||||
+ NULL, NULL, vm->pid, 0) < 0) {
|
||||
+ /* ignore error */
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (virTypedParamListAddULLong(params, cpuTime, "cpu.time") < 0 ||
|
||||
+ virTypedParamListAddULLong(params, userTime, "cpu.user") < 0 ||
|
||||
+ virTypedParamListAddULLong(params, sysTime, "cpu.system") < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
qemuDomainGetStatsCpuHaltPollTime(virDomainObj *dom,
|
||||
virTypedParamList *params)
|
||||
@@ -18066,8 +18090,15 @@ qemuDomainGetStatsCpu(virQEMUDriver *driver,
|
||||
virTypedParamList *params,
|
||||
unsigned int privflags G_GNUC_UNUSED)
|
||||
{
|
||||
- if (qemuDomainGetStatsCpuCgroup(dom, params) < 0)
|
||||
- return -1;
|
||||
+ qemuDomainObjPrivate *priv = dom->privateData;
|
||||
+
|
||||
+ if (priv->cgroup) {
|
||||
+ if (qemuDomainGetStatsCpuCgroup(dom, params) < 0)
|
||||
+ return -1;
|
||||
+ } else {
|
||||
+ if (qemuDomainGetStatsCpuProc(dom, params) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
if (qemuDomainGetStatsCpuCache(driver, dom, params) < 0)
|
||||
return -1;
|
||||
--
|
||||
2.39.0
|
||||
|
208
SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_SMP_CLUSTERS.patch
Normal file
208
SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_SMP_CLUSTERS.patch
Normal file
@ -0,0 +1,208 @@
|
||||
From 8fbc827a89ef1163b64d39a2ff9b1c067ea82b63 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <8fbc827a89ef1163b64d39a2ff9b1c067ea82b63.1706524416.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 5 Jan 2024 18:42:13 +0100
|
||||
Subject: [PATCH] qemu: Introduce QEMU_CAPS_SMP_CLUSTERS
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit beb27dc61ed4bfe60ca32ec2cbbc937215f9e139)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_capabilities.c | 2 ++
|
||||
src/qemu/qemu_capabilities.h | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 +
|
||||
14 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index 3d35333f09..a4d42b40ed 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -699,6 +699,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
|
||||
"run-with.async-teardown", /* QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN */
|
||||
"virtio-blk-vhost-vdpa", /* QEMU_CAPS_DEVICE_VIRTIO_BLK_VHOST_VDPA */
|
||||
"virtio-blk.iothread-mapping", /* QEMU_CAPS_VIRTIO_BLK_IOTHREAD_MAPPING */
|
||||
+ "smp-clusters", /* QEMU_CAPS_SMP_CLUSTERS */
|
||||
);
|
||||
|
||||
|
||||
@@ -1552,6 +1553,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
|
||||
{ "query-display-options/ret-type/+sdl", QEMU_CAPS_SDL },
|
||||
{ "query-display-options/ret-type/+egl-headless", QEMU_CAPS_EGL_HEADLESS },
|
||||
{ "query-hotpluggable-cpus/ret-type/props/die-id", QEMU_CAPS_SMP_DIES },
|
||||
+ { "query-hotpluggable-cpus/ret-type/props/cluster-id", QEMU_CAPS_SMP_CLUSTERS },
|
||||
{ "query-named-block-nodes/arg-type/flat", QEMU_CAPS_QMP_QUERY_NAMED_BLOCK_NODES_FLAT },
|
||||
{ "screendump/arg-type/device", QEMU_CAPS_SCREENDUMP_DEVICE },
|
||||
{ "set-numa-node/arg-type/+hmat-lb", QEMU_CAPS_NUMA_HMAT },
|
||||
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||||
index 279e9a8273..a353750670 100644
|
||||
--- a/src/qemu/qemu_capabilities.h
|
||||
+++ b/src/qemu/qemu_capabilities.h
|
||||
@@ -678,6 +678,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
|
||||
QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN, /* asynchronous teardown -run-with async-teardown=on|off */
|
||||
QEMU_CAPS_DEVICE_VIRTIO_BLK_VHOST_VDPA, /* virtio-blk-vhost-vdpa block driver */
|
||||
QEMU_CAPS_VIRTIO_BLK_IOTHREAD_MAPPING, /* virtio-blk supports per-virtqueue iothread mapping */
|
||||
+ QEMU_CAPS_SMP_CLUSTERS, /* -smp clusters= */
|
||||
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml
|
||||
index 4315241d1d..536524cf18 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml
|
||||
@@ -154,6 +154,7 @@
|
||||
<flag name='virtio-crypto'/>
|
||||
<flag name='pvpanic-pci'/>
|
||||
<flag name='virtio-gpu.blob'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>7001000</version>
|
||||
<microcodeVersion>42900244</microcodeVersion>
|
||||
<package>v7.1.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml
|
||||
index bd84750dc5..58e1111982 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml
|
||||
@@ -188,6 +188,7 @@
|
||||
<flag name='virtio-crypto'/>
|
||||
<flag name='pvpanic-pci'/>
|
||||
<flag name='virtio-gpu.blob'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>7001000</version>
|
||||
<microcodeVersion>43100244</microcodeVersion>
|
||||
<package>v7.1.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml
|
||||
index a1fc441412..127b8ee4c2 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml
|
||||
@@ -149,6 +149,7 @@
|
||||
<flag name='virtio-crypto'/>
|
||||
<flag name='pvpanic-pci'/>
|
||||
<flag name='virtio-gpu.blob'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>7002000</version>
|
||||
<microcodeVersion>0</microcodeVersion>
|
||||
<package>qemu-7.2.0-6.fc37</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml
|
||||
index 06a01a2c4c..a30ec3c164 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml
|
||||
@@ -192,6 +192,7 @@
|
||||
<flag name='cryptodev-backend-lkcf'/>
|
||||
<flag name='pvpanic-pci'/>
|
||||
<flag name='virtio-gpu.blob'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>7002000</version>
|
||||
<microcodeVersion>43100245</microcodeVersion>
|
||||
<package>v7.2.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml
|
||||
index 8ac1529c30..24ac7b8f6e 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml
|
||||
@@ -192,6 +192,7 @@
|
||||
<flag name='cryptodev-backend-lkcf'/>
|
||||
<flag name='pvpanic-pci'/>
|
||||
<flag name='virtio-gpu.blob'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>7002000</version>
|
||||
<microcodeVersion>43100245</microcodeVersion>
|
||||
<package>v7.2.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml
|
||||
index 31300d3d31..3f2acb5018 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml
|
||||
@@ -138,6 +138,7 @@
|
||||
<flag name='virtio-crypto'/>
|
||||
<flag name='pvpanic-pci'/>
|
||||
<flag name='virtio-gpu.blob'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>7002050</version>
|
||||
<microcodeVersion>0</microcodeVersion>
|
||||
<package>v7.2.0-333-g222059a0fc</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml
|
||||
index c2fa8eb028..85869f6b5d 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml
|
||||
@@ -196,6 +196,7 @@
|
||||
<flag name='virtio-gpu.blob'/>
|
||||
<flag name='rbd-encryption-layering'/>
|
||||
<flag name='rbd-encryption-luks-any'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>8000000</version>
|
||||
<microcodeVersion>43100244</microcodeVersion>
|
||||
<package>v8.0.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml
|
||||
index 427ee9d5c7..19422f08fa 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml
|
||||
@@ -112,6 +112,7 @@
|
||||
<flag name='rbd-encryption-layering'/>
|
||||
<flag name='rbd-encryption-luks-any'/>
|
||||
<flag name='run-with.async-teardown'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>8000050</version>
|
||||
<microcodeVersion>39100245</microcodeVersion>
|
||||
<package>v8.0.0-1270-g1c12355b</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml
|
||||
index d266dd0f31..0caee53550 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml
|
||||
@@ -198,6 +198,7 @@
|
||||
<flag name='qcow2-discard-no-unref'/>
|
||||
<flag name='run-with.async-teardown'/>
|
||||
<flag name='virtio-blk-vhost-vdpa'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>8001000</version>
|
||||
<microcodeVersion>43100245</microcodeVersion>
|
||||
<package>v8.1.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml
|
||||
index 40d490c1c0..54fd349365 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml
|
||||
@@ -162,6 +162,7 @@
|
||||
<flag name='rbd-encryption-luks-any'/>
|
||||
<flag name='qcow2-discard-no-unref'/>
|
||||
<flag name='run-with.async-teardown'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>8002000</version>
|
||||
<microcodeVersion>61700246</microcodeVersion>
|
||||
<package>v8.2.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml
|
||||
index ee52952702..8a6527810a 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml
|
||||
@@ -199,6 +199,7 @@
|
||||
<flag name='qcow2-discard-no-unref'/>
|
||||
<flag name='run-with.async-teardown'/>
|
||||
<flag name='virtio-blk-vhost-vdpa'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>8002000</version>
|
||||
<microcodeVersion>43100246</microcodeVersion>
|
||||
<package>v8.2.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
|
||||
index 65d86f7016..b4c3b1bae3 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
|
||||
@@ -200,6 +200,7 @@
|
||||
<flag name='run-with.async-teardown'/>
|
||||
<flag name='virtio-blk-vhost-vdpa'/>
|
||||
<flag name='virtio-blk.iothread-mapping'/>
|
||||
+ <flag name='smp-clusters'/>
|
||||
<version>8002050</version>
|
||||
<microcodeVersion>43100245</microcodeVersion>
|
||||
<package>v8.2.0-196-g7425b6277f</package>
|
||||
--
|
||||
2.43.0
|
@ -1,195 +0,0 @@
|
||||
From 5853ac5261b2934ca300b24a7bd78cc4b377c90c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5853ac5261b2934ca300b24a7bd78cc4b377c90c@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 7 Jul 2022 17:37:46 +0200
|
||||
Subject: [PATCH] qemu: Make IOThread changing more robust
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
There are three APIs that allow changing IOThreads:
|
||||
|
||||
virDomainAddIOThread()
|
||||
virDomainDelIOThread()
|
||||
virDomainSetIOThreadParams()
|
||||
|
||||
In case of QEMU driver these are handled by
|
||||
qemuDomainChgIOThread() which attempts to be versatile enough to
|
||||
work on both inactive and live domain definitions at the same
|
||||
time. However, it's a bit clumsy - when a change to live
|
||||
definition succeeds but fails in inactive definition then there's
|
||||
no rollback. And somewhat rightfully so - changes to live
|
||||
definition are in general harder to roll back. Therefore, do what
|
||||
we do elsewhere (qemuDomainAttachDeviceLiveAndConfig(),
|
||||
qemuDomainDetachDeviceAliasLiveAndConfig(), ...):
|
||||
|
||||
1) do the change to inactive XML first,
|
||||
2) in fact, do the change to a copy of inactive XML,
|
||||
3) swap inactive XML and its copy only after everything
|
||||
succeeded.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 6db9c95a45d4e24cdcd5c009b7fe5da3745b5d59)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2059511
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 74 ++++++++++++++++++++++++------------------
|
||||
1 file changed, 43 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 3b5c3db67c..2c627396f1 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -5594,6 +5594,7 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
|
||||
{
|
||||
g_autoptr(virQEMUDriverConfig) cfg = NULL;
|
||||
qemuDomainObjPrivate *priv;
|
||||
+ g_autoptr(virDomainDef) defcopy = NULL;
|
||||
virDomainDef *def;
|
||||
virDomainDef *persistentDef;
|
||||
virDomainIOThreadIDDef *iothreaddef = NULL;
|
||||
@@ -5609,34 +5610,34 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
|
||||
if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (def) {
|
||||
- if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) {
|
||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
- _("IOThreads not supported with this binary"));
|
||||
- goto endjob;
|
||||
- }
|
||||
+ if (persistentDef) {
|
||||
+ /* Make a copy of persistent definition and do all the changes there.
|
||||
+ * Swap the definitions only after changes to live definition
|
||||
+ * succeeded. */
|
||||
+ if (!(defcopy = virDomainObjCopyPersistentDef(vm, driver->xmlopt,
|
||||
+ priv->qemuCaps)))
|
||||
+ return -1;
|
||||
|
||||
switch (action) {
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_ADD:
|
||||
- if (virDomainDriverAddIOThreadCheck(def, iothread.iothread_id) < 0)
|
||||
+ if (virDomainDriverAddIOThreadCheck(defcopy, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (qemuDomainHotplugAddIOThread(driver, vm, iothread.iothread_id) < 0)
|
||||
+ if (!virDomainIOThreadIDAdd(defcopy, iothread.iothread_id))
|
||||
goto endjob;
|
||||
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_DEL:
|
||||
- if (virDomainDriverDelIOThreadCheck(def, iothread.iothread_id) < 0)
|
||||
+ if (virDomainDriverDelIOThreadCheck(defcopy, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (qemuDomainHotplugDelIOThread(driver, vm, iothread.iothread_id) < 0)
|
||||
- goto endjob;
|
||||
+ virDomainIOThreadIDDel(defcopy, iothread.iothread_id);
|
||||
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_MOD:
|
||||
- iothreaddef = virDomainIOThreadIDFind(def, iothread.iothread_id);
|
||||
+ iothreaddef = virDomainIOThreadIDFind(defcopy, iothread.iothread_id);
|
||||
|
||||
if (!iothreaddef) {
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
@@ -5645,41 +5646,47 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
|
||||
goto endjob;
|
||||
}
|
||||
|
||||
- if (qemuDomainIOThreadValidate(iothreaddef, iothread, true) < 0)
|
||||
+ if (qemuDomainIOThreadValidate(iothreaddef, iothread, false) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (qemuDomainHotplugModIOThread(driver, vm, iothread) < 0)
|
||||
+ if (qemuDomainHotplugModIOThreadIDDef(iothreaddef, iothread) < 0) {
|
||||
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
+ _("configuring persistent polling values is not supported"));
|
||||
goto endjob;
|
||||
+ }
|
||||
|
||||
- qemuDomainHotplugModIOThreadIDDef(iothreaddef, iothread);
|
||||
break;
|
||||
-
|
||||
}
|
||||
-
|
||||
- qemuDomainSaveStatus(vm);
|
||||
}
|
||||
|
||||
- if (persistentDef) {
|
||||
+ if (def) {
|
||||
+ if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("IOThreads not supported with this binary"));
|
||||
+ goto endjob;
|
||||
+ }
|
||||
+
|
||||
switch (action) {
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_ADD:
|
||||
- if (virDomainDriverAddIOThreadCheck(persistentDef, iothread.iothread_id) < 0)
|
||||
+ if (virDomainDriverAddIOThreadCheck(def, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (!virDomainIOThreadIDAdd(persistentDef, iothread.iothread_id))
|
||||
+ if (qemuDomainHotplugAddIOThread(driver, vm, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_DEL:
|
||||
- if (virDomainDriverDelIOThreadCheck(persistentDef, iothread.iothread_id) < 0)
|
||||
+ if (virDomainDriverDelIOThreadCheck(def, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
- virDomainIOThreadIDDel(persistentDef, iothread.iothread_id);
|
||||
+ if (qemuDomainHotplugDelIOThread(driver, vm, iothread.iothread_id) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_MOD:
|
||||
- iothreaddef = virDomainIOThreadIDFind(persistentDef, iothread.iothread_id);
|
||||
+ iothreaddef = virDomainIOThreadIDFind(def, iothread.iothread_id);
|
||||
|
||||
if (!iothreaddef) {
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
@@ -5688,21 +5695,26 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
|
||||
goto endjob;
|
||||
}
|
||||
|
||||
- if (qemuDomainIOThreadValidate(iothreaddef, iothread, false) < 0)
|
||||
+ if (qemuDomainIOThreadValidate(iothreaddef, iothread, true) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (qemuDomainHotplugModIOThreadIDDef(iothreaddef, iothread) < 0) {
|
||||
- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
- _("configuring persistent polling values is not supported"));
|
||||
+ if (qemuDomainHotplugModIOThread(driver, vm, iothread) < 0)
|
||||
goto endjob;
|
||||
- }
|
||||
|
||||
+ qemuDomainHotplugModIOThreadIDDef(iothreaddef, iothread);
|
||||
break;
|
||||
+
|
||||
}
|
||||
|
||||
- if (virDomainDefSave(persistentDef, driver->xmlopt,
|
||||
- cfg->configDir) < 0)
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
+ }
|
||||
+
|
||||
+ /* Finally, if no error until here, we can save config. */
|
||||
+ if (defcopy) {
|
||||
+ if (virDomainDefSave(defcopy, driver->xmlopt, cfg->configDir) < 0)
|
||||
goto endjob;
|
||||
+
|
||||
+ virDomainObjAssignDef(vm, &defcopy, false, NULL);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
--
|
||||
2.35.1
|
||||
|
117
SOURCES/libvirt-qemu-Make-monitor-aware-of-CPU-clusters.patch
Normal file
117
SOURCES/libvirt-qemu-Make-monitor-aware-of-CPU-clusters.patch
Normal file
@ -0,0 +1,117 @@
|
||||
From 66312c8fea7d122acfd833e495e6b81642baff33 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <66312c8fea7d122acfd833e495e6b81642baff33.1706524416.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 5 Jan 2024 18:51:29 +0100
|
||||
Subject: [PATCH] qemu: Make monitor aware of CPU clusters
|
||||
|
||||
This makes it so libvirt can obtain accurate information about
|
||||
guest CPUs from QEMU, and should make it possible to correctly
|
||||
perform operations such as CPU hotplug.
|
||||
|
||||
Of course this is mostly moot at the moment: only aarch64 can use
|
||||
CPU clusters, and CPU hotplug is not yet implemented on that
|
||||
architecture.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 763381df53d5a67804f828cb8db661f694d35296)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_domain.c | 3 ++-
|
||||
src/qemu/qemu_monitor.c | 2 ++
|
||||
src/qemu/qemu_monitor.h | 2 ++
|
||||
src/qemu/qemu_monitor_json.c | 5 +++++
|
||||
4 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index 3a00fb689e..e2a1bf2c13 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -9900,11 +9900,12 @@ qemuDomainRefreshVcpuInfo(virDomainObj *vm,
|
||||
|
||||
if (validTIDs)
|
||||
VIR_DEBUG("vCPU[%zu] PID %llu is valid "
|
||||
- "(node=%d socket=%d die=%d core=%d thread=%d)",
|
||||
+ "(node=%d socket=%d die=%d cluster=%d core=%d thread=%d)",
|
||||
i, (unsigned long long)info[i].tid,
|
||||
info[i].node_id,
|
||||
info[i].socket_id,
|
||||
info[i].die_id,
|
||||
+ info[i].cluster_id,
|
||||
info[i].core_id,
|
||||
info[i].thread_id);
|
||||
}
|
||||
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
|
||||
index dfad4ee1ea..a1773d86d4 100644
|
||||
--- a/src/qemu/qemu_monitor.c
|
||||
+++ b/src/qemu/qemu_monitor.c
|
||||
@@ -1501,6 +1501,7 @@ qemuMonitorCPUInfoClear(qemuMonitorCPUInfo *cpus,
|
||||
cpus[i].qemu_id = -1;
|
||||
cpus[i].socket_id = -1;
|
||||
cpus[i].die_id = -1;
|
||||
+ cpus[i].cluster_id = -1;
|
||||
cpus[i].core_id = -1;
|
||||
cpus[i].thread_id = -1;
|
||||
cpus[i].node_id = -1;
|
||||
@@ -1658,6 +1659,7 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl
|
||||
!vcpus[mainvcpu].online;
|
||||
vcpus[mainvcpu].socket_id = hotplugvcpus[i].socket_id;
|
||||
vcpus[mainvcpu].die_id = hotplugvcpus[i].die_id;
|
||||
+ vcpus[mainvcpu].cluster_id = hotplugvcpus[i].cluster_id;
|
||||
vcpus[mainvcpu].core_id = hotplugvcpus[i].core_id;
|
||||
vcpus[mainvcpu].thread_id = hotplugvcpus[i].thread_id;
|
||||
vcpus[mainvcpu].node_id = hotplugvcpus[i].node_id;
|
||||
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
|
||||
index c4af9b407d..981c609e9f 100644
|
||||
--- a/src/qemu/qemu_monitor.h
|
||||
+++ b/src/qemu/qemu_monitor.h
|
||||
@@ -590,6 +590,7 @@ struct qemuMonitorQueryHotpluggableCpusEntry {
|
||||
int node_id;
|
||||
int socket_id;
|
||||
int die_id;
|
||||
+ int cluster_id;
|
||||
int core_id;
|
||||
int thread_id;
|
||||
|
||||
@@ -613,6 +614,7 @@ struct _qemuMonitorCPUInfo {
|
||||
* all entries are -1 */
|
||||
int socket_id;
|
||||
int die_id;
|
||||
+ int cluster_id;
|
||||
int core_id;
|
||||
int thread_id;
|
||||
int node_id;
|
||||
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
|
||||
index 9cb0f3d1d8..e114b6bfb1 100644
|
||||
--- a/src/qemu/qemu_monitor_json.c
|
||||
+++ b/src/qemu/qemu_monitor_json.c
|
||||
@@ -7579,12 +7579,14 @@ qemuMonitorJSONProcessHotpluggableCpusReply(virJSONValue *vcpu,
|
||||
entry->node_id = -1;
|
||||
entry->socket_id = -1;
|
||||
entry->die_id = -1;
|
||||
+ entry->cluster_id = -1;
|
||||
entry->core_id = -1;
|
||||
entry->thread_id = -1;
|
||||
|
||||
ignore_value(virJSONValueObjectGetNumberInt(props, "node-id", &entry->node_id));
|
||||
ignore_value(virJSONValueObjectGetNumberInt(props, "socket-id", &entry->socket_id));
|
||||
ignore_value(virJSONValueObjectGetNumberInt(props, "die-id", &entry->die_id));
|
||||
+ ignore_value(virJSONValueObjectGetNumberInt(props, "cluster-id", &entry->cluster_id));
|
||||
ignore_value(virJSONValueObjectGetNumberInt(props, "core-id", &entry->core_id));
|
||||
ignore_value(virJSONValueObjectGetNumberInt(props, "thread-id", &entry->thread_id));
|
||||
|
||||
@@ -7622,6 +7624,9 @@ qemuMonitorQueryHotpluggableCpusEntrySort(const void *p1,
|
||||
if (a->die_id != b->die_id)
|
||||
return a->die_id - b->die_id;
|
||||
|
||||
+ if (a->cluster_id != b->cluster_id)
|
||||
+ return a->cluster_id - b->cluster_id;
|
||||
+
|
||||
if (a->core_id != b->core_id)
|
||||
return a->core_id - b->core_id;
|
||||
|
||||
--
|
||||
2.43.0
|
@ -1,148 +0,0 @@
|
||||
From 4c906acec14efe3893491d749465ed7e285a825c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4c906acec14efe3893491d749465ed7e285a825c@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 29 Jun 2022 12:00:03 +0200
|
||||
Subject: [PATCH] qemu: Pass migration flags to qemuMigrationParamsApply
|
||||
|
||||
The flags will later be used to determine which parameters should
|
||||
actually be applied.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 0eae541257cd4f01c9d90db62056ad8d03c5af23)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2111070
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 6 +++---
|
||||
src/qemu/qemu_migration.c | 8 ++++----
|
||||
src/qemu/qemu_migration_params.c | 11 ++++++++---
|
||||
src/qemu/qemu_migration_params.h | 3 ++-
|
||||
4 files changed, 17 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 847c96639d..17e4c23199 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -13091,7 +13091,7 @@ qemuDomainMigrateSetMaxDowntime(virDomainPtr dom,
|
||||
goto endjob;
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- migParams) < 0)
|
||||
+ migParams, 0) < 0)
|
||||
goto endjob;
|
||||
} else {
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
@@ -13273,7 +13273,7 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr dom,
|
||||
goto endjob;
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- migParams) < 0)
|
||||
+ migParams, 0) < 0)
|
||||
goto endjob;
|
||||
} else {
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
@@ -13360,7 +13360,7 @@ qemuDomainMigrateSetMaxSpeed(virDomainPtr dom,
|
||||
goto endjob;
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- migParams) < 0)
|
||||
+ migParams, 0) < 0)
|
||||
goto endjob;
|
||||
} else {
|
||||
int rc;
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 76903d612b..8cbd73a809 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -3259,7 +3259,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver,
|
||||
}
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_MIGRATION_IN,
|
||||
- migParams) < 0)
|
||||
+ migParams, flags) < 0)
|
||||
goto error;
|
||||
|
||||
if (mig->nbd &&
|
||||
@@ -4847,7 +4847,7 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
goto error;
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
- migParams) < 0)
|
||||
+ migParams, flags) < 0)
|
||||
goto error;
|
||||
|
||||
if (flags & VIR_MIGRATE_ZEROCOPY) {
|
||||
@@ -6941,7 +6941,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm,
|
||||
QEMU_DOMAIN_MIG_BANDWIDTH_MAX * 1024 * 1024) < 0)
|
||||
return -1;
|
||||
|
||||
- if (qemuMigrationParamsApply(driver, vm, asyncJob, migParams) < 0)
|
||||
+ if (qemuMigrationParamsApply(driver, vm, asyncJob, migParams, 0) < 0)
|
||||
return -1;
|
||||
|
||||
priv->migMaxBandwidth = QEMU_DOMAIN_MIG_BANDWIDTH_MAX;
|
||||
@@ -7037,7 +7037,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm,
|
||||
QEMU_MIGRATION_PARAM_MAX_BANDWIDTH,
|
||||
saveMigBandwidth * 1024 * 1024) == 0)
|
||||
ignore_value(qemuMigrationParamsApply(driver, vm, asyncJob,
|
||||
- migParams));
|
||||
+ migParams, 0));
|
||||
} else {
|
||||
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) {
|
||||
qemuMonitorSetMigrationSpeed(priv->mon, saveMigBandwidth);
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index cc66ed8229..398c07efd0 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -833,8 +833,10 @@ qemuMigrationCapsToJSON(virBitmap *caps,
|
||||
* @vm: domain object
|
||||
* @asyncJob: migration job
|
||||
* @migParams: migration parameters to send to QEMU
|
||||
+ * @apiFlags: migration flags, some of them may affect which parameters are applied
|
||||
*
|
||||
- * Send all parameters stored in @migParams to QEMU.
|
||||
+ * Send parameters stored in @migParams to QEMU. If @apiFlags is non-zero, some
|
||||
+ * parameters that do not make sense for the enabled flags will be ignored.
|
||||
*
|
||||
* Returns 0 on success, -1 on failure.
|
||||
*/
|
||||
@@ -842,7 +844,8 @@ int
|
||||
qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
int asyncJob,
|
||||
- qemuMigrationParams *migParams)
|
||||
+ qemuMigrationParams *migParams,
|
||||
+ unsigned long apiFlags G_GNUC_UNUSED)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
bool xbzrleCacheSize_old = false;
|
||||
@@ -1245,7 +1248,9 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
if (!virDomainObjIsActive(vm) || !origParams)
|
||||
goto cleanup;
|
||||
|
||||
- if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams) < 0)
|
||||
+ /* Do not pass apiFlags to qemuMigrationParamsApply here to make sure all
|
||||
+ * parameters and capabilities are reset. */
|
||||
+ if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams, 0) < 0)
|
||||
goto cleanup;
|
||||
|
||||
qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_params.h
|
||||
index d1184acded..9e990e09bd 100644
|
||||
--- a/src/qemu/qemu_migration_params.h
|
||||
+++ b/src/qemu/qemu_migration_params.h
|
||||
@@ -98,7 +98,8 @@ int
|
||||
qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
int asyncJob,
|
||||
- qemuMigrationParams *migParams);
|
||||
+ qemuMigrationParams *migParams,
|
||||
+ unsigned long apiFlags);
|
||||
|
||||
int
|
||||
qemuMigrationParamsEnableTLS(virQEMUDriver *driver,
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,38 +0,0 @@
|
||||
From b35eb8dd4800be4dba22eb0a38da4d4d1c54521f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b35eb8dd4800be4dba22eb0a38da4d4d1c54521f@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 27 Jul 2022 15:40:12 +0200
|
||||
Subject: [PATCH] qemu: Properly release job in qemuDomainSaveInternal
|
||||
|
||||
The function would fail to release the job in case
|
||||
qemuMigrationSrcIsAllowed failed.
|
||||
|
||||
Fixes v8.5.0-157-g69e0e33873
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
(cherry picked from commit 9c3d398df11024ef6c00a50c98fcc0f1f66c16a1)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1497907
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 256e126ae1..ebd6365f52 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -2655,7 +2655,7 @@ qemuDomainSaveInternal(virQEMUDriver *driver,
|
||||
goto cleanup;
|
||||
|
||||
if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_SAVE, 0))
|
||||
- goto cleanup;
|
||||
+ goto endjob;
|
||||
|
||||
if (!virDomainObjIsActive(vm)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,49 +0,0 @@
|
||||
From b3d2dae261768c00b5d92203351ff6dd7cde468e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b3d2dae261768c00b5d92203351ff6dd7cde468e@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 12 Jul 2022 15:58:17 +0200
|
||||
Subject: [PATCH] qemu: Report supported TPM version in domcaps
|
||||
|
||||
Now that we have everything prepared, we can start detecting
|
||||
supported TPM versions and setting corresponding values in
|
||||
backendModel struct.
|
||||
|
||||
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/340
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103119
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 430ab88ab17727ac9774ee5b47f09f69c57add73)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_capabilities.c | 15 ++++++++++++---
|
||||
1 file changed, 12 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index 2c3be3ecec..8586930266 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -6368,9 +6368,18 @@ virQEMUCapsFillDomainDeviceTPMCaps(virQEMUCaps *qemuCaps,
|
||||
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_PASSTHROUGH))
|
||||
VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendModel, VIR_DOMAIN_TPM_TYPE_PASSTHROUGH);
|
||||
- if (virTPMHasSwtpm() &&
|
||||
- virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_EMULATOR))
|
||||
- VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendModel, VIR_DOMAIN_TPM_TYPE_EMULATOR);
|
||||
+ if (virTPMHasSwtpm()) {
|
||||
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_EMULATOR))
|
||||
+ VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendModel, VIR_DOMAIN_TPM_TYPE_EMULATOR);
|
||||
+ if (virTPMSwtpmSetupCapsGet(VIR_TPM_SWTPM_SETUP_FEATURE_TPM_1_2)) {
|
||||
+ VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendVersion, VIR_DOMAIN_TPM_VERSION_1_2);
|
||||
+ tpm->backendVersion.report = true;
|
||||
+ }
|
||||
+ if (virTPMSwtpmSetupCapsGet(VIR_TPM_SWTPM_SETUP_FEATURE_TPM_2_0)) {
|
||||
+ VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendVersion, VIR_DOMAIN_TPM_VERSION_2_0);
|
||||
+ tpm->backendVersion.report = true;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Need at least one frontend if it is to be usable by applications
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,85 +0,0 @@
|
||||
From a1d825e5dcb8cbe0854fa852d25e5997a52d57cd Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a1d825e5dcb8cbe0854fa852d25e5997a52d57cd@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 27 Jul 2022 14:33:23 +0200
|
||||
Subject: [PATCH] qemu: Restore original memory locking limit on reconnect
|
||||
|
||||
Commit v8.4.0-287-gd4d3bb8130 tried to make sure the original
|
||||
pre-migration memory locking limit is restored at the end of migration,
|
||||
but it missed the case when libvirt daemon is restarted during
|
||||
migration which needs to be aborted on reconnect.
|
||||
|
||||
And if this was not enough, I forgot to actually save the status XML
|
||||
after setting the field in priv (in the commit mentioned above and also
|
||||
in v8.4.0-291-gd375993ab3).
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107424
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit bb9badb9168ad0d40bca86b6463ef504624f096d)
|
||||
|
||||
Conflicts:
|
||||
src/qemu/qemu_migration.c
|
||||
- commit v8.5.0-2-gf9dcc01a0f not backported
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 13 +++++++++----
|
||||
src/qemu/qemu_process.c | 2 ++
|
||||
2 files changed, 11 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 9289df81eb..61fcaf4258 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -4672,10 +4672,12 @@ qemuMigrationSrcStart(virDomainObj *vm,
|
||||
switch (spec->destType) {
|
||||
case MIGRATION_DEST_HOST:
|
||||
if (STREQ(spec->dest.host.protocol, "rdma") &&
|
||||
- vm->def->mem.hard_limit > 0 &&
|
||||
- qemuDomainSetMaxMemLock(vm, vm->def->mem.hard_limit << 10,
|
||||
- &priv->preMigrationMemlock) < 0) {
|
||||
- return -1;
|
||||
+ vm->def->mem.hard_limit > 0) {
|
||||
+ if (qemuDomainSetMaxMemLock(vm, vm->def->mem.hard_limit << 10,
|
||||
+ &priv->preMigrationMemlock) < 0)
|
||||
+ return -1;
|
||||
+ /* Store the original memory locking limit */
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
}
|
||||
return qemuMonitorMigrateToHost(priv->mon, migrateFlags,
|
||||
spec->dest.host.protocol,
|
||||
@@ -4870,6 +4872,9 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
|
||||
if (qemuDomainSetMaxMemLock(vm, limit << 10, &priv->preMigrationMemlock) < 0)
|
||||
goto error;
|
||||
+
|
||||
+ /* Store the original memory locking limit */
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
}
|
||||
|
||||
if (storageMigration) {
|
||||
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||
index 771a623ef7..1c28d4b102 100644
|
||||
--- a/src/qemu/qemu_process.c
|
||||
+++ b/src/qemu/qemu_process.c
|
||||
@@ -3677,6 +3677,7 @@ qemuProcessRecoverMigration(virQEMUDriver *driver,
|
||||
{
|
||||
virDomainJobStatus migStatus = VIR_DOMAIN_JOB_STATUS_NONE;
|
||||
qemuDomainJobPrivate *jobPriv = job->privateData;
|
||||
+ qemuDomainObjPrivate *priv = vm->privateData;
|
||||
virDomainState state;
|
||||
int reason;
|
||||
int rc;
|
||||
@@ -3726,6 +3727,7 @@ qemuProcessRecoverMigration(virQEMUDriver *driver,
|
||||
|
||||
qemuMigrationParamsReset(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
jobPriv->migParams, job->apiFlags);
|
||||
+ qemuDomainSetMaxMemLock(vm, 0, &priv->preMigrationMemlock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
|
646
SOURCES/libvirt-qemu-Use-CPU-clusters-for-guests.patch
Normal file
646
SOURCES/libvirt-qemu-Use-CPU-clusters-for-guests.patch
Normal file
@ -0,0 +1,646 @@
|
||||
From 53727afb9517dbfe4182f669eaf8dbe8c38e143c Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <53727afb9517dbfe4182f669eaf8dbe8c38e143c.1706524416.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 5 Jan 2024 18:44:56 +0100
|
||||
Subject: [PATCH] qemu: Use CPU clusters for guests
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 655459420adb447da4744408e62537bc6ae960dd)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_command.c | 5 ++++-
|
||||
.../qemuxml2argvdata/cpu-hotplug-startup.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/cpu-numa-disjoint.x86_64-latest.args | 2 +-
|
||||
.../qemuxml2argvdata/cpu-numa-disordered.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/cpu-numa-memshared.x86_64-latest.args | 2 +-
|
||||
.../cpu-numa-no-memory-element.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/cpu-numa1.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/cpu-numa2.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/cpu-topology1.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/cpu-topology2.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/cpu-topology3.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/cpu-topology4.x86_64-latest.args | 2 +-
|
||||
.../fd-memory-no-numa-topology.x86_64-latest.args | 2 +-
|
||||
.../fd-memory-numa-topology.x86_64-latest.args | 2 +-
|
||||
.../fd-memory-numa-topology2.x86_64-latest.args | 2 +-
|
||||
.../fd-memory-numa-topology3.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args | 2 +-
|
||||
.../memfd-memory-default-hugepage.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-dimm-addr.x86_64-latest.args | 2 +-
|
||||
.../qemuxml2argvdata/memory-hotplug-dimm.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-multiple.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-nvdimm-access.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-nvdimm-align.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-nvdimm-label.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-nvdimm-pmem.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-nvdimm-ppc64-abi-update.ppc64-latest.args | 2 +-
|
||||
.../memory-hotplug-nvdimm-ppc64.ppc64-latest.args | 2 +-
|
||||
.../memory-hotplug-nvdimm-readonly.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-nvdimm.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-virtio-mem.x86_64-latest.args | 2 +-
|
||||
.../memory-hotplug-virtio-pmem.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/memory-hotplug.x86_64-latest.args | 2 +-
|
||||
.../numad-auto-memory-vcpu-cpuset.x86_64-latest.args | 2 +-
|
||||
...to-memory-vcpu-no-cpuset-and-placement.x86_64-latest.args | 2 +-
|
||||
.../numad-auto-vcpu-no-numatune.x86_64-latest.args | 2 +-
|
||||
.../numad-auto-vcpu-static-numatune.x86_64-latest.args | 2 +-
|
||||
.../numad-static-memory-auto-vcpu.x86_64-latest.args | 2 +-
|
||||
.../numad-static-vcpu-no-numatune.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/numad.x86_64-latest.args | 2 +-
|
||||
.../numatune-auto-nodeset-invalid.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/pci-expander-bus.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/pcie-expander-bus.x86_64-latest.args | 2 +-
|
||||
.../qemuxml2argvdata/pseries-phb-numa-node.ppc64-latest.args | 2 +-
|
||||
44 files changed, 47 insertions(+), 44 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 71daa85e55..712feb7b81 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -7226,7 +7226,8 @@ qemuBuildSmpCommandLine(virCommand *cmd,
|
||||
_("Only 1 die per socket is supported"));
|
||||
return -1;
|
||||
}
|
||||
- if (def->cpu->clusters != 1) {
|
||||
+ if (def->cpu->clusters != 1 &&
|
||||
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_CLUSTERS)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("Only 1 cluster per die is supported"));
|
||||
return -1;
|
||||
@@ -7234,6 +7235,8 @@ qemuBuildSmpCommandLine(virCommand *cmd,
|
||||
virBufferAsprintf(&buf, ",sockets=%u", def->cpu->sockets);
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_DIES))
|
||||
virBufferAsprintf(&buf, ",dies=%u", def->cpu->dies);
|
||||
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_CLUSTERS))
|
||||
+ virBufferAsprintf(&buf, ",clusters=%u", def->cpu->clusters);
|
||||
virBufferAsprintf(&buf, ",cores=%u", def->cpu->cores);
|
||||
virBufferAsprintf(&buf, ",threads=%u", def->cpu->threads);
|
||||
} else {
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-hotplug-startup.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-hotplug-startup.x86_64-latest.args
|
||||
index 009c08d71a..af1b464104 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-hotplug-startup.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-hotplug-startup.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 1,maxcpus=6,sockets=3,dies=1,cores=2,threads=1 \
|
||||
+-smp 1,maxcpus=6,sockets=3,dies=1,clusters=1,cores=2,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-numa-disjoint.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-numa-disjoint.x86_64-latest.args
|
||||
index 3b12934425..22fca082a8 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-numa-disjoint.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-numa-disjoint.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 16,sockets=2,dies=1,cores=4,threads=2 \
|
||||
+-smp 16,sockets=2,dies=1,clusters=1,cores=4,threads=2 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":112197632}' \
|
||||
-numa node,nodeid=0,cpus=0-3,cpus=8-11,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node1","size":112197632}' \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-numa-disordered.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-numa-disordered.x86_64-latest.args
|
||||
index ee6974326d..bc4a6ad5f3 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-numa-disordered.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-numa-disordered.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=328704k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 16,sockets=2,dies=1,cores=4,threads=2 \
|
||||
+-smp 16,sockets=2,dies=1,clusters=1,cores=4,threads=2 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":112197632}' \
|
||||
-numa node,nodeid=0,cpus=0-5,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node1","size":112197632}' \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-numa-memshared.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-numa-memshared.x86_64-latest.args
|
||||
index 0c9ec88b8b..1e486b1bbc 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-numa-memshared.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-numa-memshared.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 16,sockets=2,dies=1,cores=4,threads=2 \
|
||||
+-smp 16,sockets=2,dies=1,clusters=1,cores=4,threads=2 \
|
||||
-object '{"qom-type":"memory-backend-file","id":"ram-node0","mem-path":"/var/lib/libvirt/qemu/ram/-1-QEMUGuest1/ram-node0","share":true,"size":112197632}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-file","id":"ram-node1","mem-path":"/var/lib/libvirt/qemu/ram/-1-QEMUGuest1/ram-node1","share":false,"size":112197632}' \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-numa-no-memory-element.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-numa-no-memory-element.x86_64-latest.args
|
||||
index 31a61f023e..59372c4ab9 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-numa-no-memory-element.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-numa-no-memory-element.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 16,sockets=2,dies=1,cores=4,threads=2 \
|
||||
+-smp 16,sockets=2,dies=1,clusters=1,cores=4,threads=2 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":112197632}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node1","size":112197632}' \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-numa1.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-numa1.x86_64-latest.args
|
||||
index 31a61f023e..59372c4ab9 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-numa1.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-numa1.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 16,sockets=2,dies=1,cores=4,threads=2 \
|
||||
+-smp 16,sockets=2,dies=1,clusters=1,cores=4,threads=2 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":112197632}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node1","size":112197632}' \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-numa2.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-numa2.x86_64-latest.args
|
||||
index 31a61f023e..59372c4ab9 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-numa2.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-numa2.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 16,sockets=2,dies=1,cores=4,threads=2 \
|
||||
+-smp 16,sockets=2,dies=1,clusters=1,cores=4,threads=2 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":112197632}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node1","size":112197632}' \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-topology1.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-topology1.x86_64-latest.args
|
||||
index 009c08d71a..af1b464104 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-topology1.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-topology1.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 1,maxcpus=6,sockets=3,dies=1,cores=2,threads=1 \
|
||||
+-smp 1,maxcpus=6,sockets=3,dies=1,clusters=1,cores=2,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-topology2.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-topology2.x86_64-latest.args
|
||||
index 7ba175fa80..8560eb6126 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-topology2.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-topology2.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 6,sockets=1,dies=1,cores=2,threads=3 \
|
||||
+-smp 6,sockets=1,dies=1,clusters=1,cores=2,threads=3 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-topology3.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-topology3.x86_64-latest.args
|
||||
index c11b4cd307..3878c558b8 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-topology3.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-topology3.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 6,sockets=3,dies=1,cores=2,threads=1 \
|
||||
+-smp 6,sockets=3,dies=1,clusters=1,cores=2,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-topology4.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-topology4.x86_64-latest.args
|
||||
index d0e31ba2b5..8720038c0d 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-topology4.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-topology4.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 1,maxcpus=6,sockets=1,dies=3,cores=2,threads=1 \
|
||||
+-smp 1,maxcpus=6,sockets=1,dies=3,clusters=1,cores=2,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/fd-memory-no-numa-topology.x86_64-latest.args b/tests/qemuxml2argvdata/fd-memory-no-numa-topology.x86_64-latest.args
|
||||
index 58b3c7b544..1bd75a85a6 100644
|
||||
--- a/tests/qemuxml2argvdata/fd-memory-no-numa-topology.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/fd-memory-no-numa-topology.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-instance-00000092/.config \
|
||||
-m size=14680064k \
|
||||
-object '{"qom-type":"memory-backend-file","id":"pc.ram","mem-path":"/var/lib/libvirt/qemu/ram/-1-instance-00000092/pc.ram","share":true,"x-use-canonical-path-for-ramblock-id":false,"prealloc":true,"size":15032385536}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 8,sockets=8,dies=1,cores=1,threads=1 \
|
||||
+-smp 8,sockets=8,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-uuid 126f2720-6f8e-45ab-a886-ec9277079a67 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology.x86_64-latest.args b/tests/qemuxml2argvdata/fd-memory-numa-topology.x86_64-latest.args
|
||||
index 21f9a16540..17ef506431 100644
|
||||
--- a/tests/qemuxml2argvdata/fd-memory-numa-topology.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/fd-memory-numa-topology.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-instance-00000092/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=14680064k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 8,sockets=1,dies=1,cores=8,threads=1 \
|
||||
+-smp 8,sockets=1,dies=1,clusters=1,cores=8,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-file","id":"ram-node0","mem-path":"/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node0","share":true,"prealloc":true,"size":15032385536}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
-uuid 126f2720-6f8e-45ab-a886-ec9277079a67 \
|
||||
diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology2.x86_64-latest.args b/tests/qemuxml2argvdata/fd-memory-numa-topology2.x86_64-latest.args
|
||||
index 3bf16f9caf..b247231b85 100644
|
||||
--- a/tests/qemuxml2argvdata/fd-memory-numa-topology2.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/fd-memory-numa-topology2.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-instance-00000092/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=29360128k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 20,sockets=1,dies=1,cores=20,threads=1 \
|
||||
+-smp 20,sockets=1,dies=1,clusters=1,cores=20,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-file","id":"ram-node0","mem-path":"/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node0","share":false,"prealloc":true,"size":15032385536}' \
|
||||
-numa node,nodeid=0,cpus=0-7,cpus=16-19,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-file","id":"ram-node1","mem-path":"/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node1","share":true,"prealloc":true,"size":15032385536}' \
|
||||
diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology3.x86_64-latest.args b/tests/qemuxml2argvdata/fd-memory-numa-topology3.x86_64-latest.args
|
||||
index 3153e22d56..9e94209499 100644
|
||||
--- a/tests/qemuxml2argvdata/fd-memory-numa-topology3.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/fd-memory-numa-topology3.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-instance-00000092/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=44040192k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 32,sockets=1,dies=1,cores=32,threads=1 \
|
||||
+-smp 32,sockets=1,dies=1,clusters=1,cores=32,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-file","id":"ram-node0","mem-path":"/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node0","share":true,"prealloc":true,"size":15032385536}' \
|
||||
-numa node,nodeid=0,cpus=0-1,cpus=6-31,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-file","id":"ram-node1","mem-path":"/var/lib/libvirt/qemu/ram/-1-instance-00000092/ram-node1","share":true,"prealloc":true,"size":15032385536}' \
|
||||
diff --git a/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args b/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
|
||||
index fa376accb5..f30db0ad09 100644
|
||||
--- a/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=1048576k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-file","id":"ram-node0","mem-path":"/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1","share":true,"prealloc":true,"size":1073741824}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.x86_64-latest.args b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.x86_64-latest.args
|
||||
index 55969eb2fd..f850d7be60 100644
|
||||
--- a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-instance-00000092/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=14680064k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 8,sockets=1,dies=1,cores=8,threads=1 \
|
||||
+-smp 8,sockets=1,dies=1,clusters=1,cores=8,threads=1 \
|
||||
-object '{"qom-type":"thread-context","id":"tc-ram-node0","node-affinity":[3]}' \
|
||||
-object '{"qom-type":"memory-backend-memfd","id":"ram-node0","hugetlb":true,"hugetlbsize":2097152,"share":true,"prealloc":true,"size":15032385536,"host-nodes":[3],"policy":"preferred","prealloc-context":"tc-ram-node0"}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args b/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
|
||||
index 1ef2d69fcb..dbe2b82a56 100644
|
||||
--- a/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-instance-00000092/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=14680064k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 8,sockets=1,dies=1,cores=8,threads=1 \
|
||||
+-smp 8,sockets=1,dies=1,clusters=1,cores=8,threads=1 \
|
||||
-object '{"qom-type":"thread-context","id":"tc-ram-node0","node-affinity":[3]}' \
|
||||
-object '{"qom-type":"memory-backend-memfd","id":"ram-node0","hugetlb":true,"hugetlbsize":2097152,"share":true,"prealloc":true,"prealloc-threads":8,"size":15032385536,"host-nodes":[3],"policy":"preferred","prealloc-context":"tc-ram-node0"}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.x86_64-latest.args
|
||||
index 6ae1fd1b98..c15fe191de 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-dimm.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-dimm.x86_64-latest.args
|
||||
index 71817da309..a729930db2 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-dimm.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-dimm.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-multiple.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-multiple.x86_64-latest.args
|
||||
index ad1dad01ac..f1f2f93a11 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-multiple.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-multiple.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=2095104k,slots=2,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":2145386496}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
|
||||
index f09ae22927..d53732b39e 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
|
||||
index 6cfe4b8263..cba467d9d3 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
|
||||
index 4041c15b2b..2ad23a0224 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
|
||||
index 3547e96c00..ac5ca187b1 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.ppc64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.ppc64-latest.args
|
||||
index 9b57518fca..c2c1623d9f 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.ppc64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.ppc64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu POWER9 \
|
||||
-m size=1048576k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":1073741824}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.ppc64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.ppc64-latest.args
|
||||
index 9b57518fca..c2c1623d9f 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.ppc64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.ppc64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu POWER9 \
|
||||
-m size=1048576k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":1073741824}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
|
||||
index 17bacfb2f6..8af4673841 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
|
||||
index 1321e5556e..6531caa908 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=1048576k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":1073741824}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
|
||||
index 607ce9b0e8..dbe96ae21d 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=2095104k,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":2145386496}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args
|
||||
index 9bbde420a9..df7b7f80a9 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=2095104k,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":2145386496}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug.x86_64-latest.args
|
||||
index 53f0fbc68f..d04d9d73e9 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k,slots=16,maxmem=1099511627776k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
diff --git a/tests/qemuxml2argvdata/numad-auto-memory-vcpu-cpuset.x86_64-latest.args b/tests/qemuxml2argvdata/numad-auto-memory-vcpu-cpuset.x86_64-latest.args
|
||||
index d4238f3d9e..138c8255f7 100644
|
||||
--- a/tests/qemuxml2argvdata/numad-auto-memory-vcpu-cpuset.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/numad-auto-memory-vcpu-cpuset.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264,"host-nodes":[0,1,2,3],"policy":"interleave"}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/numad-auto-memory-vcpu-no-cpuset-and-placement.x86_64-latest.args b/tests/qemuxml2argvdata/numad-auto-memory-vcpu-no-cpuset-and-placement.x86_64-latest.args
|
||||
index d4238f3d9e..138c8255f7 100644
|
||||
--- a/tests/qemuxml2argvdata/numad-auto-memory-vcpu-no-cpuset-and-placement.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/numad-auto-memory-vcpu-no-cpuset-and-placement.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264,"host-nodes":[0,1,2,3],"policy":"interleave"}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/numad-auto-vcpu-no-numatune.x86_64-latest.args b/tests/qemuxml2argvdata/numad-auto-vcpu-no-numatune.x86_64-latest.args
|
||||
index 7022d2cc00..f13f04c9d4 100644
|
||||
--- a/tests/qemuxml2argvdata/numad-auto-vcpu-no-numatune.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/numad-auto-vcpu-no-numatune.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264,"host-nodes":[0,1,2,3],"policy":"bind"}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune.x86_64-latest.args b/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune.x86_64-latest.args
|
||||
index 9ddfb286b5..f1c49619db 100644
|
||||
--- a/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264,"host-nodes":[0],"policy":"interleave"}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/numad-static-memory-auto-vcpu.x86_64-latest.args b/tests/qemuxml2argvdata/numad-static-memory-auto-vcpu.x86_64-latest.args
|
||||
index d4238f3d9e..138c8255f7 100644
|
||||
--- a/tests/qemuxml2argvdata/numad-static-memory-auto-vcpu.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/numad-static-memory-auto-vcpu.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264,"host-nodes":[0,1,2,3],"policy":"interleave"}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/numad-static-vcpu-no-numatune.x86_64-latest.args b/tests/qemuxml2argvdata/numad-static-vcpu-no-numatune.x86_64-latest.args
|
||||
index ffbccb8408..76ca5c4bea 100644
|
||||
--- a/tests/qemuxml2argvdata/numad-static-vcpu-no-numatune.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/numad-static-vcpu-no-numatune.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/numad.x86_64-latest.args b/tests/qemuxml2argvdata/numad.x86_64-latest.args
|
||||
index d4238f3d9e..138c8255f7 100644
|
||||
--- a/tests/qemuxml2argvdata/numad.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/numad.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264,"host-nodes":[0,1,2,3],"policy":"interleave"}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/numatune-auto-nodeset-invalid.x86_64-latest.args b/tests/qemuxml2argvdata/numatune-auto-nodeset-invalid.x86_64-latest.args
|
||||
index 57a2b893f1..e35471d91b 100644
|
||||
--- a/tests/qemuxml2argvdata/numatune-auto-nodeset-invalid.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/numatune-auto-nodeset-invalid.x86_64-latest.args
|
||||
@@ -16,7 +16,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-m size=219136k \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264,"host-nodes":[0,1,2,3],"policy":"preferred"}' \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
+-smp 2,sockets=2,dies=1,clusters=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
diff --git a/tests/qemuxml2argvdata/pci-expander-bus.x86_64-latest.args b/tests/qemuxml2argvdata/pci-expander-bus.x86_64-latest.args
|
||||
index bf553a8e32..d3960731be 100644
|
||||
--- a/tests/qemuxml2argvdata/pci-expander-bus.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/pci-expander-bus.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-expander-test/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 16,sockets=2,dies=1,cores=4,threads=2 \
|
||||
+-smp 16,sockets=2,dies=1,clusters=1,cores=4,threads=2 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":112197632}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node1","size":112197632}' \
|
||||
diff --git a/tests/qemuxml2argvdata/pcie-expander-bus.x86_64-latest.args b/tests/qemuxml2argvdata/pcie-expander-bus.x86_64-latest.args
|
||||
index 3fb86c29c2..b179fadc27 100644
|
||||
--- a/tests/qemuxml2argvdata/pcie-expander-bus.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/pcie-expander-bus.x86_64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-pcie-expander-bus-te/.config \
|
||||
-cpu qemu64 \
|
||||
-m size=219136k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 16,sockets=2,dies=1,cores=4,threads=2 \
|
||||
+-smp 16,sockets=2,dies=1,clusters=1,cores=4,threads=2 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":112197632}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node1","size":112197632}' \
|
||||
diff --git a/tests/qemuxml2argvdata/pseries-phb-numa-node.ppc64-latest.args b/tests/qemuxml2argvdata/pseries-phb-numa-node.ppc64-latest.args
|
||||
index 7ffcb1d8c5..942540a296 100644
|
||||
--- a/tests/qemuxml2argvdata/pseries-phb-numa-node.ppc64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/pseries-phb-numa-node.ppc64-latest.args
|
||||
@@ -15,7 +15,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-cpu POWER9 \
|
||||
-m size=2097152k \
|
||||
-overcommit mem-lock=off \
|
||||
--smp 8,sockets=2,dies=1,cores=1,threads=4 \
|
||||
+-smp 8,sockets=2,dies=1,clusters=1,cores=1,threads=4 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":1073741824,"host-nodes":[1],"policy":"bind"}' \
|
||||
-numa node,nodeid=0,cpus=0-3,memdev=ram-node0 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node1","size":1073741824,"host-nodes":[2],"policy":"bind"}' \
|
||||
--
|
||||
2.43.0
|
@ -1,61 +0,0 @@
|
||||
From d51e6092ed7977daf662ed1def0f6cd5cc6ba33d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d51e6092ed7977daf662ed1def0f6cd5cc6ba33d@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Wed, 27 Jul 2022 12:14:10 -0400
|
||||
Subject: [PATCH] qemu: don't call qemuMigrationSrcIsAllowedHostdev() from
|
||||
qemuMigrationDstPrepareFresh()
|
||||
|
||||
This call to qemuMigrationSrcIsAllowedHostdev() (which does a
|
||||
hardcoded fail of the migration if there is any PCI or mdev hostdev
|
||||
device in the domain) while doing the destination side of migration
|
||||
prep was found once the call to that same function was removed from
|
||||
the source side migration prep (commit 25883cd5).
|
||||
|
||||
According to jdenemar, for the V2 migration protocol, prep of the
|
||||
destination is the first step, so this *was* the proper place to do
|
||||
the check, but for V3 migration this is in a way redundant (since we
|
||||
will have already done the check on the source side (updated by
|
||||
25883cd5 to query QEMU rather than do a hardcoded fail)).
|
||||
|
||||
Of course it's possible that the source could support migration of a
|
||||
particular VFIO device, but the destination doesn't. But the current
|
||||
check on the destination side is worthless even in that case, since it
|
||||
is just *always* failing rather than querying QEMU; and QEMU can't be
|
||||
queried at the point where the destination check is happening, since
|
||||
it isn't yet running.
|
||||
|
||||
Anyway QEMU should complain when it's started if it's going to fail,
|
||||
so removing this check should just move the failure to happen a bit
|
||||
later. So the best solution to this problem is to simply remove the
|
||||
hardcoded check/fail from qemuMigrationDstPrepareFresh() and rely on
|
||||
QEMU to fail if it needs to.
|
||||
|
||||
Fixes: 25883cd5f0b188f2417f294b7d219a77b219f7c2
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 640d185f01858b7a8db401235c929ac4798592d0)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1497907
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 61fcaf4258..e3ba4c3f78 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -3382,9 +3382,6 @@ qemuMigrationDstPrepareFresh(virQEMUDriver *driver,
|
||||
QEMU_MIGRATION_COOKIE_CAPS;
|
||||
}
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowedHostdev(*def))
|
||||
- goto cleanup;
|
||||
-
|
||||
/* Let migration hook filter domain XML */
|
||||
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
|
||||
g_autofree char *xml = NULL;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,87 +0,0 @@
|
||||
From 80ac99d0f947f5e2fe4ff7fe9fb63b6dc6cbc1bb Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <80ac99d0f947f5e2fe4ff7fe9fb63b6dc6cbc1bb@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 01:56:11 -0400
|
||||
Subject: [PATCH] qemu: don't try to query QEMU about migration blockers during
|
||||
offline migration
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The new code that queries QEMU about migration blockers was put at the
|
||||
top of qemuMigrationSrcIsAllowed(), but that function can also be
|
||||
called in the case of offline migration (ie when the domain is
|
||||
inactive / QEMU isn't running). This check should have been put inside
|
||||
the "if (!(flags & VIR_MIGRATE_OFFLINE))" conditional, so let's move
|
||||
it there.
|
||||
|
||||
Fixes: 156e99f686690855be4e45d9b8b3194191a8bc31
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 2dd5587f1dc8e2cf4e6e0a4e4cf576b8183b33cd)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 39 +++++++++++++++++++++------------------
|
||||
1 file changed, 21 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 735eb02673..96c4c0f1da 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1458,24 +1458,6 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
int nsnapshots;
|
||||
int pauseReason;
|
||||
size_t i;
|
||||
- bool blockedReasonsCap = virQEMUCapsGet(priv->qemuCaps,
|
||||
- QEMU_CAPS_MIGRATION_BLOCKED_REASONS);
|
||||
-
|
||||
- /* Ask qemu if it has a migration blocker */
|
||||
- if (blockedReasonsCap) {
|
||||
- g_auto(GStrv) blockers = NULL;
|
||||
- if (qemuDomainGetMigrationBlockers(driver, vm,
|
||||
- VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
- &blockers) < 0)
|
||||
- return false;
|
||||
-
|
||||
- if (blockers && blockers[0]) {
|
||||
- g_autofree char *reasons = g_strjoinv("; ", blockers);
|
||||
- virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
- _("cannot migrate domain: %s"), reasons);
|
||||
- return false;
|
||||
- }
|
||||
- }
|
||||
|
||||
/* perform these checks only when migrating to remote hosts */
|
||||
if (remote) {
|
||||
@@ -1493,6 +1475,27 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
|
||||
/* following checks don't make sense for offline migration */
|
||||
if (!(flags & VIR_MIGRATE_OFFLINE)) {
|
||||
+ bool blockedReasonsCap = virQEMUCapsGet(priv->qemuCaps,
|
||||
+ QEMU_CAPS_MIGRATION_BLOCKED_REASONS);
|
||||
+
|
||||
+ /* Ask qemu if it has a migration blocker */
|
||||
+ if (blockedReasonsCap) {
|
||||
+ g_auto(GStrv) blockers = NULL;
|
||||
+
|
||||
+ if (qemuDomainGetMigrationBlockers(driver, vm,
|
||||
+ VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
+ &blockers) < 0) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if (blockers && blockers[0]) {
|
||||
+ g_autofree char *reasons = g_strjoinv("; ", blockers);
|
||||
+ virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
+ _("cannot migrate domain: %s"), reasons);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (remote) {
|
||||
/* cancel migration if disk I/O error is emitted while migrating */
|
||||
if (flags & VIR_MIGRATE_ABORT_ON_ERROR &&
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,206 +0,0 @@
|
||||
From 81f8b07ed1e4e485ded7f366739c110351120785 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <81f8b07ed1e4e485ded7f366739c110351120785@dist-git>
|
||||
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 19:29:05 +0200
|
||||
Subject: [PATCH] qemu: introduce capability
|
||||
QEMU_CAPS_MIGRATION_BLOCKED_REASONS
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
since qemu 6.0, if migration is blocked for some reason, 'query-migrate'
|
||||
will return an array of error strings describing the migration blockers.
|
||||
This can be used to check whether there are any devices blocking
|
||||
migration, etc.
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
(cherry picked from commit 1e9d84d9f9513a73572842db30e3d1445e892291)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_capabilities.c | 2 ++
|
||||
src/qemu/qemu_capabilities.h | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml | 1 +
|
||||
13 files changed, 14 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index 8586930266..48002f3b58 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -671,6 +671,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
|
||||
"chardev.qemu-vdagent", /* QEMU_CAPS_CHARDEV_QEMU_VDAGENT */
|
||||
"display-dbus", /* QEMU_CAPS_DISPLAY_DBUS */
|
||||
"iothread.thread-pool-max", /* QEMU_CAPS_IOTHREAD_THREAD_POOL_MAX */
|
||||
+ "migration.blocked-reasons", /* QEMU_CAPS_MIGRATION_BLOCKED_REASONS */
|
||||
);
|
||||
|
||||
|
||||
@@ -1623,6 +1624,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
|
||||
{ "chardev-add/arg-type/backend/+qemu-vdagent", QEMU_CAPS_CHARDEV_QEMU_VDAGENT },
|
||||
{ "query-display-options/ret-type/+dbus", QEMU_CAPS_DISPLAY_DBUS },
|
||||
{ "object-add/arg-type/+iothread/thread-pool-max", QEMU_CAPS_IOTHREAD_THREAD_POOL_MAX },
|
||||
+ { "query-migrate/ret-type/blocked-reasons", QEMU_CAPS_MIGRATION_BLOCKED_REASONS },
|
||||
};
|
||||
|
||||
typedef struct _virQEMUCapsObjectTypeProps virQEMUCapsObjectTypeProps;
|
||||
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||||
index 6f35ba1485..570e43292d 100644
|
||||
--- a/src/qemu/qemu_capabilities.h
|
||||
+++ b/src/qemu/qemu_capabilities.h
|
||||
@@ -650,6 +650,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
|
||||
QEMU_CAPS_CHARDEV_QEMU_VDAGENT, /* -chardev qemu-vdagent */
|
||||
QEMU_CAPS_DISPLAY_DBUS, /* -display dbus */
|
||||
QEMU_CAPS_IOTHREAD_THREAD_POOL_MAX, /* -object iothread.thread-pool-max */
|
||||
+ QEMU_CAPS_MIGRATION_BLOCKED_REASONS, /* query-migrate returns 'blocked-reasons */
|
||||
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml
|
||||
index 4b4cc2d3aa..3e48d17811 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml
|
||||
@@ -189,6 +189,7 @@
|
||||
<flag name='memory-backend-file.prealloc-threads'/>
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>61700242</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml
|
||||
index 06543071aa..790b7221d4 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml
|
||||
@@ -147,6 +147,7 @@
|
||||
<flag name='memory-backend-file.prealloc-threads'/>
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>39100242</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml
|
||||
index 8c61bf8a84..86c3732c72 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml
|
||||
@@ -231,6 +231,7 @@
|
||||
<flag name='memory-backend-file.prealloc-threads'/>
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100242</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml
|
||||
index afd8f606eb..bd76a7a398 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml
|
||||
@@ -236,6 +236,7 @@
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6001000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100243</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml
|
||||
index 86fc46918f..6ed51ec796 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml
|
||||
@@ -201,6 +201,7 @@
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6001050</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>61700244</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml
|
||||
index 983b54430d..1a98fe122e 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml
|
||||
@@ -196,6 +196,7 @@
|
||||
<flag name='memory-backend-file.prealloc-threads'/>
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6002000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>42900244</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml
|
||||
index 19605d93ae..a77efaaa37 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml
|
||||
@@ -238,6 +238,7 @@
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6002000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100244</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml
|
||||
index e24e2235fb..6848a075a8 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml
|
||||
@@ -209,6 +209,7 @@
|
||||
<flag name='virtio-iommu.boot-bypass'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6002092</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>61700243</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml
|
||||
index 83e0f50e3a..cf4286b78b 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml
|
||||
@@ -213,6 +213,7 @@
|
||||
<flag name='virtio-iommu.boot-bypass'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>7000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>42900243</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml
|
||||
index 05f844fd5b..8e2c1652f9 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml
|
||||
@@ -243,6 +243,7 @@
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
<flag name='display-dbus'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>7000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100243</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml
|
||||
index 3707d9b7c9..9bdb207c4e 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml
|
||||
@@ -244,6 +244,7 @@
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
<flag name='display-dbus'/>
|
||||
<flag name='iothread.thread-pool-max'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>7000050</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100244</microcodeVersion>
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,80 @@
|
||||
From 5d48c5d215071526383b8fc50d81ecde62e4111b Mon Sep 17 00:00:00 2001
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Fri, 19 Apr 2024 15:51:35 +0200
|
||||
Subject: [PATCH] qemu: migration: Don't use empty string for 'tls-hostname'
|
||||
NBD blockdev
|
||||
|
||||
While QEMU accepts and interprets an empty string in the tls-hostname
|
||||
field in migration parametes as if it's unset, the same does not apply
|
||||
for the 'tls-hostname' field when 'blockdev-add'-ing a NBD backend for
|
||||
non-shared storage migration.
|
||||
|
||||
When libvirt sets up migation with TLS in 'qemuMigrationParamsEnableTLS'
|
||||
the QEMU_MIGRATION_PARAM_TLS_HOSTNAME migration parameter will be set to
|
||||
empty string in case when the 'hostname' argument is passed as NULL.
|
||||
|
||||
Later on when setting up the NBD connections for non-shared storage
|
||||
migration 'qemuMigrationParamsGetTLSHostname', which fetches the value
|
||||
of the aforementioned TLS parameter.
|
||||
|
||||
This bug was mostly latent until recently as libvirt used
|
||||
MIGRATION_DEST_CONNECT_HOST mode in most cases which required the
|
||||
hostname to be passed, thus the parameter was set properly.
|
||||
|
||||
This changed with 8d693d79c40 for post-copy migration, where libvirt now
|
||||
instructs qemu to connect and thus passes NULL hostname to
|
||||
qemuMigrationParamsEnableTLS, which in turn causes libvirt to try to
|
||||
add NBD connection with empty string as tls-hostname resulting in:
|
||||
|
||||
error: internal error: unable to execute QEMU command 'blockdev-add': Certificate does not match the hostname
|
||||
|
||||
To address this modify 'qemuMigrationParamsGetTLSHostname' to undo the
|
||||
weird semantics the migration code uses to handle TLS hostname and make
|
||||
it return NULL if the hostname is an empty string.
|
||||
|
||||
Fixes: e8fa09d66bc
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-32880
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration_params.c | 15 +++++++++++++--
|
||||
1 file changed, 13 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index e955822f68f..48f8657f716 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -1158,6 +1158,7 @@ qemuMigrationParamsEnableTLS(virQEMUDriver *driver,
|
||||
*tlsAlias) < 0)
|
||||
return -1;
|
||||
|
||||
+ /* QEMU interprets an empty string for hostname as if it is not populated */
|
||||
if (!migParams->params[QEMU_MIGRATION_PARAM_TLS_HOSTNAME].set &&
|
||||
qemuMigrationParamsSetString(migParams,
|
||||
QEMU_MIGRATION_PARAM_TLS_HOSTNAME,
|
||||
@@ -1659,13 +1660,23 @@ qemuMigrationCapsGet(virDomainObj *vm,
|
||||
* @migParams: Migration params object
|
||||
*
|
||||
* Fetches the value of the QEMU_MIGRATION_PARAM_TLS_HOSTNAME parameter which is
|
||||
- * passed from the user as VIR_MIGRATE_PARAM_TLS_DESTINATION
|
||||
+ * passed from the user as VIR_MIGRATE_PARAM_TLS_DESTINATION.
|
||||
+ *
|
||||
+ * In contrast with the migration parameter semantics, where an empty string
|
||||
+ * is considered as if the hostname was not provided, this function will return
|
||||
+ * NULL instead of an empty string as other parts of QEMU expect that the
|
||||
+ * hostname is not provided at all.
|
||||
*/
|
||||
const char *
|
||||
qemuMigrationParamsGetTLSHostname(qemuMigrationParams *migParams)
|
||||
{
|
||||
+ const char *hostname = migParams->params[QEMU_MIGRATION_PARAM_TLS_HOSTNAME].value.s;
|
||||
+
|
||||
if (!migParams->params[QEMU_MIGRATION_PARAM_TLS_HOSTNAME].set)
|
||||
return NULL;
|
||||
|
||||
- return migParams->params[QEMU_MIGRATION_PARAM_TLS_HOSTNAME].value.s;
|
||||
+ if (STREQ(hostname, ""))
|
||||
+ return NULL;
|
||||
+
|
||||
+ return hostname;
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
From 52036c598d2670b4d103c923be1fdd95c096be4e Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <52036c598d2670b4d103c923be1fdd95c096be4e.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 16 Jan 2024 15:52:25 +0100
|
||||
Subject: [PATCH] qemu: migration: Properly handle reservation of manually
|
||||
specified NBD port
|
||||
|
||||
Originally the migration code didn't register the NBD disk port with the
|
||||
port allocator when it was manually specified. Later when commit
|
||||
e74d627bb3bc2684cbe3 refactored the code and started registering it, the
|
||||
old logic which was clearing 'priv->nbdPort' in case when it was manually
|
||||
specified was not removed.
|
||||
|
||||
This caused following problems:
|
||||
- the port was not released after successful migration
|
||||
- the port was released even when it was not allocated on failures
|
||||
regarding the NBD server start
|
||||
- the port was not released on other failures of the migration after
|
||||
NBD server startup
|
||||
|
||||
To address this we remove the assumption that 'priv->nbdPort' is used
|
||||
only for auto-allocated port and fill it only once the port is
|
||||
allocated and make the caller of qemuMigrationDstStartNBDServer
|
||||
responsible for releasing it.
|
||||
|
||||
Fixes: e74d627bb3bc2684cbe3edc1e2f7cc745b4e1ff3
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-21543
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 43f027b57c4d885fc076ffb8829d525a3c343c6f)
|
||||
---
|
||||
src/qemu/qemu_migration.c | 22 +++++++---------------
|
||||
1 file changed, 7 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 25dc16a9e9..6f8b830969 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -527,6 +527,8 @@ qemuMigrationDstPrepareStorage(virDomainObj *vm,
|
||||
* arguments in 'migrate' monitor command.
|
||||
* Error is reported here.
|
||||
*
|
||||
+ * Caller is responsible for releasing 'priv->nbdPort' from the port allocator.
|
||||
+ *
|
||||
* Returns 0 on success, -1 otherwise.
|
||||
*/
|
||||
static int
|
||||
@@ -627,6 +629,9 @@ qemuMigrationDstStartNBDServer(virQEMUDriver *driver,
|
||||
|
||||
server.port = port;
|
||||
}
|
||||
+
|
||||
+ /* caller will release the port */
|
||||
+ priv->nbdPort = server.port;
|
||||
}
|
||||
|
||||
if (qemuDomainObjEnterMonitorAsync(vm, VIR_ASYNC_JOB_MIGRATION_IN) < 0)
|
||||
@@ -643,14 +648,9 @@ qemuMigrationDstStartNBDServer(virQEMUDriver *driver,
|
||||
qemuDomainObjExitMonitor(vm);
|
||||
}
|
||||
|
||||
- if (server.transport == VIR_STORAGE_NET_HOST_TRANS_TCP)
|
||||
- priv->nbdPort = server.port;
|
||||
-
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
- if (ret < 0)
|
||||
- virPortAllocatorRelease(server.port);
|
||||
return ret;
|
||||
|
||||
exit_monitor:
|
||||
@@ -3261,11 +3261,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver,
|
||||
virDomainAuditStart(vm, "migrated", false);
|
||||
qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED,
|
||||
VIR_ASYNC_JOB_MIGRATION_IN, stopFlags);
|
||||
- /* release if port is auto selected which is not the case if
|
||||
- * it is given in parameters
|
||||
- */
|
||||
- if (nbdPort == 0)
|
||||
- virPortAllocatorRelease(priv->nbdPort);
|
||||
+ virPortAllocatorRelease(priv->nbdPort);
|
||||
priv->nbdPort = 0;
|
||||
}
|
||||
goto cleanup;
|
||||
@@ -3425,11 +3421,7 @@ qemuMigrationDstPrepareFresh(virQEMUDriver *driver,
|
||||
|
||||
if (autoPort)
|
||||
priv->migrationPort = port;
|
||||
- /* in this case port is not auto selected and we don't need to manage it
|
||||
- * anymore after cookie is baked
|
||||
- */
|
||||
- if (nbdPort != 0)
|
||||
- priv->nbdPort = 0;
|
||||
+
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
--
|
||||
2.43.0
|
@ -1,140 +0,0 @@
|
||||
From 90d326f60706a990db3ed49ba338d911471578c0 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <90d326f60706a990db3ed49ba338d911471578c0@dist-git>
|
||||
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 19:29:10 +0200
|
||||
Subject: [PATCH] qemu: new function to retrieve migration blocker reasons from
|
||||
QEMU
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Since QEMU 6.0, if migration is blocked for some reason,
|
||||
'query-migrate' will return an array of error strings describing the
|
||||
migration blockers. This can be used to check whether there are any
|
||||
devices, or other conditions, that would cause migration to fail.
|
||||
|
||||
This patch adds a function that sends this query via a QMP command and
|
||||
returns the resulting array of reasons. qemuMigrationSrcIsAllowed()
|
||||
will be able to use the new function to ask QEMU for migration
|
||||
blockers, instead of the hardcoded guesses that libvirt currently has.
|
||||
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
(cherry picked from commit 7e52c4839fabac2d19c6f22c99142e992e3d898e)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_monitor.c | 12 ++++++++++
|
||||
src/qemu/qemu_monitor.h | 4 ++++
|
||||
src/qemu/qemu_monitor_json.c | 46 ++++++++++++++++++++++++++++++++++++
|
||||
src/qemu/qemu_monitor_json.h | 3 +++
|
||||
4 files changed, 65 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
|
||||
index fda5d2f368..865a3e69ed 100644
|
||||
--- a/src/qemu/qemu_monitor.c
|
||||
+++ b/src/qemu/qemu_monitor.c
|
||||
@@ -4541,3 +4541,15 @@ qemuMonitorMigrateRecover(qemuMonitor *mon,
|
||||
|
||||
return qemuMonitorJSONMigrateRecover(mon, uri);
|
||||
}
|
||||
+
|
||||
+
|
||||
+int
|
||||
+qemuMonitorGetMigrationBlockers(qemuMonitor *mon,
|
||||
+ char ***blockers)
|
||||
+{
|
||||
+ VIR_DEBUG("blockers=%p", blockers);
|
||||
+
|
||||
+ QEMU_CHECK_MONITOR(mon);
|
||||
+
|
||||
+ return qemuMonitorJSONGetMigrationBlockers(mon, blockers);
|
||||
+}
|
||||
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
|
||||
index 95267ec6c7..0c3f023419 100644
|
||||
--- a/src/qemu/qemu_monitor.h
|
||||
+++ b/src/qemu/qemu_monitor.h
|
||||
@@ -1554,3 +1554,7 @@ qemuMonitorChangeMemoryRequestedSize(qemuMonitor *mon,
|
||||
int
|
||||
qemuMonitorMigrateRecover(qemuMonitor *mon,
|
||||
const char *uri);
|
||||
+
|
||||
+int
|
||||
+qemuMonitorGetMigrationBlockers(qemuMonitor *mon,
|
||||
+ char ***blockers);
|
||||
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
|
||||
index 3aad2ab212..84f4589c42 100644
|
||||
--- a/src/qemu/qemu_monitor_json.c
|
||||
+++ b/src/qemu/qemu_monitor_json.c
|
||||
@@ -3434,6 +3434,52 @@ int qemuMonitorJSONMigrate(qemuMonitor *mon,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+
|
||||
+/*
|
||||
+ * Get the exposed migration blockers.
|
||||
+ *
|
||||
+ * This function assume qemu has the capability of request them.
|
||||
+ *
|
||||
+ * It returns a NULL terminated array on blockers if there are any, or it set
|
||||
+ * it to NULL otherwise.
|
||||
+ */
|
||||
+int
|
||||
+qemuMonitorJSONGetMigrationBlockers(qemuMonitor *mon,
|
||||
+ char ***blockers)
|
||||
+{
|
||||
+ g_autoptr(virJSONValue) cmd = NULL;
|
||||
+ g_autoptr(virJSONValue) reply = NULL;
|
||||
+ virJSONValue *data;
|
||||
+ virJSONValue *jblockers;
|
||||
+ size_t i;
|
||||
+
|
||||
+ *blockers = NULL;
|
||||
+ if (!(cmd = qemuMonitorJSONMakeCommand("query-migrate", NULL)))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_OBJECT) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ data = virJSONValueObjectGetObject(reply, "return");
|
||||
+
|
||||
+ if (!(jblockers = virJSONValueObjectGetArray(data, "blocked-reasons")))
|
||||
+ return 0;
|
||||
+
|
||||
+ *blockers = g_new0(char *, virJSONValueArraySize(jblockers) + 1);
|
||||
+ for (i = 0; i < virJSONValueArraySize(jblockers); i++) {
|
||||
+ virJSONValue *jblocker = virJSONValueArrayGet(jblockers, i);
|
||||
+ const char *blocker = virJSONValueGetString(jblocker);
|
||||
+
|
||||
+ (*blockers)[i] = g_strdup(blocker);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
int qemuMonitorJSONMigrateCancel(qemuMonitor *mon)
|
||||
{
|
||||
g_autoptr(virJSONValue) cmd = qemuMonitorJSONMakeCommand("migrate_cancel", NULL);
|
||||
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
|
||||
index ad3853ae69..4e7d6a1a8d 100644
|
||||
--- a/src/qemu/qemu_monitor_json.h
|
||||
+++ b/src/qemu/qemu_monitor_json.h
|
||||
@@ -199,6 +199,9 @@ qemuMonitorJSONMigrate(qemuMonitor *mon,
|
||||
unsigned int flags,
|
||||
const char *uri);
|
||||
int
|
||||
+qemuMonitorJSONGetMigrationBlockers(qemuMonitor *mon,
|
||||
+ char ***blockers);
|
||||
+int
|
||||
qemuMonitorJSONGetSpiceMigrationStatus(qemuMonitor *mon,
|
||||
bool *spice_migrated);
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,80 +0,0 @@
|
||||
From 9764a6c484d4f3586b0e0be33e8c53de63b11edd Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9764a6c484d4f3586b0e0be33e8c53de63b11edd@dist-git>
|
||||
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 19:29:13 +0200
|
||||
Subject: [PATCH] qemu: query QEMU for migration blockers before our own
|
||||
harcoded checks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Since QEMU 6.0, if QEMU knows that a migration would fail,
|
||||
'query-migrate' will return an array of error strings describing the
|
||||
migration blockers. This can be used to check whether there are any
|
||||
devices/conditions blocking migration.
|
||||
|
||||
This patch adds a call to this query at the top of
|
||||
qemuMigrationSrcIsAllowed().
|
||||
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
(cherry picked from commit 156e99f686690855be4e45d9b8b3194191a8bc31)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 30 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 30 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 2a6b7b7819..cfb7626bb0 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1415,6 +1415,22 @@ qemuMigrationSrcIsAllowedHostdev(const virDomainDef *def)
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+qemuDomainGetMigrationBlockers(virQEMUDriver *driver,
|
||||
+ virDomainObj *vm,
|
||||
+ char ***blockers)
|
||||
+{
|
||||
+ qemuDomainObjPrivate *priv = vm->privateData;
|
||||
+ int rc;
|
||||
+
|
||||
+ qemuDomainObjEnterMonitor(driver, vm);
|
||||
+ rc = qemuMonitorGetMigrationBlockers(priv->mon, blockers);
|
||||
+ qemuDomainObjExitMonitor(vm);
|
||||
+
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* qemuMigrationSrcIsAllowed:
|
||||
* @driver: qemu driver struct
|
||||
@@ -1440,6 +1456,20 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
int pauseReason;
|
||||
size_t i;
|
||||
|
||||
+ /* Ask qemu if it has a migration blocker */
|
||||
+ if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_BLOCKED_REASONS)) {
|
||||
+ g_auto(GStrv) blockers = NULL;
|
||||
+ if (qemuDomainGetMigrationBlockers(driver, vm, &blockers) < 0)
|
||||
+ return false;
|
||||
+
|
||||
+ if (blockers && blockers[0]) {
|
||||
+ g_autofree char *reasons = g_strjoinv("; ", blockers);
|
||||
+ virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
+ _("cannot migrate domain: %s"), reasons);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* perform these checks only when migrating to remote hosts */
|
||||
if (remote) {
|
||||
nsnapshots = virDomainSnapshotObjListNum(vm->snapshots, NULL, 0);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,58 +0,0 @@
|
||||
From 0ba11af2300d0aaf80456575e03848f843ae29de Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0ba11af2300d0aaf80456575e03848f843ae29de@dist-git>
|
||||
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 19:29:15 +0200
|
||||
Subject: [PATCH] qemu: remove hardcoded migration fail for vDPA devices if we
|
||||
can ask QEMU
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
vDPA devices will be migratable soon, so we shouldn't unconditionally
|
||||
block migration of any domain with a vDPA device. Instead, we should
|
||||
rely on QEMU to make the decision when that info is available from the
|
||||
query-migrate QMP command (QEMU versions too old to have that info in
|
||||
the results of query-migrate don't support migration of vDPA devices,
|
||||
so in that case we will continue to unconditionally block migration).
|
||||
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
(cherry picked from commit 2103807e330487952f423d86f541a7a28e003e95)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index cfb7626bb0..2f77e45abf 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1455,9 +1455,11 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
int nsnapshots;
|
||||
int pauseReason;
|
||||
size_t i;
|
||||
+ bool blockedReasonsCap = virQEMUCapsGet(priv->qemuCaps,
|
||||
+ QEMU_CAPS_MIGRATION_BLOCKED_REASONS);
|
||||
|
||||
- /* Ask qemu if it has a migration blocker */
|
||||
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_BLOCKED_REASONS)) {
|
||||
+ /* Ask qemu if it have a migration blocker */
|
||||
+ if (blockedReasonsCap) {
|
||||
g_auto(GStrv) blockers = NULL;
|
||||
if (qemuDomainGetMigrationBlockers(driver, vm, &blockers) < 0)
|
||||
return false;
|
||||
@@ -1576,7 +1578,7 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
virDomainNetDef *net = vm->def->nets[i];
|
||||
qemuSlirp *slirp;
|
||||
|
||||
- if (net->type == VIR_DOMAIN_NET_TYPE_VDPA) {
|
||||
+ if (!blockedReasonsCap && net->type == VIR_DOMAIN_NET_TYPE_VDPA) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("vDPA devices cannot be migrated"));
|
||||
return false;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,62 +0,0 @@
|
||||
From 8f2cd77dc208cfa90b37faa18b092ca4a76a0716 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <8f2cd77dc208cfa90b37faa18b092ca4a76a0716@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 02:03:49 -0400
|
||||
Subject: [PATCH] qemu: skip hardcoded hostdev migration check if QEMU can do
|
||||
it for us
|
||||
|
||||
libvirt currently will block migration for any vfio-assigned device
|
||||
unless it is a network device that is associated with a virtio-net
|
||||
failover device (ie. if the hostdev object has a teaming->type ==
|
||||
VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT).
|
||||
|
||||
In the future there will be other vfio devices that can be migrated,
|
||||
so we don't want to rely on this hardcoded block. QEMU 6.0+ will
|
||||
anyway inform us of any devices that will block migration (as a part
|
||||
of qemuDomainGetMigrationBlockers()), so we only need to do the
|
||||
hardcoded check in the case of old QEMU that can't provide that
|
||||
information.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 25883cd5f0b188f2417f294b7d219a77b219f7c2)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1497907
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index f571c9eb27..76903d612b 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1495,6 +1495,14 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
_("cannot migrate domain: %s"), reasons);
|
||||
return false;
|
||||
}
|
||||
+ } else {
|
||||
+ /* checks here are for anything that doesn't need to be
|
||||
+ * checked by libvirt if running QEMU that can be queried
|
||||
+ * about migration blockers.
|
||||
+ */
|
||||
+
|
||||
+ if (!qemuMigrationSrcIsAllowedHostdev(vm->def))
|
||||
+ return false;
|
||||
}
|
||||
|
||||
if (remote) {
|
||||
@@ -1521,9 +1529,6 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
return false;
|
||||
}
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowedHostdev(vm->def))
|
||||
- return false;
|
||||
-
|
||||
if (vm->def->cpu) {
|
||||
/* QEMU blocks migration and save with invariant TSC enabled
|
||||
* unless TSC frequency is explicitly set.
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,58 +0,0 @@
|
||||
From 198f38fa5540c7545607b9d1beb0bfb689d56c3d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <198f38fa5540c7545607b9d1beb0bfb689d56c3d@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Thu, 1 Dec 2022 17:02:42 +0100
|
||||
Subject: [PATCH] qemuAgentGetDisks: Don't use virJSONValueObjectGetStringArray
|
||||
for optional data
|
||||
|
||||
The 'dependencies' field in the return data may be missing in some
|
||||
cases. Historically 'virJSONValueObjectGetStringArray' didn't report
|
||||
error in such case, but later refactor (commit 043b50b948ef3c2 ) added
|
||||
an error in order to use it in other places too.
|
||||
|
||||
Unfortunately this results in the error log being spammed with an
|
||||
irrelevant error in case when qemuAgentGetDisks is invoked on a VM
|
||||
running windows.
|
||||
|
||||
Replace the use of virJSONValueObjectGetStringArray by fetching the
|
||||
array first and calling virJSONValueArrayToStringList only when we have
|
||||
an array.
|
||||
|
||||
Fixes: 043b50b948ef3c2a4adf5fa32a93ec2589851ac6
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2149752
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 3b576601dfb924bb518870a01de5d1a421cbb467)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2154410
|
||||
---
|
||||
src/qemu/qemu_agent.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
|
||||
index d81f01ba77..7afef06694 100644
|
||||
--- a/src/qemu/qemu_agent.c
|
||||
+++ b/src/qemu/qemu_agent.c
|
||||
@@ -2544,6 +2544,7 @@ int qemuAgentGetDisks(qemuAgent *agent,
|
||||
for (i = 0; i < ndata; i++) {
|
||||
virJSONValue *addr;
|
||||
virJSONValue *entry = virJSONValueArrayGet(data, i);
|
||||
+ virJSONValue *dependencies;
|
||||
qemuAgentDiskInfo *disk;
|
||||
|
||||
if (!entry) {
|
||||
@@ -2569,7 +2570,11 @@ int qemuAgentGetDisks(qemuAgent *agent,
|
||||
goto error;
|
||||
}
|
||||
|
||||
- disk->dependencies = virJSONValueObjectGetStringArray(entry, "dependencies");
|
||||
+ if ((dependencies = virJSONValueObjectGetArray(entry, "dependencies"))) {
|
||||
+ if (!(disk->dependencies = virJSONValueArrayToStringList(dependencies)))
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
disk->alias = g_strdup(virJSONValueObjectGetString(entry, "alias"));
|
||||
addr = virJSONValueObjectGetObject(entry, "address");
|
||||
if (addr) {
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 9b00b5666a014999a3bc9e2e8a6a844ca7a4326f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9b00b5666a014999a3bc9e2e8a6a844ca7a4326f@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 8 Jul 2022 09:35:39 +0200
|
||||
Subject: [PATCH] qemuDomainSetIOThreadParams: Accept VIR_DOMAIN_AFFECT_CONFIG
|
||||
flag
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It was always possible to modify the inactive XML, because
|
||||
VIR_DOMAIN_AFFECT_CURRENT (= 0) is accepted implicitly. But now
|
||||
that the logic when changing both config and live XMLs is more
|
||||
robust we can accept VIR_DOMAIN_AFFECT_CONFIG flag too.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3096965ce78923b099fa39e4950279b2f21ab60a)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2059511
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 2c627396f1..654b5d65e5 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -5818,7 +5818,8 @@ qemuDomainSetIOThreadParams(virDomainPtr dom,
|
||||
qemuMonitorIOThreadInfo iothread = {0};
|
||||
int ret = -1;
|
||||
|
||||
- virCheckFlags(VIR_DOMAIN_AFFECT_LIVE, -1);
|
||||
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
||||
+ VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||
|
||||
if (iothread_id == 0) {
|
||||
virReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,40 @@
|
||||
From 2087ac009a019ceb206475363113bbe6c2821e2f Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <2087ac009a019ceb206475363113bbe6c2821e2f.1708614745.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Fri, 16 Feb 2024 16:40:20 +0100
|
||||
Subject: [PATCH] qemuMigrationDstPrepareStorage: Properly consider path for
|
||||
'vdpa' devices
|
||||
|
||||
Allow storage migration of VDPA devices by properly checking that they
|
||||
exist on the destionation. Pre-creation is not supported but if the
|
||||
device exists the migration should be able to succeed.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 00c0a94ab5f135ea7d9f0a905ff53d13c82761db)
|
||||
https://issues.redhat.com/browse/RHEL-24825
|
||||
---
|
||||
src/qemu/qemu_migration.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 3e0aae4e7c..5e27cd5dbe 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -479,10 +479,13 @@ qemuMigrationDstPrepareStorage(virDomainObj *vm,
|
||||
diskSrcPath = nvmePath;
|
||||
break;
|
||||
|
||||
+ case VIR_STORAGE_TYPE_VHOST_VDPA:
|
||||
+ diskSrcPath = disk->src->vdpadev;
|
||||
+ break;
|
||||
+
|
||||
case VIR_STORAGE_TYPE_NETWORK:
|
||||
case VIR_STORAGE_TYPE_VOLUME:
|
||||
case VIR_STORAGE_TYPE_VHOST_USER:
|
||||
- case VIR_STORAGE_TYPE_VHOST_VDPA:
|
||||
case VIR_STORAGE_TYPE_LAST:
|
||||
case VIR_STORAGE_TYPE_NONE:
|
||||
break;
|
||||
--
|
||||
2.43.2
|
@ -0,0 +1,60 @@
|
||||
From b73313c9679766c493afb91f0c691e437632e4fa Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <b73313c9679766c493afb91f0c691e437632e4fa.1708614745.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Thu, 8 Feb 2024 16:48:25 +0100
|
||||
Subject: [PATCH] qemuMigrationDstPrepareStorage: Use 'switch' statement to
|
||||
include all storage types
|
||||
|
||||
Decrease the likelyhood that addition of a new storage type will be
|
||||
forgotten.
|
||||
|
||||
This patch also unifies the type check to consult the 'actual' type of
|
||||
the storage in both cases as the NVMe check looked for the XML declared
|
||||
type while virStorageSourceIsLocalStorage() looks for the
|
||||
actual/translated type.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit e158b523b8522931200c415ef86562641a2a7c8c)
|
||||
https://issues.redhat.com/browse/RHEL-24825
|
||||
---
|
||||
src/qemu/qemu_migration.c | 22 +++++++++++++++++++---
|
||||
1 file changed, 19 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 01ab803842..3e0aae4e7c 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -465,11 +465,27 @@ qemuMigrationDstPrepareStorage(virDomainObj *vm,
|
||||
if (!qemuMigrationAnyCopyDisk(disk, nmigrate_disks, migrate_disks))
|
||||
continue;
|
||||
|
||||
- if (disk->src->type == VIR_STORAGE_TYPE_NVME) {
|
||||
+ switch (virStorageSourceGetActualType(disk->src)) {
|
||||
+ case VIR_STORAGE_TYPE_FILE:
|
||||
+ case VIR_STORAGE_TYPE_BLOCK:
|
||||
+ case VIR_STORAGE_TYPE_DIR:
|
||||
+ diskSrcPath = virDomainDiskGetSource(disk);
|
||||
+ break;
|
||||
+
|
||||
+ case VIR_STORAGE_TYPE_NVME:
|
||||
+ /* While NVMe disks are local, they are not accessible via src->path.
|
||||
+ * Therefore, we have to return false here. */
|
||||
virPCIDeviceAddressGetSysfsFile(&disk->src->nvme->pciAddr, &nvmePath);
|
||||
diskSrcPath = nvmePath;
|
||||
- } else if (virStorageSourceIsLocalStorage(disk->src)) {
|
||||
- diskSrcPath = virDomainDiskGetSource(disk);
|
||||
+ break;
|
||||
+
|
||||
+ case VIR_STORAGE_TYPE_NETWORK:
|
||||
+ case VIR_STORAGE_TYPE_VOLUME:
|
||||
+ case VIR_STORAGE_TYPE_VHOST_USER:
|
||||
+ case VIR_STORAGE_TYPE_VHOST_VDPA:
|
||||
+ case VIR_STORAGE_TYPE_LAST:
|
||||
+ case VIR_STORAGE_TYPE_NONE:
|
||||
+ break;
|
||||
}
|
||||
|
||||
if (diskSrcPath) {
|
||||
--
|
||||
2.43.2
|
@ -0,0 +1,84 @@
|
||||
From d968a490b2fb8b4c7af2c835288e6f693ea1cc67 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <d968a490b2fb8b4c7af2c835288e6f693ea1cc67.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 16 Jan 2024 16:22:03 +0100
|
||||
Subject: [PATCH] qemuMigrationDstStartNBDServer: Refactor cleanup
|
||||
|
||||
There's nothing under the 'cleanup:' label thus the whole code can be
|
||||
simplified.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 36e11cca83c6617a81528969c27579a1ab891443)
|
||||
https://issues.redhat.com/browse/RHEL-21543
|
||||
---
|
||||
src/qemu/qemu_migration.c | 18 +++++++-----------
|
||||
1 file changed, 7 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 6f8b830969..01ab803842 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -541,7 +541,6 @@ qemuMigrationDstStartNBDServer(virQEMUDriver *driver,
|
||||
const char *nbdURI,
|
||||
const char *tls_alias)
|
||||
{
|
||||
- int ret = -1;
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
size_t i;
|
||||
virStorageNetHostDef server = {
|
||||
@@ -610,22 +609,22 @@ qemuMigrationDstStartNBDServer(virQEMUDriver *driver,
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
|
||||
_("Cannot migrate empty or read-only disk %1$s"),
|
||||
disk->dst);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (!(diskAlias = qemuAliasDiskDriveFromDisk(disk)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!server_started &&
|
||||
server.transport == VIR_STORAGE_NET_HOST_TRANS_TCP) {
|
||||
if (server.port) {
|
||||
if (virPortAllocatorSetUsed(server.port) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
} else {
|
||||
unsigned short port = 0;
|
||||
|
||||
if (virPortAllocatorAcquire(driver->migrationPorts, &port) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
server.port = port;
|
||||
}
|
||||
@@ -635,7 +634,7 @@ qemuMigrationDstStartNBDServer(virQEMUDriver *driver,
|
||||
}
|
||||
|
||||
if (qemuDomainObjEnterMonitorAsync(vm, VIR_ASYNC_JOB_MIGRATION_IN) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!server_started) {
|
||||
if (qemuMonitorNBDServerStart(priv->mon, &server, tls_alias) < 0)
|
||||
@@ -648,14 +647,11 @@ qemuMigrationDstStartNBDServer(virQEMUDriver *driver,
|
||||
qemuDomainObjExitMonitor(vm);
|
||||
}
|
||||
|
||||
- ret = 0;
|
||||
-
|
||||
- cleanup:
|
||||
- return ret;
|
||||
+ return 0;
|
||||
|
||||
exit_monitor:
|
||||
qemuDomainObjExitMonitor(vm);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.43.0
|
@ -1,57 +0,0 @@
|
||||
From b76623b5921238c9a4db9b3e1958b51a4d7e8b52 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b76623b5921238c9a4db9b3e1958b51a4d7e8b52@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Wed, 28 Sep 2022 10:12:36 +0200
|
||||
Subject: [PATCH] qemuProcessReconnect: Don't build memory paths
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Let me take you on a short trip to history. A long time ago,
|
||||
libvirt would configure all QEMUs to use $hugetlbfs/libvirt/qemu
|
||||
for their hugepages setup. This was problematic, because it did
|
||||
not allow enough separation between guests. Therefore in
|
||||
v3.0.0-rc1~367 the path changed to a per-domain basis:
|
||||
|
||||
$hugetlbfs/libvirt/qemu/$domainShortName
|
||||
|
||||
And to help with migration on daemon restart a call to
|
||||
qemuProcessBuildDestroyMemoryPaths() was added to
|
||||
qemuProcessReconnect() (well, it was named
|
||||
qemuProcessBuildDestroyHugepagesPath() back then, see
|
||||
v3.10.0-rc1~174). This was desirable then, because the memory
|
||||
hotplug code did not call the function, it simply assumes
|
||||
per-domain paths to exist. But this changed in v3.5.0-rc1~92
|
||||
after which the per-domain paths are created on memory hotplug
|
||||
too.
|
||||
|
||||
Therefore, it's no longer necessary to create these paths in
|
||||
qemuProcessReconnect(). They are created exactly when needed
|
||||
(domain startup and memory hotplug).
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3478cca80ea7382cfdbff836d5d0b92aa014297b)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2152083
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_process.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||
index 062a0b6dac..979ad99f5a 100644
|
||||
--- a/src/qemu/qemu_process.c
|
||||
+++ b/src/qemu/qemu_process.c
|
||||
@@ -9004,9 +9004,6 @@ qemuProcessReconnect(void *opaque)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (qemuProcessBuildDestroyMemoryPaths(driver, obj, NULL, true) < 0)
|
||||
- goto error;
|
||||
-
|
||||
if ((qemuDomainAssignAddresses(obj->def, priv->qemuCaps,
|
||||
driver, obj, false)) < 0) {
|
||||
goto error;
|
||||
--
|
||||
2.39.0
|
||||
|
@ -0,0 +1,94 @@
|
||||
From 7dd85500450b1889a81d574337331e080b218c9f Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <7dd85500450b1889a81d574337331e080b218c9f.1707394626.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 4 Jan 2024 10:57:12 +0100
|
||||
Subject: [PATCH] qemu_capabilities: Add
|
||||
QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_DYNAMIC_MEMSLOTS capability
|
||||
|
||||
Starting from v8.2.0-rc0~74^2~2 QEMU has .dynamic-memslots
|
||||
attribute for virtio-mem-pci device. Introduce a capability which
|
||||
reflects that.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 497cab753b801c7a66e2a480482e5144665ecbf4)
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-15316
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_capabilities.c | 2 ++
|
||||
src/qemu/qemu_capabilities.h | 1 +
|
||||
tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 +
|
||||
5 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index a4d42b40ed..e13df2b27d 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -700,6 +700,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
|
||||
"virtio-blk-vhost-vdpa", /* QEMU_CAPS_DEVICE_VIRTIO_BLK_VHOST_VDPA */
|
||||
"virtio-blk.iothread-mapping", /* QEMU_CAPS_VIRTIO_BLK_IOTHREAD_MAPPING */
|
||||
"smp-clusters", /* QEMU_CAPS_SMP_CLUSTERS */
|
||||
+ "virtio-mem-pci.dynamic-memslots", /* QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_DYNAMIC_MEMSLOTS */
|
||||
);
|
||||
|
||||
|
||||
@@ -1519,6 +1520,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVhostUserFS[] =
|
||||
|
||||
static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioMemPCI[] = {
|
||||
{ "prealloc", QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_PREALLOC, NULL },
|
||||
+ { "dynamic-memslots", QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_DYNAMIC_MEMSLOTS, NULL },
|
||||
};
|
||||
|
||||
static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioIOMMU[] = {
|
||||
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||||
index a353750670..82ae4b738b 100644
|
||||
--- a/src/qemu/qemu_capabilities.h
|
||||
+++ b/src/qemu/qemu_capabilities.h
|
||||
@@ -679,6 +679,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
|
||||
QEMU_CAPS_DEVICE_VIRTIO_BLK_VHOST_VDPA, /* virtio-blk-vhost-vdpa block driver */
|
||||
QEMU_CAPS_VIRTIO_BLK_IOTHREAD_MAPPING, /* virtio-blk supports per-virtqueue iothread mapping */
|
||||
QEMU_CAPS_SMP_CLUSTERS, /* -smp clusters= */
|
||||
+ QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_DYNAMIC_MEMSLOTS, /* -device virtio-mem-pci.dynamic-memslots= */
|
||||
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml
|
||||
index 54fd349365..03c9343da5 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.2.0_aarch64.xml
|
||||
@@ -163,6 +163,7 @@
|
||||
<flag name='qcow2-discard-no-unref'/>
|
||||
<flag name='run-with.async-teardown'/>
|
||||
<flag name='smp-clusters'/>
|
||||
+ <flag name='virtio-mem-pci.dynamic-memslots'/>
|
||||
<version>8002000</version>
|
||||
<microcodeVersion>61700246</microcodeVersion>
|
||||
<package>v8.2.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml
|
||||
index 8a6527810a..d16cd88720 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.xml
|
||||
@@ -200,6 +200,7 @@
|
||||
<flag name='run-with.async-teardown'/>
|
||||
<flag name='virtio-blk-vhost-vdpa'/>
|
||||
<flag name='smp-clusters'/>
|
||||
+ <flag name='virtio-mem-pci.dynamic-memslots'/>
|
||||
<version>8002000</version>
|
||||
<microcodeVersion>43100246</microcodeVersion>
|
||||
<package>v8.2.0</package>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
|
||||
index b4c3b1bae3..65eaa08cd4 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml
|
||||
@@ -201,6 +201,7 @@
|
||||
<flag name='virtio-blk-vhost-vdpa'/>
|
||||
<flag name='virtio-blk.iothread-mapping'/>
|
||||
<flag name='smp-clusters'/>
|
||||
+ <flag name='virtio-mem-pci.dynamic-memslots'/>
|
||||
<version>8002050</version>
|
||||
<microcodeVersion>43100245</microcodeVersion>
|
||||
<package>v8.2.0-196-g7425b6277f</package>
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,62 @@
|
||||
From 866ec16d8264b3ef2533b276d161e6dc1db470a0 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <866ec16d8264b3ef2533b276d161e6dc1db470a0.1707394627.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 4 Jan 2024 10:49:06 +0100
|
||||
Subject: [PATCH] qemu_command: Generate cmd line for virtio-mem
|
||||
dynamicMemslots
|
||||
|
||||
This is pretty straightforward.
|
||||
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-15316
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit dab99eedcd15d135e287185ce03eb05338ce225d)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_command.c | 3 +++
|
||||
.../memory-hotplug-virtio-mem.x86_64-latest.args | 2 +-
|
||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 712feb7b81..4d5a202c7d 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -3653,6 +3653,7 @@ qemuBuildMemoryDeviceProps(virQEMUDriverConfig *cfg,
|
||||
unsigned long long requestedsize = 0;
|
||||
unsigned long long address = 0;
|
||||
bool prealloc = false;
|
||||
+ virTristateBool dynamicMemslots = VIR_TRISTATE_BOOL_ABSENT;
|
||||
|
||||
if (!mem->info.alias) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
@@ -3694,6 +3695,7 @@ qemuBuildMemoryDeviceProps(virQEMUDriverConfig *cfg,
|
||||
blocksize = mem->target.virtio_mem.blocksize;
|
||||
requestedsize = mem->target.virtio_mem.requestedsize;
|
||||
address = mem->target.virtio_mem.address;
|
||||
+ dynamicMemslots = mem->target.virtio_mem.dynamicMemslots;
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC:
|
||||
@@ -3716,6 +3718,7 @@ qemuBuildMemoryDeviceProps(virQEMUDriverConfig *cfg,
|
||||
"s:memdev", memdev,
|
||||
"B:prealloc", prealloc,
|
||||
"P:memaddr", address,
|
||||
+ "T:dynamic-memslots", dynamicMemslots,
|
||||
"s:id", mem->info.alias,
|
||||
NULL) < 0)
|
||||
return NULL;
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
|
||||
index dbe96ae21d..36cff6ec13 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
|
||||
@@ -32,7 +32,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"memvirtiomem0","reserve":false,"size":1073741824}' \
|
||||
-device '{"driver":"virtio-mem-pci","node":0,"block-size":2097152,"requested-size":536870912,"memdev":"memvirtiomem0","id":"virtiomem0","bus":"pci.0","addr":"0x2"}' \
|
||||
-object '{"qom-type":"memory-backend-file","id":"memvirtiomem1","mem-path":"/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1","reserve":false,"size":2147483648,"host-nodes":[1,2,3],"policy":"bind"}' \
|
||||
--device '{"driver":"virtio-mem-pci","node":0,"block-size":2097152,"requested-size":1073741824,"memdev":"memvirtiomem1","prealloc":true,"memaddr":5637144576,"id":"virtiomem1","bus":"pci.1","addr":"0x1"}' \
|
||||
+-device '{"driver":"virtio-mem-pci","node":0,"block-size":2097152,"requested-size":1073741824,"memdev":"memvirtiomem1","prealloc":true,"memaddr":5637144576,"dynamic-memslots":true,"id":"virtiomem1","bus":"pci.1","addr":"0x1"}' \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-format","id":"ide0-0-0","bootindex":1}' \
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,67 @@
|
||||
From 7a7c3f71744b2211bdf50332918495d3042e3236 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <7a7c3f71744b2211bdf50332918495d3042e3236.1706524416.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Wed, 24 Jan 2024 18:43:21 +0100
|
||||
Subject: [PATCH] qemu_hotplug: Don't lose 'created' flag in
|
||||
qemuDomainChangeNet()
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
After v9.1.0-rc1~116 we track whether it's us who created a
|
||||
macvtap or not. But when updating a vNIC its definition might be
|
||||
replaced with a new one (though, ifname is not allowed to
|
||||
change), e.g. to reflect new QoS, link state, etc.
|
||||
|
||||
Now, the fact whether we created macvtap for given vNIC is stored
|
||||
in net->privateData->created. And replacing definition is done by
|
||||
simply freeing the old definition and making the pointer point to
|
||||
the new one. But this does not preserve the 'created' flag, which
|
||||
in turn means when a domain is shutting off, the macvtap is not
|
||||
removed (see loop inside of qemuProcessStop()).
|
||||
|
||||
Copy this flag into new definition and leave a note in
|
||||
_qemuDomainNetworkPrivate struct.
|
||||
|
||||
Fixes: 61d1b9e6592660121aeda66bf7adbcd39de06aa8
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-22714
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit ccfc5c1e1637d20e479fafde7aa3ea4c6fb29e21)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_domain.h | 2 ++
|
||||
src/qemu/qemu_hotplug.c | 5 +++++
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
|
||||
index fa566dded6..0b5af5d014 100644
|
||||
--- a/src/qemu/qemu_domain.h
|
||||
+++ b/src/qemu/qemu_domain.h
|
||||
@@ -420,6 +420,8 @@ typedef struct _qemuDomainNetworkPrivate qemuDomainNetworkPrivate;
|
||||
struct _qemuDomainNetworkPrivate {
|
||||
virObject parent;
|
||||
|
||||
+ /* Don't forget to possibly copy these members in qemuDomainChangeNet(). */
|
||||
+
|
||||
/* True if the device was created by us. Otherwise we should
|
||||
* avoid removing it. Currently only used for
|
||||
* VIR_DOMAIN_NET_TYPE_DIRECT. */
|
||||
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
|
||||
index 0e45bd53e1..31b00e05ca 100644
|
||||
--- a/src/qemu/qemu_hotplug.c
|
||||
+++ b/src/qemu/qemu_hotplug.c
|
||||
@@ -4166,6 +4166,11 @@ qemuDomainChangeNet(virQEMUDriver *driver,
|
||||
else
|
||||
VIR_WARN("Unable to release network device '%s'", NULLSTR(olddev->ifname));
|
||||
}
|
||||
+
|
||||
+ /* Carry over fact whether we created the device or not. */
|
||||
+ QEMU_DOMAIN_NETWORK_PRIVATE(newdev)->created =
|
||||
+ QEMU_DOMAIN_NETWORK_PRIVATE(olddev)->created;
|
||||
+
|
||||
virDomainNetDefFree(olddev);
|
||||
/* move newdev into the nets list, and NULL it out from the
|
||||
* virDomainDeviceDef that we were given so that the caller
|
||||
--
|
||||
2.43.0
|
@ -1,132 +0,0 @@
|
||||
From d4c4660b097695916244307d1125a17c30c0c9ef Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d4c4660b097695916244307d1125a17c30c0c9ef@dist-git>
|
||||
From: Martin Kletzander <mkletzan@redhat.com>
|
||||
Date: Fri, 22 Jul 2022 12:20:04 +0200
|
||||
Subject: [PATCH] qemu_migration: Acquire correct job in
|
||||
qemuMigrationSrcIsAllowed
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Commit 62627524607f added the acquiring of a job, but it is not always
|
||||
VIR_ASYNC_JOB_MIGRATION_OUT, so the code fails when doing save or anything else.
|
||||
Correct the async job by passing it from the caller as another parameter.
|
||||
|
||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 69e0e33873f1aec55df77f12fb0197d50dca3319)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 8 ++++----
|
||||
src/qemu/qemu_migration.c | 7 ++++---
|
||||
src/qemu/qemu_migration.h | 1 +
|
||||
src/qemu/qemu_snapshot.c | 4 ++--
|
||||
4 files changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 654b5d65e5..847c96639d 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -2650,13 +2650,13 @@ qemuDomainSaveInternal(virQEMUDriver *driver,
|
||||
virQEMUSaveData *data = NULL;
|
||||
g_autoptr(qemuDomainSaveCookie) cookie = NULL;
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
|
||||
- goto cleanup;
|
||||
-
|
||||
if (qemuDomainObjBeginAsyncJob(driver, vm, VIR_ASYNC_JOB_SAVE,
|
||||
VIR_DOMAIN_JOB_OPERATION_SAVE, flags) < 0)
|
||||
goto cleanup;
|
||||
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_SAVE, 0))
|
||||
+ goto cleanup;
|
||||
+
|
||||
if (!virDomainObjIsActive(vm)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("guest unexpectedly quit"));
|
||||
@@ -3176,7 +3176,7 @@ doCoreDump(virQEMUDriver *driver,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_DUMP, 0))
|
||||
goto cleanup;
|
||||
|
||||
if (qemuMigrationSrcToFile(driver, vm, fd, compressor,
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 96c4c0f1da..f571c9eb27 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1452,6 +1452,7 @@ bool
|
||||
qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
bool remote,
|
||||
+ int asyncJob,
|
||||
unsigned int flags)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
@@ -1483,7 +1484,7 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
g_auto(GStrv) blockers = NULL;
|
||||
|
||||
if (qemuDomainGetMigrationBlockers(driver, vm,
|
||||
- VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
+ asyncJob,
|
||||
&blockers) < 0) {
|
||||
return false;
|
||||
}
|
||||
@@ -2632,7 +2633,7 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
|
||||
qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_BEGIN3) < 0)
|
||||
return NULL;
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, true, flags))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, true, priv->job.asyncJob, flags))
|
||||
return NULL;
|
||||
|
||||
if (!(flags & (VIR_MIGRATE_UNSAFE | VIR_MIGRATE_OFFLINE)) &&
|
||||
@@ -6033,7 +6034,7 @@ qemuMigrationSrcPerformJob(virQEMUDriver *driver,
|
||||
if (!(flags & VIR_MIGRATE_OFFLINE) && virDomainObjCheckActive(vm) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, true, flags))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, true, VIR_ASYNC_JOB_MIGRATION_OUT, flags))
|
||||
goto endjob;
|
||||
|
||||
if (!(flags & (VIR_MIGRATE_UNSAFE | VIR_MIGRATE_OFFLINE)) &&
|
||||
diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h
|
||||
index 81cc1e91c0..61d12d6eb1 100644
|
||||
--- a/src/qemu/qemu_migration.h
|
||||
+++ b/src/qemu/qemu_migration.h
|
||||
@@ -229,6 +229,7 @@ bool
|
||||
qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
bool remote,
|
||||
+ int asyncJob,
|
||||
unsigned int flags);
|
||||
|
||||
int
|
||||
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
|
||||
index 833f880252..0733d44faa 100644
|
||||
--- a/src/qemu/qemu_snapshot.c
|
||||
+++ b/src/qemu/qemu_snapshot.c
|
||||
@@ -291,7 +291,7 @@ qemuSnapshotCreateActiveInternal(virQEMUDriver *driver,
|
||||
virDomainSnapshotDef *snapdef = virDomainSnapshotObjGetDef(snap);
|
||||
int ret = -1;
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_SNAPSHOT, 0))
|
||||
goto cleanup;
|
||||
|
||||
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
|
||||
@@ -1422,7 +1422,7 @@ qemuSnapshotCreateActiveExternal(virQEMUDriver *driver,
|
||||
/* do the memory snapshot if necessary */
|
||||
if (memory) {
|
||||
/* check if migration is possible */
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_SNAPSHOT, 0))
|
||||
goto cleanup;
|
||||
|
||||
qemuDomainJobSetStatsType(priv->job.current,
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,229 +0,0 @@
|
||||
From b8c791a3fc2767e6d899e3e0c590a93cb0ee7e03 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b8c791a3fc2767e6d899e3e0c590a93cb0ee7e03@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 30 Jun 2022 12:52:38 +0200
|
||||
Subject: [PATCH] qemu_migration: Apply max-postcopy-bandwidth on post-copy
|
||||
resume
|
||||
|
||||
When resuming post-copy migration users may want to limit the bandwidth
|
||||
used by the migration and use a value that is different from the one
|
||||
specified when the migration was originally started.
|
||||
|
||||
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/333
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 766abdc291ba606379a7d197bff477fef25fb508)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2111070
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 12 ++++++--
|
||||
src/qemu/qemu_migration_params.c | 45 ++++++++++++++++++----------
|
||||
src/qemu/qemu_migration_paramspriv.h | 3 +-
|
||||
tests/qemumigparamstest.c | 2 +-
|
||||
tests/qemumigrationcookiexmltest.c | 2 +-
|
||||
5 files changed, 42 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 285a49c5ff..8a2f5b09a1 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -5097,12 +5097,13 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
|
||||
static int
|
||||
qemuMigrationSrcResume(virDomainObj *vm,
|
||||
- qemuMigrationParams *migParams G_GNUC_UNUSED,
|
||||
+ qemuMigrationParams *migParams,
|
||||
const char *cookiein,
|
||||
int cookieinlen,
|
||||
char **cookieout,
|
||||
int *cookieoutlen,
|
||||
- qemuMigrationSpec *spec)
|
||||
+ qemuMigrationSpec *spec,
|
||||
+ unsigned long flags)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
virQEMUDriver *driver = priv->driver;
|
||||
@@ -5119,6 +5120,10 @@ qemuMigrationSrcResume(virDomainObj *vm,
|
||||
if (!mig)
|
||||
return -1;
|
||||
|
||||
+ if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
+ migParams, flags) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
if (qemuDomainObjEnterMonitorAsync(driver, vm,
|
||||
VIR_ASYNC_JOB_MIGRATION_OUT) < 0)
|
||||
return -1;
|
||||
@@ -5200,6 +5205,7 @@ qemuMigrationSrcPerformNative(virQEMUDriver *driver,
|
||||
|
||||
if (STREQ(uribits->scheme, "unix")) {
|
||||
if ((flags & VIR_MIGRATE_TLS) &&
|
||||
+ !(flags & VIR_MIGRATE_POSTCOPY_RESUME) &&
|
||||
!qemuMigrationParamsTLSHostnameIsSet(migParams)) {
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("Explicit destination hostname is required "
|
||||
@@ -5231,7 +5237,7 @@ qemuMigrationSrcPerformNative(virQEMUDriver *driver,
|
||||
|
||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||
ret = qemuMigrationSrcResume(vm, migParams, cookiein, cookieinlen,
|
||||
- cookieout, cookieoutlen, &spec);
|
||||
+ cookieout, cookieoutlen, &spec, flags);
|
||||
} else {
|
||||
ret = qemuMigrationSrcRun(driver, vm, persist_xml, cookiein, cookieinlen,
|
||||
cookieout, cookieoutlen, flags, resource,
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index a68aed9aa4..6ea0bde13a 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -141,6 +141,7 @@ struct _qemuMigrationParamsTPMapItem {
|
||||
typedef struct _qemuMigrationParamInfoItem qemuMigrationParamInfoItem;
|
||||
struct _qemuMigrationParamInfoItem {
|
||||
qemuMigrationParamType type;
|
||||
+ bool applyOnPostcopyResume;
|
||||
};
|
||||
|
||||
/* Migration capabilities which should always be enabled as long as they
|
||||
@@ -265,6 +266,7 @@ static const qemuMigrationParamInfoItem qemuMigrationParamInfo[] = {
|
||||
},
|
||||
[QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH] = {
|
||||
.type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ .applyOnPostcopyResume = true,
|
||||
},
|
||||
[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS] = {
|
||||
.type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
@@ -782,7 +784,8 @@ qemuMigrationParamsFromJSON(virJSONValue *params)
|
||||
|
||||
|
||||
virJSONValue *
|
||||
-qemuMigrationParamsToJSON(qemuMigrationParams *migParams)
|
||||
+qemuMigrationParamsToJSON(qemuMigrationParams *migParams,
|
||||
+ bool postcopyResume)
|
||||
{
|
||||
g_autoptr(virJSONValue) params = virJSONValueNewObject();
|
||||
size_t i;
|
||||
@@ -795,6 +798,9 @@ qemuMigrationParamsToJSON(qemuMigrationParams *migParams)
|
||||
if (!pv->set)
|
||||
continue;
|
||||
|
||||
+ if (postcopyResume && !qemuMigrationParamInfo[i].applyOnPostcopyResume)
|
||||
+ continue;
|
||||
+
|
||||
switch (qemuMigrationParamInfo[i].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
rc = virJSONValueObjectAppendNumberInt(params, name, pv->value.i);
|
||||
@@ -868,6 +874,7 @@ qemuMigrationCapsToJSON(virBitmap *caps,
|
||||
*
|
||||
* Send parameters stored in @migParams to QEMU. If @apiFlags is non-zero, some
|
||||
* parameters that do not make sense for the enabled flags will be ignored.
|
||||
+ * VIR_MIGRATE_POSTCOPY_RESUME is the only flag checked currently.
|
||||
*
|
||||
* Returns 0 on success, -1 on failure.
|
||||
*/
|
||||
@@ -876,32 +883,38 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
int asyncJob,
|
||||
qemuMigrationParams *migParams,
|
||||
- unsigned long apiFlags G_GNUC_UNUSED)
|
||||
+ unsigned long apiFlags)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
bool xbzrleCacheSize_old = false;
|
||||
g_autoptr(virJSONValue) params = NULL;
|
||||
g_autoptr(virJSONValue) caps = NULL;
|
||||
qemuMigrationParam xbzrle = QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE;
|
||||
+ bool postcopyResume = !!(apiFlags & VIR_MIGRATE_POSTCOPY_RESUME);
|
||||
int ret = -1;
|
||||
|
||||
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
||||
return -1;
|
||||
|
||||
- if (asyncJob == VIR_ASYNC_JOB_NONE) {
|
||||
- if (!virBitmapIsAllClear(migParams->caps)) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("Migration capabilities can only be set by "
|
||||
- "a migration job"));
|
||||
- goto cleanup;
|
||||
- }
|
||||
- } else {
|
||||
- if (!(caps = qemuMigrationCapsToJSON(priv->migrationCaps, migParams->caps)))
|
||||
- goto cleanup;
|
||||
+ /* Changing capabilities is only allowed before migration starts, we need
|
||||
+ * to skip them when resuming post-copy migration.
|
||||
+ */
|
||||
+ if (!postcopyResume) {
|
||||
+ if (asyncJob == VIR_ASYNC_JOB_NONE) {
|
||||
+ if (!virBitmapIsAllClear(migParams->caps)) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
+ _("Migration capabilities can only be set by "
|
||||
+ "a migration job"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (!(caps = qemuMigrationCapsToJSON(priv->migrationCaps, migParams->caps)))
|
||||
+ goto cleanup;
|
||||
|
||||
- if (virJSONValueArraySize(caps) > 0 &&
|
||||
- qemuMonitorSetMigrationCapabilities(priv->mon, &caps) < 0)
|
||||
- goto cleanup;
|
||||
+ if (virJSONValueArraySize(caps) > 0 &&
|
||||
+ qemuMonitorSetMigrationCapabilities(priv->mon, &caps) < 0)
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* If QEMU is too old to support xbzrle-cache-size migration parameter,
|
||||
@@ -917,7 +930,7 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
migParams->params[xbzrle].set = false;
|
||||
}
|
||||
|
||||
- if (!(params = qemuMigrationParamsToJSON(migParams)))
|
||||
+ if (!(params = qemuMigrationParamsToJSON(migParams, postcopyResume)))
|
||||
goto cleanup;
|
||||
|
||||
if (virJSONValueObjectKeysNumber(params) > 0 &&
|
||||
diff --git a/src/qemu/qemu_migration_paramspriv.h b/src/qemu/qemu_migration_paramspriv.h
|
||||
index f7e0f51fbd..34d51231ff 100644
|
||||
--- a/src/qemu/qemu_migration_paramspriv.h
|
||||
+++ b/src/qemu/qemu_migration_paramspriv.h
|
||||
@@ -26,7 +26,8 @@
|
||||
#pragma once
|
||||
|
||||
virJSONValue *
|
||||
-qemuMigrationParamsToJSON(qemuMigrationParams *migParams);
|
||||
+qemuMigrationParamsToJSON(qemuMigrationParams *migParams,
|
||||
+ bool postcopyResume);
|
||||
|
||||
qemuMigrationParams *
|
||||
qemuMigrationParamsFromJSON(virJSONValue *params);
|
||||
diff --git a/tests/qemumigparamstest.c b/tests/qemumigparamstest.c
|
||||
index bcdee5f32b..5d45a9dd58 100644
|
||||
--- a/tests/qemumigparamstest.c
|
||||
+++ b/tests/qemumigparamstest.c
|
||||
@@ -155,7 +155,7 @@ qemuMigParamsTestJSON(const void *opaque)
|
||||
if (!(migParams = qemuMigrationParamsFromJSON(paramsIn)))
|
||||
return -1;
|
||||
|
||||
- if (!(paramsOut = qemuMigrationParamsToJSON(migParams)) ||
|
||||
+ if (!(paramsOut = qemuMigrationParamsToJSON(migParams, false)) ||
|
||||
!(actualJSON = virJSONValueToString(paramsOut, true)))
|
||||
return -1;
|
||||
|
||||
diff --git a/tests/qemumigrationcookiexmltest.c b/tests/qemumigrationcookiexmltest.c
|
||||
index 316bfedd15..9731348b53 100644
|
||||
--- a/tests/qemumigrationcookiexmltest.c
|
||||
+++ b/tests/qemumigrationcookiexmltest.c
|
||||
@@ -333,7 +333,7 @@ testQemuMigrationCookieBlockDirtyBitmaps(const void *opaque)
|
||||
|
||||
qemuMigrationParamsSetBlockDirtyBitmapMapping(migParams, &migParamsBitmaps);
|
||||
|
||||
- if (!(paramsOut = qemuMigrationParamsToJSON(migParams)) ||
|
||||
+ if (!(paramsOut = qemuMigrationParamsToJSON(migParams, false)) ||
|
||||
!(actualJSON = virJSONValueToString(paramsOut, true)))
|
||||
return -1;
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,70 +0,0 @@
|
||||
From d24586ede83472f850d1a0c520d482ac5f908696 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d24586ede83472f850d1a0c520d482ac5f908696@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 30 Jun 2022 12:51:55 +0200
|
||||
Subject: [PATCH] qemu_migration: Pass migParams to qemuMigrationSrcResume
|
||||
|
||||
So the we can apply selected migration parameters even when resuming
|
||||
post-copy migration.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 8c335b5530194dbcef719a4d88c89b8723b831a5)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2111070
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 8cbd73a809..285a49c5ff 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -5097,6 +5097,7 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
|
||||
static int
|
||||
qemuMigrationSrcResume(virDomainObj *vm,
|
||||
+ qemuMigrationParams *migParams G_GNUC_UNUSED,
|
||||
const char *cookiein,
|
||||
int cookieinlen,
|
||||
char **cookieout,
|
||||
@@ -5229,7 +5230,7 @@ qemuMigrationSrcPerformNative(virQEMUDriver *driver,
|
||||
spec.fwdType = MIGRATION_FWD_DIRECT;
|
||||
|
||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||
- ret = qemuMigrationSrcResume(vm, cookiein, cookieinlen,
|
||||
+ ret = qemuMigrationSrcResume(vm, migParams, cookiein, cookieinlen,
|
||||
cookieout, cookieoutlen, &spec);
|
||||
} else {
|
||||
ret = qemuMigrationSrcRun(driver, vm, persist_xml, cookiein, cookieinlen,
|
||||
@@ -6124,6 +6125,7 @@ qemuMigrationSrcPerformResume(virQEMUDriver *driver,
|
||||
virConnectPtr conn,
|
||||
virDomainObj *vm,
|
||||
const char *uri,
|
||||
+ qemuMigrationParams *migParams,
|
||||
const char *cookiein,
|
||||
int cookieinlen,
|
||||
char **cookieout,
|
||||
@@ -6148,7 +6150,7 @@ qemuMigrationSrcPerformResume(virQEMUDriver *driver,
|
||||
ret = qemuMigrationSrcPerformNative(driver, vm, NULL, uri,
|
||||
cookiein, cookieinlen,
|
||||
cookieout, cookieoutlen, flags,
|
||||
- 0, NULL, NULL, 0, NULL, NULL, NULL);
|
||||
+ 0, NULL, NULL, 0, NULL, migParams, NULL);
|
||||
|
||||
if (virCloseCallbacksSet(driver->closeCallbacks, vm, conn,
|
||||
qemuMigrationAnyConnectionClosed) < 0)
|
||||
@@ -6188,7 +6190,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver,
|
||||
int ret = -1;
|
||||
|
||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||
- return qemuMigrationSrcPerformResume(driver, conn, vm, uri,
|
||||
+ return qemuMigrationSrcPerformResume(driver, conn, vm, uri, migParams,
|
||||
cookiein, cookieinlen,
|
||||
cookieout, cookieoutlen, flags);
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,51 +0,0 @@
|
||||
From c50cae68f0d083ad0c5ffcf85908cc62eeaa866d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c50cae68f0d083ad0c5ffcf85908cc62eeaa866d@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 19 Jul 2022 13:48:44 +0200
|
||||
Subject: [PATCH] qemu_migration: Store original migration params in status XML
|
||||
|
||||
We keep original values of migration parameters so that we can restore
|
||||
them at the end of migration to make sure later migration does not use
|
||||
some random values. However, this does not really work when libvirt
|
||||
daemon is restarted on the source host because we failed to explicitly
|
||||
save the status XML after getting the migration parameters from QEMU.
|
||||
Actually it might work if the status XML is written later for some other
|
||||
reason such as domain state change, but that's not how it should work.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit c7238941357f0d2e94524cf8c5ad7d9c82dcf2f9)
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 8a2f5b09a1..9289df81eb 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -3245,6 +3245,9 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver,
|
||||
migParams, mig->caps->automatic) < 0)
|
||||
goto error;
|
||||
|
||||
+ /* Save original migration parameters */
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
+
|
||||
/* Migrations using TLS need to add the "tls-creds-x509" object and
|
||||
* set the migration TLS parameters */
|
||||
if (flags & VIR_MIGRATE_TLS) {
|
||||
@@ -4822,6 +4825,9 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
migParams, mig->caps->automatic) < 0)
|
||||
goto error;
|
||||
|
||||
+ /* Save original migration parameters */
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
+
|
||||
if (flags & VIR_MIGRATE_TLS) {
|
||||
const char *hostname = NULL;
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,64 +0,0 @@
|
||||
From 25fe3cf8990b654fd568f580b8885102b3f92789 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <25fe3cf8990b654fd568f580b8885102b3f92789@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 15:00:28 +0200
|
||||
Subject: [PATCH] qemu_migration: Use EnterMonitorAsync in
|
||||
qemuDomainGetMigrationBlockers
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The code is run with an async job and thus needs to make sure a nested
|
||||
job is acquired before entering the monitor.
|
||||
|
||||
While touching the code in qemuMigrationSrcIsAllowed I also fixed the
|
||||
grammar which was accidentally broken by v8.5.0-140-g2103807e33.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 62627524607f214e724a48fcac575737f49a271c)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 2f77e45abf..735eb02673 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1418,12 +1418,15 @@ qemuMigrationSrcIsAllowedHostdev(const virDomainDef *def)
|
||||
static int
|
||||
qemuDomainGetMigrationBlockers(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
+ int asyncJob,
|
||||
char ***blockers)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
int rc;
|
||||
|
||||
- qemuDomainObjEnterMonitor(driver, vm);
|
||||
+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
rc = qemuMonitorGetMigrationBlockers(priv->mon, blockers);
|
||||
qemuDomainObjExitMonitor(vm);
|
||||
|
||||
@@ -1458,10 +1461,12 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
bool blockedReasonsCap = virQEMUCapsGet(priv->qemuCaps,
|
||||
QEMU_CAPS_MIGRATION_BLOCKED_REASONS);
|
||||
|
||||
- /* Ask qemu if it have a migration blocker */
|
||||
+ /* Ask qemu if it has a migration blocker */
|
||||
if (blockedReasonsCap) {
|
||||
g_auto(GStrv) blockers = NULL;
|
||||
- if (qemuDomainGetMigrationBlockers(driver, vm, &blockers) < 0)
|
||||
+ if (qemuDomainGetMigrationBlockers(driver, vm,
|
||||
+ VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
+ &blockers) < 0)
|
||||
return false;
|
||||
|
||||
if (blockers && blockers[0]) {
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,62 +0,0 @@
|
||||
From 0022c9aef2ecf60e9091e6df57e56065b14b67c5 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0022c9aef2ecf60e9091e6df57e56065b14b67c5@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 28 Jul 2022 15:35:45 +0200
|
||||
Subject: [PATCH] qemu_migration_params: Avoid deadlock in
|
||||
qemuMigrationParamsReset
|
||||
|
||||
In my recent comnmit v8.5.0-188-gc47f1abb81 I accidentally moved
|
||||
qemuMigrationParamsResetTLS after qemuDomainObjEnterMonitorAsync not
|
||||
noticing qemuMigrationParamsResetTLS will try to enter the monitor
|
||||
again. The second call will time out and return with a domain object
|
||||
locked. But we're still in monitor section and the object should be
|
||||
unlocked which means qemuDomainObjExitMonitor will deadlock trying to
|
||||
lock it again.
|
||||
|
||||
Fixes: c47f1abb81194461377a0c608a7ecd87f9ce9146
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 8cb19a9b9a56ab6ebefc1f913c545e0bb86d4364)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration_params.c | 12 +++++++++---
|
||||
1 file changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 4a824ff5e1..4766d16e64 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -1291,6 +1291,7 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
{
|
||||
virErrorPtr err;
|
||||
g_autoptr(virBitmap) clearCaps = NULL;
|
||||
+ int rc;
|
||||
|
||||
virErrorPreserveLast(&err);
|
||||
|
||||
@@ -1305,11 +1306,16 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
|
||||
clearCaps = virBitmapNew(0);
|
||||
|
||||
- if (qemuMigrationParamsApplyCaps(vm, clearCaps) == 0 &&
|
||||
- qemuMigrationParamsApplyValues(vm, origParams, false) == 0)
|
||||
- qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
+ rc = 0;
|
||||
+ if (qemuMigrationParamsApplyCaps(vm, clearCaps) < 0 ||
|
||||
+ qemuMigrationParamsApplyValues(vm, origParams, false) < 0)
|
||||
+ rc = -1;
|
||||
|
||||
qemuDomainObjExitMonitor(vm);
|
||||
+ if (rc < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
|
||||
cleanup:
|
||||
virErrorRestore(&err);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,107 +0,0 @@
|
||||
From 852927ea725deae6d4ef8a87383a78d9b0b1cd83 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <852927ea725deae6d4ef8a87383a78d9b0b1cd83@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 15:59:51 +0200
|
||||
Subject: [PATCH] qemu_migration_params: Refactor qemuMigrationParamsApply
|
||||
|
||||
qemuMigrationParamsApply restricts when capabilities can be set, but
|
||||
this is not useful in all cases. Let's create new helpers for setting
|
||||
migration capabilities and parameters which can be reused in more places
|
||||
without the restriction.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit c0824fd03802085db698c10fe62c98cc95a57941)
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration_params.c | 55 +++++++++++++++++++++++---------
|
||||
1 file changed, 40 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 0bce358ac3..7b9e5453f6 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -864,6 +864,43 @@ qemuMigrationCapsToJSON(virBitmap *caps,
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+qemuMigrationParamsApplyCaps(virDomainObj *vm,
|
||||
+ virBitmap *states)
|
||||
+{
|
||||
+ qemuDomainObjPrivate *priv = vm->privateData;
|
||||
+ g_autoptr(virJSONValue) json = NULL;
|
||||
+
|
||||
+ if (!(json = qemuMigrationCapsToJSON(priv->migrationCaps, states)))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (virJSONValueArraySize(json) > 0 &&
|
||||
+ qemuMonitorSetMigrationCapabilities(priv->mon, &json) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+qemuMigrationParamsApplyValues(virDomainObj *vm,
|
||||
+ qemuMigrationParams *params,
|
||||
+ bool postcopyResume)
|
||||
+{
|
||||
+ qemuDomainObjPrivate *priv = vm->privateData;
|
||||
+ g_autoptr(virJSONValue) json = NULL;
|
||||
+
|
||||
+ if (!(json = qemuMigrationParamsToJSON(params, postcopyResume)))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (virJSONValueObjectKeysNumber(json) > 0 &&
|
||||
+ qemuMonitorSetMigrationParams(priv->mon, &json) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* qemuMigrationParamsApply
|
||||
* @driver: qemu driver
|
||||
@@ -885,9 +922,6 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
qemuMigrationParams *migParams,
|
||||
unsigned long apiFlags)
|
||||
{
|
||||
- qemuDomainObjPrivate *priv = vm->privateData;
|
||||
- g_autoptr(virJSONValue) params = NULL;
|
||||
- g_autoptr(virJSONValue) caps = NULL;
|
||||
bool postcopyResume = !!(apiFlags & VIR_MIGRATE_POSTCOPY_RESUME);
|
||||
int ret = -1;
|
||||
|
||||
@@ -905,21 +939,12 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
"a migration job"));
|
||||
goto cleanup;
|
||||
}
|
||||
- } else {
|
||||
- if (!(caps = qemuMigrationCapsToJSON(priv->migrationCaps, migParams->caps)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- if (virJSONValueArraySize(caps) > 0 &&
|
||||
- qemuMonitorSetMigrationCapabilities(priv->mon, &caps) < 0)
|
||||
- goto cleanup;
|
||||
+ } else if (qemuMigrationParamsApplyCaps(vm, migParams->caps) < 0) {
|
||||
+ goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
- if (!(params = qemuMigrationParamsToJSON(migParams, postcopyResume)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- if (virJSONValueObjectKeysNumber(params) > 0 &&
|
||||
- qemuMonitorSetMigrationParams(priv->mon, ¶ms) < 0)
|
||||
+ if (qemuMigrationParamsApplyValues(vm, migParams, postcopyResume) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,63 +0,0 @@
|
||||
From 2a05454cd2d6ba283c128158f44d84d65832ebf7 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2a05454cd2d6ba283c128158f44d84d65832ebf7@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 16:49:09 +0200
|
||||
Subject: [PATCH] qemu_migration_params: Refactor qemuMigrationParamsReset
|
||||
|
||||
Because qemuMigrationParamsReset used to call qemuMigrationParamsApply
|
||||
for resetting migration capabilities and parameters, it did not work
|
||||
well since commit v5.1.0-83-ga1dec315c9 which only allowed capabilities
|
||||
to be set from an async job. However, when reconnecting to running
|
||||
domains after daemon restart we do not have an async job. Thus the
|
||||
capabilities were not properly reset in case the daemon was restarted
|
||||
during an ongoing migration. We need to avoid calling
|
||||
qemuMigrationParamsApply to make sure both parameters and capabilities
|
||||
can be reset by a normal job.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit c47f1abb81194461377a0c608a7ecd87f9ce9146)
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration_params.c | 14 +++++++++-----
|
||||
1 file changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 7b9e5453f6..4a824ff5e1 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -1290,6 +1290,7 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
unsigned long apiFlags)
|
||||
{
|
||||
virErrorPtr err;
|
||||
+ g_autoptr(virBitmap) clearCaps = NULL;
|
||||
|
||||
virErrorPreserveLast(&err);
|
||||
|
||||
@@ -1299,13 +1300,16 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
if (!virDomainObjIsActive(vm) || !origParams)
|
||||
goto cleanup;
|
||||
|
||||
- /* Do not pass apiFlags to qemuMigrationParamsApply here to make sure all
|
||||
- * parameters and capabilities are reset. */
|
||||
- if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams, 0) < 0)
|
||||
+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
||||
goto cleanup;
|
||||
|
||||
- qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
- /* We don't reset 'block-bitmap-mapping' as it can't be unset */
|
||||
+ clearCaps = virBitmapNew(0);
|
||||
+
|
||||
+ if (qemuMigrationParamsApplyCaps(vm, clearCaps) == 0 &&
|
||||
+ qemuMigrationParamsApplyValues(vm, origParams, false) == 0)
|
||||
+ qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
+
|
||||
+ qemuDomainObjExitMonitor(vm);
|
||||
|
||||
cleanup:
|
||||
virErrorRestore(&err);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,176 +0,0 @@
|
||||
From aa4b6b4877d60218c24d4ae713786f5ee37ac6dc Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <aa4b6b4877d60218c24d4ae713786f5ee37ac6dc@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 29 Jun 2022 15:12:20 +0200
|
||||
Subject: [PATCH] qemu_migration_params: Replace qemuMigrationParamTypes array
|
||||
|
||||
We will need to annotate individual parameters a bit more than just
|
||||
noting their type. Let's introduce qemuMigrationParamInfo replacing
|
||||
simple qemuMigrationParamTypes with an array of structs.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 184749691f27f30a39f6f6c77828ffb951af0255)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2111070
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration_params.c | 77 ++++++++++++++++++++++----------
|
||||
1 file changed, 54 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 398c07efd0..a68aed9aa4 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -138,6 +138,11 @@ struct _qemuMigrationParamsTPMapItem {
|
||||
int party; /* bit-wise OR of qemuMigrationParty */
|
||||
};
|
||||
|
||||
+typedef struct _qemuMigrationParamInfoItem qemuMigrationParamInfoItem;
|
||||
+struct _qemuMigrationParamInfoItem {
|
||||
+ qemuMigrationParamType type;
|
||||
+};
|
||||
+
|
||||
/* Migration capabilities which should always be enabled as long as they
|
||||
* are supported by QEMU. If the capability is supposed to be enabled on both
|
||||
* sides of migration, it won't be enabled unless both sides support it.
|
||||
@@ -224,22 +229,48 @@ static const qemuMigrationParamsTPMapItem qemuMigrationParamsTPMap[] = {
|
||||
.party = QEMU_MIGRATION_SOURCE},
|
||||
};
|
||||
|
||||
-static const qemuMigrationParamType qemuMigrationParamTypes[] = {
|
||||
- [QEMU_MIGRATION_PARAM_COMPRESS_LEVEL] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_COMPRESS_THREADS] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_THROTTLE_INITIAL] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_TLS_CREDS] = QEMU_MIGRATION_PARAM_TYPE_STRING,
|
||||
- [QEMU_MIGRATION_PARAM_TLS_HOSTNAME] = QEMU_MIGRATION_PARAM_TYPE_STRING,
|
||||
- [QEMU_MIGRATION_PARAM_MAX_BANDWIDTH] = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
- [QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT] = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
- [QEMU_MIGRATION_PARAM_BLOCK_INCREMENTAL] = QEMU_MIGRATION_PARAM_TYPE_BOOL,
|
||||
- [QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE] = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
- [QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH] = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
- [QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+static const qemuMigrationParamInfoItem qemuMigrationParamInfo[] = {
|
||||
+ [QEMU_MIGRATION_PARAM_COMPRESS_LEVEL] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_COMPRESS_THREADS] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_THROTTLE_INITIAL] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_TLS_CREDS] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_STRING,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_TLS_HOSTNAME] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_STRING,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_MAX_BANDWIDTH] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_BLOCK_INCREMENTAL] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_BOOL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
};
|
||||
-G_STATIC_ASSERT(G_N_ELEMENTS(qemuMigrationParamTypes) == QEMU_MIGRATION_PARAM_LAST);
|
||||
+G_STATIC_ASSERT(G_N_ELEMENTS(qemuMigrationParamInfo) == QEMU_MIGRATION_PARAM_LAST);
|
||||
|
||||
|
||||
virBitmap *
|
||||
@@ -281,7 +312,7 @@ qemuMigrationParamsFree(qemuMigrationParams *migParams)
|
||||
return;
|
||||
|
||||
for (i = 0; i < QEMU_MIGRATION_PARAM_LAST; i++) {
|
||||
- if (qemuMigrationParamTypes[i] == QEMU_MIGRATION_PARAM_TYPE_STRING)
|
||||
+ if (qemuMigrationParamInfo[i].type == QEMU_MIGRATION_PARAM_TYPE_STRING)
|
||||
g_free(migParams->params[i].value.s);
|
||||
}
|
||||
|
||||
@@ -295,7 +326,7 @@ static int
|
||||
qemuMigrationParamsCheckType(qemuMigrationParam param,
|
||||
qemuMigrationParamType type)
|
||||
{
|
||||
- if (qemuMigrationParamTypes[param] != type) {
|
||||
+ if (qemuMigrationParamInfo[param].type != type) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Type mismatch for '%s' migration parameter"),
|
||||
qemuMigrationParamTypeToString(param));
|
||||
@@ -595,7 +626,7 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params,
|
||||
VIR_DEBUG("Setting migration parameter '%s' from '%s'",
|
||||
qemuMigrationParamTypeToString(item->param), item->typedParam);
|
||||
|
||||
- switch (qemuMigrationParamTypes[item->param]) {
|
||||
+ switch (qemuMigrationParamInfo[item->param].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
if (qemuMigrationParamsGetTPInt(migParams, item->param, params,
|
||||
nparams, item->typedParam,
|
||||
@@ -671,7 +702,7 @@ qemuMigrationParamsDump(qemuMigrationParams *migParams,
|
||||
if (!(item->party & QEMU_MIGRATION_DESTINATION))
|
||||
continue;
|
||||
|
||||
- switch (qemuMigrationParamTypes[item->param]) {
|
||||
+ switch (qemuMigrationParamInfo[item->param].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
if (qemuMigrationParamsSetTPInt(migParams, item->param,
|
||||
params, nparams, maxparams,
|
||||
@@ -721,7 +752,7 @@ qemuMigrationParamsFromJSON(virJSONValue *params)
|
||||
name = qemuMigrationParamTypeToString(i);
|
||||
pv = &migParams->params[i];
|
||||
|
||||
- switch (qemuMigrationParamTypes[i]) {
|
||||
+ switch (qemuMigrationParamInfo[i].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
if (virJSONValueObjectGetNumberInt(params, name, &pv->value.i) == 0)
|
||||
pv->set = true;
|
||||
@@ -764,7 +795,7 @@ qemuMigrationParamsToJSON(qemuMigrationParams *migParams)
|
||||
if (!pv->set)
|
||||
continue;
|
||||
|
||||
- switch (qemuMigrationParamTypes[i]) {
|
||||
+ switch (qemuMigrationParamInfo[i].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
rc = virJSONValueObjectAppendNumberInt(params, name, pv->value.i);
|
||||
break;
|
||||
@@ -1280,7 +1311,7 @@ qemuMigrationParamsFormat(virBuffer *buf,
|
||||
virBufferAsprintf(buf, "<param name='%s' ",
|
||||
qemuMigrationParamTypeToString(i));
|
||||
|
||||
- switch (qemuMigrationParamTypes[i]) {
|
||||
+ switch (qemuMigrationParamInfo[i].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
virBufferAsprintf(buf, "value='%d'", pv->value.i);
|
||||
break;
|
||||
@@ -1357,7 +1388,7 @@ qemuMigrationParamsParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
- switch (qemuMigrationParamTypes[param]) {
|
||||
+ switch (qemuMigrationParamInfo[param].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
rc = virStrToLong_i(value, NULL, 10, &pv->value.i);
|
||||
break;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,80 +0,0 @@
|
||||
From 6b3a0480cf2de402abce168aa0b093a8dc4f7a57 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6b3a0480cf2de402abce168aa0b093a8dc4f7a57@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 6 Sep 2022 13:43:22 +0200
|
||||
Subject: [PATCH] qemu_namespace: Fix a corner case in
|
||||
qemuDomainGetPreservedMounts()
|
||||
|
||||
When setting up namespace for QEMU we look at mount points under
|
||||
/dev (like /dev/pts, /dev/mqueue/, etc.) because we want to
|
||||
preserve those (which is done by moving them to a temp location,
|
||||
unshare(), and then moving them back). We have a convenience
|
||||
helper - qemuDomainGetPreservedMounts() - that processes the
|
||||
mount table and (optionally) moves the other filesystems too.
|
||||
This helper is also used when attempting to create a path in NS,
|
||||
because the path, while starting with "/dev/" prefix, may
|
||||
actually lead to one of those filesystems that we preserved.
|
||||
|
||||
And here comes the corner case: while we require the parent mount
|
||||
table to be in shared mode (equivalent of `mount --make-rshared /'),
|
||||
these mount events propagate iff the target path exist inside the
|
||||
slave mount table (= QEMU's private namespace). And since we
|
||||
create only a subset of /dev nodes, well, that assumption is not
|
||||
always the case.
|
||||
|
||||
For instance, assume that a domain is already running, no
|
||||
hugepages were configured for it nor any hugetlbfs is mounted.
|
||||
Now, when a hugetlbfs is mounted into '/dev/hugepages', this is
|
||||
propagated into the QEMU's namespace, but since the target dir
|
||||
does not exist in the private /dev, the FS is not mounted in the
|
||||
namespace.
|
||||
|
||||
Fortunately, this difference between namespaces is visible when
|
||||
comparing /proc/mounts and /proc/$PID/mounts (where PID is the
|
||||
QEMU's PID). Therefore, if possible we should look at the latter.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit 46b03819ae8d833b11c2aaccb2c2a0361727f51b)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2152083
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_namespace.c | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c
|
||||
index 71e3366ca5..807ec37c91 100644
|
||||
--- a/src/qemu/qemu_namespace.c
|
||||
+++ b/src/qemu/qemu_namespace.c
|
||||
@@ -109,6 +109,8 @@ qemuDomainGetPreservedMountPath(virQEMUDriverConfig *cfg,
|
||||
* b) generate backup path for all the entries in a)
|
||||
*
|
||||
* Any of the return pointers can be NULL. Both arrays are NULL-terminated.
|
||||
+ * Get the mount table either from @vm's PID (if running), or from the
|
||||
+ * namespace we're in (if @vm's not running).
|
||||
*
|
||||
* Returns 0 on success, -1 otherwise (with error reported)
|
||||
*/
|
||||
@@ -123,12 +125,18 @@ qemuDomainGetPreservedMounts(virQEMUDriverConfig *cfg,
|
||||
size_t nmounts = 0;
|
||||
g_auto(GStrv) paths = NULL;
|
||||
g_auto(GStrv) savePaths = NULL;
|
||||
+ g_autofree char *mountsPath = NULL;
|
||||
size_t i;
|
||||
|
||||
if (ndevPath)
|
||||
*ndevPath = 0;
|
||||
|
||||
- if (virFileGetMountSubtree(QEMU_PROC_MOUNTS, "/dev", &mounts, &nmounts) < 0)
|
||||
+ if (vm->pid > 0)
|
||||
+ mountsPath = g_strdup_printf("/proc/%lld/mounts", (long long) vm->pid);
|
||||
+ else
|
||||
+ mountsPath = g_strdup(QEMU_PROC_MOUNTS);
|
||||
+
|
||||
+ if (virFileGetMountSubtree(mountsPath, "/dev", &mounts, &nmounts) < 0)
|
||||
return -1;
|
||||
|
||||
if (nmounts == 0)
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,68 +0,0 @@
|
||||
From c8379fdd0f13af84f4b2ed449f8de77117fd8bc7 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c8379fdd0f13af84f4b2ed449f8de77117fd8bc7@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 6 Sep 2022 13:43:58 +0200
|
||||
Subject: [PATCH] qemu_namespace: Introduce qemuDomainNamespaceSetupPath()
|
||||
|
||||
Sometimes it may come handy to just bind mount a directory/file
|
||||
into domain's namespace. Implement a thin wrapper over
|
||||
qemuNamespaceMknodPaths() which has all the logic we need.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit 5853d707189005a4ea5b2215e80853867b822fd9)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2152083
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_namespace.c | 19 +++++++++++++++++++
|
||||
src/qemu/qemu_namespace.h | 4 ++++
|
||||
2 files changed, 23 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c
|
||||
index 807ec37c91..09e235e120 100644
|
||||
--- a/src/qemu/qemu_namespace.c
|
||||
+++ b/src/qemu/qemu_namespace.c
|
||||
@@ -1424,6 +1424,25 @@ qemuNamespaceUnlinkPaths(virDomainObj *vm,
|
||||
}
|
||||
|
||||
|
||||
+int
|
||||
+qemuDomainNamespaceSetupPath(virDomainObj *vm,
|
||||
+ const char *path,
|
||||
+ bool *created)
|
||||
+{
|
||||
+ g_autoptr(virGSListString) paths = NULL;
|
||||
+
|
||||
+ if (!qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT))
|
||||
+ return 0;
|
||||
+
|
||||
+ paths = g_slist_prepend(paths, g_strdup(path));
|
||||
+
|
||||
+ if (qemuNamespaceMknodPaths(vm, paths, created) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
int
|
||||
qemuDomainNamespaceSetupDisk(virDomainObj *vm,
|
||||
virStorageSource *src,
|
||||
diff --git a/src/qemu/qemu_namespace.h b/src/qemu/qemu_namespace.h
|
||||
index fbea865c70..85d990f460 100644
|
||||
--- a/src/qemu/qemu_namespace.h
|
||||
+++ b/src/qemu/qemu_namespace.h
|
||||
@@ -48,6 +48,10 @@ void qemuDomainDestroyNamespace(virQEMUDriver *driver,
|
||||
|
||||
bool qemuDomainNamespaceAvailable(qemuDomainNamespace ns);
|
||||
|
||||
+int qemuDomainNamespaceSetupPath(virDomainObj *vm,
|
||||
+ const char *path,
|
||||
+ bool *created);
|
||||
+
|
||||
int qemuDomainNamespaceSetupDisk(virDomainObj *vm,
|
||||
virStorageSource *src,
|
||||
bool *created);
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,45 +0,0 @@
|
||||
From 1f0a6e441617da6a95e2188408ad1ed2dd4665e4 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <1f0a6e441617da6a95e2188408ad1ed2dd4665e4@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 6 Sep 2022 13:37:23 +0200
|
||||
Subject: [PATCH] qemu_namespace: Tolerate missing ACLs when creating a path in
|
||||
namespace
|
||||
|
||||
When creating a path in a domain's mount namespace we try to set
|
||||
ACLs on it, so that it's a verbatim copy of the path in parent's
|
||||
namespace. The ACLs are queried upfront (by
|
||||
qemuNamespaceMknodItemInit()) but this is fault tolerant so the
|
||||
pointer to ACLs might be NULL (meaning no ACLs were queried, for
|
||||
instance because the underlying filesystem does not support
|
||||
them). But then we take this NULL and pass it to virFileSetACLs()
|
||||
which immediately returns an error because NULL is invalid value.
|
||||
|
||||
Mimic what we do with SELinux label - only set ACLs if they are
|
||||
non-NULL which includes symlinks.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit 687374959e160dc566bd4b6d43c7bf1beb470c59)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2152083
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_namespace.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c
|
||||
index 98cd794666..71e3366ca5 100644
|
||||
--- a/src/qemu/qemu_namespace.c
|
||||
+++ b/src/qemu/qemu_namespace.c
|
||||
@@ -1040,8 +1040,7 @@ qemuNamespaceMknodOne(qemuNamespaceMknodItem *data)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- /* Symlinks don't have ACLs. */
|
||||
- if (!isLink &&
|
||||
+ if (data->acl &&
|
||||
virFileSetACLs(data->file, data->acl) < 0 &&
|
||||
errno != ENOTSUP) {
|
||||
virReportSystemError(errno,
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,40 +0,0 @@
|
||||
From f030ed332be8742918127fa3cc27aebb47b56c19 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f030ed332be8742918127fa3cc27aebb47b56c19@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Wed, 3 Aug 2022 12:27:19 +0200
|
||||
Subject: [PATCH] qemu_process: Destroy domain's namespace after killing QEMU
|
||||
|
||||
After QEMU is killed in qemuProcessStop() its mount namespace
|
||||
doesn't exist anymore, because it was the only process running
|
||||
there. Thus we should clear our internal flag that the domain has
|
||||
namespace enabled so that seclabel restore code does not try to
|
||||
enter it. We do the same in qemuProcessHandleMonitorEOF() but
|
||||
when it is us, who decides to kill QEMU rather than QEMU quitting
|
||||
we haven't seen EOF by the time qemuProcessStop() is called.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit 589536e75d2af745c8f27134b466b23e4fbe3e95)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2121141
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_process.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||
index 1c28d4b102..4b52d664c7 100644
|
||||
--- a/src/qemu/qemu_process.c
|
||||
+++ b/src/qemu/qemu_process.c
|
||||
@@ -8276,6 +8276,9 @@ void qemuProcessStop(virQEMUDriver *driver,
|
||||
VIR_QEMU_PROCESS_KILL_FORCE|
|
||||
VIR_QEMU_PROCESS_KILL_NOCHECK));
|
||||
|
||||
+ /* Its namespace is also gone then. */
|
||||
+ qemuDomainDestroyNamespace(driver, vm);
|
||||
+
|
||||
qemuDomainCleanupRun(driver, vm);
|
||||
|
||||
qemuExtDevicesStop(driver, vm);
|
||||
--
|
||||
2.37.2
|
||||
|
@ -1,73 +0,0 @@
|
||||
From 9842eb7301f985e4cc08001aff48c269492b2456 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9842eb7301f985e4cc08001aff48c269492b2456@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 6 Sep 2022 13:45:51 +0200
|
||||
Subject: [PATCH] qemu_process.c: Propagate hugetlbfs mounts on reconnect
|
||||
|
||||
When reconnecting to a running QEMU process, we construct the
|
||||
per-domain path in all hugetlbfs mounts. This is a relict from
|
||||
the past (v3.4.0-100-g5b24d25062) where we switched to a
|
||||
per-domain path and we want to create those paths when libvirtd
|
||||
restarts on upgrade.
|
||||
|
||||
And with namespaces enabled there is one corner case where the
|
||||
path is not created. In fact an error is reported and the
|
||||
reconnect fails. Ideally, all mount events are propagated into
|
||||
the QEMU's namespace. And they probably are, except when the
|
||||
target path does not exist inside the namespace. Now, it's pretty
|
||||
common for users to mount hugetlbfs under /dev (e.g.
|
||||
/dev/hugepages), but if domain is started without hugepages (or
|
||||
more specifically - private hugetlbfs path wasn't created on
|
||||
domain startup), then the reconnect code tries to create it.
|
||||
But it fails to do so, well, it fails to set seclabels on the
|
||||
path because, because the path does not exist in the private
|
||||
namespace. And it doesn't exist because we specifically create
|
||||
only a subset of all possible /dev nodes. Therefore, the mount
|
||||
event, whilst propagated, is not successful and hence the
|
||||
filesystem is not mounted. We have to do it ourselves.
|
||||
|
||||
If hugetlbfs is mount anywhere else there's no problem and this
|
||||
is effectively a dead code.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2123196
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit 0377177c7856bb87a9d8aa1324b54f5fbe9f1e5b)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2152083
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/kbase/qemu-passthrough-security.rst | 6 ------
|
||||
src/qemu/qemu_process.c | 3 +++
|
||||
2 files changed, 3 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/docs/kbase/qemu-passthrough-security.rst b/docs/kbase/qemu-passthrough-security.rst
|
||||
index 106c3cc5b9..ef10d8af9b 100644
|
||||
--- a/docs/kbase/qemu-passthrough-security.rst
|
||||
+++ b/docs/kbase/qemu-passthrough-security.rst
|
||||
@@ -172,9 +172,3 @@ command before any guest is started:
|
||||
::
|
||||
|
||||
# mount --make-rshared /
|
||||
-
|
||||
-Another requirement for dynamic mount point propagation is to not place
|
||||
-``hugetlbfs`` mount points under ``/dev`` because these won't be propagated as
|
||||
-corresponding directories do not exist in the private namespace. Or just use
|
||||
-``memfd`` memory backend instead which does not require ``hugetlbfs`` mount
|
||||
-points.
|
||||
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||
index 4b52d664c7..062a0b6dac 100644
|
||||
--- a/src/qemu/qemu_process.c
|
||||
+++ b/src/qemu/qemu_process.c
|
||||
@@ -4039,6 +4039,9 @@ qemuProcessBuildDestroyMemoryPathsImpl(virQEMUDriver *driver,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ if (qemuDomainNamespaceSetupPath(vm, path, NULL) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
if (qemuSecurityDomainSetPathLabel(driver, vm, path, true) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
--
|
||||
2.39.0
|
||||
|
@ -0,0 +1,67 @@
|
||||
From 743afd9422e59bc6cbda6b4a904394a045eb9aec Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <743afd9422e59bc6cbda6b4a904394a045eb9aec.1707394627.git.jdenemar@redhat.com>
|
||||
From: Pavel Hrdina <phrdina@redhat.com>
|
||||
Date: Tue, 30 Jan 2024 12:13:32 +0100
|
||||
Subject: [PATCH] qemu_snapshot: create: don't require disk-only flag for
|
||||
offline external snapshot
|
||||
|
||||
Historically creating offline external snapshot required disk-only flag
|
||||
as well. Now when user requests new snapshot for offline VM and at least
|
||||
one disk is specified to use external snapshot we will no longer require
|
||||
disk-only flag as all other not specified disk will use external
|
||||
snapshots as well.
|
||||
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-22797
|
||||
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 189fdeff10b85786a495a8fcf67ba1428d9fc482)
|
||||
|
||||
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_snapshot.c | 16 ++++++++++++++--
|
||||
1 file changed, 14 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
|
||||
index 871e63c9cd..0cac0c4146 100644
|
||||
--- a/src/qemu/qemu_snapshot.c
|
||||
+++ b/src/qemu/qemu_snapshot.c
|
||||
@@ -1582,15 +1582,27 @@ qemuSnapshotCreateXMLValidateDef(virDomainObj *vm,
|
||||
* to internal snapshots.
|
||||
*/
|
||||
static bool
|
||||
-qemuSnapshotCreateUseExternal(virDomainSnapshotDef *def,
|
||||
+qemuSnapshotCreateUseExternal(virDomainObj *vm,
|
||||
+ virDomainSnapshotDef *def,
|
||||
unsigned int flags)
|
||||
{
|
||||
+ size_t i;
|
||||
+
|
||||
if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY)
|
||||
return true;
|
||||
|
||||
if (def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
|
||||
return true;
|
||||
|
||||
+ if (!virDomainObjIsActive(vm)) {
|
||||
+ /* No need to check all disks as function qemuSnapshotPrepare() guarantees
|
||||
+ * that we don't have a combination of internal and external location. */
|
||||
+ for (i = 0; i < def->ndisks; i++) {
|
||||
+ if (def->disks[i].snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1623,7 +1635,7 @@ qemuSnapshotCreateAlignDisks(virDomainObj *vm,
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (qemuSnapshotCreateUseExternal(def, flags)) {
|
||||
+ if (qemuSnapshotCreateUseExternal(vm, def, flags)) {
|
||||
align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
|
||||
def->state = virDomainObjGetState(vm, NULL);
|
||||
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,88 @@
|
||||
From b12f3837ddde95373b39843b8526b55e40d96500 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <b12f3837ddde95373b39843b8526b55e40d96500.1707394627.git.jdenemar@redhat.com>
|
||||
From: Pavel Hrdina <phrdina@redhat.com>
|
||||
Date: Tue, 30 Jan 2024 11:33:23 +0100
|
||||
Subject: [PATCH] qemu_snapshot: create: refactor external snapshot detection
|
||||
|
||||
Introduce new function qemuSnapshotCreateUseExternal() that will return
|
||||
true if we will use external snapshots as default location.
|
||||
|
||||
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit faa2e3bb541e50d719d05e58a129b4443c0c737c)
|
||||
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-22797
|
||||
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_snapshot.c | 39 ++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 30 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
|
||||
index af5f995b0d..871e63c9cd 100644
|
||||
--- a/src/qemu/qemu_snapshot.c
|
||||
+++ b/src/qemu/qemu_snapshot.c
|
||||
@@ -1576,6 +1576,25 @@ qemuSnapshotCreateXMLValidateDef(virDomainObj *vm,
|
||||
}
|
||||
|
||||
|
||||
+/**
|
||||
+ * Check if libvirt should use external snapshots as default align_location
|
||||
+ * that will be used by virDomainSnapshotAlignDisks(). Otherwise we default
|
||||
+ * to internal snapshots.
|
||||
+ */
|
||||
+static bool
|
||||
+qemuSnapshotCreateUseExternal(virDomainSnapshotDef *def,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
+ if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY)
|
||||
+ return true;
|
||||
+
|
||||
+ if (def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
|
||||
+ return true;
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
qemuSnapshotCreateAlignDisks(virDomainObj *vm,
|
||||
virDomainSnapshotDef *def,
|
||||
@@ -1584,7 +1603,7 @@ qemuSnapshotCreateAlignDisks(virDomainObj *vm,
|
||||
{
|
||||
g_autofree char *xml = NULL;
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
- virDomainSnapshotLocation align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_INTERNAL;
|
||||
+ virDomainSnapshotLocation align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_DEFAULT;
|
||||
|
||||
/* Easiest way to clone inactive portion of vm->def is via
|
||||
* conversion in and back out of xml. */
|
||||
@@ -1604,17 +1623,19 @@ qemuSnapshotCreateAlignDisks(virDomainObj *vm,
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY) {
|
||||
+ if (qemuSnapshotCreateUseExternal(def, flags)) {
|
||||
align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
|
||||
- if (virDomainObjIsActive(vm))
|
||||
- def->state = VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT;
|
||||
- else
|
||||
- def->state = VIR_DOMAIN_SNAPSHOT_SHUTOFF;
|
||||
- def->memory = VIR_DOMAIN_SNAPSHOT_LOCATION_NO;
|
||||
- } else if (def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) {
|
||||
def->state = virDomainObjGetState(vm, NULL);
|
||||
- align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
|
||||
+
|
||||
+ if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY) {
|
||||
+ if (virDomainObjIsActive(vm))
|
||||
+ def->state = VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT;
|
||||
+ else
|
||||
+ def->state = VIR_DOMAIN_SNAPSHOT_SHUTOFF;
|
||||
+ def->memory = VIR_DOMAIN_SNAPSHOT_LOCATION_NO;
|
||||
+ }
|
||||
} else {
|
||||
+ align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_INTERNAL;
|
||||
def->state = virDomainObjGetState(vm, NULL);
|
||||
|
||||
if (virDomainObjIsActive(vm) &&
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,66 @@
|
||||
From aa70508df0626a00e4ed7c0ecb11b985beeb92cd Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <aa70508df0626a00e4ed7c0ecb11b985beeb92cd.1707394627.git.jdenemar@redhat.com>
|
||||
From: Pavel Hrdina <phrdina@redhat.com>
|
||||
Date: Tue, 30 Jan 2024 13:05:22 +0100
|
||||
Subject: [PATCH] qemu_snapshot: fix detection if non-leaf snapshot isn't in
|
||||
active chain
|
||||
|
||||
The condition was completely wrong. As per the comment for function
|
||||
virDomainMomentIsAncestor() it checks that the first argument is
|
||||
descendant of the second argument.
|
||||
|
||||
Consider the following snapshot tree for VM:
|
||||
|
||||
s1
|
||||
|
|
||||
+- s2
|
||||
| |
|
||||
| +- s3
|
||||
|
|
||||
+- s4
|
||||
|
|
||||
+- s5 (current)
|
||||
|
||||
When deleting s2 with the original code we checked if
|
||||
virDomainMomentIsAncestor(s2, s5) which would return false basically for
|
||||
any snapshot as s5 is leaf snapshot so no children.
|
||||
|
||||
When deleting s2 with fixed code we check if
|
||||
virDomainMomentIsAncestor(s5, s2) which still returns false but when
|
||||
deleting s4 it will correctly return true.
|
||||
|
||||
Before this fix it fails with the following error:
|
||||
|
||||
error: Failed to delete snapshot s2
|
||||
error: invalid argument: could not find base disk source in disk source chain
|
||||
|
||||
After the fix it fails with correct error:
|
||||
|
||||
error: Failed to delete snapshot s2
|
||||
error: unsupported configuration: deletion of non-leaf external snapshot that is not in active chain is not supported
|
||||
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-23212
|
||||
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 7143c4e1f95b4dc804f67cc5de98fba746193892)
|
||||
|
||||
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_snapshot.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
|
||||
index 73ff533827..af5f995b0d 100644
|
||||
--- a/src/qemu/qemu_snapshot.c
|
||||
+++ b/src/qemu/qemu_snapshot.c
|
||||
@@ -3815,7 +3815,7 @@ qemuSnapshotDeleteValidate(virDomainObj *vm,
|
||||
}
|
||||
|
||||
if (snap != current && snap->nchildren != 0 &&
|
||||
- virDomainMomentIsAncestor(snap, current)) {
|
||||
+ !virDomainMomentIsAncestor(current, snap)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("deletion of non-leaf external snapshot that is not in active chain is not supported"));
|
||||
return -1;
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,40 @@
|
||||
From 9f35c04add8d64748671e76171683332bd454317 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <9f35c04add8d64748671e76171683332bd454317.1707394627.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 4 Jan 2024 11:04:51 +0100
|
||||
Subject: [PATCH] qemu_validate: Check capability for virtio-mem
|
||||
dynamicMemslots
|
||||
|
||||
The QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_DYNAMIC_MEMSLOTS reflects
|
||||
whether QEMU is capable of .dynamic-memslots for virtio-mem.
|
||||
Use it when validating domain configuration.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 6be07af817e0a8d48613296af66873e62a73339a)
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-15316
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_validate.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
|
||||
index b22d3618fe..fe8f7ae8cc 100644
|
||||
--- a/src/qemu/qemu_validate.c
|
||||
+++ b/src/qemu/qemu_validate.c
|
||||
@@ -5066,6 +5066,13 @@ qemuValidateDomainDeviceDefMemory(virDomainMemoryDef *mem,
|
||||
_("virtio-mem isn't supported by this QEMU binary"));
|
||||
return -1;
|
||||
}
|
||||
+
|
||||
+ if (mem->target.virtio_mem.dynamicMemslots == VIR_TRISTATE_BOOL_YES &&
|
||||
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MEM_PCI_DYNAMIC_MEMSLOTS)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("virtio-mem does not support dynamicMemslots"));
|
||||
+ return -1;
|
||||
+ }
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_MEMORY_MODEL_SGX_EPC:
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,218 @@
|
||||
From 3841ddc4d4fe2f4f4aced0e6c259958cbcc1ab80 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <3841ddc4d4fe2f4f4aced0e6c259958cbcc1ab80.1713796876.git.jdenemar@redhat.com>
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Fri, 15 Mar 2024 10:47:50 +0000
|
||||
Subject: [PATCH] remote: check for negative array lengths before allocation
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
While the C API entry points will validate non-negative lengths
|
||||
for various parameters, the RPC server de-serialization code
|
||||
will need to allocate memory for arrays before entering the C
|
||||
API. These allocations will thus happen before the non-negative
|
||||
length check is performed.
|
||||
|
||||
Passing a negative length to the g_new0 function will usually
|
||||
result in a crash due to the negative length being treated as
|
||||
a huge positive number.
|
||||
|
||||
This was found and diagnosed by ALT Linux Team with AFLplusplus.
|
||||
|
||||
CVE-2024-2494
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Found-by: Alexandr Shashkin <dutyrok@altlinux.org>
|
||||
Co-developed-by: Alexander Kuznetsov <kuznetsovam@altlinux.org>
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 8a3f8d957507c1f8223fdcf25a3ff885b15557f2)
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/remote/remote_daemon_dispatch.c | 65 +++++++++++++++++++++++++++++
|
||||
src/rpc/gendispatch.pl | 5 +++
|
||||
2 files changed, 70 insertions(+)
|
||||
|
||||
diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c
|
||||
index aaabd1e56c..01dcac4b12 100644
|
||||
--- a/src/remote/remote_daemon_dispatch.c
|
||||
+++ b/src/remote/remote_daemon_dispatch.c
|
||||
@@ -2291,6 +2291,10 @@ remoteDispatchDomainGetSchedulerParameters(virNetServer *server G_GNUC_UNUSED,
|
||||
if (!conn)
|
||||
goto cleanup;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -2339,6 +2343,10 @@ remoteDispatchDomainGetSchedulerParametersFlags(virNetServer *server G_GNUC_UNUS
|
||||
if (!conn)
|
||||
goto cleanup;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -2497,6 +2505,10 @@ remoteDispatchDomainBlockStatsFlags(virNetServer *server G_GNUC_UNUSED,
|
||||
goto cleanup;
|
||||
flags = args->flags;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_DOMAIN_BLOCK_STATS_PARAMETERS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -2717,6 +2729,14 @@ remoteDispatchDomainGetVcpuPinInfo(virNetServer *server G_GNUC_UNUSED,
|
||||
if (!(dom = get_nonnull_domain(conn, args->dom)))
|
||||
goto cleanup;
|
||||
|
||||
+ if (args->ncpumaps < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("ncpumaps must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ if (args->maplen < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("maplen must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->ncpumaps > REMOTE_VCPUINFO_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("ncpumaps > REMOTE_VCPUINFO_MAX"));
|
||||
goto cleanup;
|
||||
@@ -2811,6 +2831,11 @@ remoteDispatchDomainGetEmulatorPinInfo(virNetServer *server G_GNUC_UNUSED,
|
||||
if (!(dom = get_nonnull_domain(conn, args->dom)))
|
||||
goto cleanup;
|
||||
|
||||
+ if (args->maplen < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("maplen must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
/* Allocate buffers to take the results */
|
||||
if (args->maplen > 0)
|
||||
cpumaps = g_new0(unsigned char, args->maplen);
|
||||
@@ -2858,6 +2883,14 @@ remoteDispatchDomainGetVcpus(virNetServer *server G_GNUC_UNUSED,
|
||||
if (!(dom = get_nonnull_domain(conn, args->dom)))
|
||||
goto cleanup;
|
||||
|
||||
+ if (args->maxinfo < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("maxinfo must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ if (args->maplen < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("maxinfo must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->maxinfo > REMOTE_VCPUINFO_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("maxinfo > REMOTE_VCPUINFO_MAX"));
|
||||
goto cleanup;
|
||||
@@ -3096,6 +3129,10 @@ remoteDispatchDomainGetMemoryParameters(virNetServer *server G_GNUC_UNUSED,
|
||||
|
||||
flags = args->flags;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_DOMAIN_MEMORY_PARAMETERS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -3156,6 +3193,10 @@ remoteDispatchDomainGetNumaParameters(virNetServer *server G_GNUC_UNUSED,
|
||||
|
||||
flags = args->flags;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_DOMAIN_NUMA_PARAMETERS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -3216,6 +3257,10 @@ remoteDispatchDomainGetBlkioParameters(virNetServer *server G_GNUC_UNUSED,
|
||||
|
||||
flags = args->flags;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_DOMAIN_BLKIO_PARAMETERS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -3277,6 +3322,10 @@ remoteDispatchNodeGetCPUStats(virNetServer *server G_GNUC_UNUSED,
|
||||
|
||||
flags = args->flags;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_NODE_CPU_STATS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -3339,6 +3388,10 @@ remoteDispatchNodeGetMemoryStats(virNetServer *server G_GNUC_UNUSED,
|
||||
|
||||
flags = args->flags;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_NODE_MEMORY_STATS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -3514,6 +3567,10 @@ remoteDispatchDomainGetBlockIoTune(virNetServer *server G_GNUC_UNUSED,
|
||||
if (!conn)
|
||||
goto cleanup;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_DOMAIN_BLOCK_IO_TUNE_PARAMETERS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -5081,6 +5138,10 @@ remoteDispatchDomainGetInterfaceParameters(virNetServer *server G_GNUC_UNUSED,
|
||||
|
||||
flags = args->flags;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_DOMAIN_INTERFACE_PARAMETERS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
@@ -5301,6 +5362,10 @@ remoteDispatchNodeGetMemoryParameters(virNetServer *server G_GNUC_UNUSED,
|
||||
|
||||
flags = args->flags;
|
||||
|
||||
+ if (args->nparams < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams must be non-negative"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
if (args->nparams > REMOTE_NODE_MEMORY_PARAMETERS_MAX) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
|
||||
goto cleanup;
|
||||
diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
|
||||
index 5ce988c5ae..c5842dc796 100755
|
||||
--- a/src/rpc/gendispatch.pl
|
||||
+++ b/src/rpc/gendispatch.pl
|
||||
@@ -1070,6 +1070,11 @@ elsif ($mode eq "server") {
|
||||
print "\n";
|
||||
|
||||
if ($single_ret_as_list) {
|
||||
+ print " if (args->$single_ret_list_max_var < 0) {\n";
|
||||
+ print " virReportError(VIR_ERR_RPC,\n";
|
||||
+ print " \"%s\", _(\"max$single_ret_list_name must be non-negative\"));\n";
|
||||
+ print " goto cleanup;\n";
|
||||
+ print " }\n";
|
||||
print " if (args->$single_ret_list_max_var > $single_ret_list_max_define) {\n";
|
||||
print " virReportError(VIR_ERR_RPC,\n";
|
||||
print " \"%s\", _(\"max$single_ret_list_name > $single_ret_list_max_define\"));\n";
|
||||
--
|
||||
2.44.0
|
@ -0,0 +1,142 @@
|
||||
From 1b87b9821afe39c2af5c1893b11cb7f452c61014 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <1b87b9821afe39c2af5c1893b11cb7f452c61014.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 17 Jan 2024 15:55:35 +0100
|
||||
Subject: [PATCH] remoteDispatchAuthPolkit: Fix lock ordering deadlock if
|
||||
client closes connection during auth
|
||||
|
||||
Locks in following text:
|
||||
A: virNetServer
|
||||
B: virNetServerClient
|
||||
C: daemonClientPrivate
|
||||
|
||||
'virNetServerSetClientAuthenticated' locks A then B
|
||||
|
||||
'remoteDispatchAuthPolkit' calls 'virNetServerSetClientAuthenticated'
|
||||
while holding C.
|
||||
|
||||
If a client closes its connection 'virNetServerProcessClients' with the
|
||||
lock A and B locked will call 'virNetServerClientCloseLocked' which will
|
||||
try to dispose of the 'client' private data by:
|
||||
|
||||
ref(b);
|
||||
unlock(b);
|
||||
remoteClientFreePrivateCallbacks();
|
||||
lock(b);
|
||||
unref(b);
|
||||
|
||||
Unfortunately remoteClientFreePrivateCallbacks() tries lock C.
|
||||
|
||||
Thus the locks are held in the following order:
|
||||
|
||||
polkit auth: C -> A
|
||||
connection close: A -> C
|
||||
|
||||
causing a textbook-example deadlock. To resolve it we can simply drop
|
||||
lock 'C' before calling 'virNetServerSetClientAuthenticated' as the lock
|
||||
is not needed any more.
|
||||
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-20337
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit c697aff8a1b5542d51c0b4a10046ad37089d12d5)
|
||||
---
|
||||
src/remote/remote_daemon_dispatch.c | 76 +++++++++++++++--------------
|
||||
1 file changed, 39 insertions(+), 37 deletions(-)
|
||||
|
||||
diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c
|
||||
index 7daf503b51..aaabd1e56c 100644
|
||||
--- a/src/remote/remote_daemon_dispatch.c
|
||||
+++ b/src/remote/remote_daemon_dispatch.c
|
||||
@@ -3979,50 +3979,52 @@ remoteDispatchAuthPolkit(virNetServer *server,
|
||||
struct daemonClientPrivate *priv =
|
||||
virNetServerClientGetPrivateData(client);
|
||||
int rv;
|
||||
- VIR_LOCK_GUARD lock = virLockGuardLock(&priv->lock);
|
||||
-
|
||||
- action = virNetServerClientGetReadonly(client) ?
|
||||
- "org.libvirt.unix.monitor" :
|
||||
- "org.libvirt.unix.manage";
|
||||
|
||||
- VIR_DEBUG("Start PolicyKit auth %d", virNetServerClientGetFD(client));
|
||||
- if (virNetServerClientGetAuth(client) != VIR_NET_SERVER_SERVICE_AUTH_POLKIT) {
|
||||
- VIR_ERROR(_("client tried invalid PolicyKit init request"));
|
||||
- goto authfail;
|
||||
- }
|
||||
+ VIR_WITH_MUTEX_LOCK_GUARD(&priv->lock) {
|
||||
+ action = virNetServerClientGetReadonly(client) ?
|
||||
+ "org.libvirt.unix.monitor" :
|
||||
+ "org.libvirt.unix.manage";
|
||||
|
||||
- if (virNetServerClientGetUNIXIdentity(client, &callerUid, &callerGid,
|
||||
- &callerPid, ×tamp) < 0) {
|
||||
- goto authfail;
|
||||
- }
|
||||
+ VIR_DEBUG("Start PolicyKit auth %d", virNetServerClientGetFD(client));
|
||||
+ if (virNetServerClientGetAuth(client) != VIR_NET_SERVER_SERVICE_AUTH_POLKIT) {
|
||||
+ VIR_ERROR(_("client tried invalid PolicyKit init request"));
|
||||
+ goto authfail;
|
||||
+ }
|
||||
|
||||
- if (timestamp == 0) {
|
||||
- VIR_WARN("Failing polkit auth due to missing client (pid=%lld) start time",
|
||||
- (long long)callerPid);
|
||||
- goto authfail;
|
||||
- }
|
||||
+ if (virNetServerClientGetUNIXIdentity(client, &callerUid, &callerGid,
|
||||
+ &callerPid, ×tamp) < 0) {
|
||||
+ goto authfail;
|
||||
+ }
|
||||
|
||||
- VIR_INFO("Checking PID %lld running as %d",
|
||||
- (long long) callerPid, callerUid);
|
||||
+ if (timestamp == 0) {
|
||||
+ VIR_WARN("Failing polkit auth due to missing client (pid=%lld) start time",
|
||||
+ (long long)callerPid);
|
||||
+ goto authfail;
|
||||
+ }
|
||||
|
||||
- rv = virPolkitCheckAuth(action,
|
||||
- callerPid,
|
||||
- timestamp,
|
||||
- callerUid,
|
||||
- NULL,
|
||||
- true);
|
||||
- if (rv == -1)
|
||||
- goto authfail;
|
||||
- else if (rv == -2)
|
||||
- goto authdeny;
|
||||
+ VIR_INFO("Checking PID %lld running as %d",
|
||||
+ (long long) callerPid, callerUid);
|
||||
|
||||
- PROBE(RPC_SERVER_CLIENT_AUTH_ALLOW,
|
||||
- "client=%p auth=%d identity=%s",
|
||||
- client, REMOTE_AUTH_POLKIT, ident);
|
||||
- VIR_INFO("Policy allowed action %s from pid %lld, uid %d",
|
||||
- action, (long long) callerPid, callerUid);
|
||||
- ret->complete = 1;
|
||||
+ rv = virPolkitCheckAuth(action,
|
||||
+ callerPid,
|
||||
+ timestamp,
|
||||
+ callerUid,
|
||||
+ NULL,
|
||||
+ true);
|
||||
+ if (rv == -1)
|
||||
+ goto authfail;
|
||||
+ else if (rv == -2)
|
||||
+ goto authdeny;
|
||||
+
|
||||
+ PROBE(RPC_SERVER_CLIENT_AUTH_ALLOW,
|
||||
+ "client=%p auth=%d identity=%s",
|
||||
+ client, REMOTE_AUTH_POLKIT, ident);
|
||||
+ VIR_INFO("Policy allowed action %s from pid %lld, uid %d",
|
||||
+ action, (long long) callerPid, callerUid);
|
||||
+ ret->complete = 1;
|
||||
+ }
|
||||
|
||||
+ /* this must be called with the private data mutex unlocked */
|
||||
virNetServerSetClientAuthenticated(server, client);
|
||||
return 0;
|
||||
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,45 @@
|
||||
From 5821f93bf9b42e3732fe168cdae85054e9a3ac61 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <5821f93bf9b42e3732fe168cdae85054e9a3ac61.1707394626.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Mon, 29 Jan 2024 10:07:05 +0100
|
||||
Subject: [PATCH] remote_driver: Restore special behavior of
|
||||
remoteDomainGetBlockIoTune()
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In v9.10.0-rc1~103 the remote driver was switched to g_auto() for
|
||||
client RPC return parameters. But whilst doing so a small bug
|
||||
slipped in: previously, when virDomainGetBlockIoTune() was called
|
||||
with *nparams == 0, the function set *nparams to the number of
|
||||
supported params and zero was returned (so that client can
|
||||
allocate memory and call the API second time). IOW - the usual,
|
||||
old style of APIs where we didn't want to allocate memory on
|
||||
caller's behalf. But because of this bug, a negative one is
|
||||
returned instead.
|
||||
|
||||
Fixes: 501825011c1fe80f458820c7efe5a198e0af9be5
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3a3f73ea9f1925ca5e256fa54c5aa451ddeaa19e)
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-22800
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/remote/remote_driver.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
|
||||
index 392377deae..bedf2cb833 100644
|
||||
--- a/src/remote/remote_driver.c
|
||||
+++ b/src/remote/remote_driver.c
|
||||
@@ -2570,7 +2570,7 @@ static int remoteDomainGetBlockIoTune(virDomainPtr domain,
|
||||
*/
|
||||
if (*nparams == 0) {
|
||||
*nparams = ret.nparams;
|
||||
- return -1;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
if (virTypedParamsDeserialize((struct _virTypedParameterRemote *) ret.params.params_val,
|
||||
--
|
||||
2.43.0
|
@ -1,82 +0,0 @@
|
||||
From c6ea67c481a2f447951449bd9b2746cfaaf385fd Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c6ea67c481a2f447951449bd9b2746cfaaf385fd@dist-git>
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 25 Jul 2022 14:09:39 +0100
|
||||
Subject: [PATCH] rpc: Pass OPENSSL_CONF through to ssh invocations
|
||||
|
||||
It's no longer possible for libvirt to connect over the ssh transport
|
||||
from RHEL 9 to RHEL 5. This is because SHA1 signatures have been
|
||||
effectively banned in RHEL 9 at the openssl level. They are required
|
||||
to check the RHEL 5 host key. Note this is a separate issue from
|
||||
openssh requiring additional configuration in order to connect to
|
||||
older servers.
|
||||
|
||||
Connecting from a RHEL 9 client to RHEL 5 server:
|
||||
|
||||
$ cat ~/.ssh/config
|
||||
Host 192.168.0.91
|
||||
KexAlgorithms +diffie-hellman-group14-sha1
|
||||
MACs +hmac-sha1
|
||||
HostKeyAlgorithms +ssh-rsa
|
||||
PubkeyAcceptedKeyTypes +ssh-rsa
|
||||
PubkeyAcceptedAlgorithms +ssh-rsa
|
||||
|
||||
$ virsh -c 'qemu+ssh://root@192.168.0.91/system' list
|
||||
error: failed to connect to the hypervisor
|
||||
error: Cannot recv data: ssh_dispatch_run_fatal: Connection to 192.168.0.91 port 22: error in libcrypto: Connection reset by peer
|
||||
|
||||
"error in libcrypto: Connection reset by peer" is the characteristic
|
||||
error of openssl having been modified to disable SHA1 by default.
|
||||
(You will not see this on non-RHEL-derived distros.)
|
||||
|
||||
You could enable the legacy crypto policy which downgrades security on
|
||||
the entire host, but a more fine-grained way to do this is to create
|
||||
an alternate openssl configuration file that enables the "forbidden"
|
||||
signatures. However this requires passing the OPENSSL_CONF
|
||||
environment variable through to ssh to specify the alternate
|
||||
configuration. Libvirt filters out this environment variable, but
|
||||
this commit allows it through. With this commit:
|
||||
|
||||
$ cat /var/tmp/openssl.cnf
|
||||
.include /etc/ssl/openssl.cnf
|
||||
[openssl_init]
|
||||
alg_section = evp_properties
|
||||
[evp_properties]
|
||||
rh-allow-sha1-signatures = yes
|
||||
|
||||
$ OPENSSL_CONF=/var/tmp/openssl.cnf ./run virsh -c 'qemu+ssh://root@192.168.0.91/system' list
|
||||
root@192.168.0.91's password:
|
||||
Id Name State
|
||||
--------------------
|
||||
|
||||
Essentially my argument here is that OPENSSL_CONF is sufficiently
|
||||
similar in nature to KRB5CCNAME, SSH* and XAUTHORITY that we should
|
||||
permit it to be passed through.
|
||||
|
||||
virt-v2v bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2062360
|
||||
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
|
||||
Acked-by: Laszlo Ersek <lersek@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
|
||||
(cherry picked from commit 45912ac399abd9d4eba21fa3f15cb7587351f959)
|
||||
Libvirt BZ: https://bugzilla.redhat.com/show_bug.cgi?id=2112348
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/rpc/virnetsocket.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
|
||||
index 32f506d2d4..8280bda007 100644
|
||||
--- a/src/rpc/virnetsocket.c
|
||||
+++ b/src/rpc/virnetsocket.c
|
||||
@@ -855,6 +855,7 @@ int virNetSocketNewConnectSSH(const char *nodename,
|
||||
virCommandAddEnvPass(cmd, "KRB5CCNAME");
|
||||
virCommandAddEnvPass(cmd, "SSH_AUTH_SOCK");
|
||||
virCommandAddEnvPass(cmd, "SSH_ASKPASS");
|
||||
+ virCommandAddEnvPass(cmd, "OPENSSL_CONF");
|
||||
virCommandAddEnvPass(cmd, "DISPLAY");
|
||||
virCommandAddEnvPass(cmd, "XAUTHORITY");
|
||||
virCommandClearCaps(cmd);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,96 @@
|
||||
From 8074d64dc2eca846d6a61efe1a9b7428a0ce1dd1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Tue, 30 Apr 2024 11:51:15 +0100
|
||||
Subject: [PATCH] rpc: ensure temporary GSource is removed from client event
|
||||
loop
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Users are seeing periodic segfaults from libvirt client apps,
|
||||
especially thread heavy ones like virt-manager. A typical
|
||||
stack trace would end up in the virNetClientIOEventFD method,
|
||||
with illegal access to stale stack data. eg
|
||||
|
||||
==238721==ERROR: AddressSanitizer: stack-use-after-return on address 0x75cd18709788 at pc 0x75cd3111f907 bp 0x75cd181ff550 sp 0x75cd181ff548
|
||||
WRITE of size 4 at 0x75cd18709788 thread T11
|
||||
#0 0x75cd3111f906 in virNetClientIOEventFD /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:1634:15
|
||||
#1 0x75cd3210d198 (/usr/lib/libglib-2.0.so.0+0x5a198) (BuildId: 0a2311dfbbc6c215dc36f4b6bdd2b4b6fbae55a2)
|
||||
#2 0x75cd3216c3be (/usr/lib/libglib-2.0.so.0+0xb93be) (BuildId: 0a2311dfbbc6c215dc36f4b6bdd2b4b6fbae55a2)
|
||||
#3 0x75cd3210ddc6 in g_main_loop_run (/usr/lib/libglib-2.0.so.0+0x5adc6) (BuildId: 0a2311dfbbc6c215dc36f4b6bdd2b4b6fbae55a2)
|
||||
#4 0x75cd3111a47c in virNetClientIOEventLoop /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:1722:9
|
||||
#5 0x75cd3111a47c in virNetClientIO /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:2002:10
|
||||
#6 0x75cd3111a47c in virNetClientSendInternal /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:2170:11
|
||||
#7 0x75cd311198a8 in virNetClientSendWithReply /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclient.c:2198:11
|
||||
#8 0x75cd31111653 in virNetClientProgramCall /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/rpc/virnetclientprogram.c:318:9
|
||||
#9 0x75cd31241c8f in callFull /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/remote/remote_driver.c:6054:10
|
||||
#10 0x75cd31241c8f in call /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/remote/remote_driver.c:6076:12
|
||||
#11 0x75cd31241c8f in remoteNetworkGetXMLDesc /usr/src/debug/libvirt/libvirt-10.2.0/build/src/remote/remote_client_bodies.h:5959:9
|
||||
#12 0x75cd31410ff7 in virNetworkGetXMLDesc /usr/src/debug/libvirt/libvirt-10.2.0/build/../src/libvirt-network.c:952:15
|
||||
|
||||
The root cause is a bad assumption in the virNetClientIOEventLoop
|
||||
method. This method is run by whichever thread currently owns the
|
||||
buck, and is responsible for handling I/O. Inside a for(;;) loop,
|
||||
this method creates a temporary GSource, adds it to the event loop
|
||||
and runs g_main_loop_run(). When I/O is ready, the GSource callback
|
||||
(virNetClientIOEventFD) will fire and call g_main_loop_quit(), and
|
||||
return G_SOURCE_REMOVE which results in the temporary GSource being
|
||||
destroyed. A g_autoptr() will then remove the last reference.
|
||||
|
||||
What was overlooked, is that a second thread can come along and
|
||||
while it can't enter virNetClientIOEventLoop, it will register an
|
||||
idle source that uses virNetClientIOWakeup to interrupt the
|
||||
original thread's 'g_main_loop_run' call. When this happens the
|
||||
virNetClientIOEventFD callback never runs, and so the temporary
|
||||
GSource is not destroyed. The g_autoptr() will remove a reference,
|
||||
but by virtue of still being attached to the event context, there
|
||||
is an extra reference held causing GSource to be leaked. The
|
||||
next time 'g_main_loop_run' is called, the original GSource will
|
||||
trigger its callback, and access data that was allocated on the
|
||||
stack by the previous thread, and likely SEGV.
|
||||
|
||||
To solve this, the thread calling 'g_main_loop_run' must call
|
||||
g_source_destroy, immediately upon return, to guarantee that
|
||||
the temporary GSource is removed.
|
||||
|
||||
CVE-2024-4418
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reported-by: Martin Shirokov <shirokovmartin@gmail.com>
|
||||
Tested-by: Martin Shirokov <shirokovmartin@gmail.com>
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
---
|
||||
src/rpc/virnetclient.c | 14 +++++++++++++-
|
||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
|
||||
index 68098b1c8d8..147b0d661a3 100644
|
||||
--- a/src/rpc/virnetclient.c
|
||||
+++ b/src/rpc/virnetclient.c
|
||||
@@ -1657,7 +1657,7 @@ static int virNetClientIOEventLoop(virNetClient *client,
|
||||
#endif /* !WIN32 */
|
||||
int timeout = -1;
|
||||
virNetMessage *msg = NULL;
|
||||
- g_autoptr(GSource) G_GNUC_UNUSED source = NULL;
|
||||
+ g_autoptr(GSource) source = NULL;
|
||||
GIOCondition ev = 0;
|
||||
struct virNetClientIOEventData data = {
|
||||
.client = client,
|
||||
@@ -1721,6 +1721,18 @@ static int virNetClientIOEventLoop(virNetClient *client,
|
||||
|
||||
g_main_loop_run(client->eventLoop);
|
||||
|
||||
+ /*
|
||||
+ * If virNetClientIOEventFD ran, this GSource will already be
|
||||
+ * destroyed due to G_SOURCE_REMOVE. It is harmless to re-destroy
|
||||
+ * it, since we still own a reference.
|
||||
+ *
|
||||
+ * If virNetClientIOWakeup ran, it will have interrupted the
|
||||
+ * g_main_loop_run call, before virNetClientIOEventFD could
|
||||
+ * run, and thus the GSource is still registered, and we need
|
||||
+ * to destroy it since it is referencing stack memory for 'data'
|
||||
+ */
|
||||
+ g_source_destroy(source);
|
||||
+
|
||||
#ifndef WIN32
|
||||
ignore_value(pthread_sigmask(SIG_SETMASK, &oldmask, NULL));
|
||||
#endif /* !WIN32 */
|
@ -0,0 +1,39 @@
|
||||
From 4c070fe8db9456a0cd33910d37e613a045a1ec77 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <4c070fe8db9456a0cd33910d37e613a045a1ec77.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 29 Jan 2024 16:12:09 +0100
|
||||
Subject: [PATCH] schema: nodedev: Adjust allowed characters in
|
||||
'vpdFieldValueFormat'
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The check in 'virPCIVPDResourceIsValidTextValue' allows any printable
|
||||
characters, thus the XML schema should do the same.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit edaa1112ffef253013dcc3318794cebfaa2a6cb7)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-22314 [9.4.0]
|
||||
https://issues.redhat.com/browse/RHEL-22400 [9.3.z]
|
||||
https://issues.redhat.com/browse/RHEL-22399 [9.2.z]
|
||||
---
|
||||
src/conf/schemas/nodedev.rng | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/conf/schemas/nodedev.rng b/src/conf/schemas/nodedev.rng
|
||||
index fba4021754..ff07313968 100644
|
||||
--- a/src/conf/schemas/nodedev.rng
|
||||
+++ b/src/conf/schemas/nodedev.rng
|
||||
@@ -869,7 +869,7 @@
|
||||
|
||||
<define name="vpdFieldValueFormat">
|
||||
<data type="string">
|
||||
- <param name="pattern">[0-9a-zA-F -_,.:;=]{0,255}</param>
|
||||
+ <param name="pattern">.{0,255}</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
--
|
||||
2.43.0
|
@ -1,66 +0,0 @@
|
||||
From 6b11a6113bb62c9280de3122f223a7a7a1be04ba Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6b11a6113bb62c9280de3122f223a7a7a1be04ba@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Wed, 21 Sep 2022 15:56:13 +0200
|
||||
Subject: [PATCH] security_selinux: Don't ignore NVMe disks when setting image
|
||||
label
|
||||
|
||||
For NVMe disks we skip setting SELinux label on corresponding
|
||||
VFIO group (/dev/vfio/X). This bug is only visible with
|
||||
namespaces and goes as follows:
|
||||
|
||||
1) libvirt assigns NVMe disk to vfio-pci driver,
|
||||
2) kernel creates /dev/vfio/X node with generic device_t SELinux
|
||||
label,
|
||||
3) our namespace code creates the exact copy of the node in
|
||||
domain's private /dev,
|
||||
4) SELinux policy kicks in an changes the label on the node to
|
||||
vfio_device_t (in the top most namespace),
|
||||
5) libvirt tells QEMU to attach the NVMe disk, which is denied by
|
||||
SELinux policy.
|
||||
|
||||
While one can argue that kernel should have created the
|
||||
/dev/vfio/X node with the correct SELinux label from the
|
||||
beginning (step 2), libvirt can't rely on that and needs to set
|
||||
label on its own.
|
||||
|
||||
Surprisingly, I already wrote the code that aims on this specific
|
||||
case (v6.0.0-rc1~241), but because of a shortcut we take earlier
|
||||
it is never ran. The reason is that
|
||||
virStorageSourceIsLocalStorage() considers NVMe disks as
|
||||
non-local because their source is not accessible via src->path
|
||||
(or even if it is, it's not a local path).
|
||||
|
||||
Therefore, do not exit early for NVMe disks and let the function
|
||||
continue.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2121441
|
||||
Fixes: 284a12bae0e4cf93ea72797965d6c12e3a103f40
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 68e93e3180ad4e51bf9f86850dc86d8f528d6564)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/security/security_selinux.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
|
||||
index e2f34a27dc..6cd3e845fd 100644
|
||||
--- a/src/security/security_selinux.c
|
||||
+++ b/src/security/security_selinux.c
|
||||
@@ -1818,7 +1818,11 @@ virSecuritySELinuxSetImageLabelInternal(virSecurityManager *mgr,
|
||||
const char *path = src->path;
|
||||
int ret;
|
||||
|
||||
- if (!src->path || !virStorageSourceIsLocalStorage(src))
|
||||
+ /* Special case NVMe. Per virStorageSourceIsLocalStorage() it's
|
||||
+ * considered not local, but we still want the code below to set
|
||||
+ * label on VFIO group. */
|
||||
+ if (src->type != VIR_STORAGE_TYPE_NVME &&
|
||||
+ (!src->path || !virStorageSourceIsLocalStorage(src)))
|
||||
return 0;
|
||||
|
||||
secdef = virDomainDefGetSecurityLabelDef(def, SECURITY_SELINUX_NAME);
|
||||
--
|
||||
2.37.3
|
||||
|
@ -0,0 +1,919 @@
|
||||
From 87b424cacef5bbbe7e01c69ade8a8a6707cd779c Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <87b424cacef5bbbe7e01c69ade8a8a6707cd779c.1706524416.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 5 Jan 2024 15:07:06 +0100
|
||||
Subject: [PATCH] tests: Add hostcpudata for machine with CPU clusters
|
||||
|
||||
The data is taken from an HPE Apollo 70 machine, which uses
|
||||
aarch64 CPUs. It is interesting for us because non-dummy
|
||||
information about CPU clusters is exposed through sysfs.
|
||||
|
||||
In order to keep things reasonable, the data was manually
|
||||
modified so that only 8 of the original 224 CPUs are included.
|
||||
Care has been taken to ensure that the topology is otherwise
|
||||
unaltered.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit fb81a56f321019685be80b14e3be3046e46412ad)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
.../linux-basic-clusters/system/cpu | 1 +
|
||||
.../linux-basic-clusters/system/node | 1 +
|
||||
.../vircaps-aarch64-basic-clusters.xml | 39 ++++++++++
|
||||
tests/vircaps2xmltest.c | 1 +
|
||||
.../linux-aarch64-with-clusters.cpuinfo | 72 +++++++++++++++++++
|
||||
.../linux-aarch64-with-clusters.expected | 1 +
|
||||
.../cpu/cpu0/topology/cluster_cpus_list | 1 +
|
||||
.../cpu/cpu0/topology/cluster_id | 1 +
|
||||
.../cpu/cpu0/topology/core_cpus_list | 1 +
|
||||
.../cpu/cpu0/topology/core_id | 1 +
|
||||
.../cpu/cpu0/topology/core_siblings_list | 1 +
|
||||
.../cpu/cpu0/topology/package_cpus_list | 1 +
|
||||
.../cpu/cpu0/topology/physical_package_id | 1 +
|
||||
.../cpu/cpu0/topology/thread_siblings_list | 1 +
|
||||
.../cpu/cpu1/topology/cluster_cpus_list | 1 +
|
||||
.../cpu/cpu1/topology/cluster_id | 1 +
|
||||
.../cpu/cpu1/topology/core_cpus_list | 1 +
|
||||
.../cpu/cpu1/topology/core_id | 1 +
|
||||
.../cpu/cpu1/topology/core_siblings_list | 1 +
|
||||
.../cpu/cpu1/topology/package_cpus_list | 1 +
|
||||
.../cpu/cpu1/topology/physical_package_id | 1 +
|
||||
.../cpu/cpu1/topology/thread_siblings_list | 1 +
|
||||
.../cpu/cpu2/topology/cluster_cpus_list | 1 +
|
||||
.../cpu/cpu2/topology/cluster_id | 1 +
|
||||
.../cpu/cpu2/topology/core_cpus_list | 1 +
|
||||
.../cpu/cpu2/topology/core_id | 1 +
|
||||
.../cpu/cpu2/topology/core_siblings_list | 1 +
|
||||
.../cpu/cpu2/topology/package_cpus_list | 1 +
|
||||
.../cpu/cpu2/topology/physical_package_id | 1 +
|
||||
.../cpu/cpu2/topology/thread_siblings_list | 1 +
|
||||
.../cpu/cpu3/topology/cluster_cpus_list | 1 +
|
||||
.../cpu/cpu3/topology/cluster_id | 1 +
|
||||
.../cpu/cpu3/topology/core_cpus_list | 1 +
|
||||
.../cpu/cpu3/topology/core_id | 1 +
|
||||
.../cpu/cpu3/topology/core_siblings_list | 1 +
|
||||
.../cpu/cpu3/topology/package_cpus_list | 1 +
|
||||
.../cpu/cpu3/topology/physical_package_id | 1 +
|
||||
.../cpu/cpu3/topology/thread_siblings_list | 1 +
|
||||
.../cpu/cpu4/topology/cluster_cpus_list | 1 +
|
||||
.../cpu/cpu4/topology/cluster_id | 1 +
|
||||
.../cpu/cpu4/topology/core_cpus_list | 1 +
|
||||
.../cpu/cpu4/topology/core_id | 1 +
|
||||
.../cpu/cpu4/topology/core_siblings_list | 1 +
|
||||
.../cpu/cpu4/topology/package_cpus_list | 1 +
|
||||
.../cpu/cpu4/topology/physical_package_id | 1 +
|
||||
.../cpu/cpu4/topology/thread_siblings_list | 1 +
|
||||
.../cpu/cpu5/topology/cluster_cpus_list | 1 +
|
||||
.../cpu/cpu5/topology/cluster_id | 1 +
|
||||
.../cpu/cpu5/topology/core_cpus_list | 1 +
|
||||
.../cpu/cpu5/topology/core_id | 1 +
|
||||
.../cpu/cpu5/topology/core_siblings_list | 1 +
|
||||
.../cpu/cpu5/topology/package_cpus_list | 1 +
|
||||
.../cpu/cpu5/topology/physical_package_id | 1 +
|
||||
.../cpu/cpu5/topology/thread_siblings_list | 1 +
|
||||
.../cpu/cpu6/topology/cluster_cpus_list | 1 +
|
||||
.../cpu/cpu6/topology/cluster_id | 1 +
|
||||
.../cpu/cpu6/topology/core_cpus_list | 1 +
|
||||
.../cpu/cpu6/topology/core_id | 1 +
|
||||
.../cpu/cpu6/topology/core_siblings_list | 1 +
|
||||
.../cpu/cpu6/topology/package_cpus_list | 1 +
|
||||
.../cpu/cpu6/topology/physical_package_id | 1 +
|
||||
.../cpu/cpu6/topology/thread_siblings_list | 1 +
|
||||
.../cpu/cpu7/topology/cluster_cpus_list | 1 +
|
||||
.../cpu/cpu7/topology/cluster_id | 1 +
|
||||
.../cpu/cpu7/topology/core_cpus_list | 1 +
|
||||
.../cpu/cpu7/topology/core_id | 1 +
|
||||
.../cpu/cpu7/topology/core_siblings_list | 1 +
|
||||
.../cpu/cpu7/topology/package_cpus_list | 1 +
|
||||
.../cpu/cpu7/topology/physical_package_id | 1 +
|
||||
.../cpu/cpu7/topology/thread_siblings_list | 1 +
|
||||
.../linux-with-clusters/cpu/online | 1 +
|
||||
.../linux-with-clusters/cpu/present | 1 +
|
||||
.../linux-with-clusters/node/node0/cpu0 | 1 +
|
||||
.../linux-with-clusters/node/node0/cpu1 | 1 +
|
||||
.../linux-with-clusters/node/node0/cpu2 | 1 +
|
||||
.../linux-with-clusters/node/node0/cpu3 | 1 +
|
||||
.../linux-with-clusters/node/node0/cpulist | 1 +
|
||||
.../linux-with-clusters/node/node1/cpu4 | 1 +
|
||||
.../linux-with-clusters/node/node1/cpu5 | 1 +
|
||||
.../linux-with-clusters/node/node1/cpu6 | 1 +
|
||||
.../linux-with-clusters/node/node1/cpu7 | 1 +
|
||||
.../linux-with-clusters/node/node1/cpulist | 1 +
|
||||
.../linux-with-clusters/node/online | 1 +
|
||||
.../linux-with-clusters/node/possible | 1 +
|
||||
tests/virhostcputest.c | 1 +
|
||||
85 files changed, 194 insertions(+)
|
||||
create mode 120000 tests/vircaps2xmldata/linux-basic-clusters/system/cpu
|
||||
create mode 120000 tests/vircaps2xmldata/linux-basic-clusters/system/node
|
||||
create mode 100644 tests/vircaps2xmldata/vircaps-aarch64-basic-clusters.xml
|
||||
create mode 100644 tests/virhostcpudata/linux-aarch64-with-clusters.cpuinfo
|
||||
create mode 100644 tests/virhostcpudata/linux-aarch64-with-clusters.expected
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/cluster_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/cluster_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/package_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/physical_package_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/thread_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/cluster_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/cluster_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/package_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/physical_package_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/thread_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/cluster_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/cluster_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/package_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/physical_package_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/thread_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/cluster_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/cluster_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/package_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/physical_package_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/thread_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/cluster_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/cluster_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/package_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/physical_package_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/thread_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/cluster_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/cluster_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/package_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/physical_package_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/thread_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/cluster_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/cluster_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/package_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/physical_package_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/thread_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/cluster_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/cluster_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/package_cpus_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/physical_package_id
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/thread_siblings_list
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/online
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/cpu/present
|
||||
create mode 120000 tests/virhostcpudata/linux-with-clusters/node/node0/cpu0
|
||||
create mode 120000 tests/virhostcpudata/linux-with-clusters/node/node0/cpu1
|
||||
create mode 120000 tests/virhostcpudata/linux-with-clusters/node/node0/cpu2
|
||||
create mode 120000 tests/virhostcpudata/linux-with-clusters/node/node0/cpu3
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/node/node0/cpulist
|
||||
create mode 120000 tests/virhostcpudata/linux-with-clusters/node/node1/cpu4
|
||||
create mode 120000 tests/virhostcpudata/linux-with-clusters/node/node1/cpu5
|
||||
create mode 120000 tests/virhostcpudata/linux-with-clusters/node/node1/cpu6
|
||||
create mode 120000 tests/virhostcpudata/linux-with-clusters/node/node1/cpu7
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/node/node1/cpulist
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/node/online
|
||||
create mode 100644 tests/virhostcpudata/linux-with-clusters/node/possible
|
||||
|
||||
diff --git a/tests/vircaps2xmldata/linux-basic-clusters/system/cpu b/tests/vircaps2xmldata/linux-basic-clusters/system/cpu
|
||||
new file mode 120000
|
||||
index 0000000000..f7354e3525
|
||||
--- /dev/null
|
||||
+++ b/tests/vircaps2xmldata/linux-basic-clusters/system/cpu
|
||||
@@ -0,0 +1 @@
|
||||
+../../../virhostcpudata/linux-with-clusters/cpu
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/vircaps2xmldata/linux-basic-clusters/system/node b/tests/vircaps2xmldata/linux-basic-clusters/system/node
|
||||
new file mode 120000
|
||||
index 0000000000..57b972ce90
|
||||
--- /dev/null
|
||||
+++ b/tests/vircaps2xmldata/linux-basic-clusters/system/node
|
||||
@@ -0,0 +1 @@
|
||||
+../../../virhostcpudata/linux-with-clusters/node
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/vircaps2xmldata/vircaps-aarch64-basic-clusters.xml b/tests/vircaps2xmldata/vircaps-aarch64-basic-clusters.xml
|
||||
new file mode 100644
|
||||
index 0000000000..fe61fc42cc
|
||||
--- /dev/null
|
||||
+++ b/tests/vircaps2xmldata/vircaps-aarch64-basic-clusters.xml
|
||||
@@ -0,0 +1,39 @@
|
||||
+<capabilities>
|
||||
+
|
||||
+ <host>
|
||||
+ <cpu>
|
||||
+ <arch>aarch64</arch>
|
||||
+ </cpu>
|
||||
+ <power_management/>
|
||||
+ <iommu support='no'/>
|
||||
+ <topology>
|
||||
+ <cells num='2'>
|
||||
+ <cell id='0'>
|
||||
+ <memory unit='KiB'>1048576</memory>
|
||||
+ <pages unit='KiB' size='4'>2048</pages>
|
||||
+ <pages unit='KiB' size='2048'>4096</pages>
|
||||
+ <pages unit='KiB' size='1048576'>6144</pages>
|
||||
+ <cpus num='4'>
|
||||
+ <cpu id='0' socket_id='36' die_id='0' core_id='0' siblings='0-1'/>
|
||||
+ <cpu id='1' socket_id='36' die_id='0' core_id='0' siblings='0-1'/>
|
||||
+ <cpu id='2' socket_id='36' die_id='0' core_id='1' siblings='2-3'/>
|
||||
+ <cpu id='3' socket_id='36' die_id='0' core_id='1' siblings='2-3'/>
|
||||
+ </cpus>
|
||||
+ </cell>
|
||||
+ <cell id='1'>
|
||||
+ <memory unit='KiB'>2097152</memory>
|
||||
+ <pages unit='KiB' size='4'>4096</pages>
|
||||
+ <pages unit='KiB' size='2048'>6144</pages>
|
||||
+ <pages unit='KiB' size='1048576'>8192</pages>
|
||||
+ <cpus num='4'>
|
||||
+ <cpu id='4' socket_id='3180' die_id='0' core_id='256' siblings='4-5'/>
|
||||
+ <cpu id='5' socket_id='3180' die_id='0' core_id='256' siblings='4-5'/>
|
||||
+ <cpu id='6' socket_id='3180' die_id='0' core_id='257' siblings='6-7'/>
|
||||
+ <cpu id='7' socket_id='3180' die_id='0' core_id='257' siblings='6-7'/>
|
||||
+ </cpus>
|
||||
+ </cell>
|
||||
+ </cells>
|
||||
+ </topology>
|
||||
+ </host>
|
||||
+
|
||||
+</capabilities>
|
||||
diff --git a/tests/vircaps2xmltest.c b/tests/vircaps2xmltest.c
|
||||
index 26a512e87f..2fdf694640 100644
|
||||
--- a/tests/vircaps2xmltest.c
|
||||
+++ b/tests/vircaps2xmltest.c
|
||||
@@ -93,6 +93,7 @@ mymain(void)
|
||||
DO_TEST_FULL("basic", VIR_ARCH_X86_64, false, false);
|
||||
DO_TEST_FULL("basic", VIR_ARCH_AARCH64, true, false);
|
||||
DO_TEST_FULL("basic-dies", VIR_ARCH_X86_64, false, false);
|
||||
+ DO_TEST_FULL("basic-clusters", VIR_ARCH_AARCH64, false, false);
|
||||
|
||||
DO_TEST_FULL("caches", VIR_ARCH_X86_64, true, true);
|
||||
|
||||
diff --git a/tests/virhostcpudata/linux-aarch64-with-clusters.cpuinfo b/tests/virhostcpudata/linux-aarch64-with-clusters.cpuinfo
|
||||
new file mode 100644
|
||||
index 0000000000..94030201d2
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-aarch64-with-clusters.cpuinfo
|
||||
@@ -0,0 +1,72 @@
|
||||
+processor : 0
|
||||
+BogoMIPS : 400.00
|
||||
+Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm
|
||||
+CPU implementer : 0x43
|
||||
+CPU architecture: 8
|
||||
+CPU variant : 0x1
|
||||
+CPU part : 0x0af
|
||||
+CPU revision : 1
|
||||
+
|
||||
+processor : 1
|
||||
+BogoMIPS : 400.00
|
||||
+Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm
|
||||
+CPU implementer : 0x43
|
||||
+CPU architecture: 8
|
||||
+CPU variant : 0x1
|
||||
+CPU part : 0x0af
|
||||
+CPU revision : 1
|
||||
+
|
||||
+processor : 2
|
||||
+BogoMIPS : 400.00
|
||||
+Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm
|
||||
+CPU implementer : 0x43
|
||||
+CPU architecture: 8
|
||||
+CPU variant : 0x1
|
||||
+CPU part : 0x0af
|
||||
+CPU revision : 1
|
||||
+
|
||||
+processor : 3
|
||||
+BogoMIPS : 400.00
|
||||
+Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm
|
||||
+CPU implementer : 0x43
|
||||
+CPU architecture: 8
|
||||
+CPU variant : 0x1
|
||||
+CPU part : 0x0af
|
||||
+CPU revision : 1
|
||||
+
|
||||
+processor : 4
|
||||
+BogoMIPS : 400.00
|
||||
+Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm
|
||||
+CPU implementer : 0x43
|
||||
+CPU architecture: 8
|
||||
+CPU variant : 0x1
|
||||
+CPU part : 0x0af
|
||||
+CPU revision : 1
|
||||
+
|
||||
+processor : 5
|
||||
+BogoMIPS : 400.00
|
||||
+Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm
|
||||
+CPU implementer : 0x43
|
||||
+CPU architecture: 8
|
||||
+CPU variant : 0x1
|
||||
+CPU part : 0x0af
|
||||
+CPU revision : 1
|
||||
+
|
||||
+processor : 6
|
||||
+BogoMIPS : 400.00
|
||||
+Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm
|
||||
+CPU implementer : 0x43
|
||||
+CPU architecture: 8
|
||||
+CPU variant : 0x1
|
||||
+CPU part : 0x0af
|
||||
+CPU revision : 1
|
||||
+
|
||||
+processor : 7
|
||||
+BogoMIPS : 400.00
|
||||
+Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm
|
||||
+CPU implementer : 0x43
|
||||
+CPU architecture: 8
|
||||
+CPU variant : 0x1
|
||||
+CPU part : 0x0af
|
||||
+CPU revision : 1
|
||||
+
|
||||
diff --git a/tests/virhostcpudata/linux-aarch64-with-clusters.expected b/tests/virhostcpudata/linux-aarch64-with-clusters.expected
|
||||
new file mode 100644
|
||||
index 0000000000..bf350bd40b
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-aarch64-with-clusters.expected
|
||||
@@ -0,0 +1 @@
|
||||
+CPUs: 8/8, MHz: 0, Nodes: 2, Sockets: 1, Cores: 2, Threads: 2
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/cluster_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/cluster_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..8b0fab869c
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/cluster_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/cluster_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/cluster_id
|
||||
new file mode 100644
|
||||
index 0000000000..573541ac97
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/cluster_id
|
||||
@@ -0,0 +1 @@
|
||||
+0
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..8b0fab869c
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_id
|
||||
new file mode 100644
|
||||
index 0000000000..573541ac97
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_id
|
||||
@@ -0,0 +1 @@
|
||||
+0
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..40c7bb2f1a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/core_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/package_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/package_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..40c7bb2f1a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/package_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/physical_package_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/physical_package_id
|
||||
new file mode 100644
|
||||
index 0000000000..7facc89938
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/physical_package_id
|
||||
@@ -0,0 +1 @@
|
||||
+36
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/thread_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..8b0fab869c
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu0/topology/thread_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/cluster_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/cluster_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..8b0fab869c
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/cluster_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/cluster_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/cluster_id
|
||||
new file mode 100644
|
||||
index 0000000000..573541ac97
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/cluster_id
|
||||
@@ -0,0 +1 @@
|
||||
+0
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..8b0fab869c
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_id
|
||||
new file mode 100644
|
||||
index 0000000000..573541ac97
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_id
|
||||
@@ -0,0 +1 @@
|
||||
+0
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..40c7bb2f1a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/core_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/package_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/package_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..40c7bb2f1a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/package_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/physical_package_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/physical_package_id
|
||||
new file mode 100644
|
||||
index 0000000000..7facc89938
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/physical_package_id
|
||||
@@ -0,0 +1 @@
|
||||
+36
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/thread_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..8b0fab869c
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu1/topology/thread_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/cluster_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/cluster_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..7a9857542a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/cluster_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+2-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/cluster_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/cluster_id
|
||||
new file mode 100644
|
||||
index 0000000000..d00491fd7e
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/cluster_id
|
||||
@@ -0,0 +1 @@
|
||||
+1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..7a9857542a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+2-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_id
|
||||
new file mode 100644
|
||||
index 0000000000..d00491fd7e
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_id
|
||||
@@ -0,0 +1 @@
|
||||
+1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..40c7bb2f1a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/core_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/package_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/package_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..40c7bb2f1a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/package_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/physical_package_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/physical_package_id
|
||||
new file mode 100644
|
||||
index 0000000000..7facc89938
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/physical_package_id
|
||||
@@ -0,0 +1 @@
|
||||
+36
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/thread_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..7a9857542a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu2/topology/thread_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+2-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/cluster_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/cluster_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..7a9857542a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/cluster_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+2-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/cluster_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/cluster_id
|
||||
new file mode 100644
|
||||
index 0000000000..d00491fd7e
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/cluster_id
|
||||
@@ -0,0 +1 @@
|
||||
+1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..7a9857542a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+2-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_id
|
||||
new file mode 100644
|
||||
index 0000000000..d00491fd7e
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_id
|
||||
@@ -0,0 +1 @@
|
||||
+1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..40c7bb2f1a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/core_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/package_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/package_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..40c7bb2f1a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/package_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+0-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/physical_package_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/physical_package_id
|
||||
new file mode 100644
|
||||
index 0000000000..7facc89938
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/physical_package_id
|
||||
@@ -0,0 +1 @@
|
||||
+36
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/thread_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..7a9857542a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu3/topology/thread_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+2-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/cluster_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/cluster_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..e66d883ade
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/cluster_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-5
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/cluster_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/cluster_id
|
||||
new file mode 100644
|
||||
index 0000000000..9183bf03fc
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/cluster_id
|
||||
@@ -0,0 +1 @@
|
||||
+256
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..e66d883ade
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-5
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_id
|
||||
new file mode 100644
|
||||
index 0000000000..9183bf03fc
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_id
|
||||
@@ -0,0 +1 @@
|
||||
+256
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..93fccd3cc6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/core_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/package_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/package_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..93fccd3cc6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/package_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/physical_package_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/physical_package_id
|
||||
new file mode 100644
|
||||
index 0000000000..58cecca290
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/physical_package_id
|
||||
@@ -0,0 +1 @@
|
||||
+3180
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/thread_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..e66d883ade
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu4/topology/thread_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-5
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/cluster_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/cluster_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..e66d883ade
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/cluster_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-5
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/cluster_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/cluster_id
|
||||
new file mode 100644
|
||||
index 0000000000..9183bf03fc
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/cluster_id
|
||||
@@ -0,0 +1 @@
|
||||
+256
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..e66d883ade
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-5
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_id
|
||||
new file mode 100644
|
||||
index 0000000000..9183bf03fc
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_id
|
||||
@@ -0,0 +1 @@
|
||||
+256
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..93fccd3cc6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/core_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/package_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/package_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..93fccd3cc6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/package_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/physical_package_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/physical_package_id
|
||||
new file mode 100644
|
||||
index 0000000000..58cecca290
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/physical_package_id
|
||||
@@ -0,0 +1 @@
|
||||
+3180
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/thread_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..e66d883ade
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu5/topology/thread_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-5
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/cluster_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/cluster_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..fdd9f37517
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/cluster_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+6-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/cluster_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/cluster_id
|
||||
new file mode 100644
|
||||
index 0000000000..a700e79997
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/cluster_id
|
||||
@@ -0,0 +1 @@
|
||||
+257
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..fdd9f37517
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+6-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_id
|
||||
new file mode 100644
|
||||
index 0000000000..a700e79997
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_id
|
||||
@@ -0,0 +1 @@
|
||||
+257
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..93fccd3cc6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/core_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/package_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/package_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..93fccd3cc6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/package_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/physical_package_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/physical_package_id
|
||||
new file mode 100644
|
||||
index 0000000000..58cecca290
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/physical_package_id
|
||||
@@ -0,0 +1 @@
|
||||
+3180
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/thread_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..fdd9f37517
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu6/topology/thread_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+6-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/cluster_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/cluster_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..fdd9f37517
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/cluster_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+6-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/cluster_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/cluster_id
|
||||
new file mode 100644
|
||||
index 0000000000..a700e79997
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/cluster_id
|
||||
@@ -0,0 +1 @@
|
||||
+257
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..fdd9f37517
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+6-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_id
|
||||
new file mode 100644
|
||||
index 0000000000..a700e79997
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_id
|
||||
@@ -0,0 +1 @@
|
||||
+257
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..93fccd3cc6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/core_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/package_cpus_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/package_cpus_list
|
||||
new file mode 100644
|
||||
index 0000000000..93fccd3cc6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/package_cpus_list
|
||||
@@ -0,0 +1 @@
|
||||
+4-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/physical_package_id b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/physical_package_id
|
||||
new file mode 100644
|
||||
index 0000000000..58cecca290
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/physical_package_id
|
||||
@@ -0,0 +1 @@
|
||||
+3180
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/thread_siblings_list
|
||||
new file mode 100644
|
||||
index 0000000000..fdd9f37517
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/cpu7/topology/thread_siblings_list
|
||||
@@ -0,0 +1 @@
|
||||
+6-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/online b/tests/virhostcpudata/linux-with-clusters/cpu/online
|
||||
new file mode 100644
|
||||
index 0000000000..5f4593c34a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/online
|
||||
@@ -0,0 +1 @@
|
||||
+0-223
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/cpu/present b/tests/virhostcpudata/linux-with-clusters/cpu/present
|
||||
new file mode 100644
|
||||
index 0000000000..5f4593c34a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/cpu/present
|
||||
@@ -0,0 +1 @@
|
||||
+0-223
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node0/cpu0 b/tests/virhostcpudata/linux-with-clusters/node/node0/cpu0
|
||||
new file mode 120000
|
||||
index 0000000000..c841bea28b
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node0/cpu0
|
||||
@@ -0,0 +1 @@
|
||||
+../../cpu/cpu0
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node0/cpu1 b/tests/virhostcpudata/linux-with-clusters/node/node0/cpu1
|
||||
new file mode 120000
|
||||
index 0000000000..5f4536279e
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node0/cpu1
|
||||
@@ -0,0 +1 @@
|
||||
+../../cpu/cpu1
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node0/cpu2 b/tests/virhostcpudata/linux-with-clusters/node/node0/cpu2
|
||||
new file mode 120000
|
||||
index 0000000000..2dcca332ce
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node0/cpu2
|
||||
@@ -0,0 +1 @@
|
||||
+../../cpu/cpu2
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node0/cpu3 b/tests/virhostcpudata/linux-with-clusters/node/node0/cpu3
|
||||
new file mode 120000
|
||||
index 0000000000..c7690e5aa6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node0/cpu3
|
||||
@@ -0,0 +1 @@
|
||||
+../../cpu/cpu3
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node0/cpulist b/tests/virhostcpudata/linux-with-clusters/node/node0/cpulist
|
||||
new file mode 100644
|
||||
index 0000000000..40c7bb2f1a
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node0/cpulist
|
||||
@@ -0,0 +1 @@
|
||||
+0-3
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node1/cpu4 b/tests/virhostcpudata/linux-with-clusters/node/node1/cpu4
|
||||
new file mode 120000
|
||||
index 0000000000..9e77a64eb4
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node1/cpu4
|
||||
@@ -0,0 +1 @@
|
||||
+../../cpu/cpu4
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node1/cpu5 b/tests/virhostcpudata/linux-with-clusters/node/node1/cpu5
|
||||
new file mode 120000
|
||||
index 0000000000..cc07c3b97b
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node1/cpu5
|
||||
@@ -0,0 +1 @@
|
||||
+../../cpu/cpu5
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node1/cpu6 b/tests/virhostcpudata/linux-with-clusters/node/node1/cpu6
|
||||
new file mode 120000
|
||||
index 0000000000..2e7576354f
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node1/cpu6
|
||||
@@ -0,0 +1 @@
|
||||
+../../cpu/cpu6
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node1/cpu7 b/tests/virhostcpudata/linux-with-clusters/node/node1/cpu7
|
||||
new file mode 120000
|
||||
index 0000000000..09e3f79b43
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node1/cpu7
|
||||
@@ -0,0 +1 @@
|
||||
+../../cpu/cpu7
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/node1/cpulist b/tests/virhostcpudata/linux-with-clusters/node/node1/cpulist
|
||||
new file mode 100644
|
||||
index 0000000000..93fccd3cc6
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/node1/cpulist
|
||||
@@ -0,0 +1 @@
|
||||
+4-7
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/online b/tests/virhostcpudata/linux-with-clusters/node/online
|
||||
new file mode 100644
|
||||
index 0000000000..8b0fab869c
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/online
|
||||
@@ -0,0 +1 @@
|
||||
+0-1
|
||||
diff --git a/tests/virhostcpudata/linux-with-clusters/node/possible b/tests/virhostcpudata/linux-with-clusters/node/possible
|
||||
new file mode 100644
|
||||
index 0000000000..8b0fab869c
|
||||
--- /dev/null
|
||||
+++ b/tests/virhostcpudata/linux-with-clusters/node/possible
|
||||
@@ -0,0 +1 @@
|
||||
+0-1
|
||||
diff --git a/tests/virhostcputest.c b/tests/virhostcputest.c
|
||||
index 0990013878..cf310cb4ce 100644
|
||||
--- a/tests/virhostcputest.c
|
||||
+++ b/tests/virhostcputest.c
|
||||
@@ -273,6 +273,7 @@ mymain(void)
|
||||
{"subcores3", VIR_ARCH_PPC64},
|
||||
{"with-frequency", VIR_ARCH_S390X},
|
||||
{"with-die", VIR_ARCH_X86_64},
|
||||
+ {"with-clusters", VIR_ARCH_AARCH64},
|
||||
};
|
||||
|
||||
if (virInitialize() < 0)
|
||||
--
|
||||
2.43.0
|
146
SOURCES/libvirt-tests-Add-test-case-for-CPU-clusters.patch
Normal file
146
SOURCES/libvirt-tests-Add-test-case-for-CPU-clusters.patch
Normal file
@ -0,0 +1,146 @@
|
||||
From ce0166ed0811034173aca1edf9e7e2025a100cfb Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <ce0166ed0811034173aca1edf9e7e2025a100cfb.1706524416.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Mon, 8 Jan 2024 16:21:25 +0100
|
||||
Subject: [PATCH] tests: Add test case for CPU clusters
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 82c9196bfa19e73167faccbc1c2713a6d7ddbafc)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
.../cpu-topology5.aarch64-latest.args | 31 +++++++++++++++++++
|
||||
tests/qemuxml2argvdata/cpu-topology5.xml | 17 ++++++++++
|
||||
tests/qemuxml2argvtest.c | 1 +
|
||||
.../cpu-topology5.aarch64-latest.xml | 29 +++++++++++++++++
|
||||
tests/qemuxml2xmltest.c | 2 ++
|
||||
5 files changed, 80 insertions(+)
|
||||
create mode 100644 tests/qemuxml2argvdata/cpu-topology5.aarch64-latest.args
|
||||
create mode 100644 tests/qemuxml2argvdata/cpu-topology5.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/cpu-topology5.aarch64-latest.xml
|
||||
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-topology5.aarch64-latest.args b/tests/qemuxml2argvdata/cpu-topology5.aarch64-latest.args
|
||||
new file mode 100644
|
||||
index 0000000000..d835e1c0fa
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/cpu-topology5.aarch64-latest.args
|
||||
@@ -0,0 +1,31 @@
|
||||
+LC_ALL=C \
|
||||
+PATH=/bin \
|
||||
+HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \
|
||||
+USER=test \
|
||||
+LOGNAME=test \
|
||||
+XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \
|
||||
+XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \
|
||||
+XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
|
||||
+/usr/bin/qemu-system-aarch64 \
|
||||
+-name guest=QEMUGuest1,debug-threads=on \
|
||||
+-S \
|
||||
+-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \
|
||||
+-machine virt,usb=off,gic-version=2,dump-guest-core=off,memory-backend=mach-virt.ram,acpi=off \
|
||||
+-accel tcg \
|
||||
+-cpu cortex-a15 \
|
||||
+-m size=219136k \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"mach-virt.ram","size":224395264}' \
|
||||
+-overcommit mem-lock=off \
|
||||
+-smp 1,maxcpus=8,sockets=1,dies=1,clusters=2,cores=2,threads=2 \
|
||||
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
+-display none \
|
||||
+-no-user-config \
|
||||
+-nodefaults \
|
||||
+-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
|
||||
+-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
+-rtc base=utc \
|
||||
+-no-shutdown \
|
||||
+-boot strict=on \
|
||||
+-audiodev '{"id":"audio1","driver":"none"}' \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-topology5.xml b/tests/qemuxml2argvdata/cpu-topology5.xml
|
||||
new file mode 100644
|
||||
index 0000000000..f78f0b6b54
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/cpu-topology5.xml
|
||||
@@ -0,0 +1,17 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <vcpu placement='static' current='1'>8</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='aarch64' machine='virt'>hvm</type>
|
||||
+ </os>
|
||||
+ <cpu>
|
||||
+ <topology sockets='1' dies='1' clusters='2' cores='2' threads='2'/>
|
||||
+ </cpu>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-aarch64</emulator>
|
||||
+ <controller type='usb' model='none'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index cb78465fc2..1be138bb0f 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -1813,6 +1813,7 @@ mymain(void)
|
||||
DO_TEST_CAPS_LATEST("cpu-topology2");
|
||||
DO_TEST_CAPS_LATEST("cpu-topology3");
|
||||
DO_TEST_CAPS_LATEST("cpu-topology4");
|
||||
+ DO_TEST_CAPS_ARCH_LATEST("cpu-topology5", "aarch64");
|
||||
|
||||
DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-minimum1", "x86_64", ARG_CAPS_HOST_CPU_MODEL, QEMU_CPU_DEF_HASWELL);
|
||||
DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-minimum2", "x86_64", ARG_CAPS_HOST_CPU_MODEL, QEMU_CPU_DEF_HASWELL);
|
||||
diff --git a/tests/qemuxml2xmloutdata/cpu-topology5.aarch64-latest.xml b/tests/qemuxml2xmloutdata/cpu-topology5.aarch64-latest.xml
|
||||
new file mode 100644
|
||||
index 0000000000..2f5645baab
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/cpu-topology5.aarch64-latest.xml
|
||||
@@ -0,0 +1,29 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static' current='1'>8</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='aarch64' machine='virt'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <features>
|
||||
+ <gic version='2'/>
|
||||
+ </features>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>cortex-a15</model>
|
||||
+ <topology sockets='1' dies='1' clusters='2' cores='2' threads='2'/>
|
||||
+ </cpu>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-aarch64</emulator>
|
||||
+ <controller type='usb' index='0' model='none'/>
|
||||
+ <controller type='pci' index='0' model='pcie-root'/>
|
||||
+ <audio id='1' type='none'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index 4e39763dc7..15cb6bd692 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -674,6 +674,8 @@ mymain(void)
|
||||
|
||||
DO_TEST_CAPS_LATEST("chardev-label");
|
||||
|
||||
+ DO_TEST_CAPS_ARCH_LATEST("cpu-topology5", "aarch64");
|
||||
+
|
||||
DO_TEST_CAPS_LATEST("cpu-numa1");
|
||||
DO_TEST_CAPS_LATEST("cpu-numa2");
|
||||
DO_TEST_CAPS_LATEST("cpu-numa-no-memory-element");
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,88 @@
|
||||
From a7c145e58b5de35554004f5a779091cec7d03be1 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <a7c145e58b5de35554004f5a779091cec7d03be1.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 23 Jan 2024 16:40:34 +0100
|
||||
Subject: [PATCH] tests: Test the previously mishandled PCI VPD characters
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Modify the test data to validate '<>' and other characters.
|
||||
Unfortunately the test suite doesn't have a proper end-to-end test, thus
|
||||
we just add a XML->XML variant and also add data to the binary parser.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 9eda33161f49fcf3ba07d648bd80d2a9a2388479)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-22314 [9.4.0]
|
||||
https://issues.redhat.com/browse/RHEL-22400 [9.3.z]
|
||||
https://issues.redhat.com/browse/RHEL-22399 [9.2.z]
|
||||
---
|
||||
tests/nodedevschemadata/pci_0000_42_00_0_vpd.xml | 4 ++--
|
||||
tests/virpcimock.c | 4 ++--
|
||||
tests/virpcivpdtest.c | 4 ++--
|
||||
3 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/tests/nodedevschemadata/pci_0000_42_00_0_vpd.xml b/tests/nodedevschemadata/pci_0000_42_00_0_vpd.xml
|
||||
index 8b56e4f6b4..c9a2901381 100644
|
||||
--- a/tests/nodedevschemadata/pci_0000_42_00_0_vpd.xml
|
||||
+++ b/tests/nodedevschemadata/pci_0000_42_00_0_vpd.xml
|
||||
@@ -15,7 +15,7 @@
|
||||
<change_level>B1</change_level>
|
||||
<manufacture_id>foobar</manufacture_id>
|
||||
<part_number>MBF2H332A-AEEOT</part_number>
|
||||
- <serial_number>MT2113X00000</serial_number>
|
||||
+ <serial_number>MT2113X00000><</serial_number>
|
||||
<vendor_field index='0'>PCIeGen4 x8</vendor_field>
|
||||
<vendor_field index='2'>MBF2H332A-AEEOT</vendor_field>
|
||||
<vendor_field index='3'>3c53d07eec484d8aab34dabd24fe575aa</vendor_field>
|
||||
@@ -25,7 +25,7 @@
|
||||
<asset_tag>fooasset</asset_tag>
|
||||
<vendor_field index='0'>vendorfield0</vendor_field>
|
||||
<vendor_field index='2'>vendorfield2</vendor_field>
|
||||
- <vendor_field index='A'>vendorfieldA</vendor_field>
|
||||
+ <vendor_field index='A'>!@#$./><</vendor_field>
|
||||
<system_field index='B'>systemfieldB</system_field>
|
||||
<system_field index='0'>systemfield0</system_field>
|
||||
</fields>
|
||||
diff --git a/tests/virpcimock.c b/tests/virpcimock.c
|
||||
index 13b37bb23d..2f98b0cf13 100644
|
||||
--- a/tests/virpcimock.c
|
||||
+++ b/tests/virpcimock.c
|
||||
@@ -966,9 +966,9 @@ init_env(void)
|
||||
't', 'e', 's', 't', 'n', 'a', 'm', 'e',
|
||||
PCI_VPD_LARGE_RESOURCE_FLAG | PCI_VPD_READ_ONLY_LARGE_RESOURCE_FLAG, 0x16, 0x00,
|
||||
'P', 'N', 0x02, '4', '2',
|
||||
- 'E', 'C', 0x04, '4', '2', '4', '2',
|
||||
+ 'E', 'C', 0x04, '4', '<', '>', '2',
|
||||
'V', 'A', 0x02, 'E', 'X',
|
||||
- 'R', 'V', 0x02, 0x31, 0x00,
|
||||
+ 'R', 'V', 0x02, 0x1D, 0x00,
|
||||
PCI_VPD_RESOURCE_END_VAL
|
||||
};
|
||||
struct pciVPD exampleVPD = {
|
||||
diff --git a/tests/virpcivpdtest.c b/tests/virpcivpdtest.c
|
||||
index b4dd68b7aa..ae5772d3f5 100644
|
||||
--- a/tests/virpcivpdtest.c
|
||||
+++ b/tests/virpcivpdtest.c
|
||||
@@ -424,7 +424,7 @@ testPCIVPDGetFieldValueFormat(const void *data G_GNUC_UNUSED)
|
||||
|
||||
# define VPD_W_EXAMPLE_FIELDS \
|
||||
'V', 'Z', 0x02, '4', '2', \
|
||||
- 'Y', 'A', 0x04, 'I', 'D', '4', '2', \
|
||||
+ 'Y', 'A', 0x04, '!', '<', '>', ':', \
|
||||
'Y', 'F', 0x02, 'E', 'X', \
|
||||
'Y', 'E', 0x00, \
|
||||
'R', 'W', 0x02, 0x00, 0x00
|
||||
@@ -579,7 +579,7 @@ testVirPCIVPDParseFullVPD(const void *opaque G_GNUC_UNUSED)
|
||||
if (testVirPCIVPDValidateExampleReadOnlyFields(res))
|
||||
return -1;
|
||||
|
||||
- if (STRNEQ_NULLABLE(res->rw->asset_tag, "ID42"))
|
||||
+ if (STRNEQ_NULLABLE(res->rw->asset_tag, "!<>:"))
|
||||
return -1;
|
||||
|
||||
if (!res->rw->vendor_specific)
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,458 @@
|
||||
From 28cda48f6a1af4868de1604755137db2ef5a2405 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <28cda48f6a1af4868de1604755137db2ef5a2405.1706524416.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Mon, 8 Jan 2024 18:44:25 +0100
|
||||
Subject: [PATCH] tests: Verify handling of CPU clusters in QMP data
|
||||
|
||||
Since aarch64 doesn't support CPU hotplug at the moment, we have
|
||||
to get a bit creative.
|
||||
|
||||
While the 'query-cpus-fast' output is taken directly from a VM
|
||||
configured as
|
||||
|
||||
<vcpu current='7'>16</vcpu>
|
||||
<cpu mode='host-passthrough'>
|
||||
<topology sockets='2' dies='1' clusters='2' cores='2' threads='2'/>
|
||||
</cpu>
|
||||
|
||||
the 'query-hotpluggable-cpus' output is constructed by hand
|
||||
starting from the former and using the 'x86-dies' test data as
|
||||
a model.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit cb7abb0703f4c2b55b17cce5ecb8f83fed8775be)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-7043
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
...torjson-cpuinfo-aarch64-clusters-cpus.json | 88 +++++++++
|
||||
...json-cpuinfo-aarch64-clusters-hotplug.json | 171 ++++++++++++++++++
|
||||
...umonitorjson-cpuinfo-aarch64-clusters.data | 108 +++++++++++
|
||||
tests/qemumonitorjsontest.c | 9 +-
|
||||
4 files changed, 375 insertions(+), 1 deletion(-)
|
||||
create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters-cpus.json
|
||||
create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters-hotplug.json
|
||||
create mode 100644 tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters.data
|
||||
|
||||
diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters-cpus.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters-cpus.json
|
||||
new file mode 100644
|
||||
index 0000000000..817f65d109
|
||||
--- /dev/null
|
||||
+++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters-cpus.json
|
||||
@@ -0,0 +1,88 @@
|
||||
+{
|
||||
+ "return": [
|
||||
+ {
|
||||
+ "thread-id": 284700,
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "qom-path": "/machine/unattached/device[0]",
|
||||
+ "cpu-index": 0,
|
||||
+ "target": "aarch64"
|
||||
+ },
|
||||
+ {
|
||||
+ "thread-id": 284701,
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "qom-path": "/machine/unattached/device[1]",
|
||||
+ "cpu-index": 1,
|
||||
+ "target": "aarch64"
|
||||
+ },
|
||||
+ {
|
||||
+ "thread-id": 284702,
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "qom-path": "/machine/unattached/device[2]",
|
||||
+ "cpu-index": 2,
|
||||
+ "target": "aarch64"
|
||||
+ },
|
||||
+ {
|
||||
+ "thread-id": 284703,
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "qom-path": "/machine/unattached/device[3]",
|
||||
+ "cpu-index": 3,
|
||||
+ "target": "aarch64"
|
||||
+ },
|
||||
+ {
|
||||
+ "thread-id": 284704,
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "qom-path": "/machine/unattached/device[4]",
|
||||
+ "cpu-index": 4,
|
||||
+ "target": "aarch64"
|
||||
+ },
|
||||
+ {
|
||||
+ "thread-id": 284705,
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "qom-path": "/machine/unattached/device[5]",
|
||||
+ "cpu-index": 5,
|
||||
+ "target": "aarch64"
|
||||
+ },
|
||||
+ {
|
||||
+ "thread-id": 284706,
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "qom-path": "/machine/unattached/device[6]",
|
||||
+ "cpu-index": 6,
|
||||
+ "target": "aarch64"
|
||||
+ }
|
||||
+ ]
|
||||
+}
|
||||
diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters-hotplug.json b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters-hotplug.json
|
||||
new file mode 100644
|
||||
index 0000000000..7ae30bf111
|
||||
--- /dev/null
|
||||
+++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters-hotplug.json
|
||||
@@ -0,0 +1,171 @@
|
||||
+{
|
||||
+ "return": [
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 1,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 1,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 1,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 1,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 1,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 1,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 1,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 1,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "qom-path": "/machine/unattached/device[6]",
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "qom-path": "/machine/unattached/device[5]",
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 1
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "qom-path": "/machine/unattached/device[4]",
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "qom-path": "/machine/unattached/device[3]",
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 1,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "qom-path": "/machine/unattached/device[2]",
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 1,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "qom-path": "/machine/unattached/device[1]",
|
||||
+ "type": "host-arm-cpu"
|
||||
+ },
|
||||
+ {
|
||||
+ "props": {
|
||||
+ "core-id": 0,
|
||||
+ "thread-id": 0,
|
||||
+ "socket-id": 0,
|
||||
+ "cluster-id": 0
|
||||
+ },
|
||||
+ "vcpus-count": 1,
|
||||
+ "qom-path": "/machine/unattached/device[0]",
|
||||
+ "type": "host-arm-cpu"
|
||||
+ }
|
||||
+ ]
|
||||
+}
|
||||
diff --git a/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters.data b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters.data
|
||||
new file mode 100644
|
||||
index 0000000000..87e927e7a8
|
||||
--- /dev/null
|
||||
+++ b/tests/qemumonitorjsondata/qemumonitorjson-cpuinfo-aarch64-clusters.data
|
||||
@@ -0,0 +1,108 @@
|
||||
+[vcpu libvirt-id='0']
|
||||
+ online=yes
|
||||
+ hotpluggable=no
|
||||
+ thread-id='284700'
|
||||
+ enable-id='1'
|
||||
+ query-cpus-id='0'
|
||||
+ type='host-arm-cpu'
|
||||
+ qom_path='/machine/unattached/device[0]'
|
||||
+ topology: socket='0' cluster_id='0' core='0' thread='0' vcpus='1'
|
||||
+[vcpu libvirt-id='1']
|
||||
+ online=yes
|
||||
+ hotpluggable=no
|
||||
+ thread-id='284701'
|
||||
+ enable-id='2'
|
||||
+ query-cpus-id='1'
|
||||
+ type='host-arm-cpu'
|
||||
+ qom_path='/machine/unattached/device[1]'
|
||||
+ topology: socket='0' cluster_id='0' core='0' thread='1' vcpus='1'
|
||||
+[vcpu libvirt-id='2']
|
||||
+ online=yes
|
||||
+ hotpluggable=no
|
||||
+ thread-id='284702'
|
||||
+ enable-id='3'
|
||||
+ query-cpus-id='2'
|
||||
+ type='host-arm-cpu'
|
||||
+ qom_path='/machine/unattached/device[2]'
|
||||
+ topology: socket='0' cluster_id='0' core='1' thread='0' vcpus='1'
|
||||
+[vcpu libvirt-id='3']
|
||||
+ online=yes
|
||||
+ hotpluggable=no
|
||||
+ thread-id='284703'
|
||||
+ enable-id='4'
|
||||
+ query-cpus-id='3'
|
||||
+ type='host-arm-cpu'
|
||||
+ qom_path='/machine/unattached/device[3]'
|
||||
+ topology: socket='0' cluster_id='0' core='1' thread='1' vcpus='1'
|
||||
+[vcpu libvirt-id='4']
|
||||
+ online=yes
|
||||
+ hotpluggable=no
|
||||
+ thread-id='284704'
|
||||
+ enable-id='5'
|
||||
+ query-cpus-id='4'
|
||||
+ type='host-arm-cpu'
|
||||
+ qom_path='/machine/unattached/device[4]'
|
||||
+ topology: socket='0' cluster_id='1' core='0' thread='0' vcpus='1'
|
||||
+[vcpu libvirt-id='5']
|
||||
+ online=yes
|
||||
+ hotpluggable=no
|
||||
+ thread-id='284705'
|
||||
+ enable-id='6'
|
||||
+ query-cpus-id='5'
|
||||
+ type='host-arm-cpu'
|
||||
+ qom_path='/machine/unattached/device[5]'
|
||||
+ topology: socket='0' cluster_id='1' core='0' thread='1' vcpus='1'
|
||||
+[vcpu libvirt-id='6']
|
||||
+ online=yes
|
||||
+ hotpluggable=no
|
||||
+ thread-id='284706'
|
||||
+ enable-id='7'
|
||||
+ query-cpus-id='6'
|
||||
+ type='host-arm-cpu'
|
||||
+ qom_path='/machine/unattached/device[6]'
|
||||
+ topology: socket='0' cluster_id='1' core='1' thread='0' vcpus='1'
|
||||
+[vcpu libvirt-id='7']
|
||||
+ online=no
|
||||
+ hotpluggable=yes
|
||||
+ type='host-arm-cpu'
|
||||
+ topology: socket='0' cluster_id='1' core='1' thread='1' vcpus='1'
|
||||
+[vcpu libvirt-id='8']
|
||||
+ online=no
|
||||
+ hotpluggable=yes
|
||||
+ type='host-arm-cpu'
|
||||
+ topology: socket='1' cluster_id='0' core='0' thread='0' vcpus='1'
|
||||
+[vcpu libvirt-id='9']
|
||||
+ online=no
|
||||
+ hotpluggable=yes
|
||||
+ type='host-arm-cpu'
|
||||
+ topology: socket='1' cluster_id='0' core='0' thread='1' vcpus='1'
|
||||
+[vcpu libvirt-id='10']
|
||||
+ online=no
|
||||
+ hotpluggable=yes
|
||||
+ type='host-arm-cpu'
|
||||
+ topology: socket='1' cluster_id='0' core='1' thread='0' vcpus='1'
|
||||
+[vcpu libvirt-id='11']
|
||||
+ online=no
|
||||
+ hotpluggable=yes
|
||||
+ type='host-arm-cpu'
|
||||
+ topology: socket='1' cluster_id='0' core='1' thread='1' vcpus='1'
|
||||
+[vcpu libvirt-id='12']
|
||||
+ online=no
|
||||
+ hotpluggable=yes
|
||||
+ type='host-arm-cpu'
|
||||
+ topology: socket='1' cluster_id='1' core='0' thread='0' vcpus='1'
|
||||
+[vcpu libvirt-id='13']
|
||||
+ online=no
|
||||
+ hotpluggable=yes
|
||||
+ type='host-arm-cpu'
|
||||
+ topology: socket='1' cluster_id='1' core='0' thread='1' vcpus='1'
|
||||
+[vcpu libvirt-id='14']
|
||||
+ online=no
|
||||
+ hotpluggable=yes
|
||||
+ type='host-arm-cpu'
|
||||
+ topology: socket='1' cluster_id='1' core='1' thread='0' vcpus='1'
|
||||
+[vcpu libvirt-id='15']
|
||||
+ online=no
|
||||
+ hotpluggable=yes
|
||||
+ type='host-arm-cpu'
|
||||
+ topology: socket='1' cluster_id='1' core='1' thread='1' vcpus='1'
|
||||
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
|
||||
index d9ebb429e7..45cee23798 100644
|
||||
--- a/tests/qemumonitorjsontest.c
|
||||
+++ b/tests/qemumonitorjsontest.c
|
||||
@@ -2262,13 +2262,16 @@ testQemuMonitorCPUInfoFormat(qemuMonitorCPUInfo *vcpus,
|
||||
if (vcpu->qom_path)
|
||||
virBufferAsprintf(&buf, "qom_path='%s'\n", vcpu->qom_path);
|
||||
|
||||
- if (vcpu->socket_id != -1 || vcpu->core_id != -1 ||
|
||||
+ if (vcpu->socket_id != -1 || vcpu->die_id != -1 ||
|
||||
+ vcpu->cluster_id != -1 || vcpu->core_id != -1 ||
|
||||
vcpu->thread_id != -1 || vcpu->vcpus != 0) {
|
||||
virBufferAddLit(&buf, "topology:");
|
||||
if (vcpu->socket_id != -1)
|
||||
virBufferAsprintf(&buf, " socket='%d'", vcpu->socket_id);
|
||||
if (vcpu->die_id != -1)
|
||||
virBufferAsprintf(&buf, " die='%d'", vcpu->die_id);
|
||||
+ if (vcpu->cluster_id != -1)
|
||||
+ virBufferAsprintf(&buf, " cluster_id='%d'", vcpu->cluster_id);
|
||||
if (vcpu->core_id != -1)
|
||||
virBufferAsprintf(&buf, " core='%d'", vcpu->core_id);
|
||||
if (vcpu->thread_id != -1)
|
||||
@@ -2919,6 +2922,10 @@ mymain(void)
|
||||
DO_TEST_CPU_INFO("ppc64-hotplug-4", 24);
|
||||
DO_TEST_CPU_INFO("ppc64-no-threads", 16);
|
||||
|
||||
+ /* aarch64 doesn't support CPU hotplug yet, so the data used in
|
||||
+ * this test is partially synthetic */
|
||||
+ DO_TEST_CPU_INFO("aarch64-clusters", 16);
|
||||
+
|
||||
DO_TEST_CPU_INFO("s390", 2);
|
||||
|
||||
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,81 @@
|
||||
From 7c634eb7244604521b0f2a00f3a7e2e65a6a8399 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <7c634eb7244604521b0f2a00f3a7e2e65a6a8399.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 29 Jan 2024 17:55:06 +0100
|
||||
Subject: [PATCH] tests: virpcivpd: Remove
|
||||
'testVirPCIVPDParseVPDStringResource' case
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The test case excercises 'virPCIVPDParseVPDLargeResourceString' which is
|
||||
also tested by other cases which parse the whole VPD block. Remove the
|
||||
specific test case as it's not adding any additional value.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 78e17cd550f0ee1f200557d496ef43724319c17e)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-22314 [9.4.0]
|
||||
---
|
||||
tests/virpcivpdtest.c | 38 --------------------------------------
|
||||
1 file changed, 38 deletions(-)
|
||||
|
||||
diff --git a/tests/virpcivpdtest.c b/tests/virpcivpdtest.c
|
||||
index aadd1b222b..fddb42f52c 100644
|
||||
--- a/tests/virpcivpdtest.c
|
||||
+++ b/tests/virpcivpdtest.c
|
||||
@@ -429,42 +429,6 @@ testPCIVPDGetFieldValueFormat(const void *data G_GNUC_UNUSED)
|
||||
'Y', 'E', 0x00, \
|
||||
'R', 'W', 0x02, 0x00, 0x00
|
||||
|
||||
-static int
|
||||
-testVirPCIVPDParseVPDStringResource(const void *opaque G_GNUC_UNUSED)
|
||||
-{
|
||||
- VIR_AUTOCLOSE fd = -1;
|
||||
- uint8_t csum = 0;
|
||||
- size_t dataLen = 0;
|
||||
- bool result = false;
|
||||
-
|
||||
- g_autoptr(virPCIVPDResource) res = g_new0(virPCIVPDResource, 1);
|
||||
- const char *expectedValue = "testname";
|
||||
-
|
||||
- const uint8_t stringResExample[] = {
|
||||
- VPD_STRING_RESOURCE_EXAMPLE_DATA
|
||||
- };
|
||||
-
|
||||
- dataLen = G_N_ELEMENTS(stringResExample);
|
||||
- if ((fd = virCreateAnonymousFile(stringResExample, dataLen)) < 0)
|
||||
- return -1;
|
||||
-
|
||||
- result = virPCIVPDParseVPDLargeResourceString(fd, 0, dataLen, &csum, res);
|
||||
-
|
||||
- if (!result) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- "Could not parse the example resource.");
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- if (STRNEQ(expectedValue, res->name)) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "Unexpected string resource value: %s, expected: %s",
|
||||
- res->name, expectedValue);
|
||||
- return -1;
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static int
|
||||
testVirPCIVPDValidateExampleReadOnlyFields(virPCIVPDResource *res)
|
||||
{
|
||||
@@ -964,8 +928,6 @@ mymain(void)
|
||||
if (virTestRun("Determining a field value format by a key ",
|
||||
testPCIVPDGetFieldValueFormat, NULL) < 0)
|
||||
ret = -1;
|
||||
- if (virTestRun("Parsing VPD string resources ", testVirPCIVPDParseVPDStringResource, NULL) < 0)
|
||||
- ret = -1;
|
||||
if (virTestRun("Parsing a VPD resource with a zero-length RW ",
|
||||
testVirPCIVPDParseZeroLengthRW, NULL) < 0)
|
||||
ret = -1;
|
||||
--
|
||||
2.43.0
|
@ -0,0 +1,83 @@
|
||||
From c4b66437f7b829efa0ab6c6007347061ca257719 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <c4b66437f7b829efa0ab6c6007347061ca257719.1707394627.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 24 Jan 2024 14:55:47 +0100
|
||||
Subject: [PATCH] tests: virpcivpdtest: Remove 'testVirPCIVPDReadVPDBytes' case
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The case checks only the 'virPCIVPDReadVPDBytes' which is also tested
|
||||
multiple times via 'virPCIVPDParse' as it's used to read the data, thus
|
||||
having a special case for this is pointless.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 1a994a9dc6424ff7ea9d0f5d325059ffd234408b)
|
||||
|
||||
https://issues.redhat.com/browse/RHEL-22314 [9.4.0]
|
||||
---
|
||||
tests/virpcivpdtest.c | 41 -----------------------------------------
|
||||
1 file changed, 41 deletions(-)
|
||||
|
||||
diff --git a/tests/virpcivpdtest.c b/tests/virpcivpdtest.c
|
||||
index ae5772d3f5..aadd1b222b 100644
|
||||
--- a/tests/virpcivpdtest.c
|
||||
+++ b/tests/virpcivpdtest.c
|
||||
@@ -429,45 +429,6 @@ testPCIVPDGetFieldValueFormat(const void *data G_GNUC_UNUSED)
|
||||
'Y', 'E', 0x00, \
|
||||
'R', 'W', 0x02, 0x00, 0x00
|
||||
|
||||
-static int
|
||||
-testVirPCIVPDReadVPDBytes(const void *opaque G_GNUC_UNUSED)
|
||||
-{
|
||||
- VIR_AUTOCLOSE fd = -1;
|
||||
- g_autofree uint8_t *buf = NULL;
|
||||
- uint8_t csum = 0;
|
||||
- size_t readBytes = 0;
|
||||
- size_t dataLen = 0;
|
||||
-
|
||||
- /* An example of a valid VPD record with one VPD-R resource and 2 fields. */
|
||||
- uint8_t fullVPDExample[] = {
|
||||
- VPD_STRING_RESOURCE_EXAMPLE_HEADER, VPD_STRING_RESOURCE_EXAMPLE_DATA,
|
||||
- VPD_R_FIELDS_EXAMPLE_HEADER, VPD_R_FIELDS_EXAMPLE_DATA,
|
||||
- PCI_VPD_RESOURCE_END_VAL
|
||||
- };
|
||||
- dataLen = G_N_ELEMENTS(fullVPDExample) - 2;
|
||||
- buf = g_malloc0(dataLen);
|
||||
-
|
||||
- if ((fd = virCreateAnonymousFile(fullVPDExample, dataLen)) < 0)
|
||||
- return -1;
|
||||
-
|
||||
- readBytes = virPCIVPDReadVPDBytes(fd, buf, dataLen, 0, &csum);
|
||||
-
|
||||
- if (readBytes != dataLen) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "The number of bytes read %zu is lower than expected %zu ",
|
||||
- readBytes, dataLen);
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- if (csum) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- "The sum of all VPD bytes up to and including the checksum byte"
|
||||
- "is equal to zero: 0x%02x", csum);
|
||||
- return -1;
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static int
|
||||
testVirPCIVPDParseVPDStringResource(const void *opaque G_GNUC_UNUSED)
|
||||
{
|
||||
@@ -1003,8 +964,6 @@ mymain(void)
|
||||
if (virTestRun("Determining a field value format by a key ",
|
||||
testPCIVPDGetFieldValueFormat, NULL) < 0)
|
||||
ret = -1;
|
||||
- if (virTestRun("Reading VPD bytes ", testVirPCIVPDReadVPDBytes, NULL) < 0)
|
||||
- ret = -1;
|
||||
if (virTestRun("Parsing VPD string resources ", testVirPCIVPDParseVPDStringResource, NULL) < 0)
|
||||
ret = -1;
|
||||
if (virTestRun("Parsing a VPD resource with a zero-length RW ",
|
||||
--
|
||||
2.43.0
|
@ -1,65 +0,0 @@
|
||||
From d9b1f47fc3139bccd08838064f4b233b7cff5f29 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d9b1f47fc3139bccd08838064f4b233b7cff5f29@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 8 Dec 2022 08:39:24 +0100
|
||||
Subject: [PATCH] tools: Fix install_mode for some scripts
|
||||
|
||||
Scripts from the following list were installed with group write
|
||||
bit set: virt-xml-validate, virt-pki-validate,
|
||||
virt-sanlock-cleanup, libvirt-guests.sh. This is very unusual and
|
||||
in contrast with the way other scripts/binaries are installed.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2151202
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit e771e32f15ff2b263ca70306d93080541a96792b)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2158208
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
tools/meson.build | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/tools/meson.build b/tools/meson.build
|
||||
index bb28a904dc..8a3dd63271 100644
|
||||
--- a/tools/meson.build
|
||||
+++ b/tools/meson.build
|
||||
@@ -249,7 +249,7 @@ configure_file(
|
||||
configuration: tools_conf,
|
||||
install: true,
|
||||
install_dir: bindir,
|
||||
- install_mode: 'rwxrwxr-x',
|
||||
+ install_mode: 'rwxr-xr-x',
|
||||
)
|
||||
|
||||
configure_file(
|
||||
@@ -258,7 +258,7 @@ configure_file(
|
||||
configuration: tools_conf,
|
||||
install: true,
|
||||
install_dir: bindir,
|
||||
- install_mode: 'rwxrwxr-x',
|
||||
+ install_mode: 'rwxr-xr-x',
|
||||
)
|
||||
|
||||
executable(
|
||||
@@ -295,7 +295,7 @@ if conf.has('WITH_SANLOCK')
|
||||
configuration: tools_conf,
|
||||
install: true,
|
||||
install_dir: sbindir,
|
||||
- install_mode: 'rwxrwxr-x',
|
||||
+ install_mode: 'rwxr-xr-x',
|
||||
)
|
||||
endif
|
||||
|
||||
@@ -306,7 +306,7 @@ if conf.has('WITH_LIBVIRTD')
|
||||
configuration: tools_conf,
|
||||
install: true,
|
||||
install_dir: libexecdir,
|
||||
- install_mode: 'rwxrwxr-x',
|
||||
+ install_mode: 'rwxr-xr-x',
|
||||
)
|
||||
|
||||
if init_script == 'systemd'
|
||||
--
|
||||
2.39.1
|
||||
|
@ -1,165 +0,0 @@
|
||||
From b7a08f453fc448415ce320532907e61fa34f95b7 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b7a08f453fc448415ce320532907e61fa34f95b7@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 9 Aug 2022 16:15:55 +0200
|
||||
Subject: [PATCH] util: Extend virProcessGetStatInfo() for sysTime and userTime
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The virProcessGetStatInfo() helper parses /proc stat file for
|
||||
given PID and/or TID and reports cumulative cpuTime which is just
|
||||
a sum of user and sys times. But in near future, we'll need those
|
||||
times separately, so make the function return them too (if caller
|
||||
desires).
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit cdc22d9a21e472a02dae8157e3cca5832f161feb)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2157094
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/ch/ch_driver.c | 1 +
|
||||
src/qemu/qemu_driver.c | 4 +++-
|
||||
src/util/virprocess.c | 33 ++++++++++++++++++++++-----------
|
||||
src/util/virprocess.h | 2 ++
|
||||
4 files changed, 28 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c
|
||||
index e7c172c894..bde148075d 100644
|
||||
--- a/src/ch/ch_driver.c
|
||||
+++ b/src/ch/ch_driver.c
|
||||
@@ -1075,6 +1075,7 @@ chDomainHelperGetVcpus(virDomainObj *vm,
|
||||
vcpuinfo->number = i;
|
||||
vcpuinfo->state = VIR_VCPU_RUNNING;
|
||||
if (virProcessGetStatInfo(&vcpuinfo->cpuTime,
|
||||
+ NULL, NULL,
|
||||
&vcpuinfo->cpu, NULL,
|
||||
vm->pid, vcpupid) < 0) {
|
||||
virReportSystemError(errno, "%s",
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index ebd6365f52..84cf2c6a4f 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -1359,6 +1359,7 @@ qemuDomainHelperGetVcpus(virDomainObj *vm,
|
||||
vcpuinfo->state = VIR_VCPU_RUNNING;
|
||||
|
||||
if (virProcessGetStatInfo(&vcpuinfo->cpuTime,
|
||||
+ NULL, NULL,
|
||||
&vcpuinfo->cpu, NULL,
|
||||
vm->pid, vcpupid) < 0) {
|
||||
virReportSystemError(errno, "%s",
|
||||
@@ -2528,6 +2529,7 @@ qemuDomainGetInfo(virDomainPtr dom,
|
||||
|
||||
if (virDomainObjIsActive(vm)) {
|
||||
if (virProcessGetStatInfo(&(info->cpuTime), NULL, NULL,
|
||||
+ NULL, NULL,
|
||||
vm->pid, 0) < 0) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("cannot read cputime for domain"));
|
||||
@@ -10770,7 +10772,7 @@ qemuDomainMemoryStatsInternal(virQEMUDriver *driver,
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
- if (virProcessGetStatInfo(NULL, NULL, &rss, vm->pid, 0) < 0) {
|
||||
+ if (virProcessGetStatInfo(NULL, NULL, NULL, NULL, &rss, vm->pid, 0) < 0) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("cannot get RSS for domain"));
|
||||
} else {
|
||||
diff --git a/src/util/virprocess.c b/src/util/virprocess.c
|
||||
index 013afd91b4..11f36e00a8 100644
|
||||
--- a/src/util/virprocess.c
|
||||
+++ b/src/util/virprocess.c
|
||||
@@ -1737,32 +1737,37 @@ virProcessGetStat(pid_t pid,
|
||||
#ifdef __linux__
|
||||
int
|
||||
virProcessGetStatInfo(unsigned long long *cpuTime,
|
||||
+ unsigned long long *userTime,
|
||||
+ unsigned long long *sysTime,
|
||||
int *lastCpu,
|
||||
long *vm_rss,
|
||||
pid_t pid,
|
||||
pid_t tid)
|
||||
{
|
||||
g_auto(GStrv) proc_stat = virProcessGetStat(pid, tid);
|
||||
- unsigned long long usertime = 0, systime = 0;
|
||||
+ unsigned long long utime = 0;
|
||||
+ unsigned long long stime = 0;
|
||||
+ const unsigned long long jiff2nsec = 1000ull * 1000ull * 1000ull /
|
||||
+ (unsigned long long) sysconf(_SC_CLK_TCK);
|
||||
long rss = 0;
|
||||
int cpu = 0;
|
||||
|
||||
if (!proc_stat ||
|
||||
- virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_UTIME], NULL, 10, &usertime) < 0 ||
|
||||
- virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_STIME], NULL, 10, &systime) < 0 ||
|
||||
+ virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_UTIME], NULL, 10, &utime) < 0 ||
|
||||
+ virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_STIME], NULL, 10, &stime) < 0 ||
|
||||
virStrToLong_l(proc_stat[VIR_PROCESS_STAT_RSS], NULL, 10, &rss) < 0 ||
|
||||
virStrToLong_i(proc_stat[VIR_PROCESS_STAT_PROCESSOR], NULL, 10, &cpu) < 0) {
|
||||
VIR_WARN("cannot parse process status data");
|
||||
}
|
||||
|
||||
- /* We got jiffies
|
||||
- * We want nanoseconds
|
||||
- * _SC_CLK_TCK is jiffies per second
|
||||
- * So calculate thus....
|
||||
- */
|
||||
+ utime *= jiff2nsec;
|
||||
+ stime *= jiff2nsec;
|
||||
if (cpuTime)
|
||||
- *cpuTime = 1000ull * 1000ull * 1000ull * (usertime + systime)
|
||||
- / (unsigned long long) sysconf(_SC_CLK_TCK);
|
||||
+ *cpuTime = utime + stime;
|
||||
+ if (userTime)
|
||||
+ *userTime = utime;
|
||||
+ if (sysTime)
|
||||
+ *sysTime = stime;
|
||||
if (lastCpu)
|
||||
*lastCpu = cpu;
|
||||
|
||||
@@ -1771,7 +1776,7 @@ virProcessGetStatInfo(unsigned long long *cpuTime,
|
||||
|
||||
|
||||
VIR_DEBUG("Got status for %d/%d user=%llu sys=%llu cpu=%d rss=%ld",
|
||||
- (int) pid, tid, usertime, systime, cpu, rss);
|
||||
+ (int) pid, tid, utime, stime, cpu, rss);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1844,6 +1849,8 @@ virProcessGetSchedInfo(unsigned long long *cpuWait,
|
||||
#else
|
||||
int
|
||||
virProcessGetStatInfo(unsigned long long *cpuTime,
|
||||
+ unsigned long long *userTime,
|
||||
+ unsigned long long *sysTime,
|
||||
int *lastCpu,
|
||||
long *vm_rss,
|
||||
pid_t pid G_GNUC_UNUSED,
|
||||
@@ -1853,6 +1860,10 @@ virProcessGetStatInfo(unsigned long long *cpuTime,
|
||||
* platforms, so just report neutral values */
|
||||
if (cpuTime)
|
||||
*cpuTime = 0;
|
||||
+ if (userTime)
|
||||
+ *userTime = 0;
|
||||
+ if (sysTime)
|
||||
+ *sysTime = 0;
|
||||
if (lastCpu)
|
||||
*lastCpu = 0;
|
||||
if (vm_rss)
|
||||
diff --git a/src/util/virprocess.h b/src/util/virprocess.h
|
||||
index 086fbe0e4d..f5a4a4e508 100644
|
||||
--- a/src/util/virprocess.h
|
||||
+++ b/src/util/virprocess.h
|
||||
@@ -195,6 +195,8 @@ typedef enum {
|
||||
int virProcessNamespaceAvailable(unsigned int ns);
|
||||
|
||||
int virProcessGetStatInfo(unsigned long long *cpuTime,
|
||||
+ unsigned long long *userTime,
|
||||
+ unsigned long long *sysTime,
|
||||
int *lastCpu,
|
||||
long *vm_rss,
|
||||
pid_t pid,
|
||||
--
|
||||
2.39.0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user