Compare commits
No commits in common. "970e5e340d63c7ba45aaa115a63fe3e1a47c8cb5" and "9fa8e46f5a40ef970d6ddce4a9e7a079a623d4bd" have entirely different histories.
970e5e340d
...
9fa8e46f5a
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/libvirt-10.0.0.tar.xz
|
||||
SOURCES/libvirt-9.5.0.tar.xz
|
||||
|
@ -1 +1 @@
|
||||
7a2e402bfb1ad295544de6cd527c4c04e85c5096 SOURCES/libvirt-10.0.0.tar.xz
|
||||
472f6871651d8d3b41b2a2602adfcdb18629049d SOURCES/libvirt-9.5.0.tar.xz
|
||||
|
@ -1,78 +0,0 @@
|
||||
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;
|
@ -1,212 +0,0 @@
|
||||
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;
|
@ -1,358 +0,0 @@
|
||||
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>
|
@ -1,184 +0,0 @@
|
||||
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'/>
|
@ -1,47 +0,0 @@
|
||||
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>
|
@ -1,98 +0,0 @@
|
||||
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'/>
|
@ -1,350 +0,0 @@
|
||||
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>
|
@ -1,183 +0,0 @@
|
||||
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'/>
|
@ -1,168 +0,0 @@
|
||||
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>
|
@ -1,154 +0,0 @@
|
||||
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>
|
@ -1,50 +0,0 @@
|
||||
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>
|
@ -1,160 +0,0 @@
|
||||
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>
|
@ -1,99 +0,0 @@
|
||||
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'/>
|
@ -1,520 +0,0 @@
|
||||
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'/>
|
@ -1,98 +0,0 @@
|
||||
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'/>
|
@ -1,158 +0,0 @@
|
||||
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>
|
@ -1,76 +0,0 @@
|
||||
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>
|
@ -1,70 +0,0 @@
|
||||
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>
|
@ -1,679 +0,0 @@
|
||||
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
|
@ -1,46 +0,0 @@
|
||||
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
|
38
SOURCES/libvirt-Revert-qemu_passt-Actually-use-logfd.patch
Normal file
38
SOURCES/libvirt-Revert-qemu_passt-Actually-use-logfd.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From f3e5bf77bc6f591e5799ae9de36498df5c2a1811 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <f3e5bf77bc6f591e5799ae9de36498df5c2a1811.1691014499.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 1 Aug 2023 16:18:47 +0200
|
||||
Subject: [PATCH] Revert "qemu_passt: Actually use @logfd"
|
||||
|
||||
This reverts commit 83686f1eea1a001a37a92f2c054ffb2689c43a40.
|
||||
|
||||
This is needed only so that the next revert is clean.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit bc9a254dc72b6904e8368c3fea3ab49b7238ff34)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2209191
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_passt.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
|
||||
index 3679bf75fc..25b22d8ad9 100644
|
||||
--- a/src/qemu/qemu_passt.c
|
||||
+++ b/src/qemu/qemu_passt.c
|
||||
@@ -204,9 +204,9 @@ qemuPasstStart(virDomainObj *vm,
|
||||
/* The logFile location is not restricted to a per-domain directory. It
|
||||
* can be anywhere. Pre-create it as passt may not have enough perms to
|
||||
* do so. */
|
||||
- if ((logfd = qemuDomainOpenFile(cfg, vm->def, net->backend.logFile,
|
||||
- O_CREAT | O_TRUNC | O_APPEND | O_RDWR,
|
||||
- &needUnlink)) < 0) {
|
||||
+ if (qemuDomainOpenFile(cfg, vm->def, net->backend.logFile,
|
||||
+ O_CREAT | O_TRUNC | O_APPEND | O_RDWR,
|
||||
+ &needUnlink) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
--
|
||||
2.41.0
|
148
SOURCES/libvirt-Revert-qemu_passt-Precreate-passt-logfile.patch
Normal file
148
SOURCES/libvirt-Revert-qemu_passt-Precreate-passt-logfile.patch
Normal file
@ -0,0 +1,148 @@
|
||||
From 8897c7d63f763bf9b59f7e79ec6b2f9caf84823b Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <8897c7d63f763bf9b59f7e79ec6b2f9caf84823b.1691014499.git.jdenemar@redhat.com>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 1 Aug 2023 16:20:58 +0200
|
||||
Subject: [PATCH] Revert "qemu_passt: Precreate passt logfile"
|
||||
|
||||
This reverts commit 8511b96a319836700b4829816cdae27c3630060d.
|
||||
|
||||
Turns out, we need to do a bit more than just plain
|
||||
qemuSecurityDomainSetPathLabel() which sets svirt_image_t. Passt
|
||||
has its own SELinux policy and as a part of that they invent
|
||||
passt_log_t for log files. Right now, I don't know how libvirt
|
||||
could query that and even if I did, passt SELinux policy would
|
||||
need to permit relabelling from svirt_t to passt_log_t, which it
|
||||
doesn't [1].
|
||||
|
||||
Until these problems are addressed we shouldn't be pre-creating
|
||||
the file as it puts users into way worse position - even
|
||||
scenarios that used to work don't work. But then again - using
|
||||
log file for passt is usually valuable for developers only and
|
||||
not regular users.
|
||||
|
||||
1: https://bugzilla.redhat.com/show_bug.cgi?id=2209191#c10
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit 99349ba18e726465215a71f28d2146a0a2adb65d)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2209191
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_passt.c | 40 +++++-----------------------------------
|
||||
1 file changed, 5 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
|
||||
index 25b22d8ad9..99636a3a49 100644
|
||||
--- a/src/qemu/qemu_passt.c
|
||||
+++ b/src/qemu/qemu_passt.c
|
||||
@@ -20,8 +20,6 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
-#include <fcntl.h>
|
||||
-
|
||||
#include "qemu_dbus.h"
|
||||
#include "qemu_extdevice.h"
|
||||
#include "qemu_security.h"
|
||||
@@ -138,13 +136,9 @@ void
|
||||
qemuPasstStop(virDomainObj *vm,
|
||||
virDomainNetDef *net)
|
||||
{
|
||||
- qemuDomainObjPrivate *priv = vm->privateData;
|
||||
- virQEMUDriver *driver = priv->driver;
|
||||
g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
|
||||
g_autofree char *passtSocketName = qemuPasstCreateSocketPath(vm, net);
|
||||
|
||||
- qemuSecurityDomainRestorePathLabel(driver, vm, net->backend.logFile);
|
||||
-
|
||||
qemuPasstKill(pidfile, passtSocketName);
|
||||
}
|
||||
|
||||
@@ -172,12 +166,10 @@ qemuPasstStart(virDomainObj *vm,
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
virQEMUDriver *driver = priv->driver;
|
||||
- g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||
g_autofree char *passtSocketName = qemuPasstCreateSocketPath(vm, net);
|
||||
g_autoptr(virCommand) cmd = NULL;
|
||||
g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
|
||||
char macaddr[VIR_MAC_STRING_BUFLEN];
|
||||
- bool needUnlink = false;
|
||||
size_t i;
|
||||
|
||||
cmd = virCommandNew(PASST);
|
||||
@@ -199,25 +191,8 @@ qemuPasstStart(virDomainObj *vm,
|
||||
if (net->sourceDev)
|
||||
virCommandAddArgList(cmd, "--interface", net->sourceDev, NULL);
|
||||
|
||||
- if (net->backend.logFile) {
|
||||
- VIR_AUTOCLOSE logfd = -1;
|
||||
- /* The logFile location is not restricted to a per-domain directory. It
|
||||
- * can be anywhere. Pre-create it as passt may not have enough perms to
|
||||
- * do so. */
|
||||
- if (qemuDomainOpenFile(cfg, vm->def, net->backend.logFile,
|
||||
- O_CREAT | O_TRUNC | O_APPEND | O_RDWR,
|
||||
- &needUnlink) < 0) {
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- if (qemuSecurityDomainSetPathLabel(driver, vm,
|
||||
- net->backend.logFile, false) < 0) {
|
||||
- goto error;
|
||||
- }
|
||||
-
|
||||
- /* Worse, passt deliberately doesn't support FD passing. */
|
||||
+ if (net->backend.logFile)
|
||||
virCommandAddArgList(cmd, "--log-file", net->backend.logFile, NULL);
|
||||
- }
|
||||
|
||||
/* Add IP address info */
|
||||
for (i = 0; i < net->guestIP.nips; i++) {
|
||||
@@ -228,7 +203,7 @@ qemuPasstStart(virDomainObj *vm,
|
||||
* a single IPv4 and single IPv6 address
|
||||
*/
|
||||
if (!(addr = virSocketAddrFormat(&ip->address)))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
virCommandAddArgList(cmd, "--address", addr, NULL);
|
||||
|
||||
@@ -256,14 +231,14 @@ qemuPasstStart(virDomainObj *vm,
|
||||
/* validation guarantees this will never happen */
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid portForward proto value %1$u"), pf->proto);
|
||||
- goto error;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (VIR_SOCKET_ADDR_VALID(&pf->address)) {
|
||||
g_autofree char *addr = NULL;
|
||||
|
||||
if (!(addr = virSocketAddrFormat(&pf->address)))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
virBufferAddStr(&buf, addr);
|
||||
emitsep = true;
|
||||
@@ -309,7 +284,7 @@ qemuPasstStart(virDomainObj *vm,
|
||||
|
||||
|
||||
if (qemuExtDeviceLogCommand(driver, vm, cmd, "passt") < 0)
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (qemuSecurityCommandRun(driver, vm, cmd, -1, -1, true, NULL) < 0)
|
||||
goto error;
|
||||
@@ -317,11 +292,6 @@ qemuPasstStart(virDomainObj *vm,
|
||||
return 0;
|
||||
|
||||
error:
|
||||
- if (needUnlink && unlink(net->backend.logFile) < 0) {
|
||||
- VIR_WARN("Unable to unlink '%s': %s",
|
||||
- net->backend.logFile, g_strerror(errno));
|
||||
- }
|
||||
-
|
||||
qemuPasstKill(pidfile, passtSocketName);
|
||||
return -1;
|
||||
}
|
||||
--
|
||||
2.41.0
|
@ -1,44 +0,0 @@
|
||||
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
|
@ -1,144 +0,0 @@
|
||||
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
|
@ -1,976 +0,0 @@
|
||||
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,392 @@
|
||||
From 7708f08af4581f11d9bc3c3cdf858e55ebdb5a6c Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <7708f08af4581f11d9bc3c3cdf858e55ebdb5a6c.1692951632.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Tue, 16 May 2023 19:50:50 +0200
|
||||
Subject: [PATCH] conf: Don't default to raw format for loader/NVRAM
|
||||
|
||||
Due to the way the information is stored by the XML parser, we've
|
||||
had this quirk where specifying any information about the loader
|
||||
or NVRAM would implicitly set its format to raw. That is,
|
||||
|
||||
<nvram>/path/to/guest_VARS.fd</nvram>
|
||||
|
||||
would effectively be interpreted as
|
||||
|
||||
<nvram format='raw'>/path/to/guest_VARS.fd</nvram>
|
||||
|
||||
forcing the use of raw format firmware even when qcow2 format
|
||||
would normally be preferred based on the ordering of firmware
|
||||
descriptors. This behavior can be worked around in a number of
|
||||
ways, but it's fairly unintuitive.
|
||||
|
||||
In order to remove this quirk, move the selection of the default
|
||||
firmware format from the parser down to the individual drivers.
|
||||
|
||||
Most drivers only support raw firmware images, so they can
|
||||
unconditionally set the format early and be done with it; the
|
||||
QEMU driver, however, supports multiple formats and so in that
|
||||
case we want this default to be applied as late as possible,
|
||||
when we have already ruled out the possibility of using qcow2
|
||||
formatted firmware images.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 10a8997cbb402f7edb9f970af70feee2fc256a1c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/bhyve/bhyve_firmware.c | 3 ++
|
||||
src/conf/domain_conf.c | 21 ++++++----
|
||||
src/libxl/libxl_conf.c | 15 +++++---
|
||||
src/libxl/xen_xl.c | 2 +
|
||||
src/libxl/xen_xm.c | 1 +
|
||||
src/qemu/qemu_firmware.c | 27 +++++++++++--
|
||||
...uto-efi-format-mismatch.x86_64-latest.args | 38 +++++++++++++++++++
|
||||
...auto-efi-format-mismatch.x86_64-latest.err | 1 -
|
||||
.../firmware-auto-efi-format-mismatch.xml | 2 +-
|
||||
...oader-secure-abi-update.x86_64-latest.args | 8 ++--
|
||||
tests/qemuxml2argvtest.c | 2 +-
|
||||
...loader-secure-abi-update.x86_64-latest.xml | 4 +-
|
||||
12 files changed, 98 insertions(+), 26 deletions(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.x86_64-latest.args
|
||||
delete mode 100644 tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.x86_64-latest.err
|
||||
|
||||
diff --git a/src/bhyve/bhyve_firmware.c b/src/bhyve/bhyve_firmware.c
|
||||
index 57ab9c7a82..8aaf05dc62 100644
|
||||
--- a/src/bhyve/bhyve_firmware.c
|
||||
+++ b/src/bhyve/bhyve_firmware.c
|
||||
@@ -80,6 +80,9 @@ bhyveFirmwareFillDomain(bhyveConn *driver,
|
||||
if (!def->os.loader)
|
||||
def->os.loader = virDomainLoaderDefNew();
|
||||
|
||||
+ if (!def->os.loader->format)
|
||||
+ def->os.loader->format = VIR_STORAGE_FILE_RAW;
|
||||
+
|
||||
if (def->os.loader->format != VIR_STORAGE_FILE_RAW) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Unsupported loader format '%1$s'"),
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 5ac5c0b771..8fa0a6dc73 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -3728,7 +3728,6 @@ virDomainLoaderDefNew(void)
|
||||
virDomainLoaderDef *def = NULL;
|
||||
|
||||
def = g_new0(virDomainLoaderDef, 1);
|
||||
- def->format = VIR_STORAGE_FILE_RAW;
|
||||
|
||||
return def;
|
||||
}
|
||||
@@ -16771,10 +16770,11 @@ virDomainLoaderDefParseXMLNvram(virDomainLoaderDef *loader,
|
||||
|
||||
if (virXMLPropEnumDefault(nvramNode, "format",
|
||||
virStorageFileFormatTypeFromString, VIR_XML_PROP_NONE,
|
||||
- &format, VIR_STORAGE_FILE_RAW) < 0) {
|
||||
+ &format, VIR_STORAGE_FILE_NONE) < 0) {
|
||||
return -1;
|
||||
}
|
||||
- if (format != VIR_STORAGE_FILE_RAW &&
|
||||
+ if (format &&
|
||||
+ format != VIR_STORAGE_FILE_RAW &&
|
||||
format != VIR_STORAGE_FILE_QCOW2) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("Unsupported nvram format '%1$s'"),
|
||||
@@ -16860,10 +16860,11 @@ virDomainLoaderDefParseXMLLoader(virDomainLoaderDef *loader,
|
||||
|
||||
if (virXMLPropEnumDefault(loaderNode, "format",
|
||||
virStorageFileFormatTypeFromString, VIR_XML_PROP_NONE,
|
||||
- &format, VIR_STORAGE_FILE_RAW) < 0) {
|
||||
+ &format, VIR_STORAGE_FILE_NONE) < 0) {
|
||||
return -1;
|
||||
}
|
||||
- if (format != VIR_STORAGE_FILE_RAW &&
|
||||
+ if (format &&
|
||||
+ format != VIR_STORAGE_FILE_RAW &&
|
||||
format != VIR_STORAGE_FILE_QCOW2) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("Unsupported loader format '%1$s'"),
|
||||
@@ -16894,7 +16895,9 @@ virDomainLoaderDefParseXML(virDomainLoaderDef *loader,
|
||||
loaderNode) < 0)
|
||||
return -1;
|
||||
|
||||
- if (loader->nvram && loader->format != loader->nvram->format) {
|
||||
+ if (loader->nvram &&
|
||||
+ loader->format && loader->nvram->format &&
|
||||
+ loader->format != loader->nvram->format) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("Format mismatch: loader.format='%1$s' nvram.format='%2$s'"),
|
||||
virStorageFileFormatTypeToString(loader->format),
|
||||
@@ -26224,7 +26227,8 @@ virDomainLoaderDefFormatNvram(virBuffer *buf,
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (src->format != VIR_STORAGE_FILE_RAW) {
|
||||
+ if (src->format &&
|
||||
+ src->format != VIR_STORAGE_FILE_RAW) {
|
||||
virBufferEscapeString(&attrBuf, " format='%s'",
|
||||
virStorageFileFormatTypeToString(src->format));
|
||||
}
|
||||
@@ -26262,7 +26266,8 @@ virDomainLoaderDefFormat(virBuffer *buf,
|
||||
virTristateBoolTypeToString(loader->stateless));
|
||||
}
|
||||
|
||||
- if (loader->format != VIR_STORAGE_FILE_RAW) {
|
||||
+ if (loader->format &&
|
||||
+ loader->format != VIR_STORAGE_FILE_RAW) {
|
||||
virBufferEscapeString(&loaderAttrBuf, " format='%s'",
|
||||
virStorageFileFormatTypeToString(loader->format));
|
||||
}
|
||||
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
|
||||
index a1c76935b6..14ad320023 100644
|
||||
--- a/src/libxl/libxl_conf.c
|
||||
+++ b/src/libxl/libxl_conf.c
|
||||
@@ -654,11 +654,16 @@ libxlMakeDomBuildInfo(virDomainDef *def,
|
||||
b_info->u.hvm.system_firmware = g_strdup(def->os.loader->path);
|
||||
}
|
||||
|
||||
- if (def->os.loader && def->os.loader->format != VIR_STORAGE_FILE_RAW) {
|
||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
- _("Unsupported loader format '%1$s'"),
|
||||
- virStorageFileFormatTypeToString(def->os.loader->format));
|
||||
- return -1;
|
||||
+ if (def->os.loader) {
|
||||
+ if (!def->os.loader->format)
|
||||
+ def->os.loader->format = VIR_STORAGE_FILE_RAW;
|
||||
+
|
||||
+ if (def->os.loader->format != VIR_STORAGE_FILE_RAW) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("Unsupported loader format '%1$s'"),
|
||||
+ virStorageFileFormatTypeToString(def->os.loader->format));
|
||||
+ return -1;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (def->emulator) {
|
||||
diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c
|
||||
index 1cc42fa59f..ab1941454d 100644
|
||||
--- a/src/libxl/xen_xl.c
|
||||
+++ b/src/libxl/xen_xl.c
|
||||
@@ -115,6 +115,7 @@ xenParseXLOS(virConf *conf, virDomainDef *def, virCaps *caps)
|
||||
|
||||
if (bios && STREQ(bios, "ovmf")) {
|
||||
def->os.loader = virDomainLoaderDefNew();
|
||||
+ def->os.loader->format = VIR_STORAGE_FILE_RAW;
|
||||
def->os.loader->type = VIR_DOMAIN_LOADER_TYPE_PFLASH;
|
||||
def->os.loader->readonly = VIR_TRISTATE_BOOL_YES;
|
||||
if (bios_path)
|
||||
@@ -126,6 +127,7 @@ xenParseXLOS(virConf *conf, virDomainDef *def, virCaps *caps)
|
||||
if (caps->guests[i]->ostype == VIR_DOMAIN_OSTYPE_HVM &&
|
||||
caps->guests[i]->arch.id == def->os.arch) {
|
||||
def->os.loader = virDomainLoaderDefNew();
|
||||
+ def->os.loader->format = VIR_STORAGE_FILE_RAW;
|
||||
def->os.loader->path = g_strdup(caps->guests[i]->arch.defaultInfo.loader);
|
||||
}
|
||||
}
|
||||
diff --git a/src/libxl/xen_xm.c b/src/libxl/xen_xm.c
|
||||
index 0031d6cbc6..5705a5ec0c 100644
|
||||
--- a/src/libxl/xen_xm.c
|
||||
+++ b/src/libxl/xen_xm.c
|
||||
@@ -43,6 +43,7 @@ xenParseXMOS(virConf *conf, virDomainDef *def)
|
||||
g_autofree char *boot = NULL;
|
||||
|
||||
def->os.loader = virDomainLoaderDefNew();
|
||||
+ def->os.loader->format = VIR_STORAGE_FILE_RAW;
|
||||
|
||||
if (xenConfigCopyString(conf, "kernel", &def->os.loader->path) < 0)
|
||||
return -1;
|
||||
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
|
||||
index ebaf32cf71..3dcd139a47 100644
|
||||
--- a/src/qemu/qemu_firmware.c
|
||||
+++ b/src/qemu/qemu_firmware.c
|
||||
@@ -1082,6 +1082,11 @@ qemuFirmwareEnsureNVRAM(virDomainDef *def,
|
||||
if (loader->stateless == VIR_TRISTATE_BOOL_YES)
|
||||
return;
|
||||
|
||||
+ /* If the NVRAM format hasn't been set yet, inherit the same as
|
||||
+ * the loader */
|
||||
+ if (loader->nvram && !loader->nvram->format)
|
||||
+ loader->nvram->format = loader->format;
|
||||
+
|
||||
/* If the source already exists and is fully specified, including
|
||||
* the path, leave it alone */
|
||||
if (loader->nvram && loader->nvram->path)
|
||||
@@ -1328,7 +1333,7 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
|
||||
flash->executable.format);
|
||||
return false;
|
||||
}
|
||||
- if (loader &&
|
||||
+ if (loader && loader->format &&
|
||||
STRNEQ(flash->executable.format, virStorageFileFormatTypeToString(loader->format))) {
|
||||
VIR_DEBUG("Discarding loader with mismatching flash format '%s' != '%s'",
|
||||
flash->executable.format,
|
||||
@@ -1342,7 +1347,7 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
|
||||
flash->nvram_template.format);
|
||||
return false;
|
||||
}
|
||||
- if (loader && loader->nvram &&
|
||||
+ if (loader && loader->nvram && loader->nvram->format &&
|
||||
STRNEQ(flash->nvram_template.format, virStorageFileFormatTypeToString(loader->nvram->format))) {
|
||||
VIR_DEBUG("Discarding loader with mismatching nvram template format '%s' != '%s'",
|
||||
flash->nvram_template.format,
|
||||
@@ -1630,7 +1635,8 @@ qemuFirmwareFillDomainLegacy(virQEMUDriver *driver,
|
||||
return 1;
|
||||
}
|
||||
|
||||
- if (loader->format != VIR_STORAGE_FILE_RAW) {
|
||||
+ if (loader->format &&
|
||||
+ loader->format != VIR_STORAGE_FILE_RAW) {
|
||||
VIR_DEBUG("Ignoring legacy entries for loader with flash format '%s'",
|
||||
virStorageFileFormatTypeToString(loader->format));
|
||||
return 1;
|
||||
@@ -1793,6 +1799,7 @@ qemuFirmwareFillDomain(virQEMUDriver *driver,
|
||||
return -1;
|
||||
|
||||
if (loader &&
|
||||
+ loader->format &&
|
||||
loader->format != VIR_STORAGE_FILE_RAW &&
|
||||
loader->format != VIR_STORAGE_FILE_QCOW2) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
@@ -1801,6 +1808,7 @@ qemuFirmwareFillDomain(virQEMUDriver *driver,
|
||||
return -1;
|
||||
}
|
||||
if (nvram &&
|
||||
+ nvram->format &&
|
||||
nvram->format != VIR_STORAGE_FILE_RAW &&
|
||||
nvram->format != VIR_STORAGE_FILE_QCOW2) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
@@ -1831,8 +1839,19 @@ qemuFirmwareFillDomain(virQEMUDriver *driver,
|
||||
* CODE:NVRAM pairs that might have been provided at build
|
||||
* time */
|
||||
if (!autoSelection) {
|
||||
- if (qemuFirmwareFillDomainLegacy(driver, def) < 0)
|
||||
+ if ((ret = qemuFirmwareFillDomainLegacy(driver, def)) < 0)
|
||||
return -1;
|
||||
+
|
||||
+ /* If we've gotten this far without finding a match, it
|
||||
+ * means that we're dealing with a set of completely
|
||||
+ * custom paths. In that case, unless the user has
|
||||
+ * specified otherwise, we have to assume that they're in
|
||||
+ * raw format */
|
||||
+ if (ret == 1) {
|
||||
+ if (loader && !loader->format) {
|
||||
+ loader->format = VIR_STORAGE_FILE_RAW;
|
||||
+ }
|
||||
+ }
|
||||
} else {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("Unable to find any firmware to satisfy '%1$s'"),
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.x86_64-latest.args b/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.x86_64-latest.args
|
||||
new file mode 100644
|
||||
index 0000000000..e8d7d580f7
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.x86_64-latest.args
|
||||
@@ -0,0 +1,38 @@
|
||||
+LC_ALL=C \
|
||||
+PATH=/bin \
|
||||
+HOME=/var/lib/libvirt/qemu/domain--1-guest \
|
||||
+USER=test \
|
||||
+LOGNAME=test \
|
||||
+XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
|
||||
+XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
|
||||
+XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||
+/usr/bin/qemu-system-x86_64 \
|
||||
+-name guest=guest,debug-threads=on \
|
||||
+-S \
|
||||
+-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||
+-blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE_4M.secboot.qcow2","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
+-blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"qcow2","file":"libvirt-pflash0-storage"}' \
|
||||
+-blockdev '{"driver":"file","filename":"/path/to/guest_VARS.qcow2","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
+-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"qcow2","file":"libvirt-pflash1-storage"}' \
|
||||
+-machine pc-q35-4.0,usb=off,smm=on,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format,acpi=on \
|
||||
+-accel kvm \
|
||||
+-cpu qemu64 \
|
||||
+-global driver=cfi.pflash01,property=secure,value=on \
|
||||
+-m size=1048576k \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \
|
||||
+-overcommit mem-lock=off \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
|
||||
+-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"}' \
|
||||
+-global ICH9-LPC.noreboot=off \
|
||||
+-watchdog-action reset \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.x86_64-latest.err b/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.x86_64-latest.err
|
||||
deleted file mode 100644
|
||||
index abfdfc4357..0000000000
|
||||
--- a/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.x86_64-latest.err
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-XML error: Format mismatch: loader.format='qcow2' nvram.format='raw'
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.xml b/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.xml
|
||||
index 6613d9e9a9..75fa44fd20 100644
|
||||
--- a/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.xml
|
||||
+++ b/tests/qemuxml2argvdata/firmware-auto-efi-format-mismatch.xml
|
||||
@@ -6,7 +6,7 @@
|
||||
<os firmware='efi'>
|
||||
<type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
|
||||
<loader format='qcow2'/>
|
||||
- <nvram>/path/to/guest_VARS.fd</nvram>
|
||||
+ <nvram>/path/to/guest_VARS.qcow2</nvram>
|
||||
</os>
|
||||
<features>
|
||||
<acpi/>
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-loader-secure-abi-update.x86_64-latest.args b/tests/qemuxml2argvdata/firmware-auto-efi-loader-secure-abi-update.x86_64-latest.args
|
||||
index 48f357cbf9..790fb619e8 100644
|
||||
--- a/tests/qemuxml2argvdata/firmware-auto-efi-loader-secure-abi-update.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/firmware-auto-efi-loader-secure-abi-update.x86_64-latest.args
|
||||
@@ -10,10 +10,10 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||
-name guest=guest,debug-threads=on \
|
||||
-S \
|
||||
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||
--blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
--blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
|
||||
+-blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE_4M.secboot.qcow2","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
+-blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"qcow2","file":"libvirt-pflash0-storage"}' \
|
||||
+-blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.qcow2","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
+-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"qcow2","file":"libvirt-pflash1-storage"}' \
|
||||
-machine pc-q35-4.0,usb=off,smm=on,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format,acpi=on \
|
||||
-accel kvm \
|
||||
-cpu qemu64 \
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index 370b26a023..9439a5a1e6 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -1117,7 +1117,7 @@ mymain(void)
|
||||
DO_TEST_CAPS_LATEST("firmware-auto-efi-format-nvram-qcow2-network-nbd");
|
||||
DO_TEST_CAPS_ARCH_LATEST("firmware-auto-efi-format-loader-raw", "aarch64");
|
||||
DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("firmware-auto-efi-format-loader-raw-abi-update", "aarch64");
|
||||
- DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-auto-efi-format-mismatch");
|
||||
+ DO_TEST_CAPS_LATEST("firmware-auto-efi-format-mismatch");
|
||||
|
||||
DO_TEST_NOCAPS("clock-utc");
|
||||
DO_TEST_NOCAPS("clock-localtime");
|
||||
diff --git a/tests/qemuxml2xmloutdata/firmware-auto-efi-loader-secure-abi-update.x86_64-latest.xml b/tests/qemuxml2xmloutdata/firmware-auto-efi-loader-secure-abi-update.x86_64-latest.xml
|
||||
index 332d931ba1..f4ff7a0fc2 100644
|
||||
--- a/tests/qemuxml2xmloutdata/firmware-auto-efi-loader-secure-abi-update.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/firmware-auto-efi-loader-secure-abi-update.x86_64-latest.xml
|
||||
@@ -10,8 +10,8 @@
|
||||
<feature enabled='yes' name='enrolled-keys'/>
|
||||
<feature enabled='yes' name='secure-boot'/>
|
||||
</firmware>
|
||||
- <loader readonly='yes' secure='yes' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd</loader>
|
||||
- <nvram template='/usr/share/edk2/ovmf/OVMF_VARS.secboot.fd'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
+ <loader readonly='yes' secure='yes' type='pflash' format='qcow2'>/usr/share/edk2/ovmf/OVMF_CODE_4M.secboot.qcow2</loader>
|
||||
+ <nvram template='/usr/share/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2' format='qcow2'>/var/lib/libvirt/qemu/nvram/guest_VARS.qcow2</nvram>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<features>
|
||||
--
|
||||
2.42.0
|
@ -1,152 +0,0 @@
|
||||
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
|
@ -1,684 +0,0 @@
|
||||
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
|
File diff suppressed because it is too large
Load Diff
@ -1,138 +0,0 @@
|
||||
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
|
@ -1,47 +0,0 @@
|
||||
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
|
62
SOURCES/libvirt-docs-Document-TPM-portion-of-domcaps.patch
Normal file
62
SOURCES/libvirt-docs-Document-TPM-portion-of-domcaps.patch
Normal file
@ -0,0 +1,62 @@
|
||||
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
|
||||
|
@ -0,0 +1,53 @@
|
||||
From bbfcf18f504b0eb165c0bbfe2f34b4e20d11c355 Mon Sep 17 00:00:00 2001
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Fri, 25 Aug 2023 00:09:54 -0400
|
||||
Subject: [PATCH] docs: update description of virsh nodedev-detach --driver
|
||||
option
|
||||
|
||||
--driver can now be used to specify a specific driver to bind to the
|
||||
device being detached from the host driver (e.g. vfio-pci-igbvf), not
|
||||
just the *type* of driver (e.g. "vfio" or "xen", which are unnecessary
|
||||
anyway, since they are implicit in which hypervisor driver is in use)
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/manpages/virsh.rst | 25 +++++++++++++++++--------
|
||||
1 file changed, 17 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
|
||||
index 673812036d3..91e1d5de37d 100644
|
||||
--- a/docs/manpages/virsh.rst
|
||||
+++ b/docs/manpages/virsh.rst
|
||||
@@ -5388,14 +5388,23 @@ nodedev-detach
|
||||
|
||||
nodedev-detach nodedev [--driver backend_driver]
|
||||
|
||||
-Detach *nodedev* from the host, so that it can safely be used by
|
||||
-guests via <hostdev> passthrough. This is reversed with
|
||||
-``nodedev-reattach``, and is done automatically for managed devices.
|
||||
-
|
||||
-Different backend drivers expect the device to be bound to different
|
||||
-dummy devices. For example, QEMU's "vfio" backend driver expects the
|
||||
-device to be bound to vfio-pci. The *--driver* parameter can be used
|
||||
-to specify the desired backend driver.
|
||||
+Detach *nodedev* from the host driver and bind it to a special driver
|
||||
+that provides the API needed by the hypervisor for assigning the
|
||||
+device to a virtual machine (using <hostdev> in the domain XML
|
||||
+definition). This is reversed with ``nodedev-reattach``, and is done
|
||||
+automatically by the hypervisor driver for managed devices (those
|
||||
+devices with "managed='yes'" in their XML definition).
|
||||
+
|
||||
+Different hypervisors expect the device being assigned to be bound to
|
||||
+different drivers. For example, QEMU's "vfio" backend requires the
|
||||
+device to be bound to the driver "vfio-pci" or to a "VFIO variant"
|
||||
+driver (this is a driver that supports the full API provided by
|
||||
+vfio-pci, plus some other APIs to support things like live
|
||||
+migration). The *--driver* parameter can be used to specify a
|
||||
+particular driver (e.g. a device-specific VFIO variant driver) the
|
||||
+device should be bound to. When *--driver* is omitted, the default
|
||||
+driver for the hypervisor is used ("vfio-pci" for QEMU, "pciback" for
|
||||
+Xen).
|
||||
|
||||
|
||||
nodedev-dumpxml
|
@ -0,0 +1,96 @@
|
||||
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
|
||||
|
@ -0,0 +1,61 @@
|
||||
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
|
||||
|
@ -1,123 +0,0 @@
|
||||
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
|
@ -1,53 +0,0 @@
|
||||
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
|
74
SOURCES/libvirt-domcaps-Introduce-TPM-backendVersion.patch
Normal file
74
SOURCES/libvirt-domcaps-Introduce-TPM-backendVersion.patch
Normal file
@ -0,0 +1,74 @@
|
||||
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
|
||||
|
@ -0,0 +1,59 @@
|
||||
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
|
||||
|
@ -0,0 +1,79 @@
|
||||
From f158b6573ac39bdd1ba36c3900e65afffe57f3ca Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <f158b6573ac39bdd1ba36c3900e65afffe57f3ca.1689974710.git.jdenemar@redhat.com>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 19 Jul 2023 15:22:22 +0200
|
||||
Subject: [PATCH] node_device: Don't leak error message buffer from
|
||||
virMdevctlListDefined|Active
|
||||
|
||||
nodeDeviceUpdateMediatedDevices invokes virMdevctlListDefined and
|
||||
virMdevctlListActive both of which were passed the same 'errmsg' buffer.
|
||||
|
||||
Since virCommandSetErrorBuffer() always allocates the error buffer one
|
||||
of them was leaked.
|
||||
|
||||
Fix it by populating the 'errmsg' buffer only on failure of
|
||||
virMdevctlListActive|Defined which invoke the command.
|
||||
|
||||
Add a comment to nodeDeviceGetMdevctlListCommand reminding how
|
||||
virCommandSetErrorBuffer() works.
|
||||
|
||||
Fixes: 44a0f2f0c8f
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2143158
|
||||
|
||||
(cherry picked from commit 7ca777cc09242cb3a30b12d5e0e396c6aaf1a5e7)
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
---
|
||||
src/node_device/node_device_driver.c | 17 +++++++++++++++--
|
||||
1 file changed, 15 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
|
||||
index 5dc45ddbb4..2ef9197adc 100644
|
||||
--- a/src/node_device/node_device_driver.c
|
||||
+++ b/src/node_device/node_device_driver.c
|
||||
@@ -1044,6 +1044,15 @@ virMdevctlSetAutostart(virNodeDeviceDef *def, bool autostart, char **errmsg)
|
||||
}
|
||||
|
||||
|
||||
+/**
|
||||
+ * nodeDeviceGetMdevctlListCommand:
|
||||
+ * @defined: list mdevctl entries with persistent config
|
||||
+ * @output: filled with the output of mdevctl once invoked
|
||||
+ * @errmsg: always allocated, optionally filled with error from 'mdevctl'
|
||||
+ *
|
||||
+ * Prepares a virCommand structure to invoke 'mdevctl' caller is responsible to
|
||||
+ * free the buffers which are filled by the virCommand infrastructure.
|
||||
+ */
|
||||
virCommand*
|
||||
nodeDeviceGetMdevctlListCommand(bool defined,
|
||||
char **output,
|
||||
@@ -1624,9 +1633,11 @@ virMdevctlListDefined(virNodeDeviceDef ***devs, char **errmsg)
|
||||
{
|
||||
int status;
|
||||
g_autofree char *output = NULL;
|
||||
- g_autoptr(virCommand) cmd = nodeDeviceGetMdevctlListCommand(true, &output, errmsg);
|
||||
+ g_autofree char *errbuf = NULL;
|
||||
+ g_autoptr(virCommand) cmd = nodeDeviceGetMdevctlListCommand(true, &output, &errbuf);
|
||||
|
||||
if (virCommandRun(cmd, &status) < 0 || status != 0) {
|
||||
+ *errmsg = g_steal_pointer(&errbuf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1642,9 +1653,11 @@ virMdevctlListActive(virNodeDeviceDef ***devs, char **errmsg)
|
||||
{
|
||||
int status;
|
||||
g_autofree char *output = NULL;
|
||||
- g_autoptr(virCommand) cmd = nodeDeviceGetMdevctlListCommand(false, &output, errmsg);
|
||||
+ g_autofree char *errbuf = NULL;
|
||||
+ g_autoptr(virCommand) cmd = nodeDeviceGetMdevctlListCommand(false, &output, &errbuf);
|
||||
|
||||
if (virCommandRun(cmd, &status) < 0 || status != 0) {
|
||||
+ *errmsg = g_steal_pointer(&errbuf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
--
|
||||
2.41.0
|
@ -0,0 +1,178 @@
|
||||
From 24beaffec33efa3fa077d7b8596d97aa9a038a01 Mon Sep 17 00:00:00 2001
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 9 Jul 2023 00:37:45 -0400
|
||||
Subject: [PATCH] node_device: support binding other drivers with
|
||||
virNodeDeviceDetachFlags()
|
||||
|
||||
In the past, the only allowable values for the "driver" field of
|
||||
virNodeDeviceDetachFlags() were "kvm" or "vfio" for the QEMU driver,
|
||||
and "xen" for the libxl driver. Then "kvm" was deprecated and removed,
|
||||
so the driver name became essentially irrelevant (because it is always
|
||||
called via a particular hypervisor driver, and so the "xen" or "vfio"
|
||||
can be (and almost always is) implied.
|
||||
|
||||
With the advent of VFIO variant drivers, the ability to explicitly
|
||||
specify a driver name once again becomes useful - it can be used to
|
||||
name the exact VFIO driver that we want bound to the device in place
|
||||
of vfio-pci, so this patch allows those other names to be passed down
|
||||
the call chain, where the code in virpci.c can make use of them.
|
||||
|
||||
The names "vfio", "kvm", and "xen" retain their special meaning, though:
|
||||
|
||||
1) because there may be some application or configuration that still
|
||||
calls virNodeDeviceDetachFlags() with driverName="vfio", this
|
||||
single value is substituted with the synonym of NULL, which means
|
||||
"bind the default driver for this device and hypervisor". This
|
||||
will currently result in the vfio-pci driver being bound to the
|
||||
device.
|
||||
|
||||
2) in the case of the libxl driver, "xen" means to use the standard
|
||||
driver used in the case of Xen ("pciback").
|
||||
|
||||
3) "kvm" as a driver name always results in an error, as legacy KVM
|
||||
device assignment was removed from the kernel around 10 years ago.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/hypervisor/domain_driver.c | 11 ++++++-----
|
||||
src/hypervisor/domain_driver.h | 2 ++
|
||||
src/libxl/libxl_driver.c | 3 ++-
|
||||
src/qemu/qemu_driver.c | 33 +++++++++++++++++++--------------
|
||||
4 files changed, 29 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c
|
||||
index a70f75f3ae8..d9469ad6f96 100644
|
||||
--- a/src/hypervisor/domain_driver.c
|
||||
+++ b/src/hypervisor/domain_driver.c
|
||||
@@ -462,6 +462,7 @@ virDomainDriverNodeDeviceReAttach(virNodeDevicePtr dev,
|
||||
int
|
||||
virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
virHostdevManager *hostdevMgr,
|
||||
+ virPCIStubDriver driverType,
|
||||
const char *driverName)
|
||||
{
|
||||
g_autoptr(virPCIDevice) pci = NULL;
|
||||
@@ -471,8 +472,10 @@ virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
g_autoptr(virConnect) nodeconn = NULL;
|
||||
g_autoptr(virNodeDevice) nodedev = NULL;
|
||||
|
||||
- if (!driverName)
|
||||
+ if (driverType == VIR_PCI_STUB_DRIVER_NONE) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("driver type not set"));
|
||||
return -1;
|
||||
+ }
|
||||
|
||||
if (!(nodeconn = virGetConnectNodeDev()))
|
||||
return -1;
|
||||
@@ -504,10 +507,8 @@ virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
if (!pci)
|
||||
return -1;
|
||||
|
||||
- if (STREQ(driverName, "vfio"))
|
||||
- virPCIDeviceSetStubDriverType(pci, VIR_PCI_STUB_DRIVER_VFIO);
|
||||
- else if (STREQ(driverName, "xen"))
|
||||
- virPCIDeviceSetStubDriverType(pci, VIR_PCI_STUB_DRIVER_XEN);
|
||||
+ virPCIDeviceSetStubDriverType(pci, driverType);
|
||||
+ virPCIDeviceSetStubDriverName(pci, driverName);
|
||||
|
||||
return virHostdevPCINodeDeviceDetach(hostdevMgr, pci);
|
||||
}
|
||||
diff --git a/src/hypervisor/domain_driver.h b/src/hypervisor/domain_driver.h
|
||||
index 4241c869320..9942f58fda1 100644
|
||||
--- a/src/hypervisor/domain_driver.h
|
||||
+++ b/src/hypervisor/domain_driver.h
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include "node_device_conf.h"
|
||||
#include "virhostdev.h"
|
||||
+#include "virpci.h"
|
||||
|
||||
char *
|
||||
virDomainDriverGenerateRootHash(const char *drivername,
|
||||
@@ -58,6 +59,7 @@ int virDomainDriverNodeDeviceReAttach(virNodeDevicePtr dev,
|
||||
|
||||
int virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
virHostdevManager *hostdevMgr,
|
||||
+ virPCIStubDriver driverType,
|
||||
const char *driverName);
|
||||
|
||||
int virDomainDriverAddIOThreadCheck(virDomainDef *def,
|
||||
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
|
||||
index 3d10f458508..079922dd32a 100644
|
||||
--- a/src/libxl/libxl_driver.c
|
||||
+++ b/src/libxl/libxl_driver.c
|
||||
@@ -5876,7 +5876,8 @@ libxlNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
|
||||
/* virNodeDeviceDetachFlagsEnsureACL() is being called by
|
||||
* virDomainDriverNodeDeviceDetachFlags() */
|
||||
- return virDomainDriverNodeDeviceDetachFlags(dev, hostdev_mgr, driverName);
|
||||
+ return virDomainDriverNodeDeviceDetachFlags(dev, hostdev_mgr,
|
||||
+ VIR_PCI_STUB_DRIVER_XEN, NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 73fa499e40d..5128b643642 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -70,7 +70,6 @@
|
||||
#include "domain_driver.h"
|
||||
#include "domain_postparse.h"
|
||||
#include "domain_validate.h"
|
||||
-#include "virpci.h"
|
||||
#include "virpidfile.h"
|
||||
#include "virprocess.h"
|
||||
#include "libvirt_internal.h"
|
||||
@@ -11407,24 +11406,28 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
- if (!driverName)
|
||||
- driverName = "vfio";
|
||||
-
|
||||
- /* Only the 'vfio' driver is supported and a special error message for
|
||||
- * the previously supported 'kvm' driver is provided below. */
|
||||
- if (STRNEQ(driverName, "vfio") && STRNEQ(driverName, "kvm")) {
|
||||
- virReportError(VIR_ERR_INVALID_ARG,
|
||||
- _("unknown driver name '%1$s'"), driverName);
|
||||
- return -1;
|
||||
- }
|
||||
+ /* For historical reasons, if driverName is "vfio", that is the
|
||||
+ * same as NULL, i.e. the default vfio driver for this device
|
||||
+ */
|
||||
+ if (STREQ_NULLABLE(driverName, "vfio"))
|
||||
+ driverName = NULL;
|
||||
|
||||
- if (STREQ(driverName, "kvm")) {
|
||||
+ /* the "kvm" driver name was used a very long time ago to force
|
||||
+ * "legacy KVM device assignment", which hasn't been supported in
|
||||
+ * over 10 years.
|
||||
+ */
|
||||
+ if (STREQ_NULLABLE(driverName, "kvm")) {
|
||||
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
|
||||
- _("KVM device assignment is no longer "
|
||||
+ _("'legacy KVM' device assignment is no longer "
|
||||
"supported on this system"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ /* for any other driver, we can't know whether or not it is a VFIO
|
||||
+ * driver until the device has been bound to it, so we will defer
|
||||
+ * further validation until then.
|
||||
+ */
|
||||
+
|
||||
if (!qemuHostdevHostSupportsPassthroughVFIO()) {
|
||||
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
|
||||
_("VFIO device assignment is currently not "
|
||||
@@ -11434,7 +11437,9 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
|
||||
/* virNodeDeviceDetachFlagsEnsureACL() is being called by
|
||||
* virDomainDriverNodeDeviceDetachFlags() */
|
||||
- return virDomainDriverNodeDeviceDetachFlags(dev, hostdev_mgr, driverName);
|
||||
+ return virDomainDriverNodeDeviceDetachFlags(dev, hostdev_mgr,
|
||||
+ VIR_PCI_STUB_DRIVER_VFIO,
|
||||
+ driverName);
|
||||
}
|
||||
|
||||
static int
|
105
SOURCES/libvirt-nodedev-refactor-mdevctl-thread-functions.patch
Normal file
105
SOURCES/libvirt-nodedev-refactor-mdevctl-thread-functions.patch
Normal file
@ -0,0 +1,105 @@
|
||||
From 05230da856d2f016c21f49a406780fbe15f74c32 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <05230da856d2f016c21f49a406780fbe15f74c32.1689602377.git.jdenemar@redhat.com>
|
||||
From: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Date: Wed, 5 Jul 2023 15:35:59 -0500
|
||||
Subject: [PATCH] nodedev: refactor mdevctl thread functions
|
||||
|
||||
Factor out a new scheduleMdevctlUpdate() function so that we can re-use
|
||||
it from other places. Now that other events can make it necessary to
|
||||
re-query mdevctl for mdev updates, this function will be useful for
|
||||
coalescing multiple updates in quick succession into a single mdevctl
|
||||
query.
|
||||
|
||||
Also rename a couple functions. The names weren't very descriptive of
|
||||
their behavior. For example, the old scheduleMdevctlHandler() function
|
||||
didn't actually schedule anything, it just started a thread. So rename
|
||||
it to free up the 'schedule' name for the above refactored function.
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
(cherry picked from commit 9b7fadc5dc33b85b597c95d944dc23c02c29c29f)
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2143158
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
---
|
||||
src/node_device/node_device_udev.c | 36 ++++++++++++++++++++----------
|
||||
1 file changed, 24 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
|
||||
index fce4212728..86ef4af728 100644
|
||||
--- a/src/node_device/node_device_udev.c
|
||||
+++ b/src/node_device/node_device_udev.c
|
||||
@@ -2075,7 +2075,7 @@ udevPCITranslateInit(bool privileged G_GNUC_UNUSED)
|
||||
|
||||
|
||||
static void
|
||||
-mdevctlHandlerThread(void *opaque G_GNUC_UNUSED)
|
||||
+mdevctlUpdateThreadFunc(void *opaque G_GNUC_UNUSED)
|
||||
{
|
||||
udevEventData *priv = driver->privateData;
|
||||
VIR_LOCK_GUARD lock = virLockGuardLock(&priv->mdevctlLock);
|
||||
@@ -2086,7 +2086,7 @@ mdevctlHandlerThread(void *opaque G_GNUC_UNUSED)
|
||||
|
||||
|
||||
static void
|
||||
-scheduleMdevctlHandler(int timer G_GNUC_UNUSED, void *opaque)
|
||||
+launchMdevctlUpdateThread(int timer G_GNUC_UNUSED, void *opaque)
|
||||
{
|
||||
udevEventData *priv = opaque;
|
||||
virThread thread;
|
||||
@@ -2096,7 +2096,7 @@ scheduleMdevctlHandler(int timer G_GNUC_UNUSED, void *opaque)
|
||||
priv->mdevctlTimeout = -1;
|
||||
}
|
||||
|
||||
- if (virThreadCreateFull(&thread, false, mdevctlHandlerThread,
|
||||
+ if (virThreadCreateFull(&thread, false, mdevctlUpdateThreadFunc,
|
||||
"mdevctl-thread", false, NULL) < 0) {
|
||||
virReportSystemError(errno, "%s",
|
||||
_("failed to create mdevctl thread"));
|
||||
@@ -2192,6 +2192,26 @@ mdevctlEnableMonitor(udevEventData *priv)
|
||||
}
|
||||
|
||||
|
||||
+/* Schedules an mdevctl update for 100ms in the future, canceling any existing
|
||||
+ * timeout that may have been set. In this way, multiple update requests in
|
||||
+ * quick succession can be collapsed into a single update. if @force is true,
|
||||
+ * an update thread will be spawned immediately. */
|
||||
+static void
|
||||
+scheduleMdevctlUpdate(udevEventData *data,
|
||||
+ bool force)
|
||||
+{
|
||||
+ if (!force) {
|
||||
+ if (data->mdevctlTimeout > 0)
|
||||
+ virEventRemoveTimeout(data->mdevctlTimeout);
|
||||
+ data->mdevctlTimeout = virEventAddTimeout(100, launchMdevctlUpdateThread,
|
||||
+ data, NULL);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ launchMdevctlUpdateThread(-1, data);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
mdevctlEventHandleCallback(GFileMonitor *monitor G_GNUC_UNUSED,
|
||||
GFile *file,
|
||||
@@ -2222,15 +2242,7 @@ mdevctlEventHandleCallback(GFileMonitor *monitor G_GNUC_UNUSED,
|
||||
* configuration change, try to coalesce these changes by waiting for the
|
||||
* CHANGES_DONE_HINT event. As a fallback, add a timeout to trigger the
|
||||
* signal if that event never comes */
|
||||
- if (event_type != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT) {
|
||||
- if (priv->mdevctlTimeout > 0)
|
||||
- virEventRemoveTimeout(priv->mdevctlTimeout);
|
||||
- priv->mdevctlTimeout = virEventAddTimeout(100, scheduleMdevctlHandler,
|
||||
- priv, NULL);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- scheduleMdevctlHandler(-1, priv);
|
||||
+ scheduleMdevctlUpdate(priv, (event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT));
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.41.0
|
104
SOURCES/libvirt-nodedev-report-mdev-persistence-properly.patch
Normal file
104
SOURCES/libvirt-nodedev-report-mdev-persistence-properly.patch
Normal file
@ -0,0 +1,104 @@
|
||||
From c2150285aff9b308b969d5fc6f32f75db620dfe3 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <c2150285aff9b308b969d5fc6f32f75db620dfe3.1689974710.git.jdenemar@redhat.com>
|
||||
From: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Date: Tue, 18 Jul 2023 14:47:49 -0500
|
||||
Subject: [PATCH] nodedev: report mdev persistence properly
|
||||
|
||||
Since commit 44a0f2f0, we now query mdevctl for transient (active) mdevs
|
||||
in order to gather attributes for the mdev. Unfortunately, this commit
|
||||
introduced a regression because nodeDeviceUpdateMediatedDevice() assumed
|
||||
that all mdevs returned from mdevctl were actually persistent mdevs but
|
||||
we were using it to update transient mdevs. Refactor the function so
|
||||
that we can use it to update both persistent and transient mdevs.
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2143158
|
||||
|
||||
(cherry picked from commit fa0d5f4ebc0aa178d9dea278914f9149a4c4af54)
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
---
|
||||
src/node_device/node_device_driver.c | 21 +++++++++++----------
|
||||
1 file changed, 11 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
|
||||
index a2d0600560..5dc45ddbb4 100644
|
||||
--- a/src/node_device/node_device_driver.c
|
||||
+++ b/src/node_device/node_device_driver.c
|
||||
@@ -1339,11 +1339,12 @@ nodeDeviceDestroy(virNodeDevicePtr device)
|
||||
/* takes ownership of @def and potentially frees it. @def should not be used
|
||||
* after returning from this function */
|
||||
static int
|
||||
-nodeDeviceUpdateMediatedDevice(virNodeDeviceDef *def)
|
||||
+nodeDeviceUpdateMediatedDevice(virNodeDeviceDef *def,
|
||||
+ bool defined)
|
||||
{
|
||||
virNodeDeviceObj *obj;
|
||||
virObjectEvent *event;
|
||||
- bool defined = false;
|
||||
+ bool was_defined = false;
|
||||
g_autoptr(virNodeDeviceDef) owned = def;
|
||||
g_autofree char *name = g_strdup(owned->name);
|
||||
|
||||
@@ -1359,13 +1360,13 @@ nodeDeviceUpdateMediatedDevice(virNodeDeviceDef *def)
|
||||
bool changed;
|
||||
virNodeDeviceDef *olddef = virNodeDeviceObjGetDef(obj);
|
||||
|
||||
- defined = virNodeDeviceObjIsPersistent(obj);
|
||||
+ was_defined = virNodeDeviceObjIsPersistent(obj);
|
||||
/* Active devices contain some additional information (e.g. sysfs
|
||||
* path) that is not provided by mdevctl, so re-use the existing
|
||||
* definition and copy over new mdev data */
|
||||
changed = nodeDeviceDefCopyFromMdevctl(olddef, owned);
|
||||
|
||||
- if (defined && !changed) {
|
||||
+ if (was_defined && !changed) {
|
||||
/* if this device was already defined and the definition
|
||||
* hasn't changed, there's nothing to do for this device */
|
||||
virNodeDeviceObjEndAPI(&obj);
|
||||
@@ -1373,11 +1374,11 @@ nodeDeviceUpdateMediatedDevice(virNodeDeviceDef *def)
|
||||
}
|
||||
}
|
||||
|
||||
- /* all devices returned by virMdevctlListDefined() are persistent */
|
||||
- virNodeDeviceObjSetPersistent(obj, true);
|
||||
+ if (defined)
|
||||
+ virNodeDeviceObjSetPersistent(obj, true);
|
||||
virNodeDeviceObjSetAutostart(obj, def->caps->data.mdev.autostart);
|
||||
|
||||
- if (!defined)
|
||||
+ if (!was_defined && defined)
|
||||
event = virNodeDeviceEventLifecycleNew(name,
|
||||
VIR_NODE_DEVICE_EVENT_DEFINED,
|
||||
0);
|
||||
@@ -1447,7 +1448,7 @@ nodeDeviceDefineXML(virConnect *conn,
|
||||
* have already received the uuid from virMdevctlDefine(), we can simply
|
||||
* add the provisional device to the list and return it immediately and
|
||||
* avoid this long delay. */
|
||||
- if (nodeDeviceUpdateMediatedDevice(g_steal_pointer(&def)) < 0)
|
||||
+ if (nodeDeviceUpdateMediatedDevice(g_steal_pointer(&def), true) < 0)
|
||||
return NULL;
|
||||
|
||||
return virGetNodeDevice(conn, name);
|
||||
@@ -1742,7 +1743,7 @@ nodeDeviceUpdateMediatedDevices(void)
|
||||
removeMissingPersistentMdev, &data);
|
||||
|
||||
for (i = 0; i < data.ndefs; i++)
|
||||
- if (nodeDeviceUpdateMediatedDevice(defs[i]) < 0)
|
||||
+ if (nodeDeviceUpdateMediatedDevice(defs[i], true) < 0)
|
||||
return -1;
|
||||
|
||||
/* Update active/transient mdev devices */
|
||||
@@ -1753,7 +1754,7 @@ nodeDeviceUpdateMediatedDevices(void)
|
||||
}
|
||||
|
||||
for (i = 0; i < act_ndefs; i++)
|
||||
- if (nodeDeviceUpdateMediatedDevice(act_defs[i]) < 0)
|
||||
+ if (nodeDeviceUpdateMediatedDevice(act_defs[i], false) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
--
|
||||
2.41.0
|
@ -0,0 +1,50 @@
|
||||
From d993cec578f2bbb121dcacea6728cf34da14e62e Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <d993cec578f2bbb121dcacea6728cf34da14e62e.1689602377.git.jdenemar@redhat.com>
|
||||
From: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Date: Fri, 30 Jun 2023 13:34:00 +0200
|
||||
Subject: [PATCH] nodedev: transient mdev update on nodeDeviceCreateXML
|
||||
|
||||
Update the optional mdev attributes by running an mdevctl update on a
|
||||
new created nodedev object representing an mdev.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2143158
|
||||
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2143158
|
||||
|
||||
(cherry picked from commit 37481aa1f15ece6b187b8fa219966f77648c813d)
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
---
|
||||
src/node_device/node_device_udev.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
|
||||
index 4c37ec3189..fce4212728 100644
|
||||
--- a/src/node_device/node_device_udev.c
|
||||
+++ b/src/node_device/node_device_udev.c
|
||||
@@ -1757,12 +1757,20 @@ nodeStateCleanup(void)
|
||||
static int
|
||||
udevHandleOneDevice(struct udev_device *device)
|
||||
{
|
||||
+ virNodeDevCapType dev_cap_type;
|
||||
const char *action = udev_device_get_action(device);
|
||||
|
||||
VIR_DEBUG("udev action: '%s': %s", action, udev_device_get_syspath(device));
|
||||
|
||||
- if (STREQ(action, "add") || STREQ(action, "change"))
|
||||
- return udevAddOneDevice(device);
|
||||
+ if (STREQ(action, "add") || STREQ(action, "change")) {
|
||||
+ int ret = udevAddOneDevice(device);
|
||||
+ if (ret == 0 &&
|
||||
+ udevGetDeviceType(device, &dev_cap_type) == 0 &&
|
||||
+ dev_cap_type == VIR_NODE_DEV_CAP_MDEV)
|
||||
+ if (nodeDeviceUpdateMediatedDevices() < 0)
|
||||
+ VIR_WARN("mdevctl failed to update mediated devices");
|
||||
+ return ret;
|
||||
+ }
|
||||
|
||||
if (STREQ(action, "remove"))
|
||||
return udevRemoveOneDevice(device);
|
||||
--
|
||||
2.41.0
|
@ -0,0 +1,70 @@
|
||||
From 48813113774c7ff0ab1b43c1861b6495bb3ce830 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <48813113774c7ff0ab1b43c1861b6495bb3ce830.1689602377.git.jdenemar@redhat.com>
|
||||
From: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Date: Thu, 6 Jul 2023 09:16:35 -0500
|
||||
Subject: [PATCH] nodedev: update mdevs from the mdevctl thread
|
||||
|
||||
Rather than directly executing mdevctl from the udev event thread when
|
||||
we determine that we need to re-query, schedule the mdevctl thread to
|
||||
run. This also helps to coalesce multiple back-to-back updates into a
|
||||
single one when there are multiple updates in a row or at startup when a
|
||||
host has a very large number of mdevs.
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
(cherry picked from commit 14026db9b0e25739ea30685bd643ff23aca30588)
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2143158
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
---
|
||||
src/node_device/node_device_udev.c | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
|
||||
index 86ef4af728..6451574c1d 100644
|
||||
--- a/src/node_device/node_device_udev.c
|
||||
+++ b/src/node_device/node_device_udev.c
|
||||
@@ -1443,6 +1443,9 @@ udevGetDeviceDetails(struct udev_device *device,
|
||||
}
|
||||
|
||||
|
||||
+static void scheduleMdevctlUpdate(udevEventData *data, bool force);
|
||||
+
|
||||
+
|
||||
static int
|
||||
udevRemoveOneDeviceSysPath(const char *path)
|
||||
{
|
||||
@@ -1475,8 +1478,7 @@ udevRemoveOneDeviceSysPath(const char *path)
|
||||
virNodeDeviceObjEndAPI(&obj);
|
||||
|
||||
/* cannot check for mdev_types since they have already been removed */
|
||||
- if (nodeDeviceUpdateMediatedDevices() < 0)
|
||||
- VIR_WARN("mdevctl failed to update mediated devices");
|
||||
+ scheduleMdevctlUpdate(driver->privateData, false);
|
||||
|
||||
virObjectEventStateQueue(driver->nodeDeviceEventState, event);
|
||||
return 0;
|
||||
@@ -1604,8 +1606,8 @@ udevAddOneDevice(struct udev_device *device)
|
||||
has_mdev_types = virNodeDeviceObjHasCap(obj, VIR_NODE_DEV_CAP_MDEV_TYPES);
|
||||
virNodeDeviceObjEndAPI(&obj);
|
||||
|
||||
- if (has_mdev_types && nodeDeviceUpdateMediatedDevices() < 0)
|
||||
- VIR_WARN("mdevctl failed to update mediated devices");
|
||||
+ if (has_mdev_types)
|
||||
+ scheduleMdevctlUpdate(driver->privateData, false);
|
||||
|
||||
ret = 0;
|
||||
|
||||
@@ -1767,8 +1769,7 @@ udevHandleOneDevice(struct udev_device *device)
|
||||
if (ret == 0 &&
|
||||
udevGetDeviceType(device, &dev_cap_type) == 0 &&
|
||||
dev_cap_type == VIR_NODE_DEV_CAP_MDEV)
|
||||
- if (nodeDeviceUpdateMediatedDevices() < 0)
|
||||
- VIR_WARN("mdevctl failed to update mediated devices");
|
||||
+ scheduleMdevctlUpdate(driver->privateData, false);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.41.0
|
@ -0,0 +1,48 @@
|
||||
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
|
||||
|
@ -0,0 +1,183 @@
|
||||
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
|
||||
|
@ -0,0 +1,77 @@
|
||||
From a106b0bcb4fd652b9843257f799d9601151449b4 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <a106b0bcb4fd652b9843257f799d9601151449b4.1692951632.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 26 May 2023 19:59:06 +0200
|
||||
Subject: [PATCH] qemu: Don't overwrite NVRAM template for legacy firmware
|
||||
|
||||
Just because we have found a matching entry, it doesn't mean
|
||||
that we should discard the information explicitly provided in
|
||||
the domain XML.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
https://gitlab.com/libvirt/libvirt/-/issues/500
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 4a49114ff47d4a9432d211200f734886f9ce200b)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_firmware.c | 26 +++++++++++++++++--
|
||||
...efi-secboot-legacy-paths.x86_64-latest.xml | 2 +-
|
||||
2 files changed, 25 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
|
||||
index b1d342563b..a9437b5b95 100644
|
||||
--- a/src/qemu/qemu_firmware.c
|
||||
+++ b/src/qemu/qemu_firmware.c
|
||||
@@ -1609,8 +1609,30 @@ qemuFirmwareFillDomainLegacy(virQEMUDriver *driver,
|
||||
loader->type = VIR_DOMAIN_LOADER_TYPE_PFLASH;
|
||||
loader->readonly = VIR_TRISTATE_BOOL_YES;
|
||||
|
||||
- VIR_FREE(loader->nvramTemplate);
|
||||
- loader->nvramTemplate = g_strdup(cfg->firmwares[i]->nvram);
|
||||
+ /* Only use the default template path if one hasn't been
|
||||
+ * provided by the user.
|
||||
+ *
|
||||
+ * In addition to fully-custom templates, which are a valid
|
||||
+ * use case, we could simply be in a situation where
|
||||
+ * qemu.conf contains
|
||||
+ *
|
||||
+ * nvram = [
|
||||
+ * "/path/to/OVMF_CODE.secboot.fd:/path/to/OVMF_VARS.fd",
|
||||
+ * "/path/to/OVMF_CODE.secboot.fd:/path/to/OVMF_VARS.secboot.fd"
|
||||
+ * ]
|
||||
+ *
|
||||
+ * and the domain has been configured as
|
||||
+ *
|
||||
+ * <os>
|
||||
+ * <loader readonly='yes' type='pflash'>/path/to/OVMF_CODE.secboot.fd</loader>
|
||||
+ * <nvram template='/path/to/OVMF/OVMF_VARS.secboot.fd'>
|
||||
+ * </os>
|
||||
+ *
|
||||
+ * In this case, the global default is to have Secure Boot
|
||||
+ * disabled, but the domain configuration explicitly enables
|
||||
+ * it, and we shouldn't overrule this choice */
|
||||
+ if (!loader->nvramTemplate)
|
||||
+ loader->nvramTemplate = g_strdup(cfg->firmwares[i]->nvram);
|
||||
|
||||
qemuFirmwareEnsureNVRAM(def, cfg, VIR_STORAGE_FILE_RAW);
|
||||
|
||||
diff --git a/tests/qemuxml2xmloutdata/firmware-manual-efi-secboot-legacy-paths.x86_64-latest.xml b/tests/qemuxml2xmloutdata/firmware-manual-efi-secboot-legacy-paths.x86_64-latest.xml
|
||||
index b8c2dfef66..9027123558 100644
|
||||
--- a/tests/qemuxml2xmloutdata/firmware-manual-efi-secboot-legacy-paths.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/firmware-manual-efi-secboot-legacy-paths.x86_64-latest.xml
|
||||
@@ -7,7 +7,7 @@
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
|
||||
<loader readonly='yes' secure='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.secboot.fd</loader>
|
||||
- <nvram template='/usr/share/OVMF/OVMF_VARS.fd'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
+ <nvram template='/usr/share/OVMF/OVMF_VARS.secboot.fd'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<features>
|
||||
--
|
||||
2.42.0
|
@ -0,0 +1,340 @@
|
||||
From 9b3f3afb21c64dc403fea734b1cb75a8bd2e4fc0 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <9b3f3afb21c64dc403fea734b1cb75a8bd2e4fc0.1692951632.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Tue, 30 May 2023 18:01:58 +0200
|
||||
Subject: [PATCH] qemu: Filter firmware based on loader.readonly
|
||||
|
||||
If the user included loader.readonly=no in the domain XML, we
|
||||
should not pick a firmware build that expects to work with
|
||||
loader.readonly=yes.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit e96e322725f27d59ebcbd194c8da949b64bab9d6)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_firmware.c | 12 ++++++
|
||||
...-auto-efi-rw-abi-update.x86_64-latest.args | 38 -----------------
|
||||
...e-auto-efi-rw-abi-update.x86_64-latest.err | 1 +
|
||||
.../firmware-auto-efi-rw.x86_64-latest.args | 38 -----------------
|
||||
.../firmware-auto-efi-rw.x86_64-latest.err | 1 +
|
||||
...ual-efi-rw-legacy-paths.x86_64-latest.args | 6 +--
|
||||
...ual-efi-rw-modern-paths.x86_64-latest.args | 6 +--
|
||||
tests/qemuxml2argvtest.c | 4 +-
|
||||
...e-auto-efi-rw-abi-update.x86_64-latest.xml | 41 -------------------
|
||||
.../firmware-auto-efi-rw.x86_64-latest.xml | 8 +---
|
||||
...nual-efi-rw-legacy-paths.x86_64-latest.xml | 3 +-
|
||||
...nual-efi-rw-modern-paths.x86_64-latest.xml | 9 +---
|
||||
tests/qemuxml2xmltest.c | 1 -
|
||||
13 files changed, 24 insertions(+), 144 deletions(-)
|
||||
delete mode 100644 tests/qemuxml2argvdata/firmware-auto-efi-rw-abi-update.x86_64-latest.args
|
||||
create mode 100644 tests/qemuxml2argvdata/firmware-auto-efi-rw-abi-update.x86_64-latest.err
|
||||
delete mode 100644 tests/qemuxml2argvdata/firmware-auto-efi-rw.x86_64-latest.args
|
||||
create mode 100644 tests/qemuxml2argvdata/firmware-auto-efi-rw.x86_64-latest.err
|
||||
delete mode 100644 tests/qemuxml2xmloutdata/firmware-auto-efi-rw-abi-update.x86_64-latest.xml
|
||||
|
||||
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
|
||||
index 2c9a03e6cf..3538654913 100644
|
||||
--- a/src/qemu/qemu_firmware.c
|
||||
+++ b/src/qemu/qemu_firmware.c
|
||||
@@ -1295,6 +1295,13 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (loader &&
|
||||
+ loader->readonly == VIR_TRISTATE_BOOL_NO &&
|
||||
+ flash->mode != QEMU_FIRMWARE_FLASH_MODE_COMBINED) {
|
||||
+ VIR_DEBUG("Discarding readonly loader");
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
if (STRNEQ(flash->executable.format, "raw") &&
|
||||
STRNEQ(flash->executable.format, "qcow2")) {
|
||||
VIR_DEBUG("Discarding loader with unsupported flash format '%s'",
|
||||
@@ -1593,6 +1600,11 @@ qemuFirmwareFillDomainLegacy(virQEMUDriver *driver,
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ if (loader->readonly == VIR_TRISTATE_BOOL_NO) {
|
||||
+ VIR_DEBUG("Ignoring legacy entries for read-write loader");
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
if (loader->stateless == VIR_TRISTATE_BOOL_YES) {
|
||||
VIR_DEBUG("Ignoring legacy entries for stateless loader");
|
||||
return 1;
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-rw-abi-update.x86_64-latest.args b/tests/qemuxml2argvdata/firmware-auto-efi-rw-abi-update.x86_64-latest.args
|
||||
deleted file mode 100644
|
||||
index 48f357cbf9..0000000000
|
||||
--- a/tests/qemuxml2argvdata/firmware-auto-efi-rw-abi-update.x86_64-latest.args
|
||||
+++ /dev/null
|
||||
@@ -1,38 +0,0 @@
|
||||
-LC_ALL=C \
|
||||
-PATH=/bin \
|
||||
-HOME=/var/lib/libvirt/qemu/domain--1-guest \
|
||||
-USER=test \
|
||||
-LOGNAME=test \
|
||||
-XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
|
||||
-XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
|
||||
-XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||
-/usr/bin/qemu-system-x86_64 \
|
||||
--name guest=guest,debug-threads=on \
|
||||
--S \
|
||||
--object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||
--blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
--blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
|
||||
--machine pc-q35-4.0,usb=off,smm=on,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format,acpi=on \
|
||||
--accel kvm \
|
||||
--cpu qemu64 \
|
||||
--global driver=cfi.pflash01,property=secure,value=on \
|
||||
--m size=1048576k \
|
||||
--object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \
|
||||
--overcommit mem-lock=off \
|
||||
--smp 1,sockets=1,cores=1,threads=1 \
|
||||
--uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
|
||||
--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"}' \
|
||||
--global ICH9-LPC.noreboot=off \
|
||||
--watchdog-action reset \
|
||||
--sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
--msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-rw-abi-update.x86_64-latest.err b/tests/qemuxml2argvdata/firmware-auto-efi-rw-abi-update.x86_64-latest.err
|
||||
new file mode 100644
|
||||
index 0000000000..4cfde1bd2e
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/firmware-auto-efi-rw-abi-update.x86_64-latest.err
|
||||
@@ -0,0 +1 @@
|
||||
+operation failed: Unable to find any firmware to satisfy 'efi'
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-rw.x86_64-latest.args b/tests/qemuxml2argvdata/firmware-auto-efi-rw.x86_64-latest.args
|
||||
deleted file mode 100644
|
||||
index 48f357cbf9..0000000000
|
||||
--- a/tests/qemuxml2argvdata/firmware-auto-efi-rw.x86_64-latest.args
|
||||
+++ /dev/null
|
||||
@@ -1,38 +0,0 @@
|
||||
-LC_ALL=C \
|
||||
-PATH=/bin \
|
||||
-HOME=/var/lib/libvirt/qemu/domain--1-guest \
|
||||
-USER=test \
|
||||
-LOGNAME=test \
|
||||
-XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
|
||||
-XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
|
||||
-XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||
-/usr/bin/qemu-system-x86_64 \
|
||||
--name guest=guest,debug-threads=on \
|
||||
--S \
|
||||
--object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||
--blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
--blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
|
||||
--machine pc-q35-4.0,usb=off,smm=on,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format,acpi=on \
|
||||
--accel kvm \
|
||||
--cpu qemu64 \
|
||||
--global driver=cfi.pflash01,property=secure,value=on \
|
||||
--m size=1048576k \
|
||||
--object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \
|
||||
--overcommit mem-lock=off \
|
||||
--smp 1,sockets=1,cores=1,threads=1 \
|
||||
--uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
|
||||
--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"}' \
|
||||
--global ICH9-LPC.noreboot=off \
|
||||
--watchdog-action reset \
|
||||
--sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
--msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-rw.x86_64-latest.err b/tests/qemuxml2argvdata/firmware-auto-efi-rw.x86_64-latest.err
|
||||
new file mode 100644
|
||||
index 0000000000..4cfde1bd2e
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/firmware-auto-efi-rw.x86_64-latest.err
|
||||
@@ -0,0 +1 @@
|
||||
+operation failed: Unable to find any firmware to satisfy 'efi'
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-manual-efi-rw-legacy-paths.x86_64-latest.args b/tests/qemuxml2argvdata/firmware-manual-efi-rw-legacy-paths.x86_64-latest.args
|
||||
index ccc279e4e3..85495da6f5 100644
|
||||
--- a/tests/qemuxml2argvdata/firmware-manual-efi-rw-legacy-paths.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/firmware-manual-efi-rw-legacy-paths.x86_64-latest.args
|
||||
@@ -11,10 +11,8 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||
-S \
|
||||
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||
-blockdev '{"driver":"file","filename":"/usr/share/OVMF/OVMF_CODE.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
--blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
|
||||
--machine pc-q35-4.0,usb=off,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format,acpi=on \
|
||||
+-blockdev '{"node-name":"libvirt-pflash0-format","read-only":false,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
+-machine pc-q35-4.0,usb=off,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,acpi=on \
|
||||
-accel tcg \
|
||||
-cpu qemu64 \
|
||||
-m size=1048576k \
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-manual-efi-rw-modern-paths.x86_64-latest.args b/tests/qemuxml2argvdata/firmware-manual-efi-rw-modern-paths.x86_64-latest.args
|
||||
index 2d45fa4792..c26daad29f 100644
|
||||
--- a/tests/qemuxml2argvdata/firmware-manual-efi-rw-modern-paths.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/firmware-manual-efi-rw-modern-paths.x86_64-latest.args
|
||||
@@ -11,10 +11,8 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||
-S \
|
||||
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||
-blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
--blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
--blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
|
||||
--machine pc-q35-4.0,usb=off,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format,acpi=on \
|
||||
+-blockdev '{"node-name":"libvirt-pflash0-format","read-only":false,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
+-machine pc-q35-4.0,usb=off,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,acpi=on \
|
||||
-accel tcg \
|
||||
-cpu qemu64 \
|
||||
-m size=1048576k \
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index b2d9e00350..370b26a023 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -1089,8 +1089,8 @@ mymain(void)
|
||||
DO_TEST_CAPS_LATEST("firmware-auto-efi");
|
||||
DO_TEST_CAPS_LATEST_ABI_UPDATE("firmware-auto-efi-abi-update");
|
||||
DO_TEST_CAPS_LATEST("firmware-auto-efi-stateless");
|
||||
- DO_TEST_CAPS_LATEST("firmware-auto-efi-rw");
|
||||
- DO_TEST_CAPS_LATEST_ABI_UPDATE("firmware-auto-efi-rw-abi-update");
|
||||
+ DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-rw");
|
||||
+ DO_TEST_CAPS_LATEST_ABI_UPDATE_PARSE_ERROR("firmware-auto-efi-rw-abi-update");
|
||||
DO_TEST_CAPS_LATEST("firmware-auto-efi-loader-secure");
|
||||
DO_TEST_CAPS_LATEST_ABI_UPDATE("firmware-auto-efi-loader-secure-abi-update");
|
||||
DO_TEST_CAPS_LATEST("firmware-auto-efi-loader-insecure");
|
||||
diff --git a/tests/qemuxml2xmloutdata/firmware-auto-efi-rw-abi-update.x86_64-latest.xml b/tests/qemuxml2xmloutdata/firmware-auto-efi-rw-abi-update.x86_64-latest.xml
|
||||
deleted file mode 100644
|
||||
index 332d931ba1..0000000000
|
||||
--- a/tests/qemuxml2xmloutdata/firmware-auto-efi-rw-abi-update.x86_64-latest.xml
|
||||
+++ /dev/null
|
||||
@@ -1,41 +0,0 @@
|
||||
-<domain type='kvm'>
|
||||
- <name>guest</name>
|
||||
- <uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
|
||||
- <memory unit='KiB'>1048576</memory>
|
||||
- <currentMemory unit='KiB'>1048576</currentMemory>
|
||||
- <vcpu placement='static'>1</vcpu>
|
||||
- <os firmware='efi'>
|
||||
- <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
|
||||
- <firmware>
|
||||
- <feature enabled='yes' name='enrolled-keys'/>
|
||||
- <feature enabled='yes' name='secure-boot'/>
|
||||
- </firmware>
|
||||
- <loader readonly='yes' secure='yes' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd</loader>
|
||||
- <nvram template='/usr/share/edk2/ovmf/OVMF_VARS.secboot.fd'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
- <boot dev='hd'/>
|
||||
- </os>
|
||||
- <features>
|
||||
- <acpi/>
|
||||
- <smm state='on'/>
|
||||
- </features>
|
||||
- <cpu mode='custom' match='exact' check='none'>
|
||||
- <model fallback='forbid'>qemu64</model>
|
||||
- </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-x86_64</emulator>
|
||||
- <controller type='usb' index='0' model='none'/>
|
||||
- <controller type='sata' index='0'>
|
||||
- <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||
- </controller>
|
||||
- <controller type='pci' index='0' model='pcie-root'/>
|
||||
- <input type='mouse' bus='ps2'/>
|
||||
- <input type='keyboard' bus='ps2'/>
|
||||
- <audio id='1' type='none'/>
|
||||
- <watchdog model='itco' action='reset'/>
|
||||
- <memballoon model='none'/>
|
||||
- </devices>
|
||||
-</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/firmware-auto-efi-rw.x86_64-latest.xml b/tests/qemuxml2xmloutdata/firmware-auto-efi-rw.x86_64-latest.xml
|
||||
index 332d931ba1..c2d0c33a0b 100644
|
||||
--- a/tests/qemuxml2xmloutdata/firmware-auto-efi-rw.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/firmware-auto-efi-rw.x86_64-latest.xml
|
||||
@@ -6,17 +6,11 @@
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os firmware='efi'>
|
||||
<type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
|
||||
- <firmware>
|
||||
- <feature enabled='yes' name='enrolled-keys'/>
|
||||
- <feature enabled='yes' name='secure-boot'/>
|
||||
- </firmware>
|
||||
- <loader readonly='yes' secure='yes' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd</loader>
|
||||
- <nvram template='/usr/share/edk2/ovmf/OVMF_VARS.secboot.fd'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
+ <loader readonly='no'/>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<features>
|
||||
<acpi/>
|
||||
- <smm state='on'/>
|
||||
</features>
|
||||
<cpu mode='custom' match='exact' check='none'>
|
||||
<model fallback='forbid'>qemu64</model>
|
||||
diff --git a/tests/qemuxml2xmloutdata/firmware-manual-efi-rw-legacy-paths.x86_64-latest.xml b/tests/qemuxml2xmloutdata/firmware-manual-efi-rw-legacy-paths.x86_64-latest.xml
|
||||
index cfd7a6824f..c5baedc42c 100644
|
||||
--- a/tests/qemuxml2xmloutdata/firmware-manual-efi-rw-legacy-paths.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/firmware-manual-efi-rw-legacy-paths.x86_64-latest.xml
|
||||
@@ -6,8 +6,7 @@
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
|
||||
- <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader>
|
||||
- <nvram template='/usr/share/OVMF/OVMF_VARS.fd'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
+ <loader readonly='no' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<features>
|
||||
diff --git a/tests/qemuxml2xmloutdata/firmware-manual-efi-rw-modern-paths.x86_64-latest.xml b/tests/qemuxml2xmloutdata/firmware-manual-efi-rw-modern-paths.x86_64-latest.xml
|
||||
index 468ca022ef..0d755a4306 100644
|
||||
--- a/tests/qemuxml2xmloutdata/firmware-manual-efi-rw-modern-paths.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/firmware-manual-efi-rw-modern-paths.x86_64-latest.xml
|
||||
@@ -4,14 +4,9 @@
|
||||
<memory unit='KiB'>1048576</memory>
|
||||
<currentMemory unit='KiB'>1048576</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
- <os firmware='efi'>
|
||||
+ <os>
|
||||
<type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
|
||||
- <firmware>
|
||||
- <feature enabled='no' name='enrolled-keys'/>
|
||||
- <feature enabled='no' name='secure-boot'/>
|
||||
- </firmware>
|
||||
- <loader readonly='yes' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.fd</loader>
|
||||
- <nvram template='/usr/share/edk2/ovmf/OVMF_VARS.fd'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
+ <loader readonly='no' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.fd</loader>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<features>
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index d3d4e4e585..3f2ef10df7 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -901,7 +901,6 @@ mymain(void)
|
||||
DO_TEST_CAPS_LATEST_ABI_UPDATE("firmware-auto-efi-abi-update");
|
||||
DO_TEST_CAPS_LATEST("firmware-auto-efi-stateless");
|
||||
DO_TEST_CAPS_LATEST("firmware-auto-efi-rw");
|
||||
- DO_TEST_CAPS_LATEST_ABI_UPDATE("firmware-auto-efi-rw-abi-update");
|
||||
DO_TEST_CAPS_LATEST("firmware-auto-efi-loader-secure");
|
||||
DO_TEST_CAPS_LATEST_ABI_UPDATE("firmware-auto-efi-loader-secure-abi-update");
|
||||
DO_TEST_CAPS_LATEST("firmware-auto-efi-loader-insecure");
|
||||
--
|
||||
2.42.0
|
@ -0,0 +1,46 @@
|
||||
From f57a07068f7cc7ccdbf9814f9c69cbef1d2c9d6c Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <f57a07068f7cc7ccdbf9814f9c69cbef1d2c9d6c.1692951632.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 26 May 2023 17:47:42 +0200
|
||||
Subject: [PATCH] qemu: Fix lookup against stateless/combined pflash
|
||||
|
||||
Just like the more common split builds, these are of type
|
||||
QEMU_FIRMWARE_DEVICE_FLASH; however, they have no associated
|
||||
NVRAM template, so we can't access the corresponding structure
|
||||
member unconditionally or we'll trigger a crash.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit ac76386edad3be2bbd6202a30063b9205011f5c5)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_firmware.c | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
|
||||
index 5f030ebce4..b1d342563b 100644
|
||||
--- a/src/qemu/qemu_firmware.c
|
||||
+++ b/src/qemu/qemu_firmware.c
|
||||
@@ -971,9 +971,12 @@ qemuFirmwareMatchesPaths(const qemuFirmware *fw,
|
||||
if (loader && loader->path &&
|
||||
STRNEQ(loader->path, flash->executable.filename))
|
||||
return false;
|
||||
- if (loader && loader->nvramTemplate &&
|
||||
- STRNEQ(loader->nvramTemplate, flash->nvram_template.filename))
|
||||
- return false;
|
||||
+ if (loader && loader->nvramTemplate) {
|
||||
+ if (flash->mode != QEMU_FIRMWARE_FLASH_MODE_SPLIT)
|
||||
+ return false;
|
||||
+ if (STRNEQ(loader->nvramTemplate, flash->nvram_template.filename))
|
||||
+ return false;
|
||||
+ }
|
||||
break;
|
||||
case QEMU_FIRMWARE_DEVICE_MEMORY:
|
||||
if (loader && loader->path &&
|
||||
--
|
||||
2.42.0
|
@ -1,139 +0,0 @@
|
||||
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
|
@ -1,111 +0,0 @@
|
||||
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);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,48 @@
|
||||
From 1fefaa42f98530ed449ea9aa4863c4c1bc5327b5 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <1fefaa42f98530ed449ea9aa4863c4c1bc5327b5.1692951632.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Wed, 2 Aug 2023 17:18:32 +0200
|
||||
Subject: [PATCH] qemu: Fix return value for qemuFirmwareFillDomainLegacy()
|
||||
|
||||
The documentation states that, just like the Modern() variant,
|
||||
this function should return 1 if a match wasn't found. It
|
||||
currently doesn't do that, and returns 0 instead.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit d917883b30f1d33f1df78394152e67b402b9c72e)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_firmware.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
|
||||
index cf9a45dc39..5f030ebce4 100644
|
||||
--- a/src/qemu/qemu_firmware.c
|
||||
+++ b/src/qemu/qemu_firmware.c
|
||||
@@ -1575,17 +1575,17 @@ qemuFirmwareFillDomainLegacy(virQEMUDriver *driver,
|
||||
size_t i;
|
||||
|
||||
if (!loader)
|
||||
- return 0;
|
||||
+ return 1;
|
||||
|
||||
if (loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH) {
|
||||
VIR_DEBUG("Ignoring legacy entries for '%s' loader",
|
||||
virDomainLoaderTypeToString(loader->type));
|
||||
- return 0;
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
if (loader->stateless == VIR_TRISTATE_BOOL_YES) {
|
||||
VIR_DEBUG("Ignoring legacy entries for stateless loader");
|
||||
- return 0;
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
if (loader->format != VIR_STORAGE_FILE_RAW) {
|
||||
--
|
||||
2.42.0
|
321
SOURCES/libvirt-qemu-Generate-NVRAM-path-in-more-cases.patch
Normal file
321
SOURCES/libvirt-qemu-Generate-NVRAM-path-in-more-cases.patch
Normal file
@ -0,0 +1,321 @@
|
||||
From e71463f711cef030989717f401d0399ec6870705 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <e71463f711cef030989717f401d0399ec6870705.1692951632.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 26 May 2023 14:40:02 +0200
|
||||
Subject: [PATCH] qemu: Generate NVRAM path in more cases
|
||||
|
||||
Right now, we only generate it after finding a matching entry
|
||||
either among firmware descriptors or in the legacy firmware
|
||||
list.
|
||||
|
||||
Even if the domain is configured to use a custom firmware build
|
||||
that we know nothing about, however, we should still automatically
|
||||
generate the NVRAM path instead of requiring the user to provide
|
||||
it manually.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit ccbb987707e282af8d7f8c0db47e70fdebab959f)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_firmware.c | 52 +++++++++++--------
|
||||
...loader-path-nonstandard.x86_64-latest.args | 37 +++++++++++++
|
||||
...-loader-path-nonstandard.x86_64-latest.err | 1 -
|
||||
...am-template-nonstandard.x86_64-latest.args | 37 +++++++++++++
|
||||
...ram-template-nonstandard.x86_64-latest.err | 1 -
|
||||
tests/qemuxml2argvtest.c | 4 +-
|
||||
...-loader-path-nonstandard.x86_64-latest.xml | 2 +-
|
||||
...ram-template-nonstandard.x86_64-latest.xml | 2 +-
|
||||
8 files changed, 109 insertions(+), 27 deletions(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.args
|
||||
delete mode 100644 tests/qemuxml2argvdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.err
|
||||
create mode 100644 tests/qemuxml2argvdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.args
|
||||
delete mode 100644 tests/qemuxml2argvdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.err
|
||||
|
||||
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
|
||||
index a9437b5b95..2c9a03e6cf 100644
|
||||
--- a/src/qemu/qemu_firmware.c
|
||||
+++ b/src/qemu/qemu_firmware.c
|
||||
@@ -1053,7 +1053,7 @@ qemuFirmwareOSInterfaceTypeFromOsDefLoaderType(virDomainLoader type)
|
||||
/**
|
||||
* qemuFirmwareEnsureNVRAM:
|
||||
* @def: domain definition
|
||||
- * @cfg: QEMU driver configuration
|
||||
+ * @driver: QEMU driver
|
||||
*
|
||||
* Make sure that a source for the NVRAM file exists, possibly by
|
||||
* creating it. This might involve automatically generating the
|
||||
@@ -1061,15 +1061,24 @@ qemuFirmwareOSInterfaceTypeFromOsDefLoaderType(virDomainLoader type)
|
||||
*/
|
||||
static void
|
||||
qemuFirmwareEnsureNVRAM(virDomainDef *def,
|
||||
- const virQEMUDriverConfig *cfg,
|
||||
- virStorageFileFormat format)
|
||||
+ virQEMUDriver *driver)
|
||||
{
|
||||
+ g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||
virDomainLoaderDef *loader = def->os.loader;
|
||||
const char *ext = NULL;
|
||||
|
||||
if (!loader)
|
||||
return;
|
||||
|
||||
+ if (loader->type != VIR_DOMAIN_LOADER_TYPE_PFLASH)
|
||||
+ return;
|
||||
+
|
||||
+ if (loader->readonly != VIR_TRISTATE_BOOL_YES)
|
||||
+ return;
|
||||
+
|
||||
+ if (loader->stateless == VIR_TRISTATE_BOOL_YES)
|
||||
+ return;
|
||||
+
|
||||
/* If the source already exists and is fully specified, including
|
||||
* the path, leave it alone */
|
||||
if (loader->nvram && loader->nvram->path)
|
||||
@@ -1080,11 +1089,11 @@ qemuFirmwareEnsureNVRAM(virDomainDef *def,
|
||||
|
||||
loader->nvram = virStorageSourceNew();
|
||||
loader->nvram->type = VIR_STORAGE_TYPE_FILE;
|
||||
- loader->nvram->format = format;
|
||||
+ loader->nvram->format = loader->format;
|
||||
|
||||
- if (format == VIR_STORAGE_FILE_RAW)
|
||||
+ if (loader->nvram->format == VIR_STORAGE_FILE_RAW)
|
||||
ext = ".fd";
|
||||
- if (format == VIR_STORAGE_FILE_QCOW2)
|
||||
+ if (loader->nvram->format == VIR_STORAGE_FILE_QCOW2)
|
||||
ext = ".qcow2";
|
||||
|
||||
loader->nvram->path = g_strdup_printf("%s/%s_VARS%s",
|
||||
@@ -1347,8 +1356,7 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
|
||||
|
||||
|
||||
static int
|
||||
-qemuFirmwareEnableFeaturesModern(virQEMUDriverConfig *cfg,
|
||||
- virDomainDef *def,
|
||||
+qemuFirmwareEnableFeaturesModern(virDomainDef *def,
|
||||
const qemuFirmware *fw)
|
||||
{
|
||||
const qemuFirmwareMappingFlash *flash = &fw->mapping.data.flash;
|
||||
@@ -1377,16 +1385,15 @@ qemuFirmwareEnableFeaturesModern(virQEMUDriverConfig *cfg,
|
||||
loader->path = g_strdup(flash->executable.filename);
|
||||
|
||||
if (flash->mode == QEMU_FIRMWARE_FLASH_MODE_SPLIT) {
|
||||
- if ((format = virStorageFileFormatTypeFromString(flash->nvram_template.format)) < 0)
|
||||
- return -1;
|
||||
-
|
||||
- qemuFirmwareEnsureNVRAM(def, cfg, format);
|
||||
-
|
||||
- /* If the NVRAM is not a local path then we can't create or
|
||||
- * reset it, so in that case filling in the nvramTemplate
|
||||
- * field would be misleading */
|
||||
+ /* Only fill in nvramTemplate if the NVRAM location is already
|
||||
+ * known to be a local path or hasn't been provided, in which
|
||||
+ * case a local path will be generated by libvirt later.
|
||||
+ *
|
||||
+ * We can't create or reset non-local NVRAM files, so filling
|
||||
+ * in nvramTemplate for those would be misleading */
|
||||
VIR_FREE(loader->nvramTemplate);
|
||||
- if (loader->nvram && virStorageSourceIsLocalStorage(loader->nvram)) {
|
||||
+ if (!loader->nvram ||
|
||||
+ (loader->nvram && virStorageSourceIsLocalStorage(loader->nvram))) {
|
||||
loader->nvramTemplate = g_strdup(flash->nvram_template.filename);
|
||||
}
|
||||
}
|
||||
@@ -1608,6 +1615,7 @@ qemuFirmwareFillDomainLegacy(virQEMUDriver *driver,
|
||||
|
||||
loader->type = VIR_DOMAIN_LOADER_TYPE_PFLASH;
|
||||
loader->readonly = VIR_TRISTATE_BOOL_YES;
|
||||
+ loader->format = VIR_STORAGE_FILE_RAW;
|
||||
|
||||
/* Only use the default template path if one hasn't been
|
||||
* provided by the user.
|
||||
@@ -1634,8 +1642,6 @@ qemuFirmwareFillDomainLegacy(virQEMUDriver *driver,
|
||||
if (!loader->nvramTemplate)
|
||||
loader->nvramTemplate = g_strdup(cfg->firmwares[i]->nvram);
|
||||
|
||||
- qemuFirmwareEnsureNVRAM(def, cfg, VIR_STORAGE_FILE_RAW);
|
||||
-
|
||||
VIR_DEBUG("decided on firmware '%s' template '%s'",
|
||||
loader->path, NULLSTR(loader->nvramTemplate));
|
||||
|
||||
@@ -1664,7 +1670,6 @@ static int
|
||||
qemuFirmwareFillDomainModern(virQEMUDriver *driver,
|
||||
virDomainDef *def)
|
||||
{
|
||||
- g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||
g_auto(GStrv) paths = NULL;
|
||||
qemuFirmware **firmwares = NULL;
|
||||
ssize_t nfirmwares = 0;
|
||||
@@ -1695,7 +1700,7 @@ qemuFirmwareFillDomainModern(virQEMUDriver *driver,
|
||||
* likely that admin/FW manufacturer messed up. */
|
||||
qemuFirmwareSanityCheck(theone, paths[i]);
|
||||
|
||||
- if (qemuFirmwareEnableFeaturesModern(cfg, def, theone) < 0)
|
||||
+ if (qemuFirmwareEnableFeaturesModern(def, theone) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
@@ -1802,6 +1807,11 @@ qemuFirmwareFillDomain(virQEMUDriver *driver,
|
||||
}
|
||||
}
|
||||
|
||||
+ /* Always ensure that the NVRAM path is present, even if we
|
||||
+ * haven't found a match: the configuration might simply be
|
||||
+ * referring to a custom firmware build */
|
||||
+ qemuFirmwareEnsureNVRAM(def, driver);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.args b/tests/qemuxml2argvdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.args
|
||||
new file mode 100644
|
||||
index 0000000000..4e989344b3
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.args
|
||||
@@ -0,0 +1,37 @@
|
||||
+LC_ALL=C \
|
||||
+PATH=/bin \
|
||||
+HOME=/var/lib/libvirt/qemu/domain--1-guest \
|
||||
+USER=test \
|
||||
+LOGNAME=test \
|
||||
+XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
|
||||
+XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
|
||||
+XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||
+/usr/bin/qemu-system-x86_64 \
|
||||
+-name guest=guest,debug-threads=on \
|
||||
+-S \
|
||||
+-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||
+-blockdev '{"driver":"file","filename":"/path/to/OVMF_CODE.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
+-blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
+-blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
+-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
|
||||
+-machine pc-q35-4.0,usb=off,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format,acpi=on \
|
||||
+-accel tcg \
|
||||
+-cpu qemu64 \
|
||||
+-m size=1048576k \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \
|
||||
+-overcommit mem-lock=off \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
|
||||
+-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"}' \
|
||||
+-global ICH9-LPC.noreboot=off \
|
||||
+-watchdog-action reset \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.err b/tests/qemuxml2argvdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.err
|
||||
deleted file mode 100644
|
||||
index 6a1618a1aa..0000000000
|
||||
--- a/tests/qemuxml2argvdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.err
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-internal error: argument key 'filename' must not have null value
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.args b/tests/qemuxml2argvdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.args
|
||||
new file mode 100644
|
||||
index 0000000000..1dc1993285
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.args
|
||||
@@ -0,0 +1,37 @@
|
||||
+LC_ALL=C \
|
||||
+PATH=/bin \
|
||||
+HOME=/var/lib/libvirt/qemu/domain--1-guest \
|
||||
+USER=test \
|
||||
+LOGNAME=test \
|
||||
+XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
|
||||
+XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
|
||||
+XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||
+/usr/bin/qemu-system-x86_64 \
|
||||
+-name guest=guest,debug-threads=on \
|
||||
+-S \
|
||||
+-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||
+-blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
+-blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
+-blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
+-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
|
||||
+-machine pc-q35-4.0,usb=off,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format,acpi=on \
|
||||
+-accel kvm \
|
||||
+-cpu qemu64 \
|
||||
+-m size=1048576k \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \
|
||||
+-overcommit mem-lock=off \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
|
||||
+-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"}' \
|
||||
+-global ICH9-LPC.noreboot=off \
|
||||
+-watchdog-action reset \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.err b/tests/qemuxml2argvdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.err
|
||||
deleted file mode 100644
|
||||
index 6a1618a1aa..0000000000
|
||||
--- a/tests/qemuxml2argvdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.err
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-internal error: argument key 'filename' must not have null value
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index 95842140f3..b2d9e00350 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -1053,13 +1053,13 @@ mymain(void)
|
||||
DO_TEST_CAPS_LATEST("firmware-manual-efi-rw-implicit");
|
||||
DO_TEST_CAPS_LATEST("firmware-manual-efi-loader-secure");
|
||||
DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-manual-efi-loader-no-path");
|
||||
- DO_TEST_CAPS_LATEST_FAILURE("firmware-manual-efi-loader-path-nonstandard");
|
||||
+ DO_TEST_CAPS_LATEST("firmware-manual-efi-loader-path-nonstandard");
|
||||
DO_TEST_CAPS_LATEST("firmware-manual-efi-secboot");
|
||||
DO_TEST_CAPS_LATEST("firmware-manual-efi-no-enrolled-keys");
|
||||
DO_TEST_CAPS_LATEST("firmware-manual-efi-no-secboot");
|
||||
DO_TEST_CAPS_LATEST("firmware-manual-efi-stateless");
|
||||
DO_TEST_CAPS_LATEST("firmware-manual-efi-nvram-template");
|
||||
- DO_TEST_CAPS_LATEST_FAILURE("firmware-manual-efi-nvram-template-nonstandard");
|
||||
+ DO_TEST_CAPS_LATEST("firmware-manual-efi-nvram-template-nonstandard");
|
||||
DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-manual-efi-nvram-template-stateless");
|
||||
DO_TEST_CAPS_LATEST("firmware-manual-efi-nvram-network-iscsi");
|
||||
DO_TEST_CAPS_LATEST("firmware-manual-efi-nvram-network-nbd");
|
||||
diff --git a/tests/qemuxml2xmloutdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.xml b/tests/qemuxml2xmloutdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.xml
|
||||
index 5940bfd0ea..039c485706 100644
|
||||
--- a/tests/qemuxml2xmloutdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/firmware-manual-efi-loader-path-nonstandard.x86_64-latest.xml
|
||||
@@ -7,7 +7,7 @@
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
|
||||
<loader readonly='yes' type='pflash'>/path/to/OVMF_CODE.fd</loader>
|
||||
- <nvram template='/path/to/OVMF_VARS.fd'/>
|
||||
+ <nvram template='/path/to/OVMF_VARS.fd'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<features>
|
||||
diff --git a/tests/qemuxml2xmloutdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.xml b/tests/qemuxml2xmloutdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.xml
|
||||
index 816e285621..5433650516 100644
|
||||
--- a/tests/qemuxml2xmloutdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/firmware-manual-efi-nvram-template-nonstandard.x86_64-latest.xml
|
||||
@@ -7,7 +7,7 @@
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
|
||||
<loader readonly='yes' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.fd</loader>
|
||||
- <nvram template='/path/to/OVMF_VARS.fd'/>
|
||||
+ <nvram template='/path/to/OVMF_VARS.fd'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<features>
|
||||
--
|
||||
2.42.0
|
@ -0,0 +1,86 @@
|
||||
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
|
||||
|
@ -1,208 +0,0 @@
|
||||
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
|
195
SOURCES/libvirt-qemu-Make-IOThread-changing-more-robust.patch
Normal file
195
SOURCES/libvirt-qemu-Make-IOThread-changing-more-robust.patch
Normal file
@ -0,0 +1,195 @@
|
||||
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
|
||||
|
@ -1,117 +0,0 @@
|
||||
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
|
@ -0,0 +1,178 @@
|
||||
From 6dbe828752378e2215d4fd4fca65c94372ad0cf2 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <6dbe828752378e2215d4fd4fca65c94372ad0cf2.1692951632.git.jdenemar@redhat.com>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Tue, 30 May 2023 18:24:40 +0200
|
||||
Subject: [PATCH] qemu: Match NVRAM template extension for new domains
|
||||
|
||||
Keep things consistent by using the same file extension for the
|
||||
generated NVRAM path as the NVRAM template.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit b845e376a45a8e93f933a4a41068a9ce27adf755)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2196178
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_domain.c | 2 +-
|
||||
src/qemu/qemu_firmware.c | 32 ++++++++++++++++---
|
||||
src/qemu/qemu_firmware.h | 3 +-
|
||||
src/qemu/qemu_process.c | 2 +-
|
||||
...-loader-raw-abi-update.aarch64-latest.args | 2 +-
|
||||
...t-loader-raw-abi-update.aarch64-latest.xml | 2 +-
|
||||
6 files changed, 33 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index 94587638c3..3bb3e5fdfa 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -4505,7 +4505,7 @@ qemuDomainDefBootPostParse(virDomainDef *def,
|
||||
* to start the domain, qemuFirmwareFillDomain() will be run
|
||||
* again, fail in the same way, and at that point we'll have a
|
||||
* chance to inform the user of any issues */
|
||||
- if (qemuFirmwareFillDomain(driver, def) < 0) {
|
||||
+ if (qemuFirmwareFillDomain(driver, def, abiUpdate) < 0) {
|
||||
if (abiUpdate) {
|
||||
return -1;
|
||||
} else {
|
||||
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
|
||||
index 3538654913..ebaf32cf71 100644
|
||||
--- a/src/qemu/qemu_firmware.c
|
||||
+++ b/src/qemu/qemu_firmware.c
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "virlog.h"
|
||||
#include "viralloc.h"
|
||||
#include "virenum.h"
|
||||
+#include "virstring.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_QEMU
|
||||
|
||||
@@ -1054,6 +1055,7 @@ qemuFirmwareOSInterfaceTypeFromOsDefLoaderType(virDomainLoader type)
|
||||
* qemuFirmwareEnsureNVRAM:
|
||||
* @def: domain definition
|
||||
* @driver: QEMU driver
|
||||
+ * @abiUpdate: whether a new domain is being defined
|
||||
*
|
||||
* Make sure that a source for the NVRAM file exists, possibly by
|
||||
* creating it. This might involve automatically generating the
|
||||
@@ -1061,7 +1063,8 @@ qemuFirmwareOSInterfaceTypeFromOsDefLoaderType(virDomainLoader type)
|
||||
*/
|
||||
static void
|
||||
qemuFirmwareEnsureNVRAM(virDomainDef *def,
|
||||
- virQEMUDriver *driver)
|
||||
+ virQEMUDriver *driver,
|
||||
+ bool abiUpdate)
|
||||
{
|
||||
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||
virDomainLoaderDef *loader = def->os.loader;
|
||||
@@ -1091,8 +1094,25 @@ qemuFirmwareEnsureNVRAM(virDomainDef *def,
|
||||
loader->nvram->type = VIR_STORAGE_TYPE_FILE;
|
||||
loader->nvram->format = loader->format;
|
||||
|
||||
- if (loader->nvram->format == VIR_STORAGE_FILE_RAW)
|
||||
- ext = ".fd";
|
||||
+ if (loader->nvram->format == VIR_STORAGE_FILE_RAW) {
|
||||
+ /* The extension used by raw edk2 builds has historically
|
||||
+ * been .fd, but more recent aarch64 builds have started
|
||||
+ * using the .raw extension instead.
|
||||
+ *
|
||||
+ * If we're defining a new domain, we should try to match the
|
||||
+ * extension for the file backing its NVRAM store with the
|
||||
+ * one used by the template to keep things nice and
|
||||
+ * consistent.
|
||||
+ *
|
||||
+ * If we're loading an existing domain, however, we need to
|
||||
+ * stick with the .fd extension to ensure compatibility */
|
||||
+ if (abiUpdate &&
|
||||
+ loader->nvramTemplate &&
|
||||
+ virStringHasSuffix(loader->nvramTemplate, ".raw"))
|
||||
+ ext = ".raw";
|
||||
+ else
|
||||
+ ext = ".fd";
|
||||
+ }
|
||||
if (loader->nvram->format == VIR_STORAGE_FILE_QCOW2)
|
||||
ext = ".qcow2";
|
||||
|
||||
@@ -1729,6 +1749,7 @@ qemuFirmwareFillDomainModern(virQEMUDriver *driver,
|
||||
* qemuFirmwareFillDomain:
|
||||
* @driver: QEMU driver
|
||||
* @def: domain definition
|
||||
+ * @abiUpdate: whether a new domain is being defined
|
||||
*
|
||||
* Perform firmware selection.
|
||||
*
|
||||
@@ -1752,7 +1773,8 @@ qemuFirmwareFillDomainModern(virQEMUDriver *driver,
|
||||
*/
|
||||
int
|
||||
qemuFirmwareFillDomain(virQEMUDriver *driver,
|
||||
- virDomainDef *def)
|
||||
+ virDomainDef *def,
|
||||
+ bool abiUpdate)
|
||||
{
|
||||
virDomainLoaderDef *loader = def->os.loader;
|
||||
virStorageSource *nvram = loader ? loader->nvram : NULL;
|
||||
@@ -1822,7 +1844,7 @@ qemuFirmwareFillDomain(virQEMUDriver *driver,
|
||||
/* Always ensure that the NVRAM path is present, even if we
|
||||
* haven't found a match: the configuration might simply be
|
||||
* referring to a custom firmware build */
|
||||
- qemuFirmwareEnsureNVRAM(def, driver);
|
||||
+ qemuFirmwareEnsureNVRAM(def, driver, abiUpdate);
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/src/qemu/qemu_firmware.h b/src/qemu/qemu_firmware.h
|
||||
index 1ce0920713..39572d979d 100644
|
||||
--- a/src/qemu/qemu_firmware.h
|
||||
+++ b/src/qemu/qemu_firmware.h
|
||||
@@ -44,7 +44,8 @@ qemuFirmwareFetchConfigs(char ***firmwares,
|
||||
|
||||
int
|
||||
qemuFirmwareFillDomain(virQEMUDriver *driver,
|
||||
- virDomainDef *def);
|
||||
+ virDomainDef *def,
|
||||
+ bool abiUpdate);
|
||||
|
||||
int
|
||||
qemuFirmwareGetSupported(const char *machine,
|
||||
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||
index db06991450..32fe46dae8 100644
|
||||
--- a/src/qemu/qemu_process.c
|
||||
+++ b/src/qemu/qemu_process.c
|
||||
@@ -6706,7 +6706,7 @@ qemuProcessPrepareDomain(virQEMUDriver *driver,
|
||||
return -1;
|
||||
|
||||
VIR_DEBUG("Prepare bios/uefi paths");
|
||||
- if (qemuFirmwareFillDomain(driver, vm->def) < 0)
|
||||
+ if (qemuFirmwareFillDomain(driver, vm->def, false) < 0)
|
||||
return -1;
|
||||
if (qemuDomainInitializePflashStorageSource(vm, cfg) < 0)
|
||||
return -1;
|
||||
diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-format-loader-raw-abi-update.aarch64-latest.args b/tests/qemuxml2argvdata/firmware-auto-efi-format-loader-raw-abi-update.aarch64-latest.args
|
||||
index eb5cd8d5fc..3e319a29bf 100644
|
||||
--- a/tests/qemuxml2argvdata/firmware-auto-efi-format-loader-raw-abi-update.aarch64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/firmware-auto-efi-format-loader-raw-abi-update.aarch64-latest.args
|
||||
@@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
||||
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
||||
-blockdev '{"driver":"file","filename":"/usr/share/edk2/aarch64/QEMU_EFI-silent-pflash.raw","node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver":"raw","file":"libvirt-pflash0-storage"}' \
|
||||
--blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
+-blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_VARS.raw","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
|
||||
-machine virt-4.0,usb=off,gic-version=2,dump-guest-core=off,memory-backend=mach-virt.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format \
|
||||
-accel tcg \
|
||||
diff --git a/tests/qemuxml2xmloutdata/firmware-auto-efi-format-loader-raw-abi-update.aarch64-latest.xml b/tests/qemuxml2xmloutdata/firmware-auto-efi-format-loader-raw-abi-update.aarch64-latest.xml
|
||||
index 38c680fabd..ee22b16831 100644
|
||||
--- a/tests/qemuxml2xmloutdata/firmware-auto-efi-format-loader-raw-abi-update.aarch64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/firmware-auto-efi-format-loader-raw-abi-update.aarch64-latest.xml
|
||||
@@ -11,7 +11,7 @@
|
||||
<feature enabled='no' name='secure-boot'/>
|
||||
</firmware>
|
||||
<loader readonly='yes' type='pflash'>/usr/share/edk2/aarch64/QEMU_EFI-silent-pflash.raw</loader>
|
||||
- <nvram template='/usr/share/edk2/aarch64/vars-template-pflash.raw'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
||||
+ <nvram template='/usr/share/edk2/aarch64/vars-template-pflash.raw'>/var/lib/libvirt/qemu/nvram/guest_VARS.raw</nvram>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<features>
|
||||
--
|
||||
2.42.0
|
@ -0,0 +1,148 @@
|
||||
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
|
||||
|
@ -0,0 +1,38 @@
|
||||
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
|
||||
|
@ -0,0 +1,49 @@
|
||||
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
|
||||
|
@ -0,0 +1,85 @@
|
||||
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
|
||||
|
@ -0,0 +1,175 @@
|
||||
From 5af7ae809ed21678c265a9559c9f70b90dcd31d9 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <5af7ae809ed21678c265a9559c9f70b90dcd31d9.1689974710.git.jdenemar@redhat.com>
|
||||
From: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Date: Fri, 14 Jul 2023 16:38:14 +0200
|
||||
Subject: [PATCH] qemu: S390 does not provide physical address size
|
||||
|
||||
Commit be1b7d5b18 introduced parsing /proc/cpuinfo for "address size"
|
||||
which is not including on S390 and therefore reports an internal error.
|
||||
Lets remove the parsing on S390.
|
||||
|
||||
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com>
|
||||
Reviewed-by: Collin Walling <walling@linux.ibm.com>
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 8417c1394cd4deccee07235d4f7b2c54b774b08d)
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2224016
|
||||
|
||||
Signed-off-by: Boris Fiuczynski <bfiuczyn@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 2 +-
|
||||
src/qemu/qemu_capabilities.c | 2 +-
|
||||
src/util/virhostcpu.c | 12 ++++++++++--
|
||||
src/util/virhostcpu.h | 3 ++-
|
||||
tests/domaincapsdata/qemu_4.2.0.s390x.xml | 1 -
|
||||
tests/domaincapsdata/qemu_5.2.0.s390x.xml | 1 -
|
||||
tests/domaincapsdata/qemu_6.0.0.s390x.xml | 1 -
|
||||
tests/domaincapsdata/qemu_8.1.0.s390x.xml | 1 -
|
||||
tests/domaincapsmock.c | 8 ++++++--
|
||||
9 files changed, 20 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 8d371d5501..3c0163c4d1 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2795,7 +2795,7 @@ virCPUx86GetHost(virCPUDef *cpu,
|
||||
VIR_DEBUG("Host CPU does not support invariant TSC");
|
||||
}
|
||||
|
||||
- if (virHostCPUGetPhysAddrSize(&addrsz) == 0) {
|
||||
+ if (virHostCPUGetPhysAddrSize(cpuData->arch, &addrsz) == 0) {
|
||||
virCPUMaxPhysAddrDef *addr = g_new0(virCPUMaxPhysAddrDef, 1);
|
||||
|
||||
addr->bits = addrsz;
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index 338608f0a2..85ea879f0b 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -3911,7 +3911,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCaps *qemuCaps,
|
||||
}
|
||||
|
||||
if (virQEMUCapsTypeIsAccelerated(type))
|
||||
- virHostCPUGetPhysAddrSize(&physAddrSize);
|
||||
+ virHostCPUGetPhysAddrSize(hostArch, &physAddrSize);
|
||||
|
||||
virQEMUCapsSetHostModel(qemuCaps, type, physAddrSize, cpu, migCPU, fullCPU);
|
||||
|
||||
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
|
||||
index 19195a1470..a15731e9ea 100644
|
||||
--- a/src/util/virhostcpu.c
|
||||
+++ b/src/util/virhostcpu.c
|
||||
@@ -1646,10 +1646,17 @@ virHostCPUGetSignature(char **signature)
|
||||
}
|
||||
|
||||
int
|
||||
-virHostCPUGetPhysAddrSize(unsigned int *size)
|
||||
+virHostCPUGetPhysAddrSize(const virArch hostArch,
|
||||
+ unsigned int *size)
|
||||
{
|
||||
g_autoptr(FILE) cpuinfo = NULL;
|
||||
|
||||
+ if (ARCH_IS_S390(hostArch)) {
|
||||
+ /* Ensure size is set to 0 as physical address size is unknown */
|
||||
+ *size = 0;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
if (!(cpuinfo = fopen(CPUINFO_PATH, "r"))) {
|
||||
virReportSystemError(errno, _("Failed to open cpuinfo file '%1$s'"),
|
||||
CPUINFO_PATH);
|
||||
@@ -1669,7 +1676,8 @@ virHostCPUGetSignature(char **signature)
|
||||
}
|
||||
|
||||
int
|
||||
-virHostCPUGetPhysAddrSize(unsigned int *size G_GNUC_UNUSED)
|
||||
+virHostCPUGetPhysAddrSize(const virArch hostArch G_GNUC_UNUSED,
|
||||
+ unsigned int *size G_GNUC_UNUSED)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
diff --git a/src/util/virhostcpu.h b/src/util/virhostcpu.h
|
||||
index 5232fee36d..5f0d43e069 100644
|
||||
--- a/src/util/virhostcpu.h
|
||||
+++ b/src/util/virhostcpu.h
|
||||
@@ -87,7 +87,8 @@ virHostCPUTscInfo *virHostCPUGetTscInfo(void);
|
||||
|
||||
int virHostCPUGetSignature(char **signature);
|
||||
|
||||
-int virHostCPUGetPhysAddrSize(unsigned int *size);
|
||||
+int virHostCPUGetPhysAddrSize(const virArch hostArch,
|
||||
+ unsigned int *size);
|
||||
|
||||
int virHostCPUGetHaltPollTime(pid_t pid,
|
||||
unsigned long long *haltPollSuccess,
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0.s390x.xml b/tests/domaincapsdata/qemu_4.2.0.s390x.xml
|
||||
index da271825f9..2566f42997 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0.s390x.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0.s390x.xml
|
||||
@@ -38,7 +38,6 @@
|
||||
</mode>
|
||||
<mode name='host-model' supported='yes'>
|
||||
<model fallback='forbid'>gen15a-base</model>
|
||||
- <maxphysaddr mode='passthrough' limit='64'/>
|
||||
<feature policy='require' name='aen'/>
|
||||
<feature policy='require' name='cmmnt'/>
|
||||
<feature policy='require' name='vxpdeh'/>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.2.0.s390x.xml b/tests/domaincapsdata/qemu_5.2.0.s390x.xml
|
||||
index 99faaad866..12f38d3638 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.2.0.s390x.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.2.0.s390x.xml
|
||||
@@ -38,7 +38,6 @@
|
||||
</mode>
|
||||
<mode name='host-model' supported='yes'>
|
||||
<model fallback='forbid'>gen15a-base</model>
|
||||
- <maxphysaddr mode='passthrough' limit='64'/>
|
||||
<feature policy='require' name='aen'/>
|
||||
<feature policy='require' name='cmmnt'/>
|
||||
<feature policy='require' name='vxpdeh'/>
|
||||
diff --git a/tests/domaincapsdata/qemu_6.0.0.s390x.xml b/tests/domaincapsdata/qemu_6.0.0.s390x.xml
|
||||
index df3708f801..703f729ae2 100644
|
||||
--- a/tests/domaincapsdata/qemu_6.0.0.s390x.xml
|
||||
+++ b/tests/domaincapsdata/qemu_6.0.0.s390x.xml
|
||||
@@ -38,7 +38,6 @@
|
||||
</mode>
|
||||
<mode name='host-model' supported='yes'>
|
||||
<model fallback='forbid'>gen15a-base</model>
|
||||
- <maxphysaddr mode='passthrough' limit='64'/>
|
||||
<feature policy='require' name='aen'/>
|
||||
<feature policy='require' name='cmmnt'/>
|
||||
<feature policy='require' name='vxpdeh'/>
|
||||
diff --git a/tests/domaincapsdata/qemu_8.1.0.s390x.xml b/tests/domaincapsdata/qemu_8.1.0.s390x.xml
|
||||
index d70b639503..3562e96965 100644
|
||||
--- a/tests/domaincapsdata/qemu_8.1.0.s390x.xml
|
||||
+++ b/tests/domaincapsdata/qemu_8.1.0.s390x.xml
|
||||
@@ -38,7 +38,6 @@
|
||||
</mode>
|
||||
<mode name='host-model' supported='yes'>
|
||||
<model fallback='forbid'>gen16a-base</model>
|
||||
- <maxphysaddr mode='passthrough' limit='64'/>
|
||||
<feature policy='require' name='nnpa'/>
|
||||
<feature policy='require' name='aen'/>
|
||||
<feature policy='require' name='cmmnt'/>
|
||||
diff --git a/tests/domaincapsmock.c b/tests/domaincapsmock.c
|
||||
index cecb333602..6ae0c4ad45 100644
|
||||
--- a/tests/domaincapsmock.c
|
||||
+++ b/tests/domaincapsmock.c
|
||||
@@ -37,9 +37,13 @@ virHostCPUGetMicrocodeVersion(virArch hostArch G_GNUC_UNUSED)
|
||||
}
|
||||
|
||||
int
|
||||
-virHostCPUGetPhysAddrSize(unsigned int *size)
|
||||
+virHostCPUGetPhysAddrSize(const virArch hostArch,
|
||||
+ unsigned int *size)
|
||||
{
|
||||
- *size = 64;
|
||||
+ if (ARCH_IS_S390(hostArch))
|
||||
+ *size = 0;
|
||||
+ else
|
||||
+ *size = 64;
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.41.0
|
@ -1,646 +0,0 @@
|
||||
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
|
@ -0,0 +1,97 @@
|
||||
From 1c1274ab6be81184ca2193a86735e2edb27aee8d Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <1c1274ab6be81184ca2193a86735e2edb27aee8d.1689974709.git.jdenemar@redhat.com>
|
||||
From: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Date: Wed, 5 Jul 2023 08:20:25 +0200
|
||||
Subject: [PATCH] qemu: add run-with async-teardown capability
|
||||
|
||||
QEMU capability is looking in query-command-line-options response for
|
||||
...
|
||||
{
|
||||
"parameters": [
|
||||
{
|
||||
"name": "async-teardown",
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"option": "run-with"
|
||||
}
|
||||
...
|
||||
allow to use the QEMU option -run-with async-teardown=on|off
|
||||
|
||||
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 65c6513811d1cdc7e97319164d7528411520dd0c)
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2168499
|
||||
|
||||
Signed-off-by: Boris Fiuczynski <bfiuczyn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_capabilities.c | 4 ++++
|
||||
src/qemu/qemu_capabilities.h | 3 +++
|
||||
tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 1 +
|
||||
4 files changed, 9 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index 7dad7231ee..c9f4b17208 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -694,6 +694,9 @@ VIR_ENUM_IMPL(virQEMUCaps,
|
||||
"rbd-encryption-layering", /* QEMU_CAPS_RBD_ENCRYPTION_LAYERING */
|
||||
"rbd-encryption-luks-any", /* QEMU_CAPS_RBD_ENCRYPTION_LUKS_ANY */
|
||||
"qcow2-discard-no-unref", /* QEMU_CAPS_QCOW2_DISCARD_NO_UNREF */
|
||||
+
|
||||
+ /* 450 */
|
||||
+ "run-with.async-teardown", /* QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN */
|
||||
);
|
||||
|
||||
|
||||
@@ -3369,6 +3372,7 @@ static struct virQEMUCapsCommandLineProps virQEMUCapsCommandLine[] = {
|
||||
{ "spice", "gl", QEMU_CAPS_SPICE_GL },
|
||||
{ "spice", "rendernode", QEMU_CAPS_SPICE_RENDERNODE },
|
||||
{ "vnc", "power-control", QEMU_CAPS_VNC_POWER_CONTROL },
|
||||
+ { "run-with", "async-teardown", QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN },
|
||||
};
|
||||
|
||||
static int
|
||||
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||||
index ce545cb2cc..2460fa7fa0 100644
|
||||
--- a/src/qemu/qemu_capabilities.h
|
||||
+++ b/src/qemu/qemu_capabilities.h
|
||||
@@ -674,6 +674,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
|
||||
QEMU_CAPS_RBD_ENCRYPTION_LUKS_ANY, /* luks-any (LUKS and LUKS2) encryption format for Ceph RBD */
|
||||
QEMU_CAPS_QCOW2_DISCARD_NO_UNREF, /* qcow2 block driver allows discards without unrefing the sector */
|
||||
|
||||
+ /* 450 */
|
||||
+ QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN, /* asynchronous teardown -run-with async-teardown=on|off */
|
||||
+
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml
|
||||
index 23b5aece15..88c7ac89db 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml
|
||||
@@ -114,6 +114,7 @@
|
||||
<flag name='virtio-gpu.blob'/>
|
||||
<flag name='rbd-encryption-layering'/>
|
||||
<flag name='rbd-encryption-luks-any'/>
|
||||
+ <flag name='run-with.async-teardown'/>
|
||||
<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 f717c83fec..475496a8c8 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml
|
||||
@@ -206,6 +206,7 @@
|
||||
<flag name='rbd-encryption-layering'/>
|
||||
<flag name='rbd-encryption-luks-any'/>
|
||||
<flag name='qcow2-discard-no-unref'/>
|
||||
+ <flag name='run-with.async-teardown'/>
|
||||
<version>8000050</version>
|
||||
<microcodeVersion>43100245</microcodeVersion>
|
||||
<package>v8.0.0-1739-g5f9dd6a8ce</package>
|
||||
--
|
||||
2.41.0
|
836
SOURCES/libvirt-qemu-allow-use-of-async-teardown-in-domain.patch
Normal file
836
SOURCES/libvirt-qemu-allow-use-of-async-teardown-in-domain.patch
Normal file
@ -0,0 +1,836 @@
|
||||
From d216c360f9d0acda0726194aed81e145018a3951 Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <d216c360f9d0acda0726194aed81e145018a3951.1689974709.git.jdenemar@redhat.com>
|
||||
From: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Date: Wed, 5 Jul 2023 08:20:26 +0200
|
||||
Subject: [PATCH] qemu: allow use of async teardown in domain
|
||||
|
||||
Asynchronous teardown can be specified if the QEMU binary supports it by
|
||||
adding in the domain XML
|
||||
|
||||
<features>
|
||||
...
|
||||
<async-teardown enabled='yes|no'/>
|
||||
...
|
||||
</features>
|
||||
|
||||
By default this new feature is disabled.
|
||||
|
||||
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 3bf02acdc5446b2c4a3078f99d8f5232acff9043)
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2168499
|
||||
|
||||
Signed-off-by: Boris Fiuczynski <bfiuczyn@redhat.com>
|
||||
---
|
||||
docs/formatdomain.rst | 6 +++
|
||||
src/conf/domain_conf.c | 22 ++++++++++
|
||||
src/conf/domain_conf.h | 1 +
|
||||
src/conf/schemas/domaincommon.rng | 9 ++++
|
||||
src/qemu/qemu_command.c | 22 ++++++++++
|
||||
src/qemu/qemu_validate.c | 9 ++++
|
||||
.../async-teardown.x86_64-latest.args | 37 ++++++++++++++++
|
||||
tests/qemuxml2argvdata/async-teardown.xml | 31 +++++++++++++
|
||||
...0-async-teardown-disabled.s390x-6.0.0.args | 35 +++++++++++++++
|
||||
...-async-teardown-disabled.s390x-latest.args | 36 +++++++++++++++
|
||||
.../s390-async-teardown-disabled.xml | 24 ++++++++++
|
||||
...async-teardown-no-attrib.s390x-latest.args | 36 +++++++++++++++
|
||||
.../s390-async-teardown-no-attrib.xml | 24 ++++++++++
|
||||
.../s390-async-teardown.s390x-6.0.0.err | 1 +
|
||||
.../s390-async-teardown.s390x-latest.args | 36 +++++++++++++++
|
||||
.../qemuxml2argvdata/s390-async-teardown.xml | 24 ++++++++++
|
||||
tests/qemuxml2argvtest.c | 7 +++
|
||||
.../async-teardown.x86_64-latest.xml | 44 +++++++++++++++++++
|
||||
...90-async-teardown-disabled.s390x-6.0.0.xml | 36 +++++++++++++++
|
||||
...0-async-teardown-disabled.s390x-latest.xml | 36 +++++++++++++++
|
||||
...-async-teardown-no-attrib.s390x-latest.xml | 36 +++++++++++++++
|
||||
.../s390-async-teardown.s390x-latest.xml | 36 +++++++++++++++
|
||||
tests/qemuxml2xmltest.c | 6 +++
|
||||
23 files changed, 554 insertions(+)
|
||||
create mode 100644 tests/qemuxml2argvdata/async-teardown.x86_64-latest.args
|
||||
create mode 100644 tests/qemuxml2argvdata/async-teardown.xml
|
||||
create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-6.0.0.args
|
||||
create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-latest.args
|
||||
create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-disabled.xml
|
||||
create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-no-attrib.s390x-latest.args
|
||||
create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-no-attrib.xml
|
||||
create mode 100644 tests/qemuxml2argvdata/s390-async-teardown.s390x-6.0.0.err
|
||||
create mode 100644 tests/qemuxml2argvdata/s390-async-teardown.s390x-latest.args
|
||||
create mode 100644 tests/qemuxml2argvdata/s390-async-teardown.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/async-teardown.x86_64-latest.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-6.0.0.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-latest.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/s390-async-teardown-no-attrib.s390x-latest.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/s390-async-teardown.s390x-latest.xml
|
||||
|
||||
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
|
||||
index f29449f749..c61c8a3fec 100644
|
||||
--- a/docs/formatdomain.rst
|
||||
+++ b/docs/formatdomain.rst
|
||||
@@ -2000,6 +2000,7 @@ Hypervisors may allow certain CPU / machine features to be toggled on/off.
|
||||
<tcg>
|
||||
<tb-cache unit='MiB'>128</tb-cache>
|
||||
</tcg>
|
||||
+ <async-teardown enabled='yes'/>
|
||||
</features>
|
||||
...
|
||||
|
||||
@@ -2230,6 +2231,11 @@ are:
|
||||
tb-cache The size of translation block cache size an integer (a multiple of MiB) :since:`8.0.0`
|
||||
=========== ============================================== =================================================== ==============
|
||||
|
||||
+``async-teardown``
|
||||
+ Depending on the ``enabled`` attribute (values ``yes``, ``no``) enable or
|
||||
+ disable QEMU asynchronous teardown to improve memory reclaiming on a guest.
|
||||
+ :since:`Since 9.6.0` (QEMU only)
|
||||
+
|
||||
Time keeping
|
||||
------------
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 4121b6a054..5ac5c0b771 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -181,6 +181,7 @@ VIR_ENUM_IMPL(virDomainFeature,
|
||||
"sbbc",
|
||||
"ibs",
|
||||
"tcg",
|
||||
+ "async-teardown",
|
||||
);
|
||||
|
||||
VIR_ENUM_IMPL(virDomainCapabilitiesPolicy,
|
||||
@@ -16689,6 +16690,20 @@ virDomainFeaturesDefParse(virDomainDef *def,
|
||||
return -1;
|
||||
break;
|
||||
|
||||
+ case VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN: {
|
||||
+ virTristateBool enabled;
|
||||
+
|
||||
+ if (virXMLPropTristateBool(nodes[i], "enabled",
|
||||
+ VIR_XML_PROP_NONE, &enabled) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (enabled == VIR_TRISTATE_BOOL_ABSENT)
|
||||
+ enabled = VIR_TRISTATE_BOOL_YES;
|
||||
+
|
||||
+ def->features[val] = enabled;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
case VIR_DOMAIN_FEATURE_LAST:
|
||||
break;
|
||||
}
|
||||
@@ -20628,6 +20643,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,
|
||||
|
||||
case VIR_DOMAIN_FEATURE_MSRS:
|
||||
case VIR_DOMAIN_FEATURE_TCG:
|
||||
+ case VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN:
|
||||
case VIR_DOMAIN_FEATURE_LAST:
|
||||
break;
|
||||
}
|
||||
@@ -27340,6 +27356,12 @@ virDomainDefFormatFeatures(virBuffer *buf,
|
||||
virDomainFeatureTCGFormat(&childBuf, def);
|
||||
break;
|
||||
|
||||
+ case VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN:
|
||||
+ if (def->features[i] != VIR_TRISTATE_SWITCH_ABSENT)
|
||||
+ virBufferAsprintf(&childBuf, "<async-teardown enabled='%s'/>\n",
|
||||
+ virTristateBoolTypeToString(def->features[i]));
|
||||
+ break;
|
||||
+
|
||||
case VIR_DOMAIN_FEATURE_LAST:
|
||||
break;
|
||||
}
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index cddaa3824d..c857ba556f 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -2170,6 +2170,7 @@ typedef enum {
|
||||
VIR_DOMAIN_FEATURE_SBBC,
|
||||
VIR_DOMAIN_FEATURE_IBS,
|
||||
VIR_DOMAIN_FEATURE_TCG,
|
||||
+ VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN,
|
||||
|
||||
VIR_DOMAIN_FEATURE_LAST
|
||||
} virDomainFeature;
|
||||
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
|
||||
index fcf9e00600..c2f56b0490 100644
|
||||
--- a/src/conf/schemas/domaincommon.rng
|
||||
+++ b/src/conf/schemas/domaincommon.rng
|
||||
@@ -6660,6 +6660,15 @@
|
||||
<optional>
|
||||
<ref name="tcgfeatures"/>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <element name="async-teardown">
|
||||
+ <optional>
|
||||
+ <attribute name="enabled">
|
||||
+ <ref name="virYesNo"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</optional>
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index cde6ab4dde..ec5d8b52d4 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -10175,6 +10175,25 @@ qemuBuildCryptoCommandLine(virCommand *cmd,
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+qemuBuildAsyncTeardownCommandLine(virCommand *cmd,
|
||||
+ const virDomainDef *def,
|
||||
+ virQEMUCaps *qemuCaps)
|
||||
+{
|
||||
+ g_autofree char *async = NULL;
|
||||
+ virTristateBool enabled = def->features[VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN];
|
||||
+
|
||||
+ if (enabled != VIR_TRISTATE_BOOL_ABSENT &&
|
||||
+ virQEMUCapsGet(qemuCaps, QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN)) {
|
||||
+ async = g_strdup_printf("async-teardown=%s",
|
||||
+ virTristateSwitchTypeToString(enabled));
|
||||
+ virCommandAddArgList(cmd, "-run-with", async, NULL);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
typedef enum {
|
||||
QEMU_COMMAND_DEPRECATION_BEHAVIOR_NONE = 0,
|
||||
QEMU_COMMAND_DEPRECATION_BEHAVIOR_OMIT,
|
||||
@@ -10530,6 +10549,9 @@ qemuBuildCommandLine(virDomainObj *vm,
|
||||
if (qemuBuildCryptoCommandLine(cmd, def, qemuCaps) < 0)
|
||||
return NULL;
|
||||
|
||||
+ if (qemuBuildAsyncTeardownCommandLine(cmd, def, qemuCaps) < 0)
|
||||
+ return NULL;
|
||||
+
|
||||
if (cfg->logTimestamp)
|
||||
virCommandAddArgList(cmd, "-msg", "timestamp=on", NULL);
|
||||
|
||||
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
|
||||
index a53729d349..7e09e2c52f 100644
|
||||
--- a/src/qemu/qemu_validate.c
|
||||
+++ b/src/qemu/qemu_validate.c
|
||||
@@ -219,6 +219,15 @@ qemuValidateDomainDefFeatures(const virDomainDef *def,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN:
|
||||
+ if (def->features[i] == VIR_TRISTATE_BOOL_YES &&
|
||||
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("asynchronous teardown is not available with this QEMU binary"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
case VIR_DOMAIN_FEATURE_SMM:
|
||||
case VIR_DOMAIN_FEATURE_KVM:
|
||||
case VIR_DOMAIN_FEATURE_XEN:
|
||||
diff --git a/tests/qemuxml2argvdata/async-teardown.x86_64-latest.args b/tests/qemuxml2argvdata/async-teardown.x86_64-latest.args
|
||||
new file mode 100644
|
||||
index 0000000000..455382f1f0
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/async-teardown.x86_64-latest.args
|
||||
@@ -0,0 +1,37 @@
|
||||
+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-x86_64 \
|
||||
+-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 pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \
|
||||
+-accel tcg \
|
||||
+-cpu qemu64 \
|
||||
+-m size=219136k \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
||||
+-overcommit mem-lock=off \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-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 \
|
||||
+-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \
|
||||
+-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}' \
|
||||
+-audiodev '{"id":"audio1","driver":"none"}' \
|
||||
+-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-run-with async-teardown=on \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/async-teardown.xml b/tests/qemuxml2argvdata/async-teardown.xml
|
||||
new file mode 100644
|
||||
index 0000000000..70c1eccc55
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/async-teardown.xml
|
||||
@@ -0,0 +1,31 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219136</memory>
|
||||
+ <currentMemory unit='KiB'>219136</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <features>
|
||||
+ <async-teardown enabled='yes'/>
|
||||
+ </features>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0'/>
|
||||
+ <controller type='fdc' index='0'/>
|
||||
+ <controller type='ide' index='0'/>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <memballoon model='virtio'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-6.0.0.args b/tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-6.0.0.args
|
||||
new file mode 100644
|
||||
index 0000000000..57690530a2
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-6.0.0.args
|
||||
@@ -0,0 +1,35 @@
|
||||
+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-s390x \
|
||||
+-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 s390-ccw-virtio-6.0,usb=off,dump-guest-core=off,memory-backend=s390.ram \
|
||||
+-accel tcg \
|
||||
+-cpu qemu \
|
||||
+-m size=262144k \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":268435456}' \
|
||||
+-overcommit mem-lock=off \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid 9aa4b45c-b9dd-45ef-91fe-862b27b4231f \
|
||||
+-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 \
|
||||
+-device virtio-serial-ccw,id=virtio-serial0,devno=fe.0.0000 \
|
||||
+-chardev pty,id=charconsole0 \
|
||||
+-device virtconsole,chardev=charconsole0,id=console0 \
|
||||
+-audiodev '{"id":"audio1","driver":"none"}' \
|
||||
+-device virtio-balloon-ccw,id=balloon0,devno=fe.0.0001 \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-latest.args b/tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-latest.args
|
||||
new file mode 100644
|
||||
index 0000000000..96b18b83ce
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-latest.args
|
||||
@@ -0,0 +1,36 @@
|
||||
+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-s390x \
|
||||
+-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 s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \
|
||||
+-accel tcg \
|
||||
+-cpu qemu \
|
||||
+-m size=262144k \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":268435456}' \
|
||||
+-overcommit mem-lock=off \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid 9aa4b45c-b9dd-45ef-91fe-862b27b4231f \
|
||||
+-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 \
|
||||
+-device '{"driver":"virtio-serial-ccw","id":"virtio-serial0","devno":"fe.0.0000"}' \
|
||||
+-chardev pty,id=charconsole0 \
|
||||
+-device '{"driver":"virtconsole","chardev":"charconsole0","id":"console0"}' \
|
||||
+-audiodev '{"id":"audio1","driver":"none"}' \
|
||||
+-device '{"driver":"virtio-balloon-ccw","id":"balloon0","devno":"fe.0.0001"}' \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-run-with async-teardown=off \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/s390-async-teardown-disabled.xml b/tests/qemuxml2argvdata/s390-async-teardown-disabled.xml
|
||||
new file mode 100644
|
||||
index 0000000000..3939be0006
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/s390-async-teardown-disabled.xml
|
||||
@@ -0,0 +1,24 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid>
|
||||
+ <memory>262144</memory>
|
||||
+ <currentMemory>262144</currentMemory>
|
||||
+ <os>
|
||||
+ <type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <features>
|
||||
+ <async-teardown enabled='no'/>
|
||||
+ </features>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||
+ <controller type='virtio-serial' index='0'>
|
||||
+ </controller>
|
||||
+ <console type='pty'>
|
||||
+ <target type='virtio'/>
|
||||
+ </console>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvdata/s390-async-teardown-no-attrib.s390x-latest.args b/tests/qemuxml2argvdata/s390-async-teardown-no-attrib.s390x-latest.args
|
||||
new file mode 100644
|
||||
index 0000000000..cc7866499f
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/s390-async-teardown-no-attrib.s390x-latest.args
|
||||
@@ -0,0 +1,36 @@
|
||||
+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-s390x \
|
||||
+-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 s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \
|
||||
+-accel tcg \
|
||||
+-cpu qemu \
|
||||
+-m size=262144k \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":268435456}' \
|
||||
+-overcommit mem-lock=off \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid 9aa4b45c-b9dd-45ef-91fe-862b27b4231f \
|
||||
+-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 \
|
||||
+-device '{"driver":"virtio-serial-ccw","id":"virtio-serial0","devno":"fe.0.0000"}' \
|
||||
+-chardev pty,id=charconsole0 \
|
||||
+-device '{"driver":"virtconsole","chardev":"charconsole0","id":"console0"}' \
|
||||
+-audiodev '{"id":"audio1","driver":"none"}' \
|
||||
+-device '{"driver":"virtio-balloon-ccw","id":"balloon0","devno":"fe.0.0001"}' \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-run-with async-teardown=on \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/s390-async-teardown-no-attrib.xml b/tests/qemuxml2argvdata/s390-async-teardown-no-attrib.xml
|
||||
new file mode 100644
|
||||
index 0000000000..e069cd41ed
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/s390-async-teardown-no-attrib.xml
|
||||
@@ -0,0 +1,24 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid>
|
||||
+ <memory>262144</memory>
|
||||
+ <currentMemory>262144</currentMemory>
|
||||
+ <os>
|
||||
+ <type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <features>
|
||||
+ <async-teardown/>
|
||||
+ </features>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||
+ <controller type='virtio-serial' index='0'>
|
||||
+ </controller>
|
||||
+ <console type='pty'>
|
||||
+ <target type='virtio'/>
|
||||
+ </console>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvdata/s390-async-teardown.s390x-6.0.0.err b/tests/qemuxml2argvdata/s390-async-teardown.s390x-6.0.0.err
|
||||
new file mode 100644
|
||||
index 0000000000..aa9a4739cb
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/s390-async-teardown.s390x-6.0.0.err
|
||||
@@ -0,0 +1 @@
|
||||
+unsupported configuration: asynchronous teardown is not available with this QEMU binary
|
||||
diff --git a/tests/qemuxml2argvdata/s390-async-teardown.s390x-latest.args b/tests/qemuxml2argvdata/s390-async-teardown.s390x-latest.args
|
||||
new file mode 100644
|
||||
index 0000000000..cc7866499f
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/s390-async-teardown.s390x-latest.args
|
||||
@@ -0,0 +1,36 @@
|
||||
+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-s390x \
|
||||
+-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 s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \
|
||||
+-accel tcg \
|
||||
+-cpu qemu \
|
||||
+-m size=262144k \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":268435456}' \
|
||||
+-overcommit mem-lock=off \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid 9aa4b45c-b9dd-45ef-91fe-862b27b4231f \
|
||||
+-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 \
|
||||
+-device '{"driver":"virtio-serial-ccw","id":"virtio-serial0","devno":"fe.0.0000"}' \
|
||||
+-chardev pty,id=charconsole0 \
|
||||
+-device '{"driver":"virtconsole","chardev":"charconsole0","id":"console0"}' \
|
||||
+-audiodev '{"id":"audio1","driver":"none"}' \
|
||||
+-device '{"driver":"virtio-balloon-ccw","id":"balloon0","devno":"fe.0.0001"}' \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-run-with async-teardown=on \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/s390-async-teardown.xml b/tests/qemuxml2argvdata/s390-async-teardown.xml
|
||||
new file mode 100644
|
||||
index 0000000000..3291b1ada3
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/s390-async-teardown.xml
|
||||
@@ -0,0 +1,24 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid>
|
||||
+ <memory>262144</memory>
|
||||
+ <currentMemory>262144</currentMemory>
|
||||
+ <os>
|
||||
+ <type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <features>
|
||||
+ <async-teardown enabled='yes'/>
|
||||
+ </features>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||
+ <controller type='virtio-serial' index='0'>
|
||||
+ </controller>
|
||||
+ <console type='pty'>
|
||||
+ <target type='virtio'/>
|
||||
+ </console>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index c1bba779b3..9abaa72674 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -2701,6 +2701,13 @@ mymain(void)
|
||||
|
||||
DO_TEST_CAPS_LATEST("crypto-builtin");
|
||||
|
||||
+ DO_TEST_CAPS_LATEST("async-teardown");
|
||||
+ DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown", "s390x");
|
||||
+ DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown-no-attrib", "s390x");
|
||||
+ DO_TEST_CAPS_ARCH_VER_PARSE_ERROR("s390-async-teardown", "s390x", "6.0.0");
|
||||
+ DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown-disabled", "s390x");
|
||||
+ DO_TEST_CAPS_ARCH_VER("s390-async-teardown-disabled", "s390x", "6.0.0");
|
||||
+
|
||||
qemuTestDriverFree(&driver);
|
||||
virFileWrapperClearPrefixes();
|
||||
|
||||
diff --git a/tests/qemuxml2xmloutdata/async-teardown.x86_64-latest.xml b/tests/qemuxml2xmloutdata/async-teardown.x86_64-latest.xml
|
||||
new file mode 100644
|
||||
index 0000000000..e98308a9b1
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/async-teardown.x86_64-latest.xml
|
||||
@@ -0,0 +1,44 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219136</memory>
|
||||
+ <currentMemory unit='KiB'>219136</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <features>
|
||||
+ <async-teardown enabled='yes'/>
|
||||
+ </features>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>qemu64</model>
|
||||
+ </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-x86_64</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0' model='piix3-uhci'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='fdc' index='0'/>
|
||||
+ <controller type='ide' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <audio id='1' type='none'/>
|
||||
+ <memballoon model='virtio'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
+ </memballoon>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-6.0.0.xml b/tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-6.0.0.xml
|
||||
new file mode 100644
|
||||
index 0000000000..a53d4995f0
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-6.0.0.xml
|
||||
@@ -0,0 +1,36 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid>
|
||||
+ <memory unit='KiB'>262144</memory>
|
||||
+ <currentMemory unit='KiB'>262144</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='s390x' machine='s390-ccw-virtio-6.0'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <features>
|
||||
+ <async-teardown enabled='no'/>
|
||||
+ </features>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>qemu</model>
|
||||
+ </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-s390x</emulator>
|
||||
+ <controller type='virtio-serial' index='0'>
|
||||
+ <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <console type='pty'>
|
||||
+ <target type='virtio' port='0'/>
|
||||
+ </console>
|
||||
+ <audio id='1' type='none'/>
|
||||
+ <memballoon model='virtio'>
|
||||
+ <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0001'/>
|
||||
+ </memballoon>
|
||||
+ <panic model='s390'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-latest.xml b/tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-latest.xml
|
||||
new file mode 100644
|
||||
index 0000000000..06c890cbff
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-latest.xml
|
||||
@@ -0,0 +1,36 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid>
|
||||
+ <memory unit='KiB'>262144</memory>
|
||||
+ <currentMemory unit='KiB'>262144</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <features>
|
||||
+ <async-teardown enabled='no'/>
|
||||
+ </features>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>qemu</model>
|
||||
+ </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-s390x</emulator>
|
||||
+ <controller type='virtio-serial' index='0'>
|
||||
+ <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <console type='pty'>
|
||||
+ <target type='virtio' port='0'/>
|
||||
+ </console>
|
||||
+ <audio id='1' type='none'/>
|
||||
+ <memballoon model='virtio'>
|
||||
+ <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0001'/>
|
||||
+ </memballoon>
|
||||
+ <panic model='s390'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/s390-async-teardown-no-attrib.s390x-latest.xml b/tests/qemuxml2xmloutdata/s390-async-teardown-no-attrib.s390x-latest.xml
|
||||
new file mode 100644
|
||||
index 0000000000..510396a9a8
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/s390-async-teardown-no-attrib.s390x-latest.xml
|
||||
@@ -0,0 +1,36 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid>
|
||||
+ <memory unit='KiB'>262144</memory>
|
||||
+ <currentMemory unit='KiB'>262144</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <features>
|
||||
+ <async-teardown enabled='yes'/>
|
||||
+ </features>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>qemu</model>
|
||||
+ </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-s390x</emulator>
|
||||
+ <controller type='virtio-serial' index='0'>
|
||||
+ <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <console type='pty'>
|
||||
+ <target type='virtio' port='0'/>
|
||||
+ </console>
|
||||
+ <audio id='1' type='none'/>
|
||||
+ <memballoon model='virtio'>
|
||||
+ <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0001'/>
|
||||
+ </memballoon>
|
||||
+ <panic model='s390'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/s390-async-teardown.s390x-latest.xml b/tests/qemuxml2xmloutdata/s390-async-teardown.s390x-latest.xml
|
||||
new file mode 100644
|
||||
index 0000000000..510396a9a8
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/s390-async-teardown.s390x-latest.xml
|
||||
@@ -0,0 +1,36 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>9aa4b45c-b9dd-45ef-91fe-862b27b4231f</uuid>
|
||||
+ <memory unit='KiB'>262144</memory>
|
||||
+ <currentMemory unit='KiB'>262144</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <features>
|
||||
+ <async-teardown enabled='yes'/>
|
||||
+ </features>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>qemu</model>
|
||||
+ </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-s390x</emulator>
|
||||
+ <controller type='virtio-serial' index='0'>
|
||||
+ <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <console type='pty'>
|
||||
+ <target type='virtio' port='0'/>
|
||||
+ </console>
|
||||
+ <audio id='1' type='none'/>
|
||||
+ <memballoon model='virtio'>
|
||||
+ <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0001'/>
|
||||
+ </memballoon>
|
||||
+ <panic model='s390'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index 565cb3e1e1..b66274beb8 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -1241,6 +1241,12 @@ mymain(void)
|
||||
DO_TEST_CAPS_LATEST("cpu-phys-bits-limit");
|
||||
DO_TEST_CAPS_LATEST("cpu-phys-bits-emulate-bare");
|
||||
|
||||
+ DO_TEST_CAPS_LATEST("async-teardown");
|
||||
+ DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown", "s390x");
|
||||
+ DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown-no-attrib", "s390x");
|
||||
+ DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown-disabled", "s390x");
|
||||
+ DO_TEST_CAPS_ARCH_VER("s390-async-teardown-disabled", "s390x", "6.0.0");
|
||||
+
|
||||
cleanup:
|
||||
qemuTestDriverFree(&driver);
|
||||
virFileWrapperClearPrefixes();
|
||||
--
|
||||
2.41.0
|
@ -0,0 +1,61 @@
|
||||
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
|
||||
|
@ -0,0 +1,87 @@
|
||||
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
|
||||
|
@ -0,0 +1,206 @@
|
||||
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
|
||||
|
@ -1,80 +0,0 @@
|
||||
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;
|
||||
}
|
@ -1,100 +0,0 @@
|
||||
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
|
@ -0,0 +1,140 @@
|
||||
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
|
||||
|
@ -0,0 +1,80 @@
|
||||
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
|
||||
|
@ -0,0 +1,58 @@
|
||||
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
|
||||
|
@ -0,0 +1,62 @@
|
||||
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
|
||||
|
@ -0,0 +1,38 @@
|
||||
From 10e8a518a05922d5592d1405054aed3195aebf06 Mon Sep 17 00:00:00 2001
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Fri, 18 Aug 2023 16:13:16 -0400
|
||||
Subject: [PATCH] qemu: turn two multiline log messages into single line
|
||||
|
||||
Normally I wouldn't bother with a change like this, but I was touching
|
||||
the function anyway, and wanted to leave it looking nice and tidy.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 6 ++----
|
||||
1 file changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 5128b643642..5db42f07533 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -11418,8 +11418,7 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
*/
|
||||
if (STREQ_NULLABLE(driverName, "kvm")) {
|
||||
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
|
||||
- _("'legacy KVM' device assignment is no longer "
|
||||
- "supported on this system"));
|
||||
+ _("'legacy KVM' device assignment is no longer supported on this system"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -11430,8 +11429,7 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
|
||||
|
||||
if (!qemuHostdevHostSupportsPassthroughVFIO()) {
|
||||
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
|
||||
- _("VFIO device assignment is currently not "
|
||||
- "supported on this system"));
|
||||
+ _("VFIO device assignment is currently not supported on this system"));
|
||||
return -1;
|
||||
}
|
||||
|
@ -0,0 +1,58 @@
|
||||
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
|
||||
|
@ -0,0 +1,41 @@
|
||||
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
|
||||
|
@ -1,40 +0,0 @@
|
||||
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
|
@ -1,60 +0,0 @@
|
||||
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
|
@ -1,84 +0,0 @@
|
||||
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
|
@ -0,0 +1,57 @@
|
||||
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
|
||||
|
@ -1,94 +0,0 @@
|
||||
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
|
@ -1,62 +0,0 @@
|
||||
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
|
@ -1,67 +0,0 @@
|
||||
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
|
@ -0,0 +1,132 @@
|
||||
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
|
||||
|
@ -0,0 +1,229 @@
|
||||
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
|
||||
|
@ -0,0 +1,70 @@
|
||||
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
|
||||
|
@ -0,0 +1,51 @@
|
||||
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
|
||||
|
@ -0,0 +1,64 @@
|
||||
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
|
||||
|
@ -0,0 +1,62 @@
|
||||
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
|
||||
|
@ -0,0 +1,107 @@
|
||||
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
|
||||
|
@ -0,0 +1,63 @@
|
||||
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
|
||||
|
@ -0,0 +1,176 @@
|
||||
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
|
||||
|
@ -0,0 +1,80 @@
|
||||
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
|
||||
|
@ -0,0 +1,68 @@
|
||||
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
|
||||
|
@ -0,0 +1,45 @@
|
||||
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
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user