Compare commits
16 Commits
imports/c8
...
c8-stream-
Author | SHA1 | Date |
---|---|---|
eabdullin | ba8ac8bedf | |
eabdullin | a0765b7f70 | |
CentOS Sources | 7578af5c27 | |
CentOS Sources | af0cdb7647 | |
CentOS Sources | deba224310 | |
CentOS Sources | 82a9da7506 | |
CentOS Sources | eec91b4d3f | |
CentOS Sources | b9490e7bc0 | |
CentOS Sources | 24bf4e1110 | |
CentOS Sources | 5b77fef41c | |
CentOS Sources | 9612d948f4 | |
CentOS Sources | 8331a2073e | |
CentOS Sources | 6fb1a96509 | |
CentOS Sources | 465fa4c5ff | |
CentOS Sources | 02fadf30de | |
CentOS Sources | 6caad9cd0d |
|
@ -1 +1 @@
|
|||
SOURCES/libvirt-6.0.0.tar.xz
|
||||
SOURCES/libvirt-8.0.0.tar.xz
|
||||
|
|
|
@ -1 +1 @@
|
|||
9939a559e652d44b27e3404a26bcabe58988e4b4 SOURCES/libvirt-6.0.0.tar.xz
|
||||
e440412e9b45d7e24f0ef492d8edf5cf2cbd3f4c SOURCES/libvirt-8.0.0.tar.xz
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
From 9c2fd182a02d64004e30900c52e3fcdb550de0bd Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9c2fd182a02d64004e30900c52e3fcdb550de0bd@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 22 Jun 2022 16:35:50 +0200
|
||||
Subject: [PATCH] Add VIR_MIGRATE_ZEROCOPY flag
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The flag can be used to enable zero-copy mechanism for migrating memory
|
||||
pages.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 8744beecb36600e773c8a8c4823db2bf4b3e262d)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2089433
|
||||
|
||||
Conflicts:
|
||||
include/libvirt/libvirt-domain.h
|
||||
- post-copy recovery not backported
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
include/libvirt/libvirt-domain.h | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
|
||||
index 5f0a9b7572..792973ce2d 100644
|
||||
--- a/include/libvirt/libvirt-domain.h
|
||||
+++ b/include/libvirt/libvirt-domain.h
|
||||
@@ -860,6 +860,14 @@ typedef enum {
|
||||
*/
|
||||
VIR_MIGRATE_NON_SHARED_SYNCHRONOUS_WRITES = (1 << 18),
|
||||
|
||||
+ /* Use zero-copy mechanism for migrating memory pages. For QEMU/KVM this
|
||||
+ * means QEMU will be temporarily allowed to lock all guest pages in host's
|
||||
+ * memory, although only those that are queued for transfer will be locked
|
||||
+ * at the same time.
|
||||
+ *
|
||||
+ * Since: 8.5.0
|
||||
+ */
|
||||
+ VIR_MIGRATE_ZEROCOPY = (1 << 20),
|
||||
} virDomainMigrateFlags;
|
||||
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
From a04fcb5b463c90c47705ca0f28e40b73c00b6b72 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a04fcb5b463c90c47705ca0f28e40b73c00b6b72@dist-git>
|
||||
From f0d0a6a9701522eee013682eb0ef566ef7cdac61 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f0d0a6a9701522eee013682eb0ef566ef7cdac61@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Mon, 22 Feb 2016 12:51:51 +0100
|
||||
Subject: [PATCH] RHEL: Add rhel machine types to qemuDomainMachineNeedsFDC
|
||||
|
@ -13,24 +13,35 @@ https://bugzilla.redhat.com/show_bug.cgi?id=1227880
|
|||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_domain.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
src/qemu/qemu_domain.c | 15 +++++++++++++--
|
||||
1 file changed, 13 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index a6dde15bad..0edf316fff 100644
|
||||
index a8401bac30..40fe9985e6 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -12631,6 +12631,10 @@ qemuDomainMachineNeedsFDC(const char *machine,
|
||||
return false;
|
||||
}
|
||||
|
||||
+ if (STRPREFIX(p, "rhel7.0.0") ||
|
||||
+ STRPREFIX(p, "rhel7.1.0"))
|
||||
@@ -8767,8 +8767,19 @@ qemuDomainHasBuiltinIDE(const virDomainDef *def)
|
||||
bool
|
||||
qemuDomainNeedsFDC(const virDomainDef *def)
|
||||
{
|
||||
- /* all supported Q35 machines need explicit FDC */
|
||||
- return qemuDomainIsQ35(def);
|
||||
+ const char *p;
|
||||
+
|
||||
+ /* all supported Q35 machines need explicit FDC except for old RHEL-7
|
||||
+ * machine types */
|
||||
+ if (!qemuDomainIsQ35(def))
|
||||
+ return false;
|
||||
+
|
||||
return true;
|
||||
+ if ((p = STRSKIP(def->os.machine, "pc-q35-")) &&
|
||||
+ (STRPREFIX(p, "rhel7.0.0") ||
|
||||
+ STRPREFIX(p, "rhel7.1.0")))
|
||||
+ return false;
|
||||
+
|
||||
+ return true;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.25.0
|
||||
2.34.1
|
||||
|
||||
|
|
|
@ -0,0 +1,257 @@
|
|||
From b2529d5ff3a18a2b0022da75431cea5bf037819e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b2529d5ff3a18a2b0022da75431cea5bf037819e@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 28 Jul 2021 17:37:21 +0200
|
||||
Subject: [PATCH] RHEL: Enable usage of x-blockdev-reopen
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
RHEL-only
|
||||
|
||||
Introduce a new capability QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API
|
||||
based on the presence of '__com.redhat_rhel-av-8_2_0-api' feature for
|
||||
'x-blockdev-reopen' which states that reopen works for what libvirt
|
||||
is going to use it and wire up code to call the x- prefixed command.
|
||||
|
||||
This implementation will become dormant once qemu starts supporting
|
||||
upstream-stable blockdev-reopen.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1799013
|
||||
|
||||
Starting with libvirt-7.6, upstream has adapted to the new format of
|
||||
arguments so this patch was modified to support blockdev-reopen which
|
||||
takes an array of nodes to reopen.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1929765
|
||||
Message-Id: <3fcde2fc6add36d5276ae224caf18adc8bca7d48.1627486352.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_block.c | 24 +++++++++++++++---------
|
||||
src/qemu/qemu_block.h | 3 ++-
|
||||
src/qemu/qemu_capabilities.c | 13 +++++++++++++
|
||||
src/qemu/qemu_capabilities.h | 3 +++
|
||||
src/qemu/qemu_monitor.c | 5 +++--
|
||||
src/qemu/qemu_monitor.h | 3 ++-
|
||||
src/qemu/qemu_monitor_json.c | 12 +++++++++---
|
||||
src/qemu/qemu_monitor_json.h | 3 ++-
|
||||
tests/qemumonitorjsontest.c | 2 +-
|
||||
9 files changed, 50 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
|
||||
index e5ff653a60..aa566d0097 100644
|
||||
--- a/src/qemu/qemu_block.c
|
||||
+++ b/src/qemu/qemu_block.c
|
||||
@@ -3331,7 +3331,8 @@ qemuBlockBitmapsHandleCommitFinish(virStorageSource *topsrc,
|
||||
|
||||
int
|
||||
qemuBlockReopenFormatMon(qemuMonitor *mon,
|
||||
- virStorageSource *src)
|
||||
+ virStorageSource *src,
|
||||
+ bool downstream)
|
||||
{
|
||||
g_autoptr(virJSONValue) reopenprops = NULL;
|
||||
g_autoptr(virJSONValue) srcprops = NULL;
|
||||
@@ -3340,15 +3341,19 @@ qemuBlockReopenFormatMon(qemuMonitor *mon,
|
||||
if (!(srcprops = qemuBlockStorageSourceGetBlockdevProps(src, src->backingStore)))
|
||||
return -1;
|
||||
|
||||
- if (virJSONValueArrayAppend(reopenoptions, &srcprops) < 0)
|
||||
- return -1;
|
||||
+ if (downstream) {
|
||||
+ reopenprops = g_steal_pointer(&srcprops);
|
||||
+ } else {
|
||||
+ if (virJSONValueArrayAppend(reopenoptions, &srcprops) < 0)
|
||||
+ return -1;
|
||||
|
||||
- if (virJSONValueObjectAdd(&reopenprops,
|
||||
- "a:options", &reopenoptions,
|
||||
- NULL) < 0)
|
||||
- return -1;
|
||||
+ if (virJSONValueObjectAdd(&reopenprops,
|
||||
+ "a:options", &reopenoptions,
|
||||
+ NULL) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
- if (qemuMonitorBlockdevReopen(mon, &reopenprops) < 0)
|
||||
+ if (qemuMonitorBlockdevReopen(mon, &reopenprops, downstream) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
@@ -3372,6 +3377,7 @@ qemuBlockReopenFormat(virDomainObj *vm,
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
virQEMUDriver *driver = priv->driver;
|
||||
+ bool downstream = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API);
|
||||
int rc;
|
||||
|
||||
/* If we are lacking the object here, qemu might have opened an image with
|
||||
@@ -3385,7 +3391,7 @@ qemuBlockReopenFormat(virDomainObj *vm,
|
||||
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
||||
return -1;
|
||||
|
||||
- rc = qemuBlockReopenFormatMon(priv->mon, src);
|
||||
+ rc = qemuBlockReopenFormatMon(priv->mon, src, downstream);
|
||||
|
||||
qemuDomainObjExitMonitor(driver, vm);
|
||||
if (rc < 0)
|
||||
diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
|
||||
index 184a549d5c..130cfcdefd 100644
|
||||
--- a/src/qemu/qemu_block.h
|
||||
+++ b/src/qemu/qemu_block.h
|
||||
@@ -267,7 +267,8 @@ qemuBlockBitmapsHandleCommitFinish(virStorageSource *topsrc,
|
||||
/* only for use in qemumonitorjsontest */
|
||||
int
|
||||
qemuBlockReopenFormatMon(qemuMonitor *mon,
|
||||
- virStorageSource *src);
|
||||
+ virStorageSource *src,
|
||||
+ bool downstream);
|
||||
|
||||
int
|
||||
qemuBlockReopenReadWrite(virDomainObj *vm,
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index 5f1eb5014c..8ae80ef8d7 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -654,6 +654,9 @@ VIR_ENUM_IMPL(virQEMUCaps,
|
||||
"rbd-encryption", /* QEMU_CAPS_RBD_ENCRYPTION */
|
||||
"sev-guest-kernel-hashes", /* QEMU_CAPS_SEV_GUEST_KERNEL_HASHES */
|
||||
"sev-inject-launch-secret", /* QEMU_CAPS_SEV_INJECT_LAUNCH_SECRET */
|
||||
+
|
||||
+ /* 420 */
|
||||
+ "blockdev-reopen.__com.redhat_rhel-av-8_2_0-api", /* QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API */
|
||||
);
|
||||
|
||||
|
||||
@@ -1540,6 +1543,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVhostUserFS[] =
|
||||
/* see documentation for virQEMUQAPISchemaPathGet for the query format */
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
|
||||
{ "block-commit/arg-type/*top", QEMU_CAPS_ACTIVE_COMMIT },
|
||||
+ { "x-blockdev-reopen/$__com.redhat_rhel-av-8_2_0-api", QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API },
|
||||
{ "blockdev-add/arg-type/options/+gluster/debug-level", QEMU_CAPS_GLUSTER_DEBUG_LEVEL},
|
||||
{ "blockdev-add/arg-type/+gluster/debug", QEMU_CAPS_GLUSTER_DEBUG_LEVEL},
|
||||
{ "blockdev-add/arg-type/+vxhs", QEMU_CAPS_VXHS},
|
||||
@@ -5235,6 +5239,15 @@ virQEMUCapsInitProcessCaps(virQEMUCaps *qemuCaps)
|
||||
qemuCaps->arch == VIR_ARCH_MIPS)
|
||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_SCSI_NCR53C90);
|
||||
|
||||
+ /* RHEL-only:
|
||||
+ * - if upstream blockdev-reopen is enabled, clear the downstream flag
|
||||
+ * - if the downstream flag is present but not the upstream, assert the upstream flag too
|
||||
+ */
|
||||
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
|
||||
+ virQEMUCapsClear(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API);
|
||||
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API))
|
||||
+ virQEMUCapsSet(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN);
|
||||
+
|
||||
virQEMUCapsInitProcessCapsInterlock(qemuCaps);
|
||||
}
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||||
index e3a3ab4445..cde6c18b4c 100644
|
||||
--- a/src/qemu/qemu_capabilities.h
|
||||
+++ b/src/qemu/qemu_capabilities.h
|
||||
@@ -634,6 +634,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
|
||||
QEMU_CAPS_SEV_GUEST_KERNEL_HASHES, /* sev-guest.kernel-hashes= */
|
||||
QEMU_CAPS_SEV_INJECT_LAUNCH_SECRET, /* 'sev-inject-launch-secret' qmp command present */
|
||||
|
||||
+ /* 420 */
|
||||
+ QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API, /* downstream support for blockdev reopen in rhel-av-8.2.0 */
|
||||
+
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
|
||||
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
|
||||
index babf9e62fb..23638d3fe8 100644
|
||||
--- a/src/qemu/qemu_monitor.c
|
||||
+++ b/src/qemu/qemu_monitor.c
|
||||
@@ -4247,14 +4247,15 @@ qemuMonitorBlockdevAdd(qemuMonitor *mon,
|
||||
|
||||
int
|
||||
qemuMonitorBlockdevReopen(qemuMonitor *mon,
|
||||
- virJSONValue **props)
|
||||
+ virJSONValue **props,
|
||||
+ bool downstream)
|
||||
{
|
||||
VIR_DEBUG("props=%p (node-name=%s)", *props,
|
||||
NULLSTR(virJSONValueObjectGetString(*props, "node-name")));
|
||||
|
||||
QEMU_CHECK_MONITOR(mon);
|
||||
|
||||
- return qemuMonitorJSONBlockdevReopen(mon, props);
|
||||
+ return qemuMonitorJSONBlockdevReopen(mon, props, downstream);
|
||||
}
|
||||
|
||||
|
||||
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
|
||||
index 9b2e4e1421..d2037914be 100644
|
||||
--- a/src/qemu/qemu_monitor.h
|
||||
+++ b/src/qemu/qemu_monitor.h
|
||||
@@ -1426,7 +1426,8 @@ int qemuMonitorBlockdevAdd(qemuMonitor *mon,
|
||||
virJSONValue **props);
|
||||
|
||||
int qemuMonitorBlockdevReopen(qemuMonitor *mon,
|
||||
- virJSONValue **props);
|
||||
+ virJSONValue **props,
|
||||
+ bool downstream);
|
||||
|
||||
int qemuMonitorBlockdevDel(qemuMonitor *mon,
|
||||
const char *nodename);
|
||||
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
|
||||
index b0b513683b..34a46b9b41 100644
|
||||
--- a/src/qemu/qemu_monitor_json.c
|
||||
+++ b/src/qemu/qemu_monitor_json.c
|
||||
@@ -8051,13 +8051,19 @@ qemuMonitorJSONBlockdevAdd(qemuMonitor *mon,
|
||||
|
||||
int
|
||||
qemuMonitorJSONBlockdevReopen(qemuMonitor *mon,
|
||||
- virJSONValue **props)
|
||||
+ virJSONValue **props,
|
||||
+ bool downstream)
|
||||
{
|
||||
g_autoptr(virJSONValue) cmd = NULL;
|
||||
g_autoptr(virJSONValue) reply = NULL;
|
||||
|
||||
- if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-reopen", props)))
|
||||
- return -1;
|
||||
+ if (downstream) {
|
||||
+ if (!(cmd = qemuMonitorJSONMakeCommandInternal("x-blockdev-reopen", props)))
|
||||
+ return -1;
|
||||
+ } else {
|
||||
+ if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-reopen", props)))
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
|
||||
return -1;
|
||||
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
|
||||
index 64d9ebdaa3..15ce03d7af 100644
|
||||
--- a/src/qemu/qemu_monitor_json.h
|
||||
+++ b/src/qemu/qemu_monitor_json.h
|
||||
@@ -748,7 +748,8 @@ qemuMonitorJSONBlockdevAdd(qemuMonitor *mon,
|
||||
|
||||
int
|
||||
qemuMonitorJSONBlockdevReopen(qemuMonitor *mon,
|
||||
- virJSONValue **props)
|
||||
+ virJSONValue **props,
|
||||
+ bool downstream)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
||||
|
||||
int
|
||||
diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
|
||||
index 48e2a457ab..8624a547b5 100644
|
||||
--- a/tests/qemumonitorjsontest.c
|
||||
+++ b/tests/qemumonitorjsontest.c
|
||||
@@ -2780,7 +2780,7 @@ testQemuMonitorJSONBlockdevReopen(const void *opaque)
|
||||
if (qemuMonitorTestAddItem(test, "blockdev-reopen", "{\"return\":{}}") < 0)
|
||||
return -1;
|
||||
|
||||
- if (qemuBlockReopenFormatMon(qemuMonitorTestGetMonitor(test), src) < 0)
|
||||
+ if (qemuBlockReopenFormatMon(qemuMonitorTestGetMonitor(test), src, false) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
--
|
||||
2.34.1
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
From 3e50b013277c7fa05987ceba440f8c4583b6c634 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3e50b013277c7fa05987ceba440f8c4583b6c634@dist-git>
|
||||
From 29eb7b77805cf5fb756c964cdbe7fb7fb2c01f5f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <29eb7b77805cf5fb756c964cdbe7fb7fb2c01f5f@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Mon, 27 Aug 2018 13:09:38 +0200
|
||||
Subject: [PATCH] RHEL: Fix virConnectGetMaxVcpus output
|
||||
|
@ -26,10 +26,10 @@ Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
|||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
|
||||
index 7f14340f49..256976cce1 100644
|
||||
index a07c00a0e9..35f41daef2 100644
|
||||
--- a/src/util/virhostcpu.c
|
||||
+++ b/src/util/virhostcpu.c
|
||||
@@ -1169,6 +1169,11 @@ virHostCPUGetKVMMaxVCPUs(void)
|
||||
@@ -1166,6 +1166,11 @@ virHostCPUGetKVMMaxVCPUs(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -42,5 +42,5 @@ index 7f14340f49..256976cce1 100644
|
|||
/* at first try KVM_CAP_MAX_VCPUS to determine the maximum count */
|
||||
if ((ret = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_MAX_VCPUS)) > 0)
|
||||
--
|
||||
2.25.0
|
||||
2.34.1
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From 0dd015e1aff1a56a4584824d1a97c9eacabf7f03 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0dd015e1aff1a56a4584824d1a97c9eacabf7f03@dist-git>
|
||||
From 1d93a3944a200b7c955800faa598e0e11da098f8 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <1d93a3944a200b7c955800faa598e0e11da098f8@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Fri, 27 Mar 2015 12:48:40 +0100
|
||||
Subject: [PATCH] RHEL: Hack around changed Broadwell/Haswell CPUs
|
||||
|
@ -18,34 +18,35 @@ https://bugzilla.redhat.com/show_bug.cgi?id=1199446
|
|||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_command.c | 21 +++++++++++++++++++
|
||||
src/qemu/qemu_command.c | 22 +++++++++++++++++++
|
||||
tests/qemuxml2argvdata/cpu-Haswell.args | 2 +-
|
||||
.../qemuxml2argvdata/cpu-host-model-cmt.args | 2 +-
|
||||
.../cpu-translation.x86_64-4.0.0.args | 4 ++--
|
||||
.../cpu-translation.x86_64-latest.args | 4 ++--
|
||||
tests/qemuxml2argvdata/cpu-tsc-frequency.args | 4 ++--
|
||||
.../cpu-translation.x86_64-4.0.0.args | 2 +-
|
||||
.../cpu-translation.x86_64-latest.args | 2 +-
|
||||
tests/qemuxml2argvdata/cpu-tsc-frequency.args | 2 +-
|
||||
tests/qemuxml2argvdata/q35-acpi-nouefi.args | 2 +-
|
||||
tests/qemuxml2argvdata/q35-acpi-uefi.args | 2 +-
|
||||
tests/qemuxml2argvdata/q35-noacpi-nouefi.args | 2 +-
|
||||
9 files changed, 32 insertions(+), 11 deletions(-)
|
||||
9 files changed, 30 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 904d2beab5..e10cc7fc74 100644
|
||||
index d822533ccb..6b4647a711 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -6469,6 +6469,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
||||
@@ -6521,6 +6521,8 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver,
|
||||
{
|
||||
size_t i;
|
||||
virCPUDefPtr cpu = def->cpu;
|
||||
virCPUDef *cpu = def->cpu;
|
||||
+ bool hle = false;
|
||||
+ bool rtm = false;
|
||||
|
||||
switch ((virCPUMode) cpu->mode) {
|
||||
case VIR_CPU_MODE_HOST_PASSTHROUGH:
|
||||
@@ -6524,6 +6526,11 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
||||
virBufferAsprintf(buf, ",vendor=%s", cpu->vendor_id);
|
||||
|
||||
@@ -6587,6 +6589,12 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver,
|
||||
for (i = 0; i < cpu->nfeatures; i++) {
|
||||
const char *featname =
|
||||
virQEMUCapsCPUFeatureToQEMU(qemuCaps, cpu->features[i].name);
|
||||
+
|
||||
+ if (STREQ("rtm", cpu->features[i].name))
|
||||
+ rtm = true;
|
||||
+ if (STREQ("hle", cpu->features[i].name))
|
||||
|
@ -54,7 +55,7 @@ index 904d2beab5..e10cc7fc74 100644
|
|||
switch ((virCPUFeaturePolicy) cpu->features[i].policy) {
|
||||
case VIR_CPU_FEATURE_FORCE:
|
||||
case VIR_CPU_FEATURE_REQUIRE:
|
||||
@@ -6541,6 +6548,20 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
||||
@@ -6604,6 +6612,20 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,124 +68,118 @@ index 904d2beab5..e10cc7fc74 100644
|
|||
+ if (STREQ_NULLABLE(cpu->model, "Broadwell") ||
|
||||
+ STREQ_NULLABLE(cpu->model, "Haswell")) {
|
||||
+ if (!rtm)
|
||||
+ qemuBuildCpuFeature(qemuCaps, buf, "rtm", true);
|
||||
+ virBufferAddLit(buf, ",rtm=on");
|
||||
+ if (!hle)
|
||||
+ qemuBuildCpuFeature(qemuCaps, buf, "hle", true);
|
||||
+ virBufferAddLit(buf, ",hle=on");
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-Haswell.args b/tests/qemuxml2argvdata/cpu-Haswell.args
|
||||
index a33b16f7ce..d35de5ea58 100644
|
||||
index b57fdfddc5..965274c1f0 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-Haswell.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-Haswell.args
|
||||
@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
-machine pc,accel=kvm,usb=off,dump-guest-core=off \
|
||||
@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc,usb=off,dump-guest-core=off \
|
||||
-accel kvm \
|
||||
--cpu Haswell \
|
||||
+-cpu Haswell,+rtm,+hle \
|
||||
+-cpu Haswell,rtm=on,hle=on \
|
||||
-m 214 \
|
||||
-realtime mlock=off \
|
||||
-smp 6,sockets=6,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-host-model-cmt.args b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
|
||||
index 42f969fd62..c8795acb3e 100644
|
||||
index 0de04e877d..602f70de86 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-host-model-cmt.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
|
||||
@@ -12,7 +12,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-S \
|
||||
-machine pc,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\
|
||||
-+smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm \
|
||||
++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+rtm,+hle \
|
||||
@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc,usb=off,dump-guest-core=off \
|
||||
-accel tcg \
|
||||
--cpu Haswell,vme=on,ds=on,acpi=on,ss=on,ht=on,tm=on,pbe=on,dtes64=on,monitor=on,ds-cpl=on,vmx=on,smx=on,est=on,tm2=on,xtpr=on,pdcm=on,f16c=on,rdrand=on,pdpe1gb=on,abm=on,lahf-lm=on \
|
||||
+-cpu Haswell,vme=on,ds=on,acpi=on,ss=on,ht=on,tm=on,pbe=on,dtes64=on,monitor=on,ds-cpl=on,vmx=on,smx=on,est=on,tm2=on,xtpr=on,pdcm=on,f16c=on,rdrand=on,pdpe1gb=on,abm=on,lahf-lm=on,rtm=on,hle=on \
|
||||
-m 214 \
|
||||
-realtime mlock=off \
|
||||
-smp 6,sockets=6,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args b/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
|
||||
index f8e19fca24..08c672fd2c 100644
|
||||
index 09141106d5..ace08d5d76 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
|
||||
@@ -14,8 +14,8 @@ QEMU_AUDIO_DRV=none \
|
||||
file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc-i440fx-4.0,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-cpu Haswell,pclmuldq=on,ds_cpl=on,tsc_adjust=on,fxsr_opt=on,lahf_lm=on,\
|
||||
-cmp_legacy=on,nodeid_msr=on,perfctr_core=on,perfctr_nb=on,kvm_pv_eoi=on,\
|
||||
-kvm_pv_unhalt=on \
|
||||
+cmp_legacy=on,nodeid_msr=on,perfctr_core=on,perfctr_nb=on,rtm=on,hle=on,\
|
||||
+kvm_pv_eoi=on,kvm_pv_unhalt=on \
|
||||
@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc-i440fx-4.0,usb=off,dump-guest-core=off \
|
||||
-accel tcg \
|
||||
--cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,kvm-pv-eoi=on,kvm-pv-unhalt=on \
|
||||
+-cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,rtm=on,hle=on,kvm-pv-eoi=on,kvm-pv-unhalt=on \
|
||||
-m 214 \
|
||||
-overcommit mem-lock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
|
||||
index 9322b826f4..1dbfc9553b 100644
|
||||
index 2dab572a6b..a9f7c4b910 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
|
||||
@@ -14,8 +14,8 @@ QEMU_AUDIO_DRV=none \
|
||||
file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,\
|
||||
-cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,kvm-pv-eoi=on,\
|
||||
-kvm-pv-unhalt=on \
|
||||
+cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,rtm=on,hle=on,\
|
||||
+kvm-pv-eoi=on,kvm-pv-unhalt=on \
|
||||
@@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \
|
||||
-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram \
|
||||
-accel tcg \
|
||||
--cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,kvm-pv-eoi=on,kvm-pv-unhalt=on \
|
||||
+-cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,rtm=on,hle=on,kvm-pv-eoi=on,kvm-pv-unhalt=on \
|
||||
-m 214 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
|
||||
-overcommit mem-lock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/cpu-tsc-frequency.args b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
|
||||
index 55b72b4404..45a777d468 100644
|
||||
index 4a032f5d85..48fb75abcc 100644
|
||||
--- a/tests/qemuxml2argvdata/cpu-tsc-frequency.args
|
||||
+++ b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
|
||||
@@ -12,8 +12,8 @@ QEMU_AUDIO_DRV=none \
|
||||
-S \
|
||||
-machine pc,accel=kvm,usb=off,dump-guest-core=off \
|
||||
-cpu Haswell,+vme,+ds,+acpi,+ss,+ht,+tm,+pbe,+dtes64,+monitor,+ds_cpl,+vmx,\
|
||||
-+smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,\
|
||||
-tsc-frequency=3504000000 \
|
||||
++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,+rtm,\
|
||||
++hle,tsc-frequency=3504000000 \
|
||||
@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc,usb=off,dump-guest-core=off \
|
||||
-accel kvm \
|
||||
--cpu Haswell,vme=on,ds=on,acpi=on,ss=on,ht=on,tm=on,pbe=on,dtes64=on,monitor=on,ds-cpl=on,vmx=on,smx=on,est=on,tm2=on,xtpr=on,pdcm=on,f16c=on,rdrand=on,pdpe1gb=on,abm=on,lahf-lm=on,invtsc=on,tsc-frequency=4567890000 \
|
||||
+-cpu Haswell,vme=on,ds=on,acpi=on,ss=on,ht=on,tm=on,pbe=on,dtes64=on,monitor=on,ds-cpl=on,vmx=on,smx=on,est=on,tm2=on,xtpr=on,pdcm=on,f16c=on,rdrand=on,pdpe1gb=on,abm=on,lahf-lm=on,invtsc=on,rtm=on,hle=on,tsc-frequency=4567890000 \
|
||||
-m 214 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/q35-acpi-nouefi.args b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
|
||||
index 09e06c96ea..aed56fb1fc 100644
|
||||
index 3faee48c77..a1f742712d 100644
|
||||
--- a/tests/qemuxml2argvdata/q35-acpi-nouefi.args
|
||||
+++ b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
|
||||
@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-name guest \
|
||||
-S \
|
||||
-machine q35,accel=tcg,usb=off,dump-guest-core=off \
|
||||
@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-guest/master-key.aes \
|
||||
-machine q35,usb=off,dump-guest-core=off \
|
||||
-accel tcg \
|
||||
--cpu Haswell \
|
||||
+-cpu Haswell,+rtm,+hle \
|
||||
+-cpu Haswell,rtm=on,hle=on \
|
||||
-m 1024 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/q35-acpi-uefi.args b/tests/qemuxml2argvdata/q35-acpi-uefi.args
|
||||
index d00fe5bc1d..1f4bfe7f87 100644
|
||||
index 60da1e282a..620056223a 100644
|
||||
--- a/tests/qemuxml2argvdata/q35-acpi-uefi.args
|
||||
+++ b/tests/qemuxml2argvdata/q35-acpi-uefi.args
|
||||
@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-name guest \
|
||||
-S \
|
||||
-machine q35,accel=tcg,usb=off,dump-guest-core=off \
|
||||
@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-guest/master-key.aes \
|
||||
-machine q35,usb=off,dump-guest-core=off \
|
||||
-accel tcg \
|
||||
--cpu Haswell \
|
||||
+-cpu Haswell,+rtm,+hle \
|
||||
-drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,\
|
||||
readonly=on \
|
||||
-drive file=/var/lib/libvirt/qemu/nvram/guest_VARS.fd,if=pflash,format=raw,\
|
||||
+-cpu Haswell,rtm=on,hle=on \
|
||||
-drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on \
|
||||
-drive file=/var/lib/libvirt/qemu/nvram/guest_VARS.fd,if=pflash,format=raw,unit=1 \
|
||||
-m 1024 \
|
||||
diff --git a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
|
||||
index de34dff1cf..ccea7f91f9 100644
|
||||
index 14e5bbc22a..ea66536c2a 100644
|
||||
--- a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
|
||||
+++ b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
|
||||
@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-name guest \
|
||||
-S \
|
||||
-machine q35,accel=tcg,usb=off,dump-guest-core=off \
|
||||
@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-guest/master-key.aes \
|
||||
-machine q35,usb=off,dump-guest-core=off \
|
||||
-accel tcg \
|
||||
--cpu Haswell \
|
||||
+-cpu Haswell,+rtm,+hle \
|
||||
+-cpu Haswell,rtm=on,hle=on \
|
||||
-m 1024 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
--
|
||||
2.25.0
|
||||
2.34.1
|
||||
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
From b550b671bace6d979a0763a837ce97ddf72e8fc8 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b550b671bace6d979a0763a837ce97ddf72e8fc8@dist-git>
|
||||
From: Martin Kletzander <mkletzan@redhat.com>
|
||||
Date: Fri, 28 Jan 2022 20:33:12 +0100
|
||||
Subject: [PATCH] RHEL: Remove <glib-2.64.0 workaround for GSource race
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2045879
|
||||
|
||||
This is to accommodate for RHEL 8 downstream glib being fixed with a backport in
|
||||
version 2.56.4-12 (Bug 1948988). Another reason for that is that our workaround
|
||||
does not play nice with a fixed glib, leading to libvirt not properly
|
||||
dereferencing the monitor socket, eventually leading to EMFILE: Too many open
|
||||
files.
|
||||
|
||||
RHEL-only
|
||||
|
||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
---
|
||||
src/util/glibcompat.c | 46 ++++++++-----------------------------------
|
||||
1 file changed, 8 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/src/util/glibcompat.c b/src/util/glibcompat.c
|
||||
index eb6dcc0111..bf890f10d2 100644
|
||||
--- a/src/util/glibcompat.c
|
||||
+++ b/src/util/glibcompat.c
|
||||
@@ -212,51 +212,21 @@ vir_g_strdup_vprintf(const char *msg, va_list args)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-
|
||||
/*
|
||||
- * If the last reference to a GSource is released in a non-main
|
||||
- * thread we're exposed to a race condition that causes a
|
||||
- * crash:
|
||||
- *
|
||||
- * https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1358
|
||||
+ * This is a leftover of a hack that works around glib older than 2.64.0, but
|
||||
+ * the fix in glib as backported in RHEL-8 to glib2-2.56.4-12 in BZ 1948988:
|
||||
*
|
||||
- * Thus we're using an idle func to release our ref...
|
||||
+ * https://bugzilla.redhat.com/show_bug.cgi?id=1948988
|
||||
*
|
||||
- * ...but this imposes a significant performance penalty on
|
||||
- * I/O intensive workloads which are sensitive to the iterations
|
||||
- * of the event loop, so avoid the workaround if we know we have
|
||||
- * new enough glib.
|
||||
+ * and our workaround coupled with that glib fix started causing leaks, which
|
||||
+ * surfaced with us not unreferencing the qemu monitor socket in BZ 2045879:
|
||||
*
|
||||
- * The function below is used from a header file definition.
|
||||
+ * https://bugzilla.redhat.com/show_bug.cgi?id=2045879
|
||||
*
|
||||
- * Drop when min glib >= 2.64.0
|
||||
+ * Keeping this wrapper makes it easier to follow with other backports without
|
||||
+ * conflicts in callers due to the function name change.
|
||||
*/
|
||||
-#if GLIB_CHECK_VERSION(2, 64, 0)
|
||||
void vir_g_source_unref(GSource *src, GMainContext *ctx G_GNUC_UNUSED)
|
||||
{
|
||||
g_source_unref(src);
|
||||
}
|
||||
-#else
|
||||
-
|
||||
-static gboolean
|
||||
-virEventGLibSourceUnrefIdle(gpointer data)
|
||||
-{
|
||||
- GSource *src = data;
|
||||
-
|
||||
- g_source_unref(src);
|
||||
-
|
||||
- return FALSE;
|
||||
-}
|
||||
-
|
||||
-void vir_g_source_unref(GSource *src, GMainContext *ctx)
|
||||
-{
|
||||
- GSource *idle = g_idle_source_new();
|
||||
-
|
||||
- g_source_set_callback(idle, virEventGLibSourceUnrefIdle, src, NULL);
|
||||
-
|
||||
- g_source_attach(idle, ctx);
|
||||
-
|
||||
- g_source_unref(idle);
|
||||
-}
|
||||
-
|
||||
-#endif
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
From fce502cf5233d800479c2efcf7721ab895db8998 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <fce502cf5233d800479c2efcf7721ab895db8998@dist-git>
|
||||
From d6956a1aaa8757fab60132c3ee46c2bb199a78a8 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d6956a1aaa8757fab60132c3ee46c2bb199a78a8@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 20:42:30 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Add ability to set sgio values for hostdev
|
||||
|
@ -15,27 +15,34 @@ Add necessary checks in order to allow setting sgio values for a scsi
|
|||
host device
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit f2cf0ae7bc371c75f6c0e79192711f2b1d201b10)
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 15 ++++++++-------
|
||||
1 file changed, 8 insertions(+), 7 deletions(-)
|
||||
src/qemu/qemu_conf.c | 25 ++++++++++++++++---------
|
||||
1 file changed, 16 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index b62dd1df52..ce7869e6be 100644
|
||||
index 6077457ff4..ba85fc6e22 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1810,6 +1810,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
virDomainDiskDefPtr disk = NULL;
|
||||
virDomainHostdevDefPtr hostdev = NULL;
|
||||
@@ -1841,8 +1841,9 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
|
||||
virDomainDiskDef *disk = NULL;
|
||||
virDomainHostdevDef *hostdev = NULL;
|
||||
g_autofree char *sysfs_path = NULL;
|
||||
+ g_autofree char *hostdev_path = NULL;
|
||||
const char *path = NULL;
|
||||
int val = -1;
|
||||
- int val = -1;
|
||||
+ int val = 0;
|
||||
|
||||
@@ -1830,14 +1831,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
if (!qemuIsSharedHostdev(hostdev))
|
||||
/* "sgio" is only valid for block disk; cdrom
|
||||
* and floopy disk can have empty source.
|
||||
@@ -1858,17 +1859,14 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
hostdev = dev->data.hostdev;
|
||||
|
||||
- if (!qemuIsSharedHostdev(hostdev))
|
||||
+ if (hostdev->source.subsys.u.scsi.protocol ==
|
||||
+ VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
|
||||
return 0;
|
||||
|
||||
- if (hostdev->source.subsys.u.scsi.sgio) {
|
||||
|
@ -51,19 +58,24 @@ index b62dd1df52..ce7869e6be 100644
|
|||
} else {
|
||||
return 0;
|
||||
}
|
||||
@@ -1846,7 +1843,11 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
@@ -1877,7 +1875,16 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
|
||||
return -1;
|
||||
|
||||
/* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */
|
||||
- val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
+ if (dev->type == VIR_DOMAIN_DEVICE_DISK)
|
||||
+ val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
+ else
|
||||
+ val = (hostdev->source.subsys.u.scsi.sgio ==
|
||||
+ VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
+ if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
+ if (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
+ val = 1;
|
||||
+ } else {
|
||||
+ /* Only settable if <shareable/> was present for hostdev */
|
||||
+ if (qemuIsSharedHostdev(hostdev) &&
|
||||
+ hostdev->source.subsys.u.scsi.sgio ==
|
||||
+ VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
+ val = 1;
|
||||
+ }
|
||||
|
||||
/* Do not do anything if unpriv_sgio is not supported by the kernel and the
|
||||
* whitelist is enabled. But if requesting unfiltered access, always call
|
||||
--
|
||||
2.25.0
|
||||
2.34.1
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From 5a192657ad4e08fc773fef90c6b07df3620fa1c2 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5a192657ad4e08fc773fef90c6b07df3620fa1c2@dist-git>
|
||||
From f562b4c83d342002291f6bd7c5776eaecbd3147f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f562b4c83d342002291f6bd7c5776eaecbd3147f@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 20:42:31 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Add check for unpriv sgio for SCSI generic host
|
||||
|
@ -19,23 +19,22 @@ This restores functionality removed by upstream commit id 'ce346623'
|
|||
to remove sgio support for the SCSI generic host device.
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 712005bcf26190dc6fd1fe56283377987909cc4b)
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 20 ++++++++++++++++++--
|
||||
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index ce7869e6be..2a84972fd9 100644
|
||||
index ba85fc6e22..28c334761b 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1717,13 +1717,29 @@ qemuSharedHostdevAddRemoveInternal(virQEMUDriverPtr driver,
|
||||
@@ -1749,13 +1749,29 @@ qemuSharedHostdevAddRemoveInternal(virQEMUDriver *driver,
|
||||
{
|
||||
g_autofree char *dev_path = NULL;
|
||||
g_autofree char *key = NULL;
|
||||
+ virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
|
||||
+ virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
|
||||
+ virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
|
||||
+ virDomainHostdevSubsysSCSIHost *scsihostsrc = &scsisrc->u.host;
|
||||
int ret = -1;
|
||||
|
||||
if (!qemuIsSharedHostdev(hostdev))
|
||||
|
@ -63,5 +62,5 @@ index ce7869e6be..2a84972fd9 100644
|
|||
|
||||
qemuDriverLock(driver);
|
||||
--
|
||||
2.25.0
|
||||
2.34.1
|
||||
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
From e79d54ff8e760ac1a200a37fb05cc9aa758c48d3 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <e79d54ff8e760ac1a200a37fb05cc9aa758c48d3@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 20:42:33 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Alter qemuSetUnprivSGIO hostdev shareable logic
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1656362 (RHEL8)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1656360 (RHEL7)
|
||||
|
||||
RHEL-only
|
||||
|
||||
Fix the logic to handle the case where if the <shareable/> element
|
||||
was removed from the domain <hostdev.../>, then we have to reset the
|
||||
SGIO value back to 0. Without this patch the check for not shareable
|
||||
and return 0 would bypass resetting the value back to 0.
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 7 +++----
|
||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index faabc4d49f..590052b035 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1844,9 +1844,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
hostdev = dev->data.hostdev;
|
||||
|
||||
- if (!qemuIsSharedHostdev(hostdev))
|
||||
- return 0;
|
||||
-
|
||||
if (!(hostdev_path = qemuGetHostdevPath(hostdev)))
|
||||
return -1;
|
||||
|
||||
@@ -1863,7 +1860,9 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED) {
|
||||
val = 1;
|
||||
} else {
|
||||
- if (hostdev->source.subsys.u.scsi.sgio ==
|
||||
+ /* Only settable if <shareable/> was present for hostdev */
|
||||
+ if (qemuIsSharedHostdev(hostdev) &&
|
||||
+ hostdev->source.subsys.u.scsi.sgio ==
|
||||
VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
val = 1;
|
||||
}
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
From fa46b5b4d5bb732462d0d5484cc010aa652d821b Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <fa46b5b4d5bb732462d0d5484cc010aa652d821b@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Mon, 17 Dec 2018 20:42:32 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Alter @val usage in qemuSetUnprivSGIO
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1656362 (RHEL8)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1656360 (RHEL7)
|
||||
|
||||
RHEL-only
|
||||
|
||||
Rather than initializing to -1 and then setting to the result
|
||||
of a boolean check (either 0 or 1), let's just initialize @val
|
||||
to 0 and then only change to 1 if conditions are "right".
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 15 +++++++++------
|
||||
1 file changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 2a84972fd9..faabc4d49f 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1828,7 +1828,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
g_autofree char *sysfs_path = NULL;
|
||||
g_autofree char *hostdev_path = NULL;
|
||||
const char *path = NULL;
|
||||
- int val = -1;
|
||||
+ int val = 0;
|
||||
|
||||
/* "sgio" is only valid for block disk; cdrom
|
||||
* and floopy disk can have empty source.
|
||||
@@ -1859,11 +1859,14 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
return -1;
|
||||
|
||||
/* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */
|
||||
- if (dev->type == VIR_DOMAIN_DEVICE_DISK)
|
||||
- val = (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
- else
|
||||
- val = (hostdev->source.subsys.u.scsi.sgio ==
|
||||
- VIR_DOMAIN_DEVICE_SGIO_UNFILTERED);
|
||||
+ if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
|
||||
+ disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED) {
|
||||
+ val = 1;
|
||||
+ } else {
|
||||
+ if (hostdev->source.subsys.u.scsi.sgio ==
|
||||
+ VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
+ val = 1;
|
||||
+ }
|
||||
|
||||
/* Do not do anything if unpriv_sgio is not supported by the kernel and the
|
||||
* whitelist is enabled. But if requesting unfiltered access, always call
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
From 163740bff28c6f1a82663bc652f2cd5df39e4276 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <163740bff28c6f1a82663bc652f2cd5df39e4276@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Fri, 25 Jan 2019 12:19:12 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Fix crash trying to use iSCSI hostdev
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1669424
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1669966
|
||||
|
||||
RHEL-only
|
||||
|
||||
Commit 861a1a4d2 moved the qemuIsSharedHostdev filter in the
|
||||
HOSTDEV half of the logic to allow calling qemuGetHostdevPath;
|
||||
however, that neglected to check whether the SCSI hostdev was
|
||||
using the iSCSI protocol which has a different overlayed struct
|
||||
format (u.iscsi vs. u.host) resulting in attempted access of
|
||||
u.host when calling virSCSIDeviceGetDevName.
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 0674292fab..3d2f0e7bbb 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1844,6 +1844,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
hostdev = dev->data.hostdev;
|
||||
|
||||
+ if (hostdev->source.subsys.u.scsi.protocol ==
|
||||
+ VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
|
||||
+ return 0;
|
||||
+
|
||||
if (!(hostdev_path = qemuGetHostdevPath(hostdev)))
|
||||
return -1;
|
||||
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
From f6a05ac3cb33c473de8ed49b53d22910fc0140df Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f6a05ac3cb33c473de8ed49b53d22910fc0140df@dist-git>
|
||||
From: John Ferlan <jferlan@redhat.com>
|
||||
Date: Wed, 16 Jan 2019 15:54:31 -0500
|
||||
Subject: [PATCH] RHEL: qemu: Fix logic error in qemuSetUnprivSGIO
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1666605
|
||||
|
||||
RHEL-only
|
||||
|
||||
Commit c0f26a13c6 had a logic error with using both DISK and
|
||||
sgio which resulted in a DISK that didn't have sgio set falling
|
||||
into the else clause and trying to deref a NULL @hostdev resulting
|
||||
in a libvirtd crash:
|
||||
|
||||
Thread 1 (Thread 0x7ffbc6353700 (LWP 12642)):
|
||||
0 0x00007ffb958e7d7a in qemuSetUnprivSGIO
|
||||
1 0x00007ffb958d9d92 in qemuDomainAttachDeviceDiskLive
|
||||
2 0x00007ffb9594fce8 in qemuDomainAttachDeviceFlags
|
||||
3 0x00007ffbde399d71 in virDomainAttachDevice
|
||||
4 0x0000563b73ded4b2 in remoteDispatchDomainAttachDeviceHelper
|
||||
|
||||
for hotplug of XML:
|
||||
|
||||
<disk device="lun" type="block">
|
||||
<source dev="/dev/sdb"/>
|
||||
<driver name="qemu" type="raw"/>
|
||||
<target bus="scsi" dev="sdb"/>
|
||||
</disk>
|
||||
|
||||
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 590052b035..0674292fab 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1856,9 +1856,9 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
return -1;
|
||||
|
||||
/* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */
|
||||
- if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
|
||||
- disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED) {
|
||||
- val = 1;
|
||||
+ if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
+ if (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
+ val = 1;
|
||||
} else {
|
||||
/* Only settable if <shareable/> was present for hostdev */
|
||||
if (qemuIsSharedHostdev(hostdev) &&
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
From ef5a82d50464478a302cb59804d03e4a3dada83e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ef5a82d50464478a302cb59804d03e4a3dada83e@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:26 +0100
|
||||
Subject: [PATCH] RHEL: qemuCheckUnprivSGIO: use @sysfs_path to get unpriv_sgio
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Downstream commit 65f4ff0e2c9a968b7ec65c8d751d4055cc212628
|
||||
RHEL: qemuSetUnprivSGIO: Actually use calculated
|
||||
@sysfs_path to set unpriv_sgio
|
||||
removed the device_path -> sysfs_path conversion from
|
||||
both virGetDeviceUnprivSGIO and virSetDeviceUnprivSGIO,
|
||||
but only adjusted one of the callers.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1808400
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200306145226.1610708-7-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index b61d7e59fa..6a22d78ac6 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1430,7 +1430,7 @@ qemuCheckUnprivSGIO(virHashTablePtr sharedDevices,
|
||||
if (!(virHashLookup(sharedDevices, key)))
|
||||
return 0;
|
||||
|
||||
- if (virGetDeviceUnprivSGIO(device_path, &val) < 0)
|
||||
+ if (virGetDeviceUnprivSGIO(sysfs_path, &val) < 0)
|
||||
return -1;
|
||||
|
||||
/* Error message on failure needs to be handled in caller
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -1,170 +0,0 @@
|
|||
From 717423e7a452b0715e95b492b15dc08983677d12 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <717423e7a452b0715e95b492b15dc08983677d12@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:25 +0100
|
||||
Subject: [PATCH] RHEL: qemuSetUnprivSGIO: Actually use calculated @sysfs_path
|
||||
to set unpriv_sgio
|
||||
|
||||
In previous commits I've attempted to make qemuSetUnprivSGIO()
|
||||
construct a generic enough path for SCSI devices to set
|
||||
unpriv_sgio. However, virSetDeviceUnprivSGIO() does not care
|
||||
about that - it constructs the path on it's own again. This is
|
||||
suboptimal in either case - we already have the path constructed.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1808390
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200306145226.1610708-6-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_conf.c | 8 +++-----
|
||||
src/util/virutil.c | 24 ++++++------------------
|
||||
src/util/virutil.h | 2 --
|
||||
3 files changed, 9 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 6d6feb97cd..b61d7e59fa 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1430,7 +1430,7 @@ qemuCheckUnprivSGIO(virHashTablePtr sharedDevices,
|
||||
if (!(virHashLookup(sharedDevices, key)))
|
||||
return 0;
|
||||
|
||||
- if (virGetDeviceUnprivSGIO(device_path, NULL, &val) < 0)
|
||||
+ if (virGetDeviceUnprivSGIO(device_path, &val) < 0)
|
||||
return -1;
|
||||
|
||||
/* Error message on failure needs to be handled in caller
|
||||
@@ -1789,7 +1789,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
virDomainDiskDefPtr disk = NULL;
|
||||
virDomainHostdevDefPtr hostdev = NULL;
|
||||
g_autofree char *sysfs_path = NULL;
|
||||
- const char *path = NULL;
|
||||
int val = 0;
|
||||
|
||||
/* "sgio" is only valid for block disk; cdrom
|
||||
@@ -1797,13 +1796,12 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
*/
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
disk = dev->data.disk;
|
||||
+ const char *path = virDomainDiskGetSource(disk);
|
||||
|
||||
if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
|
||||
!virStorageSourceIsBlockLocal(disk->src))
|
||||
return 0;
|
||||
|
||||
- path = virDomainDiskGetSource(disk);
|
||||
-
|
||||
if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, NULL)))
|
||||
return -1;
|
||||
|
||||
@@ -1843,7 +1841,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
* virSetDeviceUnprivSGIO, to report an error for unsupported unpriv_sgio.
|
||||
*/
|
||||
if ((virFileExists(sysfs_path) || val == 1) &&
|
||||
- virSetDeviceUnprivSGIO(path, NULL, val) < 0)
|
||||
+ virSetDeviceUnprivSGIO(sysfs_path, val) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
diff --git a/src/util/virutil.c b/src/util/virutil.c
|
||||
index f142951acf..4198473fce 100644
|
||||
--- a/src/util/virutil.c
|
||||
+++ b/src/util/virutil.c
|
||||
@@ -1421,18 +1421,13 @@ virGetUnprivSGIOSysfsPath(const char *path,
|
||||
|
||||
int
|
||||
virSetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int unpriv_sgio)
|
||||
{
|
||||
- char *sysfs_path = NULL;
|
||||
char *val = NULL;
|
||||
int ret = -1;
|
||||
int rc;
|
||||
|
||||
- if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
|
||||
- return -1;
|
||||
-
|
||||
- if (!virFileExists(sysfs_path)) {
|
||||
+ if (!virFileExists(path)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("unpriv_sgio is not supported by this kernel"));
|
||||
goto cleanup;
|
||||
@@ -1440,38 +1435,32 @@ virSetDeviceUnprivSGIO(const char *path,
|
||||
|
||||
val = g_strdup_printf("%d", unpriv_sgio);
|
||||
|
||||
- if ((rc = virFileWriteStr(sysfs_path, val, 0)) < 0) {
|
||||
- virReportSystemError(-rc, _("failed to set %s"), sysfs_path);
|
||||
+ if ((rc = virFileWriteStr(path, val, 0)) < 0) {
|
||||
+ virReportSystemError(-rc, _("failed to set %s"), path);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
- VIR_FREE(sysfs_path);
|
||||
VIR_FREE(val);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
virGetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int *unpriv_sgio)
|
||||
{
|
||||
- char *sysfs_path = NULL;
|
||||
char *buf = NULL;
|
||||
char *tmp = NULL;
|
||||
int ret = -1;
|
||||
|
||||
- if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
|
||||
- return -1;
|
||||
-
|
||||
- if (!virFileExists(sysfs_path)) {
|
||||
+ if (!virFileExists(path)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("unpriv_sgio is not supported by this kernel"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (virFileReadAll(sysfs_path, 1024, &buf) < 0)
|
||||
+ if (virFileReadAll(path, 1024, &buf) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if ((tmp = strchr(buf, '\n')))
|
||||
@@ -1479,13 +1468,12 @@ virGetDeviceUnprivSGIO(const char *path,
|
||||
|
||||
if (virStrToLong_i(buf, NULL, 10, unpriv_sgio) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("failed to parse value of %s"), sysfs_path);
|
||||
+ _("failed to parse value of %s"), path);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
- VIR_FREE(sysfs_path);
|
||||
VIR_FREE(buf);
|
||||
return ret;
|
||||
}
|
||||
diff --git a/src/util/virutil.h b/src/util/virutil.h
|
||||
index 1a6ae1787a..a2530e21b5 100644
|
||||
--- a/src/util/virutil.h
|
||||
+++ b/src/util/virutil.h
|
||||
@@ -124,10 +124,8 @@ int virGetDeviceID(const char *path,
|
||||
int *maj,
|
||||
int *min);
|
||||
int virSetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int unpriv_sgio);
|
||||
int virGetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int *unpriv_sgio);
|
||||
char *virGetUnprivSGIOSysfsPath(const char *path,
|
||||
const char *sysfs_dir);
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
From b6c1f9ca8eb0ca8f7603ab205c7dc95b9f07b5a0 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b6c1f9ca8eb0ca8f7603ab205c7dc95b9f07b5a0@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Mon, 18 Jul 2022 16:01:20 +0200
|
||||
Subject: [PATCH] RHEL: qemu_migration: Fix restoring memlock limit on
|
||||
destination
|
||||
|
||||
Restoring memory locking limit on the destination host only makes sense
|
||||
when migration succeeded as otherwise the QEMU process will be killed
|
||||
anyway. Specifically if the migration fails because the process died,
|
||||
touching the limit would produce rather unhelpful error message instead
|
||||
of the real issue:
|
||||
|
||||
cannot get locked memory limit of process -1: No such file or
|
||||
directory
|
||||
|
||||
This patch is RHEL-only caused by misplacing the call to
|
||||
qemuDomainSetMaxMemLock when the "qemu_migration: Restore original
|
||||
memory locking limit" upstream patch was backported to an older code
|
||||
base.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107954
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index db5163e993..11f87296d6 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -5895,6 +5895,8 @@ qemuMigrationDstFinish(virQEMUDriver *driver,
|
||||
*/
|
||||
if (inPostCopy)
|
||||
g_clear_pointer(&priv->job.completed, qemuDomainJobInfoFree);
|
||||
+
|
||||
+ qemuDomainSetMaxMemLock(vm, 0, &priv->preMigrationMemlock);
|
||||
}
|
||||
|
||||
qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN,
|
||||
@@ -5907,7 +5909,6 @@ qemuMigrationDstFinish(virQEMUDriver *driver,
|
||||
cleanup:
|
||||
g_clear_pointer(&jobInfo, qemuDomainJobInfoFree);
|
||||
virPortAllocatorRelease(port);
|
||||
- qemuDomainSetMaxMemLock(vm, 0, &priv->preMigrationMemlock);
|
||||
if (priv->mon)
|
||||
qemuMonitorSetDomainLog(priv->mon, NULL, NULL, NULL);
|
||||
VIR_FREE(priv->origname);
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
From f66beef45382be2aed6d021a409e90f8114c8671 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f66beef45382be2aed6d021a409e90f8114c8671@dist-git>
|
||||
From 9c5daeb8c99ca12a66387de448f585742887fd75 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9c5daeb8c99ca12a66387de448f585742887fd75@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:21 +0100
|
||||
Subject: [PATCH] RHEL: virscsi: Check device type before getting it's /dev
|
||||
|
@ -16,20 +16,20 @@ Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
|||
Message-Id: <20200306145226.1610708-2-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/util/virscsi.c | 146 ++++++++++++++++++++++++++++++---
|
||||
src/util/virscsi.c | 140 ++++++++++++++++++++++++++++++---
|
||||
tests/virscsidata/0-0-0-0/type | 1 +
|
||||
tests/virscsidata/1-0-0-0/type | 1 +
|
||||
3 files changed, 137 insertions(+), 11 deletions(-)
|
||||
3 files changed, 131 insertions(+), 11 deletions(-)
|
||||
create mode 100644 tests/virscsidata/0-0-0-0/type
|
||||
create mode 100644 tests/virscsidata/1-0-0-0/type
|
||||
|
||||
diff --git a/src/util/virscsi.c b/src/util/virscsi.c
|
||||
index 06659c45c7..c40857977f 100644
|
||||
index 6a90d9002f..770f727cac 100644
|
||||
--- a/src/util/virscsi.c
|
||||
+++ b/src/util/virscsi.c
|
||||
@@ -50,6 +50,32 @@ struct _virUsedByInfo {
|
||||
@@ -47,6 +47,32 @@ struct _virUsedByInfo {
|
||||
};
|
||||
typedef struct _virUsedByInfo virUsedByInfo;
|
||||
typedef virUsedByInfo *virUsedByInfoPtr;
|
||||
|
||||
+
|
||||
+/* Keep in sync with scsi/scsi_proto.h */
|
||||
|
@ -60,8 +60,8 @@ index 06659c45c7..c40857977f 100644
|
|||
struct _virSCSIDevice {
|
||||
unsigned int adapter;
|
||||
unsigned int bus;
|
||||
@@ -134,6 +160,84 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix,
|
||||
return sg;
|
||||
@@ -126,6 +152,78 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+
|
||||
|
@ -119,40 +119,33 @@ index 06659c45c7..c40857977f 100644
|
|||
+ unsigned int target,
|
||||
+ unsigned long long unit)
|
||||
+{
|
||||
+ DIR *dir = NULL;
|
||||
+ g_autoptr(DIR) dir = NULL;
|
||||
+ struct dirent *entry;
|
||||
+ g_autofree char *path = NULL;
|
||||
+ char *name = NULL;
|
||||
+
|
||||
+ path = g_strdup_printf("%s/%d:%u:%u:%llu/block",
|
||||
+ prefix, adapter, bus, target, unit);
|
||||
+
|
||||
+ if (virDirOpen(&dir, path) < 0)
|
||||
+ goto cleanup;
|
||||
+ return NULL;
|
||||
+
|
||||
+ while (virDirRead(dir, &entry, path) > 0) {
|
||||
+ name = g_strdup(entry->d_name);
|
||||
+ break;
|
||||
+ }
|
||||
+ if (virDirRead(dir, &entry, path) > 0)
|
||||
+ return g_strdup(entry->d_name);
|
||||
+
|
||||
+ cleanup:
|
||||
+ VIR_DIR_CLOSE(dir);
|
||||
+
|
||||
+ return name;
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/* Returns device name (e.g. "sdc") on success, or NULL
|
||||
* on failure.
|
||||
*/
|
||||
@@ -144,32 +248,52 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
@@ -136,25 +234,45 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
unsigned int target,
|
||||
unsigned long long unit)
|
||||
{
|
||||
- DIR *dir = NULL;
|
||||
- g_autoptr(DIR) dir = NULL;
|
||||
- struct dirent *entry;
|
||||
- g_autofree char *path = NULL;
|
||||
char *name = NULL;
|
||||
unsigned int adapter_id;
|
||||
+ virSCSIDeviceType type;
|
||||
const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SCSI_DEVICES;
|
||||
|
@ -162,19 +155,20 @@ index 06659c45c7..c40857977f 100644
|
|||
|
||||
- path = g_strdup_printf("%s/%d:%u:%u:%llu/block", prefix, adapter_id, bus,
|
||||
- target, unit);
|
||||
-
|
||||
- if (virDirOpen(&dir, path) < 0)
|
||||
+ if (virSCSIDeviceGetType(prefix, adapter_id,
|
||||
+ bus, target, unit, &type) < 0)
|
||||
+ return NULL;
|
||||
return NULL;
|
||||
|
||||
- if (virDirOpen(&dir, path) < 0)
|
||||
- goto cleanup;
|
||||
- if (virDirRead(dir, &entry, path) > 0)
|
||||
- return g_strdup(entry->d_name);
|
||||
-
|
||||
- return NULL;
|
||||
+ switch (type) {
|
||||
+ case VIR_SCSI_DEVICE_TYPE_DISK:
|
||||
+ name = virSCSIDeviceGetDevNameBlock(prefix, adapter_id, bus, target, unit);
|
||||
+ break;
|
||||
|
||||
- while (virDirRead(dir, &entry, path) > 0) {
|
||||
- name = g_strdup(entry->d_name);
|
||||
+ return virSCSIDeviceGetDevNameBlock(prefix, adapter_id, bus, target, unit);
|
||||
+
|
||||
+ case VIR_SCSI_DEVICE_TYPE_TAPE:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_PRINTER:
|
||||
+ case VIR_SCSI_DEVICE_TYPE_PROCESSOR:
|
||||
|
@ -197,18 +191,11 @@ index 06659c45c7..c40857977f 100644
|
|||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unsupported SCSI device type: %x"),
|
||||
+ type);
|
||||
break;
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- VIR_DIR_CLOSE(dir);
|
||||
return name;
|
||||
+ return NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
+
|
||||
virSCSIDevicePtr
|
||||
virSCSIDeviceNew(const char *sysfs_prefix,
|
||||
const char *adapter,
|
||||
virSCSIDevice *
|
||||
diff --git a/tests/virscsidata/0-0-0-0/type b/tests/virscsidata/0-0-0-0/type
|
||||
new file mode 100644
|
||||
index 0000000000..573541ac97
|
||||
|
@ -224,5 +211,5 @@ index 0000000000..573541ac97
|
|||
@@ -0,0 +1 @@
|
||||
+0
|
||||
--
|
||||
2.25.1
|
||||
2.34.1
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From c9fc757c867d197c17350b6a9cabc63cc08105d2 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c9fc757c867d197c17350b6a9cabc63cc08105d2@dist-git>
|
||||
From 1ce4faffcd4616bbcea4d198c3f60cbcfddd784e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <1ce4faffcd4616bbcea4d198c3f60cbcfddd784e@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:23 +0100
|
||||
Subject: [PATCH] RHEL: virscsi: Introduce and use
|
||||
|
@ -22,16 +22,18 @@ Message-Id: <20200306145226.1610708-4-abologna@redhat.com>
|
|||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/libvirt_private.syms | 1 +
|
||||
src/qemu/qemu_conf.c | 18 +++++++++++-------
|
||||
src/util/virscsi.c | 18 ++++++++++++++++++
|
||||
src/qemu/qemu_conf.c | 31 +++++++++++++++++++------------
|
||||
src/util/virscsi.c | 19 +++++++++++++++++++
|
||||
src/util/virscsi.h | 5 +++++
|
||||
4 files changed, 35 insertions(+), 7 deletions(-)
|
||||
src/util/virutil.c | 24 ++++++------------------
|
||||
src/util/virutil.h | 2 --
|
||||
6 files changed, 50 insertions(+), 32 deletions(-)
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index 5dc99e03cf..1f97879faa 100644
|
||||
index 5b76e66e61..2c42e2a5e8 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -2959,6 +2959,7 @@ virSCSIDeviceGetSgName;
|
||||
@@ -3191,6 +3191,7 @@ virSCSIDeviceGetSgName;
|
||||
virSCSIDeviceGetShareable;
|
||||
virSCSIDeviceGetTarget;
|
||||
virSCSIDeviceGetUnit;
|
||||
|
@ -40,29 +42,50 @@ index 5dc99e03cf..1f97879faa 100644
|
|||
virSCSIDeviceListAdd;
|
||||
virSCSIDeviceListCount;
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 7aaf2862a4..6d6feb97cd 100644
|
||||
index 28c334761b..a0b8076d6b 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -1789,7 +1789,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
virDomainDiskDefPtr disk = NULL;
|
||||
virDomainHostdevDefPtr hostdev = NULL;
|
||||
@@ -1506,7 +1506,7 @@ qemuCheckUnprivSGIO(GHashTable *sharedDevices,
|
||||
if (!(virHashLookup(sharedDevices, key)))
|
||||
return 0;
|
||||
|
||||
- if (virGetDeviceUnprivSGIO(device_path, NULL, &val) < 0)
|
||||
+ if (virGetDeviceUnprivSGIO(sysfs_path, &val) < 0)
|
||||
return -1;
|
||||
|
||||
/* Error message on failure needs to be handled in caller
|
||||
@@ -1857,39 +1857,46 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
|
||||
virDomainDiskDef *disk = NULL;
|
||||
virDomainHostdevDef *hostdev = NULL;
|
||||
g_autofree char *sysfs_path = NULL;
|
||||
- g_autofree char *hostdev_path = NULL;
|
||||
const char *path = NULL;
|
||||
- const char *path = NULL;
|
||||
int val = 0;
|
||||
|
||||
@@ -1804,24 +1803,29 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
|
||||
/* "sgio" is only valid for block disk; cdrom
|
||||
* and floopy disk can have empty source.
|
||||
*/
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
+ const char *path;
|
||||
+
|
||||
disk = dev->data.disk;
|
||||
+ path = virDomainDiskGetSource(disk);
|
||||
|
||||
if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
|
||||
!virStorageSourceIsBlockLocal(disk->src))
|
||||
return 0;
|
||||
|
||||
path = virDomainDiskGetSource(disk);
|
||||
+
|
||||
- path = virDomainDiskGetSource(disk);
|
||||
+ if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, NULL)))
|
||||
+ return -1;
|
||||
+
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
+ virDomainHostdevSubsysSCSI *scsisrc;
|
||||
+ virDomainHostdevSubsysSCSIHost *scsihostsrc;
|
||||
+
|
||||
hostdev = dev->data.hostdev;
|
||||
+ virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
|
||||
+ virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
|
||||
+ scsisrc = &hostdev->source.subsys.u.scsi;
|
||||
+ scsihostsrc = &scsisrc->u.host;
|
||||
|
||||
if (hostdev->source.subsys.u.scsi.protocol ==
|
||||
VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
|
||||
|
@ -87,14 +110,29 @@ index 7aaf2862a4..6d6feb97cd 100644
|
|||
/* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0. */
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
if (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
|
||||
@@ -1909,11 +1916,11 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
|
||||
if (virFileExists(sysfs_path) || val == 1) {
|
||||
int curr_val;
|
||||
|
||||
- if (virGetDeviceUnprivSGIO(path, NULL, &curr_val) < 0)
|
||||
+ if (virGetDeviceUnprivSGIO(sysfs_path, &curr_val) < 0)
|
||||
return -1;
|
||||
|
||||
if (curr_val != val &&
|
||||
- virSetDeviceUnprivSGIO(path, NULL, val) < 0) {
|
||||
+ virSetDeviceUnprivSGIO(sysfs_path, val) < 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
diff --git a/src/util/virscsi.c b/src/util/virscsi.c
|
||||
index 57958c06ea..1bba4051b6 100644
|
||||
index 6165196423..b437fdcac0 100644
|
||||
--- a/src/util/virscsi.c
|
||||
+++ b/src/util/virscsi.c
|
||||
@@ -322,6 +322,24 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
@@ -302,6 +302,25 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+
|
||||
+char *
|
||||
+virSCSIDeviceGetUnprivSGIOSysfsPath(const char *sysfs_prefix,
|
||||
+ const char *adapter,
|
||||
|
@ -113,14 +151,14 @@ index 57958c06ea..1bba4051b6 100644
|
|||
+}
|
||||
+
|
||||
+
|
||||
virSCSIDevicePtr
|
||||
virSCSIDevice *
|
||||
virSCSIDeviceNew(const char *sysfs_prefix,
|
||||
const char *adapter,
|
||||
diff --git a/src/util/virscsi.h b/src/util/virscsi.h
|
||||
index 51627e0c05..c040d76716 100644
|
||||
index 65ad15ed76..5721985939 100644
|
||||
--- a/src/util/virscsi.h
|
||||
+++ b/src/util/virscsi.h
|
||||
@@ -42,6 +42,11 @@ char *virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
@@ -40,6 +40,11 @@ char *virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
unsigned int bus,
|
||||
unsigned int target,
|
||||
unsigned long long unit);
|
||||
|
@ -130,8 +168,105 @@ index 51627e0c05..c040d76716 100644
|
|||
+ unsigned int target,
|
||||
+ unsigned long long unit);
|
||||
|
||||
virSCSIDevicePtr virSCSIDeviceNew(const char *sysfs_prefix,
|
||||
virSCSIDevice *virSCSIDeviceNew(const char *sysfs_prefix,
|
||||
const char *adapter,
|
||||
diff --git a/src/util/virutil.c b/src/util/virutil.c
|
||||
index e04f1343d8..b1e37b45c5 100644
|
||||
--- a/src/util/virutil.c
|
||||
+++ b/src/util/virutil.c
|
||||
@@ -1377,18 +1377,13 @@ virGetUnprivSGIOSysfsPath(const char *path,
|
||||
|
||||
int
|
||||
virSetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int unpriv_sgio)
|
||||
{
|
||||
- char *sysfs_path = NULL;
|
||||
char *val = NULL;
|
||||
int ret = -1;
|
||||
int rc;
|
||||
|
||||
- if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
|
||||
- return -1;
|
||||
-
|
||||
- if (!virFileExists(sysfs_path)) {
|
||||
+ if (!virFileExists(path)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("unpriv_sgio is not supported by this kernel"));
|
||||
goto cleanup;
|
||||
@@ -1396,38 +1391,32 @@ virSetDeviceUnprivSGIO(const char *path,
|
||||
|
||||
val = g_strdup_printf("%d", unpriv_sgio);
|
||||
|
||||
- if ((rc = virFileWriteStr(sysfs_path, val, 0)) < 0) {
|
||||
- virReportSystemError(-rc, _("failed to set %s"), sysfs_path);
|
||||
+ if ((rc = virFileWriteStr(path, val, 0)) < 0) {
|
||||
+ virReportSystemError(-rc, _("failed to set %s"), path);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
- VIR_FREE(sysfs_path);
|
||||
VIR_FREE(val);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
virGetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int *unpriv_sgio)
|
||||
{
|
||||
- char *sysfs_path = NULL;
|
||||
char *buf = NULL;
|
||||
char *tmp = NULL;
|
||||
int ret = -1;
|
||||
|
||||
- if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
|
||||
- return -1;
|
||||
-
|
||||
- if (!virFileExists(sysfs_path)) {
|
||||
+ if (!virFileExists(path)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("unpriv_sgio is not supported by this kernel"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (virFileReadAll(sysfs_path, 1024, &buf) < 0)
|
||||
+ if (virFileReadAll(path, 1024, &buf) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if ((tmp = strchr(buf, '\n')))
|
||||
@@ -1435,13 +1424,12 @@ virGetDeviceUnprivSGIO(const char *path,
|
||||
|
||||
if (virStrToLong_i(buf, NULL, 10, unpriv_sgio) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("failed to parse value of %s"), sysfs_path);
|
||||
+ _("failed to parse value of %s"), path);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
- VIR_FREE(sysfs_path);
|
||||
VIR_FREE(buf);
|
||||
return ret;
|
||||
}
|
||||
diff --git a/src/util/virutil.h b/src/util/virutil.h
|
||||
index 854b494890..da267c6446 100644
|
||||
--- a/src/util/virutil.h
|
||||
+++ b/src/util/virutil.h
|
||||
@@ -120,10 +120,8 @@ int virGetDeviceID(const char *path,
|
||||
int *maj,
|
||||
int *min) G_GNUC_NO_INLINE;
|
||||
int virSetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int unpriv_sgio);
|
||||
int virGetDeviceUnprivSGIO(const char *path,
|
||||
- const char *sysfs_dir,
|
||||
int *unpriv_sgio);
|
||||
char *virGetUnprivSGIOSysfsPath(const char *path,
|
||||
const char *sysfs_dir);
|
||||
--
|
||||
2.25.1
|
||||
2.34.1
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From c481bcacd1f515d2e93036dc452a25e9ff06f7ae Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c481bcacd1f515d2e93036dc452a25e9ff06f7ae@dist-git>
|
||||
From 5b96a8773d33af9822f6b6ccddc8f372841895a6 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5b96a8773d33af9822f6b6ccddc8f372841895a6@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:22 +0100
|
||||
Subject: [PATCH] RHEL: virscsi: Support TAPEs in virSCSIDeviceGetDevName()
|
||||
|
@ -15,7 +15,7 @@ Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
|||
Message-Id: <20200306145226.1610708-3-abologna@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/util/virscsi.c | 28 +++++++++++++++
|
||||
src/util/virscsi.c | 27 +++++++++++++++
|
||||
tests/virscsidata/2-0-0-0/model | 1 +
|
||||
tests/virscsidata/2-0-0-0/scsi_tape/st0/dev | 1 +
|
||||
tests/virscsidata/2-0-0-0/sg3/dev | 1 +
|
||||
|
@ -24,7 +24,7 @@ Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
|||
tests/virscsidata/2-0-0-0/vendor | 1 +
|
||||
tests/virscsidata/sg3 | 0
|
||||
tests/virscsitest.c | 38 ++++++++++++++++++---
|
||||
9 files changed, 67 insertions(+), 5 deletions(-)
|
||||
9 files changed, 66 insertions(+), 5 deletions(-)
|
||||
create mode 100644 tests/virscsidata/2-0-0-0/model
|
||||
create mode 100644 tests/virscsidata/2-0-0-0/scsi_tape/st0/dev
|
||||
create mode 100644 tests/virscsidata/2-0-0-0/sg3/dev
|
||||
|
@ -34,10 +34,10 @@ Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
|||
create mode 100644 tests/virscsidata/sg3
|
||||
|
||||
diff --git a/src/util/virscsi.c b/src/util/virscsi.c
|
||||
index c40857977f..57958c06ea 100644
|
||||
index 770f727cac..6165196423 100644
|
||||
--- a/src/util/virscsi.c
|
||||
+++ b/src/util/virscsi.c
|
||||
@@ -238,6 +238,31 @@ virSCSIDeviceGetDevNameBlock(const char *prefix,
|
||||
@@ -224,6 +224,31 @@ virSCSIDeviceGetDevNameBlock(const char *prefix,
|
||||
}
|
||||
|
||||
|
||||
|
@ -69,12 +69,11 @@ index c40857977f..57958c06ea 100644
|
|||
/* Returns device name (e.g. "sdc") on success, or NULL
|
||||
* on failure.
|
||||
*/
|
||||
@@ -266,6 +291,9 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
break;
|
||||
@@ -250,6 +275,8 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
|
||||
return virSCSIDeviceGetDevNameBlock(prefix, adapter_id, bus, target, unit);
|
||||
|
||||
case VIR_SCSI_DEVICE_TYPE_TAPE:
|
||||
+ name = virSCSIDeviceGetDevNameTape(prefix, adapter_id, bus, target, unit);
|
||||
+ break;
|
||||
+ return virSCSIDeviceGetDevNameTape(prefix, adapter_id, bus, target, unit);
|
||||
+
|
||||
case VIR_SCSI_DEVICE_TYPE_PRINTER:
|
||||
case VIR_SCSI_DEVICE_TYPE_PROCESSOR:
|
||||
|
@ -126,10 +125,10 @@ diff --git a/tests/virscsidata/sg3 b/tests/virscsidata/sg3
|
|||
new file mode 100644
|
||||
index 0000000000..e69de29bb2
|
||||
diff --git a/tests/virscsitest.c b/tests/virscsitest.c
|
||||
index d5a0da4753..e501d6d041 100644
|
||||
index c96699e157..924b77af08 100644
|
||||
--- a/tests/virscsitest.c
|
||||
+++ b/tests/virscsitest.c
|
||||
@@ -32,18 +32,34 @@ VIR_LOG_INIT("tests.scsitest");
|
||||
@@ -33,17 +33,33 @@ VIR_LOG_INIT("tests.scsitest");
|
||||
|
||||
static char *virscsi_prefix;
|
||||
|
||||
|
@ -146,8 +145,7 @@ index d5a0da4753..e501d6d041 100644
|
|||
+testGetDevName(const void *opaque)
|
||||
{
|
||||
+ const testGetDevNameData *data = opaque;
|
||||
char *name = NULL;
|
||||
int ret = -1;
|
||||
g_autofree char *name = NULL;
|
||||
|
||||
if (!(name = virSCSIDeviceGetDevName(virscsi_prefix,
|
||||
- "scsi_host1", 0, 0, 0)))
|
||||
|
@ -162,12 +160,12 @@ index d5a0da4753..e501d6d041 100644
|
|||
+ fprintf(stderr,
|
||||
+ "SCSI dev name mismatch, expected %s got %s",
|
||||
+ data->expectedName, name);
|
||||
goto cleanup;
|
||||
return -1;
|
||||
+ }
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
@@ -212,15 +228,27 @@ mymain(void)
|
||||
return 0;
|
||||
}
|
||||
@@ -200,15 +216,27 @@ mymain(void)
|
||||
|
||||
CREATE_SYMLINK("0-0-0-0", "0:0:0:0");
|
||||
CREATE_SYMLINK("1-0-0-0", "1:0:0:0");
|
||||
|
@ -198,5 +196,5 @@ index d5a0da4753..e501d6d041 100644
|
|||
ret = -1;
|
||||
|
||||
--
|
||||
2.25.1
|
||||
2.34.1
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
From cd2640c256389b4041e4cd38fd72f77184bb4414 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <cd2640c256389b4041e4cd38fd72f77184bb4414@dist-git>
|
||||
From ac8357ab7dd676af82b971673f8d7e862ff07624 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ac8357ab7dd676af82b971673f8d7e862ff07624@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 6 Mar 2020 15:52:24 +0100
|
||||
Subject: [PATCH] RHEL: virutil: Accept non-block devices in virGetDeviceID()
|
||||
|
@ -19,10 +19,10 @@ Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
|||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/src/util/virutil.c b/src/util/virutil.c
|
||||
index a0fd7618ee..f142951acf 100644
|
||||
index b1e37b45c5..ced8493516 100644
|
||||
--- a/src/util/virutil.c
|
||||
+++ b/src/util/virutil.c
|
||||
@@ -1379,9 +1379,6 @@ virGetDeviceID(const char *path, int *maj, int *min)
|
||||
@@ -1333,9 +1333,6 @@ virGetDeviceID(const char *path, int *maj, int *min)
|
||||
if (stat(path, &sb) < 0)
|
||||
return -errno;
|
||||
|
||||
|
@ -33,5 +33,5 @@ index a0fd7618ee..f142951acf 100644
|
|||
*maj = major(sb.st_rdev);
|
||||
if (min)
|
||||
--
|
||||
2.25.1
|
||||
2.34.1
|
||||
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
From ca7c7a8b07c31dc8bf96f7da6fb53af884e36ddb Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ca7c7a8b07c31dc8bf96f7da6fb53af884e36ddb@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 4 Feb 2020 15:08:01 +0100
|
||||
Subject: [PATCH] Remove checking of return value of virHashNew
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
There are two calls to virHashNew which check the return value. It's not
|
||||
necessary any more as virHashNew always returns a valid pointer.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 6eab924daa243afa67f2cc20dcbdf521904bb62b)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1793263
|
||||
Message-Id: <08acb2e50b584a75c0131a628ee441f47e8fe823.1580824112.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/backup_conf.c | 6 +-----
|
||||
src/qemu/qemu_monitor_json.c | 3 +--
|
||||
2 files changed, 2 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c
|
||||
index b370b686f1..64c8f6cc09 100644
|
||||
--- a/src/conf/backup_conf.c
|
||||
+++ b/src/conf/backup_conf.c
|
||||
@@ -439,15 +439,11 @@ virDomainBackupAlignDisks(virDomainBackupDefPtr def,
|
||||
virDomainDefPtr dom,
|
||||
const char *suffix)
|
||||
{
|
||||
- g_autoptr(virHashTable) disks = NULL;
|
||||
+ g_autoptr(virHashTable) disks = virHashNew(NULL);
|
||||
size_t i;
|
||||
int ndisks;
|
||||
bool backup_all = false;
|
||||
|
||||
-
|
||||
- if (!(disks = virHashNew(NULL)))
|
||||
- return -1;
|
||||
-
|
||||
/* Unlikely to have a guest without disks but technically possible. */
|
||||
if (!dom->ndisks) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
|
||||
index 5d8c7e9b5e..3fc0bcb80c 100644
|
||||
--- a/src/qemu/qemu_monitor_json.c
|
||||
+++ b/src/qemu/qemu_monitor_json.c
|
||||
@@ -2992,8 +2992,7 @@ qemuMonitorJSONBlockGetNamedNodeDataJSON(virJSONValuePtr nodes)
|
||||
{
|
||||
g_autoptr(virHashTable) ret = NULL;
|
||||
|
||||
- if (!(ret = virHashNew((virHashDataFree) qemuMonitorJSONBlockNamedNodeDataFree)))
|
||||
- return NULL;
|
||||
+ ret = virHashNew((virHashDataFree) qemuMonitorJSONBlockNamedNodeDataFree);
|
||||
|
||||
if (virJSONValueArrayForeachSteal(nodes,
|
||||
qemuMonitorJSONBlockGetNamedNodeDataWorker,
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
From 160863c5cac5519c287462439b9ce8abc6a8237e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <160863c5cac5519c287462439b9ce8abc6a8237e@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 16 Mar 2020 22:11:48 +0100
|
||||
Subject: [PATCH] Remove qemuDomainSecretInfoNew
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Replace it by a direct call to qemuDomainSecretAESSetupFromSecret.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit f742461389c11a7d4cc8bda941814c4128eadf94)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <c14d98c90ae9d0e9c5e4fef6a8e5061411c43a78.1584391726.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_domain.c | 53 +++++++++++-------------------------------
|
||||
1 file changed, 13 insertions(+), 40 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index c286f50650..af23079d5d 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -1669,33 +1669,6 @@ qemuDomainSecretInfoNewPlain(virSecretUsageType usageType,
|
||||
}
|
||||
|
||||
|
||||
-/* qemuDomainSecretInfoNew:
|
||||
- * @priv: pointer to domain private object
|
||||
- * @srcAlias: Alias base to use for TLS object
|
||||
- * @usageType: Secret usage type
|
||||
- * @username: username
|
||||
- * @looupDef: lookup def describing secret
|
||||
- * @isLuks: boolean for luks lookup
|
||||
- *
|
||||
- * Helper function to create a secinfo to be used for secinfo consumers. This
|
||||
- * sets up encrypted data to be used with qemu's 'secret' object.
|
||||
- *
|
||||
- * Returns @secinfo on success, NULL on failure. Caller is responsible
|
||||
- * to eventually free @secinfo.
|
||||
- */
|
||||
-static qemuDomainSecretInfoPtr
|
||||
-qemuDomainSecretInfoNew(qemuDomainObjPrivatePtr priv,
|
||||
- const char *srcAlias,
|
||||
- virSecretUsageType usageType,
|
||||
- const char *username,
|
||||
- virSecretLookupTypeDefPtr lookupDef,
|
||||
- bool isLuks)
|
||||
-{
|
||||
- return qemuDomainSecretAESSetupFromSecret(priv, srcAlias, usageType, username,
|
||||
- lookupDef, isLuks);
|
||||
-}
|
||||
-
|
||||
-
|
||||
/**
|
||||
* qemuDomainSecretInfoTLSNew:
|
||||
* @priv: pointer to domain private object
|
||||
@@ -1722,9 +1695,9 @@ qemuDomainSecretInfoTLSNew(qemuDomainObjPrivatePtr priv,
|
||||
}
|
||||
seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID;
|
||||
|
||||
- return qemuDomainSecretInfoNew(priv, srcAlias,
|
||||
- VIR_SECRET_USAGE_TYPE_TLS, NULL,
|
||||
- &seclookupdef, false);
|
||||
+ return qemuDomainSecretAESSetupFromSecret(priv, srcAlias,
|
||||
+ VIR_SECRET_USAGE_TYPE_TLS,
|
||||
+ NULL, &seclookupdef, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -1814,11 +1787,11 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
|
||||
src->auth->username,
|
||||
&src->auth->seclookupdef);
|
||||
} else {
|
||||
- srcPriv->secinfo = qemuDomainSecretInfoNew(priv, authalias,
|
||||
- usageType,
|
||||
- src->auth->username,
|
||||
- &src->auth->seclookupdef,
|
||||
- false);
|
||||
+ srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv, authalias,
|
||||
+ usageType,
|
||||
+ src->auth->username,
|
||||
+ &src->auth->seclookupdef,
|
||||
+ false);
|
||||
}
|
||||
|
||||
if (!srcPriv->secinfo)
|
||||
@@ -1826,11 +1799,11 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
|
||||
}
|
||||
|
||||
if (hasEnc) {
|
||||
- if (!(srcPriv->encinfo =
|
||||
- qemuDomainSecretInfoNew(priv, encalias,
|
||||
- VIR_SECRET_USAGE_TYPE_VOLUME, NULL,
|
||||
- &src->encryption->secrets[0]->seclookupdef,
|
||||
- true)))
|
||||
+ if (!(srcPriv->encinfo = qemuDomainSecretAESSetupFromSecret(priv, encalias,
|
||||
+ VIR_SECRET_USAGE_TYPE_VOLUME,
|
||||
+ NULL,
|
||||
+ &src->encryption->secrets[0]->seclookupdef,
|
||||
+ true)))
|
||||
return -1;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
From 732113455fb7eadeea178c71cc77f0ffdf639f24 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <732113455fb7eadeea178c71cc77f0ffdf639f24@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 18 Jan 2022 12:40:09 +0100
|
||||
Subject: [PATCH] Revert "report error when virProcessGetStatInfo() is unable
|
||||
to parse data"
|
||||
|
||||
This reverts commit 938382b60ae5bd1f83b5cb09e1ce68b9a88f679a.
|
||||
|
||||
Turns out, the commit did more harm than good. It changed
|
||||
semantics on some public APIs. For instance, while
|
||||
qemuDomainGetInfo() previously did not returned an error it does
|
||||
now. While the calls to virProcessGetStatInfo() is guarded with
|
||||
virDomainObjIsActive() it doesn't necessarily mean that QEMU's
|
||||
PID is still alive. QEMU might be gone but we just haven't
|
||||
realized it (e.g. because the eof handler thread is waiting for a
|
||||
job).
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2041610
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 105dace22cc7b5b18d72a4dcad4a2cf386ce5c99)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/ch/ch_driver.c | 2 ++
|
||||
src/qemu/qemu_driver.c | 7 ++++++-
|
||||
src/util/virprocess.c | 8 ++------
|
||||
3 files changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c
|
||||
index 3cbc668489..53e0872207 100644
|
||||
--- a/src/ch/ch_driver.c
|
||||
+++ b/src/ch/ch_driver.c
|
||||
@@ -1073,6 +1073,8 @@ chDomainHelperGetVcpus(virDomainObj *vm,
|
||||
if (virProcessGetStatInfo(&vcpuinfo->cpuTime,
|
||||
&vcpuinfo->cpu, NULL,
|
||||
vm->pid, vcpupid) < 0) {
|
||||
+ virReportSystemError(errno, "%s",
|
||||
+ _("cannot get vCPU placement & pCPU time"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 65ac5ef367..d3d76c003f 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -1359,6 +1359,8 @@ qemuDomainHelperGetVcpus(virDomainObj *vm,
|
||||
if (virProcessGetStatInfo(&vcpuinfo->cpuTime,
|
||||
&vcpuinfo->cpu, NULL,
|
||||
vm->pid, vcpupid) < 0) {
|
||||
+ virReportSystemError(errno, "%s",
|
||||
+ _("cannot get vCPU placement & pCPU time"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -2519,6 +2521,8 @@ qemuDomainGetInfo(virDomainPtr dom,
|
||||
if (virDomainObjIsActive(vm)) {
|
||||
if (virProcessGetStatInfo(&(info->cpuTime), NULL, NULL,
|
||||
vm->pid, 0) < 0) {
|
||||
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
+ _("cannot read cputime for domain"));
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
@@ -10526,7 +10530,8 @@ qemuDomainMemoryStatsInternal(virQEMUDriver *driver,
|
||||
}
|
||||
|
||||
if (virProcessGetStatInfo(NULL, NULL, &rss, vm->pid, 0) < 0) {
|
||||
- virResetLastError();
|
||||
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
+ _("cannot get RSS for domain"));
|
||||
} else {
|
||||
stats[ret].tag = VIR_DOMAIN_MEMORY_STAT_RSS;
|
||||
stats[ret].val = rss;
|
||||
diff --git a/src/util/virprocess.c b/src/util/virprocess.c
|
||||
index 85d8c8e747..b559a4257e 100644
|
||||
--- a/src/util/virprocess.c
|
||||
+++ b/src/util/virprocess.c
|
||||
@@ -1784,10 +1784,7 @@ virProcessGetStatInfo(unsigned long long *cpuTime,
|
||||
virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_STIME], NULL, 10, &systime) < 0 ||
|
||||
virStrToLong_l(proc_stat[VIR_PROCESS_STAT_RSS], NULL, 10, &rss) < 0 ||
|
||||
virStrToLong_i(proc_stat[VIR_PROCESS_STAT_PROCESSOR], NULL, 10, &cpu) < 0) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("cannot parse process status data for pid '%d/%d'"),
|
||||
- (int) pid, (int) tid);
|
||||
- return -1;
|
||||
+ VIR_WARN("cannot parse process status data");
|
||||
}
|
||||
|
||||
/* We got jiffies
|
||||
@@ -1884,8 +1881,7 @@ virProcessGetStatInfo(unsigned long long *cpuTime G_GNUC_UNUSED,
|
||||
pid_t pid G_GNUC_UNUSED,
|
||||
pid_t tid G_GNUC_UNUSED)
|
||||
{
|
||||
- virReportSystemError(ENOSYS, "%s",
|
||||
- _("Process statistics data is not supported on this platform"));
|
||||
+ errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
--
|
||||
2.35.0
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
From 0c1bec6a89f97c77ba9e0ed4146deb8606ea6f16 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0c1bec6a89f97c77ba9e0ed4146deb8606ea6f16@dist-git>
|
||||
From: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Date: Wed, 25 Mar 2020 11:21:19 -0500
|
||||
Subject: [PATCH] api: disallow virDomainAgentSetResponseTimeout() on read-only
|
||||
connections
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This function changes the amount of time that libvirt waits for a
|
||||
response from the guest agent for all guest agent commands. Since this
|
||||
is a configuration change, it should not be allowed on read-only
|
||||
connections.
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 4cc90c2e62df653e909ad31fd810224bf8bcf913)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1814508
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Message-Id: <20200325162119.9047-2-jjongsma@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/libvirt-domain.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
|
||||
index eb66999f07..3deee54e48 100644
|
||||
--- a/src/libvirt-domain.c
|
||||
+++ b/src/libvirt-domain.c
|
||||
@@ -12554,6 +12554,8 @@ virDomainAgentSetResponseTimeout(virDomainPtr domain,
|
||||
virCheckDomainReturn(domain, -1);
|
||||
conn = domain->conn;
|
||||
|
||||
+ virCheckReadOnlyGoto(conn->flags, error);
|
||||
+
|
||||
if (conn->driver->domainAgentSetResponseTimeout) {
|
||||
if (conn->driver->domainAgentSetResponseTimeout(domain, timeout, flags) < 0)
|
||||
goto error;
|
||||
--
|
||||
2.26.0
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
From b0fb5cbba2e03fbca8471487bf78931b3090b108 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b0fb5cbba2e03fbca8471487bf78931b3090b108@dist-git>
|
||||
From: Jim Fehlig <jfehlig@suse.com>
|
||||
Date: Mon, 10 Jan 2022 11:42:58 -0700
|
||||
Subject: [PATCH] build: Only install libvirt-guests when building libvirtd
|
||||
|
||||
libvirt-guests was already moved to the libvirt daemon package in commit
|
||||
d800c50349. It only needs to be installed when building libvirtd.
|
||||
|
||||
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 3be5ba11a2c6fcb2dfdffa03ab4f847113f36b85)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2153688
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
tools/meson.build | 38 ++++++++++++++++++++------------------
|
||||
1 file changed, 20 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/tools/meson.build b/tools/meson.build
|
||||
index 22fa3604ba..2d0aecb90b 100644
|
||||
--- a/tools/meson.build
|
||||
+++ b/tools/meson.build
|
||||
@@ -297,29 +297,31 @@ if conf.has('WITH_SANLOCK')
|
||||
)
|
||||
endif
|
||||
|
||||
-configure_file(
|
||||
- input: 'libvirt-guests.sh.in',
|
||||
- output: '@BASENAME@',
|
||||
- configuration: tools_conf,
|
||||
- install: true,
|
||||
- install_dir: libexecdir,
|
||||
- install_mode: 'rwxrwxr-x',
|
||||
-)
|
||||
-
|
||||
-if init_script == 'systemd'
|
||||
- install_data(
|
||||
- 'libvirt-guests.sysconf',
|
||||
- install_dir: sysconfdir / 'sysconfig',
|
||||
- rename: 'libvirt-guests',
|
||||
- )
|
||||
-
|
||||
+if conf.has('WITH_LIBVIRTD')
|
||||
configure_file(
|
||||
- input: 'libvirt-guests.service.in',
|
||||
+ input: 'libvirt-guests.sh.in',
|
||||
output: '@BASENAME@',
|
||||
configuration: tools_conf,
|
||||
install: true,
|
||||
- install_dir: prefix / 'lib' / 'systemd' / 'system',
|
||||
+ install_dir: libexecdir,
|
||||
+ install_mode: 'rwxrwxr-x',
|
||||
)
|
||||
+
|
||||
+ if init_script == 'systemd'
|
||||
+ install_data(
|
||||
+ 'libvirt-guests.sysconf',
|
||||
+ install_dir: sysconfdir / 'sysconfig',
|
||||
+ rename: 'libvirt-guests',
|
||||
+ )
|
||||
+
|
||||
+ configure_file(
|
||||
+ input: 'libvirt-guests.service.in',
|
||||
+ output: '@BASENAME@',
|
||||
+ configuration: tools_conf,
|
||||
+ install: true,
|
||||
+ install_dir: prefix / 'lib' / 'systemd' / 'system',
|
||||
+ )
|
||||
+ endif
|
||||
endif
|
||||
|
||||
if bash_completion_dep.found()
|
||||
--
|
||||
2.39.0
|
||||
|
|
@ -1,449 +0,0 @@
|
|||
From 4abdfae3b67295a0143f650768630e009d1b2798 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4abdfae3b67295a0143f650768630e009d1b2798@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 16 Mar 2020 22:11:57 +0100
|
||||
Subject: [PATCH] conf: Add support for cookies for HTTP based disks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add possibility to specify one or more cookies for http based disks.
|
||||
This patch adds the config parser, storage and validation of the
|
||||
cookies.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3b076391befc3fe72deb0c244ac6c2b4c100b410)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <3135a30f0d0a1a4bb8da02c49f10a1bcf3a394f4.1584391727.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 10 ++
|
||||
docs/schemas/domaincommon.rng | 24 ++++
|
||||
src/conf/domain_conf.c | 82 +++++++++++++
|
||||
src/libvirt_private.syms | 1 +
|
||||
src/util/virstoragefile.c | 115 ++++++++++++++++++
|
||||
src/util/virstoragefile.h | 15 +++
|
||||
.../disk-network-http.xml | 8 ++
|
||||
7 files changed, 255 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 2cce247958..5a10d64e83 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -2839,6 +2839,9 @@
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol="http" name="url_path">
|
||||
<host name="hostname" port="80"/>
|
||||
+ <cookies>
|
||||
+ <cookie name="test">somevalue</cookie>
|
||||
+ </cookies>
|
||||
</source>
|
||||
<target dev='hde' bus='ide' tray='open'/>
|
||||
<readonly/>
|
||||
@@ -3382,6 +3385,13 @@
|
||||
certificate validation. Supported values are <code>yes</code> and
|
||||
<code>no</code>. <span class="since">Since 6.2.0</span>
|
||||
</dd>
|
||||
+ <dt><code>cookies</code></dt>
|
||||
+ <dd>
|
||||
+ For <code>http</code> and <code>https</code> accessed storage it's
|
||||
+ possible to pass one or more cookies. The cookie name and value
|
||||
+ must conform to the HTTP specification.
|
||||
+ <span class="since">Since 6.2.0</span>
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 548601b61c..bdf35e64f6 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1817,6 +1817,24 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
+ <define name="diskSourceNetworkProtocolHTTPCookies">
|
||||
+ <element name="cookies">
|
||||
+ <oneOrMore>
|
||||
+ <element name="cookie">
|
||||
+ <attribute name="name">
|
||||
+ <data type="string">
|
||||
+ <param name="pattern">[!#$%&'*+\-.0-9A-Z\^_`a-z|~]+</param>
|
||||
+ </data>
|
||||
+ </attribute>
|
||||
+ <data type="string">
|
||||
+ <param name="pattern">[!#$%&'()*+\-./0-9:>=<?@A-Z\^_`\[\]a-z|~]+</param>
|
||||
+ </data>
|
||||
+ </element>
|
||||
+ </oneOrMore>
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </define>
|
||||
+
|
||||
<define name="diskSourceNetworkProtocolHTTPS">
|
||||
<element name="source">
|
||||
<attribute name="protocol">
|
||||
@@ -1833,6 +1851,9 @@
|
||||
<optional>
|
||||
<ref name="diskSourceNetworkProtocolSSLVerify"/>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <ref name="diskSourceNetworkProtocolHTTPCookies"/>
|
||||
+ </optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -1849,6 +1870,9 @@
|
||||
<optional>
|
||||
<ref name="encryption"/>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <ref name="diskSourceNetworkProtocolHTTPCookies"/>
|
||||
+ </optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 70bbc35bb3..d066d3aac1 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9249,6 +9249,62 @@ virDomainDiskSourcePoolDefParse(xmlNodePtr node,
|
||||
}
|
||||
|
||||
|
||||
+static virStorageNetCookieDefPtr
|
||||
+virDomainStorageNetCookieParse(xmlNodePtr node,
|
||||
+ xmlXPathContextPtr ctxt)
|
||||
+{
|
||||
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
||||
+ g_autoptr(virStorageNetCookieDef) cookie = NULL;
|
||||
+
|
||||
+ ctxt->node = node;
|
||||
+
|
||||
+ cookie = g_new0(virStorageNetCookieDef, 1);
|
||||
+
|
||||
+ if (!(cookie->name = virXPathString("string(./@name)", ctxt))) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, "%s", _("missing cookie name"));
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (!(cookie->value = virXPathString("string(.)", ctxt))) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, _("missing value for cookie '%s'"),
|
||||
+ cookie->name);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return g_steal_pointer(&cookie);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+virDomainStorageNetCookiesParse(xmlNodePtr node,
|
||||
+ xmlXPathContextPtr ctxt,
|
||||
+ virStorageSourcePtr src)
|
||||
+{
|
||||
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
||||
+ g_autofree xmlNodePtr *nodes = NULL;
|
||||
+ ssize_t nnodes;
|
||||
+ size_t i;
|
||||
+
|
||||
+ ctxt->node = node;
|
||||
+
|
||||
+ if ((nnodes = virXPathNodeSet("./cookie", ctxt, &nodes)) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ src->cookies = g_new0(virStorageNetCookieDefPtr, nnodes);
|
||||
+ src->ncookies = nnodes;
|
||||
+
|
||||
+ for (i = 0; i < nnodes; i++) {
|
||||
+ if (!(src->cookies[i] = virDomainStorageNetCookieParse(nodes[i], ctxt)))
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (virStorageSourceNetCookiesValidate(src) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
xmlXPathContextPtr ctxt,
|
||||
@@ -9260,6 +9316,7 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
g_autofree char *haveTLS = NULL;
|
||||
g_autofree char *tlsCfg = NULL;
|
||||
g_autofree char *sslverifystr = NULL;
|
||||
+ xmlNodePtr tmpnode;
|
||||
|
||||
if (!(protocol = virXMLPropString(node, "protocol"))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
@@ -9345,6 +9402,13 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
src->sslverify = verify;
|
||||
}
|
||||
|
||||
+ if ((src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS) &&
|
||||
+ (tmpnode = virXPathNode("./cookies", ctxt))) {
|
||||
+ if (virDomainStorageNetCookiesParse(tmpnode, ctxt, src) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -24281,6 +24345,22 @@ virDomainSourceDefFormatSeclabel(virBufferPtr buf,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+virDomainDiskSourceFormatNetworkCookies(virBufferPtr buf,
|
||||
+ virStorageSourcePtr src)
|
||||
+{
|
||||
+ g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+ size_t i;
|
||||
+
|
||||
+ for (i = 0; i < src->ncookies; i++) {
|
||||
+ virBufferEscapeString(&childBuf, "<cookie name='%s'>", src->cookies[i]->name);
|
||||
+ virBufferEscapeString(&childBuf, "%s</cookie>\n", src->cookies[i]->value);
|
||||
+ }
|
||||
+
|
||||
+ virXMLFormatElement(buf, "cookies", NULL, &childBuf);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
virBufferPtr childBuf,
|
||||
@@ -24331,6 +24411,8 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
virTristateBoolTypeToString(src->sslverify));
|
||||
}
|
||||
|
||||
+ virDomainDiskSourceFormatNetworkCookies(childBuf, src);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index dbbec0d567..ac5527ef01 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -3123,6 +3123,7 @@ virStorageSourceIsEmpty;
|
||||
virStorageSourceIsLocalStorage;
|
||||
virStorageSourceIsRelative;
|
||||
virStorageSourceIsSameLocation;
|
||||
+virStorageSourceNetCookiesValidate;
|
||||
virStorageSourceNetworkAssignDefaultPorts;
|
||||
virStorageSourceNew;
|
||||
virStorageSourceNewFromBacking;
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index cfa77fccf8..6350168d73 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2157,6 +2157,118 @@ virStorageSourceSeclabelsCopy(virStorageSourcePtr to,
|
||||
}
|
||||
|
||||
|
||||
+void
|
||||
+virStorageNetCookieDefFree(virStorageNetCookieDefPtr def)
|
||||
+{
|
||||
+ if (!def)
|
||||
+ return;
|
||||
+
|
||||
+ g_free(def->name);
|
||||
+ g_free(def->value);
|
||||
+
|
||||
+ g_free(def);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+virStorageSourceNetCookiesClear(virStorageSourcePtr src)
|
||||
+{
|
||||
+ size_t i;
|
||||
+
|
||||
+ if (!src || !src->cookies)
|
||||
+ return;
|
||||
+
|
||||
+ for (i = 0; i < src->ncookies; i++)
|
||||
+ virStorageNetCookieDefFree(src->cookies[i]);
|
||||
+
|
||||
+ g_clear_pointer(&src->cookies, g_free);
|
||||
+ src->ncookies = 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+virStorageSourceNetCookiesCopy(virStorageSourcePtr to,
|
||||
+ const virStorageSource *from)
|
||||
+{
|
||||
+ size_t i;
|
||||
+
|
||||
+ if (from->ncookies == 0)
|
||||
+ return;
|
||||
+
|
||||
+ to->cookies = g_new0(virStorageNetCookieDefPtr, from->ncookies);
|
||||
+ to->ncookies = from->ncookies;
|
||||
+
|
||||
+ for (i = 0; i < from->ncookies; i++) {
|
||||
+ to->cookies[i]->name = g_strdup(from->cookies[i]->name);
|
||||
+ to->cookies[i]->value = g_strdup(from->cookies[i]->value);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* see https://tools.ietf.org/html/rfc6265#section-4.1.1 */
|
||||
+static const char virStorageSourceCookieValueInvalidChars[] =
|
||||
+ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
|
||||
+ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
|
||||
+ " \",;\\";
|
||||
+
|
||||
+/* in addition cookie name can't contain these */
|
||||
+static const char virStorageSourceCookieNameInvalidChars[] =
|
||||
+ "()<>@:/[]?={}";
|
||||
+
|
||||
+static int
|
||||
+virStorageSourceNetCookieValidate(virStorageNetCookieDefPtr def)
|
||||
+{
|
||||
+ /* name must have at least 1 character */
|
||||
+ if (*(def->name) == '\0') {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
+ _("cookie name must not be empty"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ /* check invalid characters in name */
|
||||
+ if (virStringHasChars(def->name, virStorageSourceCookieValueInvalidChars) ||
|
||||
+ virStringHasChars(def->name, virStorageSourceCookieNameInvalidChars)) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("cookie name '%s' contains invalid characters"),
|
||||
+ def->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ /* check invalid characters in value */
|
||||
+ if (virStringHasChars(def->value, virStorageSourceCookieValueInvalidChars)) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("value of cookie '%s' contains invalid characters"),
|
||||
+ def->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+int
|
||||
+virStorageSourceNetCookiesValidate(virStorageSourcePtr src)
|
||||
+{
|
||||
+ size_t i;
|
||||
+ size_t j;
|
||||
+
|
||||
+ for (i = 0; i < src->ncookies; i++) {
|
||||
+ if (virStorageSourceNetCookieValidate(src->cookies[i]) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ for (j = i + 1; j < src->ncookies; j++) {
|
||||
+ if (STREQ(src->cookies[i]->name, src->cookies[j]->name)) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, _("duplicate cookie '%s'"),
|
||||
+ src->cookies[i]->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static virStorageTimestampsPtr
|
||||
virStorageTimestampsCopy(const virStorageTimestamps *src)
|
||||
{
|
||||
@@ -2299,6 +2411,8 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
def->nhosts = src->nhosts;
|
||||
}
|
||||
|
||||
+ virStorageSourceNetCookiesCopy(def, src);
|
||||
+
|
||||
if (src->srcpool &&
|
||||
!(def->srcpool = virStorageSourcePoolDefCopy(src->srcpool)))
|
||||
return NULL;
|
||||
@@ -2560,6 +2674,7 @@ virStorageSourceClear(virStorageSourcePtr def)
|
||||
VIR_FREE(def->volume);
|
||||
VIR_FREE(def->snapshot);
|
||||
VIR_FREE(def->configFile);
|
||||
+ virStorageSourceNetCookiesClear(def);
|
||||
virStorageSourcePoolDefFree(def->srcpool);
|
||||
virBitmapFree(def->features);
|
||||
VIR_FREE(def->compat);
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index fab4248c3d..1c7c046ad6 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -162,6 +162,17 @@ struct _virStorageNetHostDef {
|
||||
char *socket; /* path to unix socket */
|
||||
};
|
||||
|
||||
+typedef struct _virStorageNetCookieDef virStorageNetCookieDef;
|
||||
+typedef virStorageNetCookieDef *virStorageNetCookieDefPtr;
|
||||
+struct _virStorageNetCookieDef {
|
||||
+ char *name;
|
||||
+ char *value;
|
||||
+};
|
||||
+
|
||||
+void virStorageNetCookieDefFree(virStorageNetCookieDefPtr def);
|
||||
+
|
||||
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageNetCookieDef, virStorageNetCookieDefFree);
|
||||
+
|
||||
/* Information for a storage volume from a virStoragePool */
|
||||
|
||||
/*
|
||||
@@ -276,6 +287,8 @@ struct _virStorageSource {
|
||||
the source definition */
|
||||
size_t nhosts;
|
||||
virStorageNetHostDefPtr hosts;
|
||||
+ size_t ncookies;
|
||||
+ virStorageNetCookieDefPtr *cookies;
|
||||
virStorageSourcePoolDefPtr srcpool;
|
||||
virStorageAuthDefPtr auth;
|
||||
bool authInherited;
|
||||
@@ -477,6 +490,8 @@ int virStorageSourceUpdateCapacity(virStorageSourcePtr src,
|
||||
int virStorageSourceNewFromBacking(virStorageSourcePtr parent,
|
||||
virStorageSourcePtr *backing);
|
||||
|
||||
+int virStorageSourceNetCookiesValidate(virStorageSourcePtr src);
|
||||
+
|
||||
virStorageSourcePtr virStorageSourceCopy(const virStorageSource *src,
|
||||
bool backingChain)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
diff --git a/tests/genericxml2xmlindata/disk-network-http.xml b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
index bdcc1977f2..bafb77c8ec 100644
|
||||
--- a/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
+++ b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
@@ -33,6 +33,10 @@
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol='http' name='test3.img'>
|
||||
<host name='example.org' port='1234'/>
|
||||
+ <cookies>
|
||||
+ <cookie name='test'>testcookievalue</cookie>
|
||||
+ <cookie name='test2'>blurb</cookie>
|
||||
+ </cookies>
|
||||
</source>
|
||||
<target dev='vdc' bus='virtio'/>
|
||||
</disk>
|
||||
@@ -41,6 +45,10 @@
|
||||
<source protocol='https' name='test4.img'>
|
||||
<host name='example.org' port='1234'/>
|
||||
<ssl verify='yes'/>
|
||||
+ <cookies>
|
||||
+ <cookie name='test'>testcookievalue</cookie>
|
||||
+ <cookie name='test2'>blurb</cookie>
|
||||
+ </cookies>
|
||||
</source>
|
||||
<target dev='vdd' bus='virtio'/>
|
||||
</disk>
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -1,160 +0,0 @@
|
|||
From 45ecbd824c92bd05a46557bfcaff39196f701e6c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <45ecbd824c92bd05a46557bfcaff39196f701e6c@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 30 Mar 2020 17:21:45 +0200
|
||||
Subject: [PATCH] conf: Add support for http(s) query strings
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add a new attribute for holding the query part for http(s) disks.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 56368124728f0d65dde07244c741b459fcd6b939)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <b60abcf1e7711e9e29175e1fdcfe2820d5694a17.1585581552.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 7 ++++++-
|
||||
docs/schemas/domaincommon.rng | 6 ++++++
|
||||
src/conf/domain_conf.c | 5 +++++
|
||||
src/util/virstoragefile.c | 2 ++
|
||||
src/util/virstoragefile.h | 1 +
|
||||
tests/qemuxml2argvdata/disk-network-http.xml | 2 +-
|
||||
.../qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml | 2 +-
|
||||
7 files changed, 22 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 143db21d4d..9c588185df 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -2837,7 +2837,7 @@
|
||||
</disk>
|
||||
<disk type='network' device='cdrom'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
- <source protocol="http" name="url_path">
|
||||
+ <source protocol="http" name="url_path" query="foo=bar&amp;baz=flurb>
|
||||
<host name="hostname" port="80"/>
|
||||
<cookies>
|
||||
<cookie name="test">somevalue</cookie>
|
||||
@@ -3103,6 +3103,11 @@
|
||||
('tls' <span class="since">Since 4.5.0</span>)
|
||||
</p>
|
||||
|
||||
+ <p>For protocols <code>http</code> and <code>https</code> an
|
||||
+ optional attribute <code>query</code> specifies the query string.
|
||||
+ (<span class="since">Since 6.2.0</span>)
|
||||
+ </p>
|
||||
+
|
||||
<p>For "iscsi" (<span class="since">since 1.0.4</span>), the
|
||||
<code>name</code> attribute may include a logical unit number,
|
||||
separated from the target's name by a slash (e.g.,
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index e17f7ff8c0..dd8f27243a 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1869,6 +1869,9 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
+ <optional>
|
||||
+ <attribute name="query"/>
|
||||
+ </optional>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<ref name="diskSourceNetworkHost"/>
|
||||
<optional>
|
||||
@@ -1894,6 +1897,9 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
+ <optional>
|
||||
+ <attribute name="query"/>
|
||||
+ </optional>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<ref name="diskSourceNetworkHost"/>
|
||||
<optional>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index e3755fa285..28160a2967 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9382,6 +9382,10 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
/* config file currently only works with remote disks */
|
||||
src->configFile = virXPathString("string(./config/@file)", ctxt);
|
||||
|
||||
+ if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS)
|
||||
+ src->query = virXMLPropString(node, "query");
|
||||
+
|
||||
if (virDomainStorageNetworkParseHosts(node, &src->hosts, &src->nhosts) < 0)
|
||||
return -1;
|
||||
|
||||
@@ -24390,6 +24394,7 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
path = g_strdup_printf("%s/%s", src->volume, src->path);
|
||||
|
||||
virBufferEscapeString(attrBuf, " name='%s'", path ? path : src->path);
|
||||
+ virBufferEscapeString(attrBuf, " query='%s'", src->query);
|
||||
|
||||
if (src->haveTLS != VIR_TRISTATE_BOOL_ABSENT &&
|
||||
!(flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE &&
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index f8d741f040..4082e3f5f7 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2418,6 +2418,7 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
def->compat = g_strdup(src->compat);
|
||||
def->tlsAlias = g_strdup(src->tlsAlias);
|
||||
def->tlsCertdir = g_strdup(src->tlsCertdir);
|
||||
+ def->query = g_strdup(src->query);
|
||||
|
||||
if (src->sliceStorage)
|
||||
def->sliceStorage = virStorageSourceSliceCopy(src->sliceStorage);
|
||||
@@ -2696,6 +2697,7 @@ virStorageSourceClear(virStorageSourcePtr def)
|
||||
VIR_FREE(def->volume);
|
||||
VIR_FREE(def->snapshot);
|
||||
VIR_FREE(def->configFile);
|
||||
+ VIR_FREE(def->query);
|
||||
virStorageSourceNetCookiesClear(def);
|
||||
virStorageSourcePoolDefFree(def->srcpool);
|
||||
virBitmapFree(def->features);
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index 0230f44652..8089d1e07f 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -285,6 +285,7 @@ struct _virStorageSource {
|
||||
char *snapshot; /* for storage systems supporting internal snapshots */
|
||||
char *configFile; /* some storage systems use config file as part of
|
||||
the source definition */
|
||||
+ char *query; /* query string for HTTP based protocols */
|
||||
size_t nhosts;
|
||||
virStorageNetHostDefPtr hosts;
|
||||
size_t ncookies;
|
||||
diff --git a/tests/qemuxml2argvdata/disk-network-http.xml b/tests/qemuxml2argvdata/disk-network-http.xml
|
||||
index 93e6617433..3abf499019 100644
|
||||
--- a/tests/qemuxml2argvdata/disk-network-http.xml
|
||||
+++ b/tests/qemuxml2argvdata/disk-network-http.xml
|
||||
@@ -42,7 +42,7 @@
|
||||
</disk>
|
||||
<disk type='network' device='disk'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
- <source protocol='https' name='test4.img'>
|
||||
+ <source protocol='https' name='test4.img' query='par=val&other=ble'>
|
||||
<host name='example.org' port='1234'/>
|
||||
<ssl verify='no'/>
|
||||
<cookies>
|
||||
diff --git a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
|
||||
index 60073c227c..45b01841ec 100644
|
||||
--- a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
|
||||
@@ -46,7 +46,7 @@
|
||||
</disk>
|
||||
<disk type='network' device='disk'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
- <source protocol='https' name='test4.img'>
|
||||
+ <source protocol='https' name='test4.img' query='par=val&other=ble'>
|
||||
<host name='example.org' port='1234'/>
|
||||
<ssl verify='no'/>
|
||||
<cookies>
|
||||
--
|
||||
2.26.0
|
||||
|
|
@ -1,242 +0,0 @@
|
|||
From ffe8028ca07eb049b12d5c152b3d66489378d731 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ffe8028ca07eb049b12d5c152b3d66489378d731@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 16 Mar 2020 22:11:56 +0100
|
||||
Subject: [PATCH] conf: Add support for modifying ssl validation for https/ftps
|
||||
disks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
To allow turning off verification of SSL cerificates add a new element
|
||||
<ssl> to the disk source XML which will allow configuring the validation
|
||||
process using the 'verify' attribute.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 25481e25b14108373bf2e5e95c04fe30bff96bb4)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <ede13179128fc9ef05036a5408f4115132a2c12d.1584391727.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 9 ++++
|
||||
docs/schemas/domaincommon.rng | 51 ++++++++++++++++++-
|
||||
src/conf/domain_conf.c | 19 +++++++
|
||||
src/util/virstoragefile.c | 1 +
|
||||
src/util/virstoragefile.h | 1 +
|
||||
.../disk-network-http.xml | 9 ++++
|
||||
6 files changed, 88 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index e9830ab231..2cce247958 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -2847,6 +2847,7 @@
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol="https" name="url_path">
|
||||
<host name="hostname" port="443"/>
|
||||
+ <ssl verify="no"/>
|
||||
</source>
|
||||
<target dev='hdf' bus='ide' tray='open'/>
|
||||
<readonly/>
|
||||
@@ -3373,6 +3374,14 @@
|
||||
The <code>offset</code> and <code>size</code> values are in bytes.
|
||||
<span class="since">Since 6.1.0</span>
|
||||
</dd>
|
||||
+ <dt><code>ssl</code></dt>
|
||||
+ <dd>
|
||||
+ For <code>https</code> and <code>ftps</code> accessed storage it's
|
||||
+ possible to tweak the SSL transport parameters with this element.
|
||||
+ The <code>verify</code> attribute allows to turn on or off SSL
|
||||
+ certificate validation. Supported values are <code>yes</code> and
|
||||
+ <code>no</code>. <span class="since">Since 6.2.0</span>
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index aa70e340b9..548601b61c 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1808,12 +1808,39 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
+ <define name="diskSourceNetworkProtocolSSLVerify">
|
||||
+ <element name="ssl">
|
||||
+ <attribute name="verify">
|
||||
+ <ref name="virYesNo"/>
|
||||
+ </attribute>
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </define>
|
||||
+
|
||||
+ <define name="diskSourceNetworkProtocolHTTPS">
|
||||
+ <element name="source">
|
||||
+ <attribute name="protocol">
|
||||
+ <choice>
|
||||
+ <value>https</value>
|
||||
+ </choice>
|
||||
+ </attribute>
|
||||
+ <attribute name="name"/>
|
||||
+ <ref name="diskSourceCommon"/>
|
||||
+ <ref name="diskSourceNetworkHost"/>
|
||||
+ <optional>
|
||||
+ <ref name="encryption"/>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <ref name="diskSourceNetworkProtocolSSLVerify"/>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </define>
|
||||
+
|
||||
<define name="diskSourceNetworkProtocolHTTP">
|
||||
<element name="source">
|
||||
<attribute name="protocol">
|
||||
<choice>
|
||||
<value>http</value>
|
||||
- <value>https</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
@@ -1825,13 +1852,31 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
+ <define name="diskSourceNetworkProtocolFTPS">
|
||||
+ <element name="source">
|
||||
+ <attribute name="protocol">
|
||||
+ <choice>
|
||||
+ <value>ftps</value>
|
||||
+ </choice>
|
||||
+ </attribute>
|
||||
+ <attribute name="name"/>
|
||||
+ <ref name="diskSourceCommon"/>
|
||||
+ <ref name="diskSourceNetworkHost"/>
|
||||
+ <optional>
|
||||
+ <ref name="encryption"/>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <ref name="diskSourceNetworkProtocolSSLVerify"/>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </define>
|
||||
+
|
||||
<define name="diskSourceNetworkProtocolSimple">
|
||||
<element name="source">
|
||||
<attribute name="protocol">
|
||||
<choice>
|
||||
<value>sheepdog</value>
|
||||
<value>ftp</value>
|
||||
- <value>ftps</value>
|
||||
<value>tftp</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
@@ -1909,6 +1954,8 @@
|
||||
<ref name="diskSourceNetworkProtocolRBD"/>
|
||||
<ref name="diskSourceNetworkProtocolISCSI"/>
|
||||
<ref name="diskSourceNetworkProtocolHTTP"/>
|
||||
+ <ref name="diskSourceNetworkProtocolHTTPS"/>
|
||||
+ <ref name="diskSourceNetworkProtocolFTPS"/>
|
||||
<ref name="diskSourceNetworkProtocolSimple"/>
|
||||
<ref name="diskSourceNetworkProtocolVxHS"/>
|
||||
</choice>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index b3c4084c38..70bbc35bb3 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9259,6 +9259,7 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
g_autofree char *protocol = NULL;
|
||||
g_autofree char *haveTLS = NULL;
|
||||
g_autofree char *tlsCfg = NULL;
|
||||
+ g_autofree char *sslverifystr = NULL;
|
||||
|
||||
if (!(protocol = virXMLPropString(node, "protocol"))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
@@ -9331,6 +9332,19 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
|
||||
virStorageSourceInitiatorParseXML(ctxt, &src->initiator);
|
||||
|
||||
+ if ((src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) &&
|
||||
+ (sslverifystr = virXPathString("string(./ssl/@verify)", ctxt))) {
|
||||
+ int verify;
|
||||
+ if ((verify = virTristateBoolTypeFromString(sslverifystr)) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("invalid ssl verify mode '%s'"), sslverifystr);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ src->sslverify = verify;
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -24312,6 +24326,11 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
|
||||
virStorageSourceInitiatorFormatXML(&src->initiator, childBuf);
|
||||
|
||||
+ if (src->sslverify != VIR_TRISTATE_BOOL_ABSENT) {
|
||||
+ virBufferAsprintf(childBuf, "<ssl verify='%s'/>\n",
|
||||
+ virTristateBoolTypeToString(src->sslverify));
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index b88763b267..cfa77fccf8 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2270,6 +2270,7 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
def->cachemode = src->cachemode;
|
||||
def->discard = src->discard;
|
||||
def->detect_zeroes = src->detect_zeroes;
|
||||
+ def->sslverify = src->sslverify;
|
||||
|
||||
/* storage driver metadata are not copied */
|
||||
def->drv = NULL;
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index 5b995d54ab..fab4248c3d 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -282,6 +282,7 @@ struct _virStorageSource {
|
||||
virStorageEncryptionPtr encryption;
|
||||
bool encryptionInherited;
|
||||
virStoragePRDefPtr pr;
|
||||
+ virTristateBool sslverify;
|
||||
|
||||
virStorageSourceNVMeDefPtr nvme; /* type == VIR_STORAGE_TYPE_NVME */
|
||||
|
||||
diff --git a/tests/genericxml2xmlindata/disk-network-http.xml b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
index fde1222fd0..bdcc1977f2 100644
|
||||
--- a/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
+++ b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
@@ -25,6 +25,7 @@
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol='https' name='test2.img'>
|
||||
<host name='example.org' port='443'/>
|
||||
+ <ssl verify='no'/>
|
||||
</source>
|
||||
<target dev='vdb' bus='virtio'/>
|
||||
</disk>
|
||||
@@ -35,6 +36,14 @@
|
||||
</source>
|
||||
<target dev='vdc' bus='virtio'/>
|
||||
</disk>
|
||||
+ <disk type='network' device='disk'>
|
||||
+ <driver name='qemu' type='raw'/>
|
||||
+ <source protocol='https' name='test4.img'>
|
||||
+ <host name='example.org' port='1234'/>
|
||||
+ <ssl verify='yes'/>
|
||||
+ </source>
|
||||
+ <target dev='vdd' bus='virtio'/>
|
||||
+ </disk>
|
||||
<controller type='usb' index='0'/>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -1,205 +0,0 @@
|
|||
From 3050ddce41896311b8c3ad06f148bea358e597b8 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3050ddce41896311b8c3ad06f148bea358e597b8@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Mon, 16 Mar 2020 22:11:58 +0100
|
||||
Subject: [PATCH] conf: Add support for setting timeout and readahead size for
|
||||
network disks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Some disk backends support configuring the readahead buffer or timeout
|
||||
for requests. Add the knobs to the XML.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 63fd46177367c6653c4c986558f6d0e4a700cfcc)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804750
|
||||
Message-Id: <2694bc6f9a327f89d82da18320e7137152915ad3.1584391727.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 16 +++++++++++++
|
||||
docs/schemas/domaincommon.rng | 23 +++++++++++++++++++
|
||||
src/conf/domain_conf.c | 19 +++++++++++++++
|
||||
src/util/virstoragefile.c | 2 ++
|
||||
src/util/virstoragefile.h | 3 +++
|
||||
.../disk-network-http.xml | 2 ++
|
||||
6 files changed, 65 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 5a10d64e83..2b8f9eabc2 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -2842,6 +2842,8 @@
|
||||
<cookies>
|
||||
<cookie name="test">somevalue</cookie>
|
||||
</cookies>
|
||||
+ <readahead size='65536'/>
|
||||
+ <timeout seconds='6'/>
|
||||
</source>
|
||||
<target dev='hde' bus='ide' tray='open'/>
|
||||
<readonly/>
|
||||
@@ -3392,6 +3394,20 @@
|
||||
must conform to the HTTP specification.
|
||||
<span class="since">Since 6.2.0</span>
|
||||
</dd>
|
||||
+ <dt><code>readahead</code></dt>
|
||||
+ <dd>
|
||||
+ Specifies the size of the readahead buffer for protocols
|
||||
+ which support it. (all 'curl' based drivers in qemu). The size
|
||||
+ is in bytes. Note that '0' is considered as if the value is not
|
||||
+ provided.
|
||||
+ <span class="since">Since 6.2.0</span>
|
||||
+ </dd>
|
||||
+ <dt><code>timeout</code></dt>
|
||||
+ <dd>
|
||||
+ Specifies the connection timeout for protocols which support it.
|
||||
+ Note that '0' is considered as if the value is not provided.
|
||||
+ <span class="since">Since 6.2.0</span>
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index bdf35e64f6..3a0edbed97 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1808,6 +1808,25 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
+ <define name="diskSourceNetworkProtocolPropsCommon">
|
||||
+ <optional>
|
||||
+ <element name="readahead">
|
||||
+ <attribute name="size">
|
||||
+ <ref name="positiveInteger"/>
|
||||
+ </attribute>
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <element name="timeout">
|
||||
+ <attribute name="seconds">
|
||||
+ <ref name="positiveInteger"/>
|
||||
+ </attribute>
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
+ </define>
|
||||
+
|
||||
<define name="diskSourceNetworkProtocolSSLVerify">
|
||||
<element name="ssl">
|
||||
<attribute name="verify">
|
||||
@@ -1854,6 +1873,7 @@
|
||||
<optional>
|
||||
<ref name="diskSourceNetworkProtocolHTTPCookies"/>
|
||||
</optional>
|
||||
+ <ref name="diskSourceNetworkProtocolPropsCommon"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -1873,6 +1893,7 @@
|
||||
<optional>
|
||||
<ref name="diskSourceNetworkProtocolHTTPCookies"/>
|
||||
</optional>
|
||||
+ <ref name="diskSourceNetworkProtocolPropsCommon"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -1892,6 +1913,7 @@
|
||||
<optional>
|
||||
<ref name="diskSourceNetworkProtocolSSLVerify"/>
|
||||
</optional>
|
||||
+ <ref name="diskSourceNetworkProtocolPropsCommon"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -1910,6 +1932,7 @@
|
||||
<optional>
|
||||
<ref name="encryption"/>
|
||||
</optional>
|
||||
+ <ref name="diskSourceNetworkProtocolPropsCommon"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index d066d3aac1..8aec85e83c 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9409,6 +9409,19 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_FTP ||
|
||||
+ src->protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) {
|
||||
+
|
||||
+ if (virXPathULongLong("string(./readahead/@size)", ctxt, &src->readahead) == -2 ||
|
||||
+ virXPathULongLong("string(./timeout/@seconds)", ctxt, &src->timeout) == -2) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
+ _("invalid readahead size or timeout"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -24413,6 +24426,12 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
|
||||
virDomainDiskSourceFormatNetworkCookies(childBuf, src);
|
||||
|
||||
+ if (src->readahead)
|
||||
+ virBufferAsprintf(childBuf, "<readahead size='%llu'/>\n", src->readahead);
|
||||
+
|
||||
+ if (src->timeout)
|
||||
+ virBufferAsprintf(childBuf, "<timeout seconds='%llu'/>\n", src->timeout);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index 6350168d73..7893e054c3 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2383,6 +2383,8 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
def->discard = src->discard;
|
||||
def->detect_zeroes = src->detect_zeroes;
|
||||
def->sslverify = src->sslverify;
|
||||
+ def->readahead = src->readahead;
|
||||
+ def->timeout = src->timeout;
|
||||
|
||||
/* storage driver metadata are not copied */
|
||||
def->drv = NULL;
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index 1c7c046ad6..1abdaf89ce 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -296,6 +296,9 @@ struct _virStorageSource {
|
||||
bool encryptionInherited;
|
||||
virStoragePRDefPtr pr;
|
||||
virTristateBool sslverify;
|
||||
+ /* both values below have 0 as default value */
|
||||
+ unsigned long long readahead; /* size of the readahead buffer in bytes */
|
||||
+ unsigned long long timeout; /* connection timeout in seconds */
|
||||
|
||||
virStorageSourceNVMeDefPtr nvme; /* type == VIR_STORAGE_TYPE_NVME */
|
||||
|
||||
diff --git a/tests/genericxml2xmlindata/disk-network-http.xml b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
index bafb77c8ec..a8430b8365 100644
|
||||
--- a/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
+++ b/tests/genericxml2xmlindata/disk-network-http.xml
|
||||
@@ -49,6 +49,8 @@
|
||||
<cookie name='test'>testcookievalue</cookie>
|
||||
<cookie name='test2'>blurb</cookie>
|
||||
</cookies>
|
||||
+ <readahead size='65536'/>
|
||||
+ <timeout seconds='10'/>
|
||||
</source>
|
||||
<target dev='vdd' bus='virtio'/>
|
||||
</disk>
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
From 898e0003ae21e9fbe49995980c8746e9d2ac9b8b Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <898e0003ae21e9fbe49995980c8746e9d2ac9b8b@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 23 Jun 2020 14:23:06 +0200
|
||||
Subject: [PATCH] conf: Don't format http cookies unless
|
||||
VIR_DOMAIN_DEF_FORMAT_SECURE is used
|
||||
|
||||
Starting with 3b076391befc3fe72deb0c244ac6c2b4c100b410
|
||||
(v6.1.0-122-g3b076391be) we support http cookies. Since they may contain
|
||||
somewhat sensitive information we should not format them into the XML
|
||||
unless VIR_DOMAIN_DEF_FORMAT_SECURE is asserted.
|
||||
|
||||
Reported-by: Han Han <hhan@redhat.com>
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||
(cherry picked from commit a5b064bf4b17a9884d7d361733737fb614ad8979)
|
||||
|
||||
CVE-2020-14301
|
||||
Message-Id: <592a0b594666f580e743b6bd2b4ddccbd1e0cc7c.1592914898.git.pkrempa@redhat.com>
|
||||
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index ed9ca0e9d8..60962ee7c1 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -24377,11 +24377,15 @@ virDomainSourceDefFormatSeclabel(virBufferPtr buf,
|
||||
|
||||
static void
|
||||
virDomainDiskSourceFormatNetworkCookies(virBufferPtr buf,
|
||||
- virStorageSourcePtr src)
|
||||
+ virStorageSourcePtr src,
|
||||
+ unsigned int flags)
|
||||
{
|
||||
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
size_t i;
|
||||
|
||||
+ if (!(flags & VIR_DOMAIN_DEF_FORMAT_SECURE))
|
||||
+ return;
|
||||
+
|
||||
for (i = 0; i < src->ncookies; i++) {
|
||||
virBufferEscapeString(&childBuf, "<cookie name='%s'>", src->cookies[i]->name);
|
||||
virBufferEscapeString(&childBuf, "%s</cookie>\n", src->cookies[i]->value);
|
||||
@@ -24442,7 +24446,7 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
|
||||
virTristateBoolTypeToString(src->sslverify));
|
||||
}
|
||||
|
||||
- virDomainDiskSourceFormatNetworkCookies(childBuf, src);
|
||||
+ virDomainDiskSourceFormatNetworkCookies(childBuf, src, flags);
|
||||
|
||||
if (src->readahead)
|
||||
virBufferAsprintf(childBuf, "<readahead size='%llu'/>\n", src->readahead);
|
||||
--
|
||||
2.27.0
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
From 3ff27fe469c36e5655231f6759150350b17de298 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3ff27fe469c36e5655231f6759150350b17de298@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 13 Mar 2020 13:08:09 +0100
|
||||
Subject: [PATCH] conf: Don't generate machine names with a dot
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
According to the linked BZ, machined expects either valid
|
||||
hostname or valid FQDN (see systemd commit
|
||||
v239-3092-gd65652f1f2). While in case of multiple dots, a
|
||||
trailing one doesn't violate FQDN, it does violate the rule in
|
||||
case of something simple, like "domain.". But it's safe to remove
|
||||
it in both cases.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
|
||||
Fixes: 45464db8ba502764cf37ec9335770248bdb3d9a8
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 2695191a44eb7375225b4ad073825ed3563a172a)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Message-Id: <355e05e31ec98522fa0e03a0c2c7af8ca097070d.1584101247.git.mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 14 +++++++-------
|
||||
tests/virsystemdtest.c | 5 +++--
|
||||
2 files changed, 10 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 4b297c96bc..b3c4084c38 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -30688,20 +30688,20 @@ static void
|
||||
virDomainMachineNameAppendValid(virBufferPtr buf,
|
||||
const char *name)
|
||||
{
|
||||
- bool skip_dot = false;
|
||||
+ bool skip = true;
|
||||
|
||||
for (; *name; name++) {
|
||||
if (strlen(virBufferCurrentContent(buf)) >= 64)
|
||||
break;
|
||||
|
||||
- if (*name == '.') {
|
||||
- if (!skip_dot)
|
||||
+ if (*name == '.' || *name == '-') {
|
||||
+ if (!skip)
|
||||
virBufferAddChar(buf, *name);
|
||||
- skip_dot = true;
|
||||
+ skip = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
- skip_dot = false;
|
||||
+ skip = false;
|
||||
|
||||
if (!strchr(HOSTNAME_CHARS, *name))
|
||||
continue;
|
||||
@@ -30709,8 +30709,8 @@ virDomainMachineNameAppendValid(virBufferPtr buf,
|
||||
virBufferAddChar(buf, *name);
|
||||
}
|
||||
|
||||
- /* trailing dashes are not allowed */
|
||||
- virBufferTrimChars(buf, "-");
|
||||
+ /* trailing dashes or dots are not allowed */
|
||||
+ virBufferTrimChars(buf, "-.");
|
||||
}
|
||||
|
||||
#undef HOSTNAME_CHARS
|
||||
diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c
|
||||
index 26876850b8..eb510b40e4 100644
|
||||
--- a/tests/virsystemdtest.c
|
||||
+++ b/tests/virsystemdtest.c
|
||||
@@ -733,7 +733,7 @@ mymain(void)
|
||||
TEST_MACHINE("demo", 1, "qemu-1-demo");
|
||||
TEST_MACHINE("demo-name", 2, "qemu-2-demo-name");
|
||||
TEST_MACHINE("demo!name", 3, "qemu-3-demoname");
|
||||
- TEST_MACHINE(".demo", 4, "qemu-4-.demo");
|
||||
+ TEST_MACHINE(".demo", 4, "qemu-4-demo");
|
||||
TEST_MACHINE("bull\U0001f4a9", 5, "qemu-5-bull");
|
||||
TEST_MACHINE("demo..name", 6, "qemu-6-demo.name");
|
||||
TEST_MACHINE("12345678901234567890123456789012345678901234567890123456789", 7,
|
||||
@@ -743,7 +743,8 @@ mymain(void)
|
||||
TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec-acdc-56b3f8c5f678)", 100,
|
||||
"qemu-100-kstest-network-device-default-httpksc9eed63e-981e-48ec");
|
||||
TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec--cdc-56b3f8c5f678)", 10,
|
||||
- "qemu-10-kstest-network-device-default-httpksc9eed63e-981e-48ec");
|
||||
+ "qemu-10-kstest-network-device-default-httpksc9eed63e-981e-48ec-c");
|
||||
+ TEST_MACHINE("demo.-.test.", 11, "qemu-11-demo.test");
|
||||
|
||||
# define TESTS_PM_SUPPORT_HELPER(name, function) \
|
||||
do { \
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -1,143 +0,0 @@
|
|||
From 6d5174acd7530d554ac2651f3e6a5da9f69fe6e4 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6d5174acd7530d554ac2651f3e6a5da9f69fe6e4@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Wed, 19 Feb 2020 15:10:20 +0100
|
||||
Subject: [PATCH] conf: Implement support for <slices> of disk source
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Implement parsing and formatting of the 'storage' slice.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit bbf5d05cfd003e33600009cac7ea98ef1539dd7c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1791788
|
||||
Message-Id: <d31bb27ae30140c9deb696972ee76a90d7bcc610.1582120424.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 86 ++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 86 insertions(+)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index b46b92aecf..5c11f49463 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -9441,6 +9441,57 @@ virDomainStorageSourceParseBase(const char *type,
|
||||
}
|
||||
|
||||
|
||||
+static virStorageSourceSlicePtr
|
||||
+virDomainStorageSourceParseSlice(xmlNodePtr node,
|
||||
+ xmlXPathContextPtr ctxt)
|
||||
+{
|
||||
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
||||
+ g_autofree char *offset = NULL;
|
||||
+ g_autofree char *size = NULL;
|
||||
+ g_autofree virStorageSourceSlicePtr ret = g_new0(virStorageSourceSlice, 1);
|
||||
+
|
||||
+ ctxt->node = node;
|
||||
+
|
||||
+ if (!(offset = virXPathString("string(./@offset)", ctxt)) ||
|
||||
+ !(size = virXPathString("string(./@size)", ctxt))) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
+ _("missing offset or size attribute of slice"));
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (virStrToLong_ullp(offset, NULL, 10, &ret->offset) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("malformed value '%s' of 'offset' attribute of slice"),
|
||||
+ offset);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (virStrToLong_ullp(size, NULL, 10, &ret->size) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("malformed value '%s' of 'size' attribute of slice"),
|
||||
+ size);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return g_steal_pointer(&ret);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+virDomainStorageSourceParseSlices(virStorageSourcePtr src,
|
||||
+ xmlXPathContextPtr ctxt)
|
||||
+{
|
||||
+ xmlNodePtr node;
|
||||
+
|
||||
+ if ((node = virXPathNode("./slices/slice[@type='storage']", ctxt))) {
|
||||
+ if (!(src->sliceStorage = virDomainStorageSourceParseSlice(node, ctxt)))
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* virDomainStorageSourceParse:
|
||||
* @node: XML node pointing to the source element to parse
|
||||
@@ -9506,6 +9557,9 @@ virDomainStorageSourceParse(xmlNodePtr node,
|
||||
if (virDomainDiskSourcePRParse(node, ctxt, &src->pr) < 0)
|
||||
return -1;
|
||||
|
||||
+ if (virDomainStorageSourceParseSlices(src, ctxt) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
if (virSecurityDeviceLabelDefParseXML(&src->seclabels, &src->nseclabels,
|
||||
ctxt, flags) < 0)
|
||||
return -1;
|
||||
@@ -24226,6 +24280,36 @@ virDomainDiskSourceFormatPrivateData(virBufferPtr buf,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+virDomainDiskSourceFormatSlice(virBufferPtr buf,
|
||||
+ const char *slicetype,
|
||||
+ virStorageSourceSlicePtr slice)
|
||||
+{
|
||||
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+
|
||||
+ if (!slice)
|
||||
+ return;
|
||||
+
|
||||
+ virBufferAsprintf(&attrBuf, " type='%s'", slicetype);
|
||||
+ virBufferAsprintf(&attrBuf, " offset='%llu'", slice->offset);
|
||||
+ virBufferAsprintf(&attrBuf, " size='%llu'", slice->size);
|
||||
+
|
||||
+ virXMLFormatElement(buf, "slice", &attrBuf, NULL);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+virDomainDiskSourceFormatSlices(virBufferPtr buf,
|
||||
+ virStorageSourcePtr src)
|
||||
+{
|
||||
+ g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+
|
||||
+ virDomainDiskSourceFormatSlice(&childBuf, "storage", src->sliceStorage);
|
||||
+
|
||||
+ virXMLFormatElement(buf, "slices", NULL, &childBuf);
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* virDomainDiskSourceFormat:
|
||||
* @buf: output buffer
|
||||
@@ -24296,6 +24380,8 @@ virDomainDiskSourceFormat(virBufferPtr buf,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ virDomainDiskSourceFormatSlices(&childBuf, src);
|
||||
+
|
||||
if (src->type != VIR_STORAGE_TYPE_NETWORK)
|
||||
virDomainSourceDefFormatSeclabel(&childBuf, src->nseclabels,
|
||||
src->seclabels, flags);
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,129 +0,0 @@
|
|||
From eb6bdf4798eea9bae5ddca1fdd13fb5ef6e99596 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <eb6bdf4798eea9bae5ddca1fdd13fb5ef6e99596@dist-git>
|
||||
From: Andrea Bolognani <abologna@redhat.com>
|
||||
Date: Fri, 14 Feb 2020 13:12:35 +0100
|
||||
Subject: [PATCH] conf: Introduce VIR_DOMAIN_TIMER_NAME_ARMVTIMER
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This new timer model will be used to control the behavior of the
|
||||
virtual timer for KVM ARM/virt guests.
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3809e88a87e5898c9cf3a277cb32e20fca8fb2d0)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1762634
|
||||
|
||||
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
||||
Message-Id: <20200214121237.623948-5-abologna@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/schemas/domaincommon.rng | 1 +
|
||||
src/conf/domain_conf.c | 1 +
|
||||
src/conf/domain_conf.h | 1 +
|
||||
src/libxl/libxl_conf.c | 1 +
|
||||
src/libxl/xen_common.c | 1 +
|
||||
src/qemu/qemu_command.c | 2 ++
|
||||
src/qemu/qemu_domain.c | 3 +++
|
||||
7 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 026e753567..19476a2735 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -1239,6 +1239,7 @@
|
||||
<choice>
|
||||
<value>hpet</value>
|
||||
<value>pit</value>
|
||||
+ <value>armvtimer</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<optional>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 58f72b3b0f..68d9ce9c4e 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -1062,6 +1062,7 @@ VIR_ENUM_IMPL(virDomainTimerName,
|
||||
"tsc",
|
||||
"kvmclock",
|
||||
"hypervclock",
|
||||
+ "armvtimer",
|
||||
);
|
||||
|
||||
VIR_ENUM_IMPL(virDomainTimerTrack,
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index ee8eb3ddc0..ef2c1b80f7 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -1989,6 +1989,7 @@ typedef enum {
|
||||
VIR_DOMAIN_TIMER_NAME_TSC,
|
||||
VIR_DOMAIN_TIMER_NAME_KVMCLOCK,
|
||||
VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK,
|
||||
+ VIR_DOMAIN_TIMER_NAME_ARMVTIMER,
|
||||
|
||||
VIR_DOMAIN_TIMER_NAME_LAST
|
||||
} virDomainTimerNameType;
|
||||
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
|
||||
index 2488bb9d32..ffac890262 100644
|
||||
--- a/src/libxl/libxl_conf.c
|
||||
+++ b/src/libxl/libxl_conf.c
|
||||
@@ -361,6 +361,7 @@ libxlMakeDomBuildInfo(virDomainDefPtr def,
|
||||
case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
|
||||
case VIR_DOMAIN_TIMER_NAME_RTC:
|
||||
case VIR_DOMAIN_TIMER_NAME_PIT:
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("unsupported timer type (name) '%s'"),
|
||||
virDomainTimerNameTypeToString(clock.timers[i]->name));
|
||||
diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
|
||||
index 415549a42c..9a385eba0d 100644
|
||||
--- a/src/libxl/xen_common.c
|
||||
+++ b/src/libxl/xen_common.c
|
||||
@@ -2182,6 +2182,7 @@ xenFormatCPUFeatures(virConfPtr conf, virDomainDefPtr def)
|
||||
case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
|
||||
case VIR_DOMAIN_TIMER_NAME_RTC:
|
||||
case VIR_DOMAIN_TIMER_NAME_PIT:
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("unsupported timer type (name) '%s'"),
|
||||
virDomainTimerNameTypeToString(def->clock.timers[i]->name));
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 0ad09baa1d..e1e19e0fcc 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -6200,6 +6200,7 @@ qemuBuildClockCommandLine(virCommandPtr cmd,
|
||||
case VIR_DOMAIN_TIMER_NAME_TSC:
|
||||
case VIR_DOMAIN_TIMER_NAME_KVMCLOCK:
|
||||
case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
/* Timers above are handled when building -cpu. */
|
||||
case VIR_DOMAIN_TIMER_NAME_LAST:
|
||||
break;
|
||||
@@ -6631,6 +6632,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
|
||||
if (timer->frequency > 0)
|
||||
virBufferAsprintf(&buf, ",tsc-frequency=%lu", timer->frequency);
|
||||
break;
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
case VIR_DOMAIN_TIMER_NAME_PLATFORM:
|
||||
case VIR_DOMAIN_TIMER_NAME_PIT:
|
||||
case VIR_DOMAIN_TIMER_NAME_RTC:
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index 846d1ecb29..4de4f9da53 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -5504,6 +5504,9 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
+
|
||||
+ case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -0,0 +1,155 @@
|
|||
From 19f7e6dc950baf346738f462ac5c6b815c04edcc Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <19f7e6dc950baf346738f462ac5c6b815c04edcc@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Mon, 21 Mar 2022 16:49:25 +0100
|
||||
Subject: [PATCH] conf: Introduce memory allocation threads
|
||||
|
||||
Since its v5.0.0 release QEMU is capable of specifying number of
|
||||
threads used to allocate memory. It defaults to 1, which may be
|
||||
too low for humongous guests with gigantic pages.
|
||||
|
||||
In general, on QEMU cmd line level it is possible to use
|
||||
different number of threads per each memory-backend-* object, in
|
||||
practical terms it's not useful. Therefore, use <memoryBacking/>
|
||||
to set guest wide value and let all memory devices 'inherit' it,
|
||||
silently. IOW, don't introduce per device knob because that would
|
||||
only complicate things for a little or no benefit.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
(cherry picked from commit ba7f98126fa84d354ce72929b77cc111a9a557a9)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2067126
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomain.rst | 8 +++++---
|
||||
docs/schemas/domaincommon.rng | 19 +++++++++++++------
|
||||
src/conf/domain_conf.c | 15 ++++++++++++++-
|
||||
src/conf/domain_conf.h | 1 +
|
||||
tests/qemuxml2argvdata/memfd-memory-numa.xml | 2 +-
|
||||
5 files changed, 34 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
|
||||
index 8128e43da4..17e89a0c0d 100644
|
||||
--- a/docs/formatdomain.rst
|
||||
+++ b/docs/formatdomain.rst
|
||||
@@ -977,7 +977,7 @@ Memory Backing
|
||||
<locked/>
|
||||
<source type="file|anonymous|memfd"/>
|
||||
<access mode="shared|private"/>
|
||||
- <allocation mode="immediate|ondemand"/>
|
||||
+ <allocation mode="immediate|ondemand" threads='8'/>
|
||||
<discard/>
|
||||
</memoryBacking>
|
||||
...
|
||||
@@ -1026,8 +1026,10 @@ influence how virtual memory pages are backed by host pages.
|
||||
Using the ``mode`` attribute, specify if the memory is to be "shared" or
|
||||
"private". This can be overridden per numa node by ``memAccess``.
|
||||
``allocation``
|
||||
- Using the ``mode`` attribute, specify when to allocate the memory by
|
||||
- supplying either "immediate" or "ondemand".
|
||||
+ Using the optional ``mode`` attribute, specify when to allocate the memory by
|
||||
+ supplying either "immediate" or "ondemand". :since:`Since 8.2.0` it is
|
||||
+ possible to set the number of threads that hypervisor uses to allocate
|
||||
+ memory via ``threads`` attribute.
|
||||
``discard``
|
||||
When set and supported by hypervisor the memory content is discarded just
|
||||
before guest shuts down (or when DIMM module is unplugged). Please note that
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 7fa5c2b8b5..c9c1529979 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -745,12 +745,19 @@
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="allocation">
|
||||
- <attribute name="mode">
|
||||
- <choice>
|
||||
- <value>immediate</value>
|
||||
- <value>ondemand</value>
|
||||
- </choice>
|
||||
- </attribute>
|
||||
+ <optional>
|
||||
+ <attribute name="mode">
|
||||
+ <choice>
|
||||
+ <value>immediate</value>
|
||||
+ <value>ondemand</value>
|
||||
+ </choice>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <attribute name="threads">
|
||||
+ <ref name="unsignedInt"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 5691b8d2d5..805a15848e 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -19095,6 +19095,13 @@ virDomainDefParseMemory(virDomainDef *def,
|
||||
VIR_FREE(tmp);
|
||||
}
|
||||
|
||||
+ if (virXPathUInt("string(./memoryBacking/allocation/@threads)",
|
||||
+ ctxt, &def->mem.allocation_threads) == -2) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
+ _("Failed to parse memory allocation threads"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
if (virXPathNode("./memoryBacking/hugepages", ctxt)) {
|
||||
/* hugepages will be used */
|
||||
if ((n = virXPathNodeSet("./memoryBacking/hugepages/page", ctxt, &nodes)) < 0) {
|
||||
@@ -27639,6 +27646,7 @@ virDomainMemorybackingFormat(virBuffer *buf,
|
||||
const virDomainMemtune *mem)
|
||||
{
|
||||
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+ g_auto(virBuffer) allocAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
if (mem->nhugepages)
|
||||
virDomainHugepagesFormat(&childBuf, mem->hugepages, mem->nhugepages);
|
||||
@@ -27653,8 +27661,13 @@ virDomainMemorybackingFormat(virBuffer *buf,
|
||||
virBufferAsprintf(&childBuf, "<access mode='%s'/>\n",
|
||||
virDomainMemoryAccessTypeToString(mem->access));
|
||||
if (mem->allocation)
|
||||
- virBufferAsprintf(&childBuf, "<allocation mode='%s'/>\n",
|
||||
+ virBufferAsprintf(&allocAttrBuf, " mode='%s'",
|
||||
virDomainMemoryAllocationTypeToString(mem->allocation));
|
||||
+ if (mem->allocation_threads > 0)
|
||||
+ virBufferAsprintf(&allocAttrBuf, " threads='%u'", mem->allocation_threads);
|
||||
+
|
||||
+ virXMLFormatElement(&childBuf, "allocation", &allocAttrBuf, NULL);
|
||||
+
|
||||
if (mem->discard)
|
||||
virBufferAddLit(&childBuf, "<discard/>\n");
|
||||
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index 144ba4dd12..10af94e2e4 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -2677,6 +2677,7 @@ struct _virDomainMemtune {
|
||||
int source; /* enum virDomainMemorySource */
|
||||
int access; /* enum virDomainMemoryAccess */
|
||||
int allocation; /* enum virDomainMemoryAllocation */
|
||||
+ unsigned int allocation_threads;
|
||||
|
||||
virTristateBool discard;
|
||||
};
|
||||
diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.xml b/tests/qemuxml2argvdata/memfd-memory-numa.xml
|
||||
index 1ebcee8939..1ac87e3aef 100644
|
||||
--- a/tests/qemuxml2argvdata/memfd-memory-numa.xml
|
||||
+++ b/tests/qemuxml2argvdata/memfd-memory-numa.xml
|
||||
@@ -10,7 +10,7 @@
|
||||
</hugepages>
|
||||
<source type='memfd'/>
|
||||
<access mode='shared'/>
|
||||
- <allocation mode='immediate'/>
|
||||
+ <allocation mode='immediate' threads='8'/>
|
||||
</memoryBacking>
|
||||
<vcpu placement='static'>8</vcpu>
|
||||
<numatune>
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
From 666b68a93006c4299747d159bcacb7164b8c5d91 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <666b68a93006c4299747d159bcacb7164b8c5d91@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 24 Nov 2022 10:28:59 +0100
|
||||
Subject: [PATCH] conf: Make VIR_DOMAIN_NET_TYPE_ETHERNET not share 'host view'
|
||||
|
||||
When setting up QoS for a domain <interface/>, or when reporting
|
||||
its statistics we may need to swap TX/RX values. This is all
|
||||
explained in comment to virDomainNetTypeSharesHostView().
|
||||
However, this function claims that VIR_DOMAIN_NET_TYPE_ETHERNET
|
||||
also shares the 'host view', meaning the TX/RX values must be
|
||||
swapped. But that's not true.
|
||||
|
||||
An easy reproducer is to start a domain with two <interface/>-s:
|
||||
one type of network, the other of type ethernet and configure the
|
||||
same <bandwidth/> for both. Reversed setting can then be observed
|
||||
(e.g. via tc).
|
||||
|
||||
Reported-by: Oleg Vasilev <oleg.vasilev@virtuozzo.com>
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 0862cb3ce46253a58ca02d36b2b6a6397a60bfc7)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2172578
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 401ddaa1a0..427e7d1bb5 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -30472,9 +30472,9 @@ virDomainNetTypeSharesHostView(const virDomainNetDef *net)
|
||||
virDomainNetType actualType = virDomainNetGetActualType(net);
|
||||
switch (actualType) {
|
||||
case VIR_DOMAIN_NET_TYPE_DIRECT:
|
||||
- case VIR_DOMAIN_NET_TYPE_ETHERNET:
|
||||
return true;
|
||||
case VIR_DOMAIN_NET_TYPE_USER:
|
||||
+ case VIR_DOMAIN_NET_TYPE_ETHERNET:
|
||||
case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
|
||||
case VIR_DOMAIN_NET_TYPE_SERVER:
|
||||
case VIR_DOMAIN_NET_TYPE_CLIENT:
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
From 00c5cab2b92b653edbf491d9ef60359578c3d59a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <00c5cab2b92b653edbf491d9ef60359578c3d59a@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Wed, 11 May 2022 16:27:18 +0200
|
||||
Subject: [PATCH] conf: Move virDomainObj::originalMemlock into
|
||||
qemuDomainObjPrivate
|
||||
|
||||
Since v1.3.0-90-gafbe1d4c56 the original value of memlock limit
|
||||
is stored inside virDomainObj struct directly (under
|
||||
originalMemlock member). This is needless because the value is
|
||||
used only inside QEMU driver and thus can reside in
|
||||
qemuDomainObjPrivate struct.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 75df6d2c291c48d65c1e54dd93e3d2d3cb0712e7)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2089433
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.h | 3 ---
|
||||
src/qemu/qemu_domain.c | 9 +++++----
|
||||
src/qemu/qemu_domain.h | 3 +++
|
||||
3 files changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index d0d0fdc815..45976beb2b 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -3031,9 +3031,6 @@ struct _virDomainObj {
|
||||
int taint;
|
||||
size_t ndeprecations;
|
||||
char **deprecations;
|
||||
-
|
||||
- unsigned long long originalMemlock; /* Original RLIMIT_MEMLOCK, zero if no
|
||||
- * restore will be required later */
|
||||
};
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainObj, virObjectUnref);
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index 40fe9985e6..86d673dafa 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -9269,6 +9269,7 @@ int
|
||||
qemuDomainAdjustMaxMemLock(virDomainObj *vm,
|
||||
bool forceVFIO)
|
||||
{
|
||||
+ qemuDomainObjPrivate *priv = vm->privateData;
|
||||
unsigned long long currentMemLock = 0;
|
||||
unsigned long long desiredMemLock = 0;
|
||||
|
||||
@@ -9281,8 +9282,8 @@ qemuDomainAdjustMaxMemLock(virDomainObj *vm,
|
||||
/* If this is the first time adjusting the limit, save the current
|
||||
* value so that we can restore it once memory locking is no longer
|
||||
* required */
|
||||
- if (vm->originalMemlock == 0) {
|
||||
- vm->originalMemlock = currentMemLock;
|
||||
+ if (priv->originalMemlock == 0) {
|
||||
+ priv->originalMemlock = currentMemLock;
|
||||
}
|
||||
} else {
|
||||
/* If the limit is already high enough, we can assume
|
||||
@@ -9295,8 +9296,8 @@ qemuDomainAdjustMaxMemLock(virDomainObj *vm,
|
||||
} else {
|
||||
/* Once memory locking is no longer required, we can restore the
|
||||
* original, usually very low, limit */
|
||||
- desiredMemLock = vm->originalMemlock;
|
||||
- vm->originalMemlock = 0;
|
||||
+ desiredMemLock = priv->originalMemlock;
|
||||
+ priv->originalMemlock = 0;
|
||||
}
|
||||
|
||||
if (desiredMemLock > 0 &&
|
||||
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
|
||||
index e5046367e3..e9497d20de 100644
|
||||
--- a/src/qemu/qemu_domain.h
|
||||
+++ b/src/qemu/qemu_domain.h
|
||||
@@ -241,6 +241,9 @@ struct _qemuDomainObjPrivate {
|
||||
GSList *dbusVMStateIds;
|
||||
/* true if -object dbus-vmstate was added */
|
||||
bool dbusVMState;
|
||||
+
|
||||
+ unsigned long long originalMemlock; /* Original RLIMIT_MEMLOCK, zero if no
|
||||
+ * restore will be required later */
|
||||
};
|
||||
|
||||
#define QEMU_DOMAIN_PRIVATE(vm) \
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
From 2780cb41f7682741be2bbe662d629dd1bd3b4f6e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2780cb41f7682741be2bbe662d629dd1bd3b4f6e@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:04:10 -0400
|
||||
Subject: [PATCH] conf: add new PCI_CONNECT flag AUTOASSIGN
|
||||
|
||||
This new flag will be set for any controller that we decide can have
|
||||
devices assigned to it automatically during PCI device assignment. In
|
||||
the past PCI_CONNECT_TYPE_HOTPLUGGABLE was used for this purpose, but
|
||||
that is overloading that flag, and no longer technically correct; what
|
||||
we *really* want is to auto-assign devices to any pcie-root-port or
|
||||
pcie-switch-downstream-port regardless of whether or not that
|
||||
controller happens to have hotplug enabled.
|
||||
|
||||
This patch just adds the flag, but doesn't use it at all. Note that
|
||||
the numbering of all the other flags was changed in order to insert
|
||||
the new flag near the beginning of the list; that doesn't cause any
|
||||
problem because the connect flags aren't stored anywhere between runs
|
||||
of libvirtd.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit c296a846ad7de3066a17404f4f407d3e1b6d7935)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426170415.18328-8-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.h | 41 +++++++++++++++++++++--------------------
|
||||
1 file changed, 21 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h
|
||||
index dcb90618f8..40738ddb72 100644
|
||||
--- a/src/conf/domain_addr.h
|
||||
+++ b/src/conf/domain_addr.h
|
||||
@@ -32,26 +32,27 @@ typedef enum {
|
||||
} virPCIDeviceAddressExtensionFlags;
|
||||
|
||||
typedef enum {
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE = 1 << 0, /* is hotplug needed/supported */
|
||||
-
|
||||
- /* set for devices that can share a single slot in auto-assignment
|
||||
- * (by assigning one device to each of the 8 functions on the slot)
|
||||
- */
|
||||
- VIR_PCI_CONNECT_AGGREGATE_SLOT = 1 << 1,
|
||||
-
|
||||
- /* kinds of devices as a bitmap so they can be combined (some PCI
|
||||
- * controllers permit connecting multiple types of devices)
|
||||
- */
|
||||
- VIR_PCI_CONNECT_TYPE_PCI_DEVICE = 1 << 2,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_DEVICE = 1 << 3,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT = 1 << 4,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 5,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 6,
|
||||
- VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 7,
|
||||
- VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 8,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 9,
|
||||
- VIR_PCI_CONNECT_TYPE_PCI_BRIDGE = 1 << 10,
|
||||
- VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE = 1 << 11,
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN = 1 << 0, /* okay to autoassign a device to this controller */
|
||||
+ VIR_PCI_CONNECT_HOTPLUGGABLE = 1 << 1, /* is hotplug needed/supported */
|
||||
+
|
||||
+ /* set for devices that can share a single slot in auto-assignment
|
||||
+ * (by assigning one device to each of the 8 functions on the slot)
|
||||
+ */
|
||||
+ VIR_PCI_CONNECT_AGGREGATE_SLOT = 1 << 2,
|
||||
+
|
||||
+ /* kinds of devices as a bitmap so they can be combined (some PCI
|
||||
+ * controllers permit connecting multiple types of devices)
|
||||
+ */
|
||||
+ VIR_PCI_CONNECT_TYPE_PCI_DEVICE = 1 << 3,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_DEVICE = 1 << 4,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT = 1 << 5,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 6,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 7,
|
||||
+ VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 8,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 9,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 10,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCI_BRIDGE = 1 << 11,
|
||||
+ VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE = 1 << 12,
|
||||
} virDomainPCIConnectFlags;
|
||||
|
||||
/* a combination of all bits that describe the type of connections
|
||||
--
|
||||
2.26.2
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,395 +0,0 @@
|
|||
From c811bd72130364673dd4a0d2a997a1d8f675eb71 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c811bd72130364673dd4a0d2a997a1d8f675eb71@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Wed, 4 Mar 2020 12:42:42 +0100
|
||||
Subject: [PATCH] conf: add virtiofs-related elements and attributes
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add more elements for tuning the virtiofsd daemon
|
||||
and the vhost-user-fs device:
|
||||
|
||||
<driver type='virtiofs' queue='1024' xattr='on'>
|
||||
<binary path='/usr/libexec/virtiofsd'>
|
||||
<cache mode='always'/>
|
||||
<lock posix='off' flock='off'/>
|
||||
</binary>
|
||||
</driver>
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Tested-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 66079339847dc942b9b673e3040b56b055a8d8f5)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1694166
|
||||
Message-Id: <506d0532c6043a9b8c946bdc42c3d9c5529f6fb8.1583322090.git.jtomko@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 25 ++++-
|
||||
docs/schemas/domaincommon.rng | 48 ++++++++
|
||||
src/conf/domain_conf.c | 104 +++++++++++++++++-
|
||||
src/conf/domain_conf.h | 15 +++
|
||||
src/libvirt_private.syms | 1 +
|
||||
.../vhost-user-fs-fd-memory.xml | 6 +-
|
||||
.../vhost-user-fs-hugepages.xml | 1 +
|
||||
7 files changed, 197 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 337ab01316..e9830ab231 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -3936,7 +3936,11 @@
|
||||
<readonly/>
|
||||
</filesystem>
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
- <driver type='virtiofs'/>
|
||||
+ <driver type='virtiofs queue='1024'/>
|
||||
+ <binary path='/usr/libexec/virtiofsd' xattr='on'>
|
||||
+ <cache mode='always'/>
|
||||
+ <lock posix='on' flock='on'/>
|
||||
+ </binary>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'/>
|
||||
</filesystem>
|
||||
@@ -4063,9 +4067,28 @@
|
||||
<a href="#elementsVirtio">Virtio-specific options</a> can also be
|
||||
set. (<span class="since">Since 3.5.0</span>)
|
||||
</li>
|
||||
+ <li>
|
||||
+ For <code>virtiofs</code>, the <code>queue</code> attribute can be used
|
||||
+ to specify the queue size (i.e. how many requests can the queue fit).
|
||||
+ (<span class="since">Since 6.2.0</span>)
|
||||
+ </li>
|
||||
</ul>
|
||||
</dd>
|
||||
|
||||
+ <dt><code>binary</code></dt>
|
||||
+ <dd>
|
||||
+ The optional <code>binary</code> element can tune the options for virtiofsd.
|
||||
+ All of the following attributes and elements are optional.
|
||||
+ The attribute <code>path</code> can be used to override the path to the daemon.
|
||||
+ Attribute <code>xattr</code> enables the use of filesystem extended attributes.
|
||||
+ Caching can be tuned via the <code>cache</code> element, possible <code>mode</code>
|
||||
+ values being <code>none</code> and <code>always</code>.
|
||||
+ Locking can be controlled via the <code>lock</code>
|
||||
+ element - attributes <code>posix</code> and <code>flock</code> both accepting
|
||||
+ values <code>on</code> or <code>off</code>.
|
||||
+ (<span class="since">Since 6.2.0</span>)
|
||||
+ </dd>
|
||||
+
|
||||
<dt><code>source</code></dt>
|
||||
<dd>
|
||||
The resource on the host that is being accessed in the guest. The
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 5a9291b443..aa70e340b9 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -2500,6 +2500,9 @@
|
||||
<optional>
|
||||
<ref name="fsDriver"/>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <ref name="fsBinary"/>
|
||||
+ </optional>
|
||||
<interleave>
|
||||
<element name="source">
|
||||
<attribute name="dir">
|
||||
@@ -2649,12 +2652,57 @@
|
||||
<attribute name="type">
|
||||
<value>virtiofs</value>
|
||||
</attribute>
|
||||
+ <optional>
|
||||
+ <attribute name="queue">
|
||||
+ <ref name="unsignedInt"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
<ref name='virtioOptions'/>
|
||||
</group>
|
||||
<empty/>
|
||||
</choice>
|
||||
</element>
|
||||
</define>
|
||||
+ <define name="fsBinary">
|
||||
+ <element name="binary">
|
||||
+ <optional>
|
||||
+ <attribute name="path">
|
||||
+ <ref name="absFilePath"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <attribute name="xattr">
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <element name="cache">
|
||||
+ <optional>
|
||||
+ <attribute name="mode">
|
||||
+ <choice>
|
||||
+ <value>none</value>
|
||||
+ <value>always</value>
|
||||
+ </choice>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <element name="lock">
|
||||
+ <optional>
|
||||
+ <attribute name="posix">
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ <optional>
|
||||
+ <attribute name="flock">
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </define>
|
||||
|
||||
<define name="interface-network-attributes">
|
||||
<attribute name="network">
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 31d4828802..3a370e6b90 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -500,6 +500,14 @@ VIR_ENUM_IMPL(virDomainFSModel,
|
||||
"virtio-non-transitional",
|
||||
);
|
||||
|
||||
+VIR_ENUM_IMPL(virDomainFSCacheMode,
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_LAST,
|
||||
+ "default",
|
||||
+ "none",
|
||||
+ "always",
|
||||
+);
|
||||
+
|
||||
+
|
||||
VIR_ENUM_IMPL(virDomainNet,
|
||||
VIR_DOMAIN_NET_TYPE_LAST,
|
||||
"user",
|
||||
@@ -2322,6 +2330,7 @@ void virDomainFSDefFree(virDomainFSDefPtr def)
|
||||
virDomainDeviceInfoClear(&def->info);
|
||||
VIR_FREE(def->virtio);
|
||||
virObjectUnref(def->privateData);
|
||||
+ VIR_FREE(def->binary);
|
||||
|
||||
VIR_FREE(def);
|
||||
}
|
||||
@@ -11293,6 +11302,63 @@ virDomainFSDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (def->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
|
||||
+ g_autofree char *queue_size = virXPathString("string(./driver/@queue)", ctxt);
|
||||
+ g_autofree char *binary = virXPathString("string(./binary/@path)", ctxt);
|
||||
+ g_autofree char *xattr = virXPathString("string(./binary/@xattr)", ctxt);
|
||||
+ g_autofree char *cache = virXPathString("string(./binary/cache/@mode)", ctxt);
|
||||
+ g_autofree char *posix_lock = virXPathString("string(./binary/lock/@posix)", ctxt);
|
||||
+ g_autofree char *flock = virXPathString("string(./binary/lock/@flock)", ctxt);
|
||||
+ int val;
|
||||
+
|
||||
+ if (queue_size && virStrToLong_ull(queue_size, NULL, 10, &def->queue_size) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("cannot parse queue size '%s' for virtiofs"),
|
||||
+ queue_size);
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
+ if (binary)
|
||||
+ def->binary = virFileSanitizePath(binary);
|
||||
+
|
||||
+ if (xattr) {
|
||||
+ if ((val = virTristateSwitchTypeFromString(xattr)) <= 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unknown xattr value '%s'"), xattr);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->xattr = val;
|
||||
+ }
|
||||
+
|
||||
+ if (cache) {
|
||||
+ if ((val = virDomainFSCacheModeTypeFromString(cache)) <= 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("cannot parse cache mode '%s' for virtiofs"),
|
||||
+ cache);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->cache = val;
|
||||
+ }
|
||||
+
|
||||
+ if (posix_lock) {
|
||||
+ if ((val = virTristateSwitchTypeFromString(posix_lock)) <= 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unknown posix lock value '%s'"), posix_lock);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->posix_lock = val;
|
||||
+ }
|
||||
+
|
||||
+ if (flock) {
|
||||
+ if ((val = virTristateSwitchTypeFromString(flock)) <= 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unknown flock value '%s'"), flock);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->flock = val;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (format) {
|
||||
if ((def->format = virStorageFileFormatTypeFromString(format)) <= 0) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
@@ -24994,6 +25060,9 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
const char *wrpolicy = virDomainFSWrpolicyTypeToString(def->wrpolicy);
|
||||
const char *src = def->src->path;
|
||||
g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ g_auto(virBuffer) driverBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+ g_auto(virBuffer) binaryAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ g_auto(virBuffer) binaryBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
|
||||
if (!type) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
@@ -25017,6 +25086,8 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
virBufferAddLit(buf, ">\n");
|
||||
|
||||
virBufferAdjustIndent(buf, 2);
|
||||
+ virBufferAdjustIndent(&driverBuf, 2);
|
||||
+ virBufferAdjustIndent(&binaryBuf, 2);
|
||||
if (def->fsdriver) {
|
||||
virBufferAsprintf(&driverAttrBuf, " type='%s'", fsdriver);
|
||||
|
||||
@@ -25028,11 +25099,42 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
if (def->wrpolicy)
|
||||
virBufferAsprintf(&driverAttrBuf, " wrpolicy='%s'", wrpolicy);
|
||||
|
||||
+ if (def->queue_size)
|
||||
+ virBufferAsprintf(&driverAttrBuf, " queue='%llu'", def->queue_size);
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+ if (def->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
|
||||
+ g_auto(virBuffer) lockAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ virBufferEscapeString(&binaryAttrBuf, " path='%s'", def->binary);
|
||||
+
|
||||
+ if (def->xattr != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&binaryAttrBuf, " xattr='%s'",
|
||||
+ virTristateSwitchTypeToString(def->xattr));
|
||||
+ }
|
||||
+
|
||||
+ if (def->cache != VIR_DOMAIN_FS_CACHE_MODE_DEFAULT) {
|
||||
+ virBufferAsprintf(&binaryBuf, "<cache mode='%s'/>\n",
|
||||
+ virDomainFSCacheModeTypeToString(def->cache));
|
||||
+ }
|
||||
+
|
||||
+ if (def->posix_lock != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&lockAttrBuf, " posix='%s'",
|
||||
+ virTristateSwitchTypeToString(def->posix_lock));
|
||||
+ }
|
||||
+
|
||||
+ if (def->flock != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&lockAttrBuf, " flock='%s'",
|
||||
+ virTristateSwitchTypeToString(def->flock));
|
||||
+ }
|
||||
+
|
||||
+ virXMLFormatElement(&binaryBuf, "lock", &lockAttrBuf, NULL);
|
||||
}
|
||||
|
||||
virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
|
||||
|
||||
- virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
|
||||
+ virXMLFormatElement(buf, "driver", &driverAttrBuf, &driverBuf);
|
||||
+ virXMLFormatElement(buf, "binary", &binaryAttrBuf, &binaryBuf);
|
||||
|
||||
switch (def->type) {
|
||||
case VIR_DOMAIN_FS_TYPE_MOUNT:
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index 921cc42a57..2a382ede72 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -802,6 +802,14 @@ typedef enum {
|
||||
VIR_DOMAIN_FS_MODEL_LAST
|
||||
} virDomainFSModel;
|
||||
|
||||
+typedef enum {
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_DEFAULT = 0,
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_NONE,
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_ALWAYS,
|
||||
+
|
||||
+ VIR_DOMAIN_FS_CACHE_MODE_LAST
|
||||
+} virDomainFSCacheMode;
|
||||
+
|
||||
struct _virDomainFSDef {
|
||||
int type;
|
||||
int fsdriver; /* enum virDomainFSDriverType */
|
||||
@@ -817,6 +825,12 @@ struct _virDomainFSDef {
|
||||
unsigned long long space_hard_limit; /* in bytes */
|
||||
unsigned long long space_soft_limit; /* in bytes */
|
||||
bool symlinksResolved;
|
||||
+ char *binary;
|
||||
+ unsigned long long queue_size;
|
||||
+ virTristateSwitch xattr;
|
||||
+ virDomainFSCacheMode cache;
|
||||
+ virTristateSwitch posix_lock;
|
||||
+ virTristateSwitch flock;
|
||||
virDomainVirtioOptionsPtr virtio;
|
||||
virObjectPtr privateData;
|
||||
};
|
||||
@@ -3437,6 +3451,7 @@ VIR_ENUM_DECL(virDomainFSDriver);
|
||||
VIR_ENUM_DECL(virDomainFSAccessMode);
|
||||
VIR_ENUM_DECL(virDomainFSWrpolicy);
|
||||
VIR_ENUM_DECL(virDomainFSModel);
|
||||
+VIR_ENUM_DECL(virDomainFSCacheMode);
|
||||
VIR_ENUM_DECL(virDomainNet);
|
||||
VIR_ENUM_DECL(virDomainNetBackend);
|
||||
VIR_ENUM_DECL(virDomainNetVirtioTxMode);
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index bc2858fc00..5dc99e03cf 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -389,6 +389,7 @@ virDomainDiskSourceFormat;
|
||||
virDomainDiskTranslateSourcePool;
|
||||
virDomainFeatureTypeFromString;
|
||||
virDomainFeatureTypeToString;
|
||||
+virDomainFSCacheModeTypeToString;
|
||||
virDomainFSDefFree;
|
||||
virDomainFSDefNew;
|
||||
virDomainFSDriverTypeToString;
|
||||
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
index a6b6279fb8..f6bb663e97 100644
|
||||
--- a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
+++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
@@ -27,7 +27,11 @@
|
||||
<controller type='usb' index='0' model='none'/>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
- <driver type='virtiofs'/>
|
||||
+ <driver type='virtiofs' queue='1024'/>
|
||||
+ <binary path='/usr/libexec/virtiofsd' xattr='on'>
|
||||
+ <cache mode='always'/>
|
||||
+ <lock posix='off' flock='off'/>
|
||||
+ </binary>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
index 70df7b890d..96b9774704 100644
|
||||
--- a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
+++ b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
@@ -63,6 +63,7 @@
|
||||
</controller>
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
<driver type='virtiofs'/>
|
||||
+ <binary path='/usr/libexec/virtiofsd'/>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'/>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
From 3c65b917f70d556fa1059b0400771c8159b8ca3b Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3c65b917f70d556fa1059b0400771c8159b8ca3b@dist-git>
|
||||
From: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Date: Fri, 13 May 2022 12:31:08 +0200
|
||||
Subject: [PATCH] conf: adjust method name virDomainDeviceCCWAddressParseXML
|
||||
|
||||
Adjust method name virDomainDeviceCCWAddressParseXML to
|
||||
virCCWDeviceAddressParseXML.
|
||||
|
||||
Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 2d9fd19bf5d7a3d33b94e464c335252682edd623)
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2165011
|
||||
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
||||
---
|
||||
src/conf/device_conf.c | 4 ++--
|
||||
src/conf/device_conf.h | 4 ++--
|
||||
src/conf/domain_conf.c | 3 +--
|
||||
src/libvirt_private.syms | 2 +-
|
||||
4 files changed, 6 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c
|
||||
index 958e2f43cc..e93fd57341 100644
|
||||
--- a/src/conf/device_conf.c
|
||||
+++ b/src/conf/device_conf.c
|
||||
@@ -259,8 +259,8 @@ virPCIDeviceAddressFormat(virBuffer *buf,
|
||||
}
|
||||
|
||||
int
|
||||
-virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
|
||||
- virCCWDeviceAddress *addr)
|
||||
+virCCWDeviceAddressParseXML(xmlNodePtr node,
|
||||
+ virCCWDeviceAddress *addr)
|
||||
{
|
||||
int cssid;
|
||||
int ssid;
|
||||
diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h
|
||||
index 01e2edccc9..910e6b7792 100644
|
||||
--- a/src/conf/device_conf.h
|
||||
+++ b/src/conf/device_conf.h
|
||||
@@ -193,8 +193,8 @@ void virPCIDeviceAddressFormat(virBuffer *buf,
|
||||
virPCIDeviceAddress addr,
|
||||
bool includeTypeInAddr);
|
||||
|
||||
-int virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
|
||||
- virCCWDeviceAddress *addr);
|
||||
+int virCCWDeviceAddressParseXML(xmlNodePtr node,
|
||||
+ virCCWDeviceAddress *addr);
|
||||
|
||||
int virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
|
||||
virDomainDeviceDriveAddress *addr);
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 1e1c7f01b1..401ddaa1a0 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -6630,8 +6630,7 @@ virDomainDeviceAddressParseXML(xmlNodePtr address,
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
|
||||
- if (virDomainDeviceCCWAddressParseXML
|
||||
- (address, &info->addr.ccw) < 0)
|
||||
+ if (virCCWDeviceAddressParseXML(address, &info->addr.ccw) < 0)
|
||||
return -1;
|
||||
break;
|
||||
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index 0d3ee4c20a..44b551fb60 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -124,6 +124,7 @@ virCPUModeTypeToString;
|
||||
|
||||
|
||||
# conf/device_conf.h
|
||||
+virCCWDeviceAddressParseXML;
|
||||
virDeviceInfoPCIAddressExtensionIsPresent;
|
||||
virDeviceInfoPCIAddressExtensionIsWanted;
|
||||
virDeviceInfoPCIAddressIsPresent;
|
||||
@@ -131,7 +132,6 @@ virDeviceInfoPCIAddressIsWanted;
|
||||
virDomainDeviceAddressIsValid;
|
||||
virDomainDeviceAddressTypeToString;
|
||||
virDomainDeviceCcidAddressParseXML;
|
||||
-virDomainDeviceCCWAddressParseXML;
|
||||
virDomainDeviceDriveAddressParseXML;
|
||||
virDomainDeviceInfoAddressIsEqual;
|
||||
virDomainDeviceSpaprVioAddressParseXML;
|
||||
--
|
||||
2.39.1
|
||||
|
|
@ -1,146 +0,0 @@
|
|||
From 100ae962cd0f4dbfd5270bc2d61f05ec1c524c0a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <100ae962cd0f4dbfd5270bc2d61f05ec1c524c0a@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 4 Feb 2020 15:07:40 +0100
|
||||
Subject: [PATCH] conf: backup: Allow configuration of names exported via NBD
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
If users wish to use different name for exported disks or bitmaps
|
||||
the new fields allow to do so. Additionally they also document the
|
||||
current settings.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||
(cherry picked from commit 12ccd8d4db12d71a270d903701a8edb83d41f127)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1207659
|
||||
Message-Id: <8043f75d8d4b4ae7e7ae3671d71407f733e6a3cf.1580824112.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/formatbackup.html.in | 9 +++++++++
|
||||
docs/schemas/domainbackup.rng | 8 ++++++++
|
||||
src/conf/backup_conf.c | 10 ++++++++++
|
||||
src/conf/backup_conf.h | 2 ++
|
||||
tests/domainbackupxml2xmlin/backup-pull-seclabel.xml | 2 +-
|
||||
tests/domainbackupxml2xmlout/backup-pull-seclabel.xml | 2 +-
|
||||
6 files changed, 31 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/docs/formatbackup.html.in b/docs/formatbackup.html.in
|
||||
index 1c690901c7..543d913072 100644
|
||||
--- a/docs/formatbackup.html.in
|
||||
+++ b/docs/formatbackup.html.in
|
||||
@@ -85,6 +85,15 @@
|
||||
<dd>Setting this attribute to <code>yes</code>(default) specifies
|
||||
that the disk should take part in the backup and using
|
||||
<code>no</code> excludes the disk from the backup.</dd>
|
||||
+ <dt><code>exportname</code></dt>
|
||||
+ <dd>Allows modification of the NBD export name for the given disk.
|
||||
+ By default equal to disk target.
|
||||
+ Valid only for pull mode backups.</dd>
|
||||
+ <dt><code>exportbitmap</code></dt>
|
||||
+ <dd>Allows modification of the name of the bitmap describing dirty
|
||||
+ blocks for an incremental backup exported via NBD export name
|
||||
+ for the given disk.
|
||||
+ Valid only for pull mode backups.</dd>
|
||||
<dt><code>type</code></dt>
|
||||
<dd>A mandatory attribute to describe the type of the
|
||||
disk, except when <code>backup='no'</code> is
|
||||
diff --git a/docs/schemas/domainbackup.rng b/docs/schemas/domainbackup.rng
|
||||
index c1e4d80302..395ea841f9 100644
|
||||
--- a/docs/schemas/domainbackup.rng
|
||||
+++ b/docs/schemas/domainbackup.rng
|
||||
@@ -165,6 +165,14 @@
|
||||
<attribute name='name'>
|
||||
<ref name='diskTarget'/>
|
||||
</attribute>
|
||||
+ <optional>
|
||||
+ <attribute name='exportname'>
|
||||
+ <text/>
|
||||
+ </attribute>
|
||||
+ <attribute name='exportbitmap'>
|
||||
+ <text/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
<choice>
|
||||
<group>
|
||||
<attribute name='backup'>
|
||||
diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c
|
||||
index 61dc8cd4b2..b370b686f1 100644
|
||||
--- a/src/conf/backup_conf.c
|
||||
+++ b/src/conf/backup_conf.c
|
||||
@@ -71,6 +71,8 @@ virDomainBackupDefFree(virDomainBackupDefPtr def)
|
||||
virDomainBackupDiskDefPtr disk = def->disks + i;
|
||||
|
||||
g_free(disk->name);
|
||||
+ g_free(disk->exportname);
|
||||
+ g_free(disk->exportbitmap);
|
||||
virObjectUnref(disk->store);
|
||||
}
|
||||
|
||||
@@ -124,6 +126,11 @@ virDomainBackupDiskDefParseXML(xmlNodePtr node,
|
||||
if (def->backup == VIR_TRISTATE_BOOL_NO)
|
||||
return 0;
|
||||
|
||||
+ if (!push) {
|
||||
+ def->exportname = virXMLPropString(node, "exportname");
|
||||
+ def->exportbitmap = virXMLPropString(node, "exportbitmap");
|
||||
+ }
|
||||
+
|
||||
if (internal) {
|
||||
if (!(state = virXMLPropString(node, "state")) ||
|
||||
(tmp = virDomainBackupDiskStateTypeFromString(state)) < 0) {
|
||||
@@ -333,6 +340,9 @@ virDomainBackupDiskDefFormat(virBufferPtr buf,
|
||||
if (disk->backup == VIR_TRISTATE_BOOL_YES) {
|
||||
virBufferAsprintf(&attrBuf, " type='%s'", virStorageTypeToString(disk->store->type));
|
||||
|
||||
+ virBufferEscapeString(&attrBuf, " exportname='%s'", disk->exportname);
|
||||
+ virBufferEscapeString(&attrBuf, " exportbitmap='%s'", disk->exportbitmap);
|
||||
+
|
||||
if (disk->store->format > 0)
|
||||
virBufferEscapeString(&childBuf, "<driver type='%s'/>\n",
|
||||
virStorageFileFormatTypeToString(disk->store->format));
|
||||
diff --git a/src/conf/backup_conf.h b/src/conf/backup_conf.h
|
||||
index 7cf44245d4..672fd52ee7 100644
|
||||
--- a/src/conf/backup_conf.h
|
||||
+++ b/src/conf/backup_conf.h
|
||||
@@ -51,6 +51,8 @@ typedef virDomainBackupDiskDef *virDomainBackupDiskDefPtr;
|
||||
struct _virDomainBackupDiskDef {
|
||||
char *name; /* name matching the <target dev='...' of the domain */
|
||||
virTristateBool backup; /* whether backup is requested */
|
||||
+ char *exportname; /* name of the NBD export for pull mode backup */
|
||||
+ char *exportbitmap; /* name of the bitmap exposed in NBD for pull mode backup */
|
||||
|
||||
/* details of target for push-mode, or of the scratch file for pull-mode */
|
||||
virStorageSourcePtr store;
|
||||
diff --git a/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml b/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
|
||||
index a00d8758bb..4e6e602c19 100644
|
||||
--- a/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
|
||||
+++ b/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
|
||||
@@ -2,7 +2,7 @@
|
||||
<incremental>1525889631</incremental>
|
||||
<server transport='tcp' name='localhost' port='10809'/>
|
||||
<disks>
|
||||
- <disk name='vda' type='file'>
|
||||
+ <disk name='vda' type='file' exportname='test-vda' exportbitmap='blah'>
|
||||
<driver type='qcow2'/>
|
||||
<scratch file='/path/to/file'>
|
||||
<seclabel model='dac' relabel='no'/>
|
||||
diff --git a/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml b/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
|
||||
index c631c9b979..450f007d3a 100644
|
||||
--- a/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
|
||||
+++ b/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
|
||||
@@ -2,7 +2,7 @@
|
||||
<incremental>1525889631</incremental>
|
||||
<server transport='tcp' name='localhost' port='10809'/>
|
||||
<disks>
|
||||
- <disk name='vda' backup='yes' type='file'>
|
||||
+ <disk name='vda' backup='yes' type='file' exportname='test-vda' exportbitmap='blah'>
|
||||
<driver type='qcow2'/>
|
||||
<scratch file='/path/to/file'>
|
||||
<seclabel model='dac' relabel='no'/>
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
From 7f5c44bfd2b6290e142380775b6a6205ccc43840 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <7f5c44bfd2b6290e142380775b6a6205ccc43840@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 23 Jun 2020 12:23:37 +0200
|
||||
Subject: [PATCH] conf: backup: Store incremental backup checkpoint name
|
||||
per-disk
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In preparation to allow heterogenous backups store the 'incremental'
|
||||
field per-disk and fill it by default from the per-backup field.
|
||||
|
||||
Having this will be important once we'll want to allow incremental
|
||||
backup working while hotplugging a new disk.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||
(cherry picked from commit b8295160c36e555d8bcaef5015d0c1e3ae85fb17)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804593
|
||||
Message-Id: <ee6c31ce5f3400523559793fe40e789656068f7c.1592906423.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/backup_conf.c | 8 ++++++++
|
||||
src/conf/backup_conf.h | 1 +
|
||||
2 files changed, 9 insertions(+)
|
||||
|
||||
diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c
|
||||
index 64c8f6cc09..58fb3ec759 100644
|
||||
--- a/src/conf/backup_conf.c
|
||||
+++ b/src/conf/backup_conf.c
|
||||
@@ -71,6 +71,7 @@ virDomainBackupDefFree(virDomainBackupDefPtr def)
|
||||
virDomainBackupDiskDefPtr disk = def->disks + i;
|
||||
|
||||
g_free(disk->name);
|
||||
+ g_free(disk->incremental);
|
||||
g_free(disk->exportname);
|
||||
g_free(disk->exportbitmap);
|
||||
virObjectUnref(disk->store);
|
||||
@@ -503,5 +504,12 @@ virDomainBackupAlignDisks(virDomainBackupDefPtr def,
|
||||
}
|
||||
}
|
||||
|
||||
+ for (i = 0; i < def->ndisks; i++) {
|
||||
+ virDomainBackupDiskDefPtr backupdisk = &def->disks[i];
|
||||
+
|
||||
+ if (def->incremental && !backupdisk->incremental)
|
||||
+ backupdisk->incremental = g_strdup(def->incremental);
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
diff --git a/src/conf/backup_conf.h b/src/conf/backup_conf.h
|
||||
index 672fd52ee7..7ce7a46ad4 100644
|
||||
--- a/src/conf/backup_conf.h
|
||||
+++ b/src/conf/backup_conf.h
|
||||
@@ -51,6 +51,7 @@ typedef virDomainBackupDiskDef *virDomainBackupDiskDefPtr;
|
||||
struct _virDomainBackupDiskDef {
|
||||
char *name; /* name matching the <target dev='...' of the domain */
|
||||
virTristateBool backup; /* whether backup is requested */
|
||||
+ char *incremental; /* name of the starting point checkpoint of an incremental backup */
|
||||
char *exportname; /* name of the NBD export for pull mode backup */
|
||||
char *exportbitmap; /* name of the bitmap exposed in NBD for pull mode backup */
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
From 28094095fe6e4b05b25e459a34d93d195b7afb62 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <28094095fe6e4b05b25e459a34d93d195b7afb62@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:17:02 -0400
|
||||
Subject: [PATCH] conf: check HOTPLUGGABLE connect flag when validating a PCI
|
||||
address
|
||||
|
||||
The HOTPLUGGABLE flag is set for appropriates buses in a PCI address
|
||||
set, and thnis patch updates virDomainPCIAddressFlagsCompatible() to
|
||||
check the HOTPLUGGABLE flag when searching for a suitable bus/slot for
|
||||
a device. No devices request HOTPLUGGABLE though (yet), so there is no
|
||||
observable effect.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit a283189f8c64882681ea99259ccfc8d1b8e524dd)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426171703.18808-2-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index cc45a0bbf1..ed41eca114 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -376,6 +376,18 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
return false;
|
||||
}
|
||||
|
||||
+ if ((devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE) &&
|
||||
+ !(busFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)) {
|
||||
+ if (reportError) {
|
||||
+ virReportError(errType,
|
||||
+ _("The device at PCI address %s requires "
|
||||
+ "hotplug capability, but the PCI controller "
|
||||
+ "with index='%d' doesn't support hotplug"),
|
||||
+ addrStr, addr->bus);
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
/* If this bus doesn't allow the type of connection (PCI
|
||||
* vs. PCIe) required by the device, or if the device requires
|
||||
* hot-plug and this bus doesn't have it, return false.
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
From f9fdeb29a61a98868d1a9f5284a85c57f826d6d1 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f9fdeb29a61a98868d1a9f5284a85c57f826d6d1@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Fri, 13 Mar 2020 13:08:08 +0100
|
||||
Subject: [PATCH] conf: do not generate machine names ending with a dash
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
As of systemd commit:
|
||||
|
||||
commit d65652f1f21a4b0c59711320f34266c635393c89
|
||||
Author: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
|
||||
CommitDate: 2018-12-10 09:56:56 +0100
|
||||
|
||||
Partially unify hostname_is_valid() and dns_name_is_valid()
|
||||
|
||||
Dashes are no longer allowed at the end of machine names.
|
||||
|
||||
Trim the trailing dashes from the generated name before passing
|
||||
it to machined.
|
||||
|
||||
Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=1790409
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||
(cherry picked from commit 45464db8ba502764cf37ec9335770248bdb3d9a8)
|
||||
|
||||
Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Message-Id: <ae17f80d69ee7772d32dd5c34c332be6b77e7afb.1584101247.git.mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 3 +++
|
||||
tests/virsystemdtest.c | 4 ++++
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 77e3d25a2d..4b297c96bc 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -30708,6 +30708,9 @@ virDomainMachineNameAppendValid(virBufferPtr buf,
|
||||
|
||||
virBufferAddChar(buf, *name);
|
||||
}
|
||||
+
|
||||
+ /* trailing dashes are not allowed */
|
||||
+ virBufferTrimChars(buf, "-");
|
||||
}
|
||||
|
||||
#undef HOSTNAME_CHARS
|
||||
diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c
|
||||
index 9b95ca6789..26876850b8 100644
|
||||
--- a/tests/virsystemdtest.c
|
||||
+++ b/tests/virsystemdtest.c
|
||||
@@ -740,6 +740,10 @@ mymain(void)
|
||||
"qemu-7-123456789012345678901234567890123456789012345678901234567");
|
||||
TEST_MACHINE("123456789012345678901234567890123456789012345678901234567890", 8,
|
||||
"qemu-8-123456789012345678901234567890123456789012345678901234567");
|
||||
+ TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec-acdc-56b3f8c5f678)", 100,
|
||||
+ "qemu-100-kstest-network-device-default-httpksc9eed63e-981e-48ec");
|
||||
+ TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec--cdc-56b3f8c5f678)", 10,
|
||||
+ "qemu-10-kstest-network-device-default-httpksc9eed63e-981e-48ec");
|
||||
|
||||
# define TESTS_PM_SUPPORT_HELPER(name, function) \
|
||||
do { \
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
From 04792aa0715be4e779fca81fa8f7e9f2c5c1b71f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <04792aa0715be4e779fca81fa8f7e9f2c5c1b71f@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 4 Feb 2020 15:08:00 +0100
|
||||
Subject: [PATCH] conf: domain: Remove checking of return value of
|
||||
virHashCreateFull
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This module has last two direct checks whether the value returned by
|
||||
virHashCreateFull is NULL. Remove them so that static analyzers don't
|
||||
get the false idea that checking the value is necessary.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 2a5ea0a0c1843c7c43e673b3d2082cc3abdef602)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1793263
|
||||
Message-Id: <2e310ad44b341511caba735608bc0bba4b072d6c.1580824112.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 30 ++++++++++++------------------
|
||||
1 file changed, 12 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index 607ba56efd..f07b3d9725 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -1044,28 +1044,22 @@ virDomainPCIAddressSetExtensionAlloc(virDomainPCIAddressSetPtr addrs,
|
||||
if (VIR_ALLOC(addrs->zpciIds) < 0)
|
||||
return -1;
|
||||
|
||||
- if (!(addrs->zpciIds->uids = virHashCreateFull(10, NULL,
|
||||
- virZPCIAddrKeyCode,
|
||||
- virZPCIAddrKeyEqual,
|
||||
- virZPCIAddrKeyCopy,
|
||||
- virZPCIAddrKeyPrintHuman,
|
||||
- virZPCIAddrKeyFree)))
|
||||
- goto error;
|
||||
+ addrs->zpciIds->uids = virHashCreateFull(10, NULL,
|
||||
+ virZPCIAddrKeyCode,
|
||||
+ virZPCIAddrKeyEqual,
|
||||
+ virZPCIAddrKeyCopy,
|
||||
+ virZPCIAddrKeyPrintHuman,
|
||||
+ virZPCIAddrKeyFree);
|
||||
|
||||
- if (!(addrs->zpciIds->fids = virHashCreateFull(10, NULL,
|
||||
- virZPCIAddrKeyCode,
|
||||
- virZPCIAddrKeyEqual,
|
||||
- virZPCIAddrKeyCopy,
|
||||
- virZPCIAddrKeyPrintHuman,
|
||||
- virZPCIAddrKeyFree)))
|
||||
- goto error;
|
||||
+ addrs->zpciIds->fids = virHashCreateFull(10, NULL,
|
||||
+ virZPCIAddrKeyCode,
|
||||
+ virZPCIAddrKeyEqual,
|
||||
+ virZPCIAddrKeyCopy,
|
||||
+ virZPCIAddrKeyPrintHuman,
|
||||
+ virZPCIAddrKeyFree);
|
||||
}
|
||||
|
||||
return 0;
|
||||
-
|
||||
- error:
|
||||
- virDomainPCIAddressSetExtensionFree(addrs);
|
||||
- return -1;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
From 5ec240811e391f97378d0b6b726e0dee13ae8a40 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5ec240811e391f97378d0b6b726e0dee13ae8a40@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:17:03 -0400
|
||||
Subject: [PATCH] conf: during PCI hotplug, require that the controller support
|
||||
hotplug
|
||||
|
||||
Before this patch we would simply rely on QEMU failing to attach the
|
||||
device. Since we have a flag in the address set telling us which
|
||||
controllers support hotplug, we can fail the operation sooner.
|
||||
|
||||
This also assures that when hotplugging with no provided PCI address,
|
||||
that we skip any controllers with hotplug='off', and attempt to assign
|
||||
the device to a controller that not only supports hotplug, but also
|
||||
has it enabled.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 7118bdee1550b6022e7362402ca8204add4cf80b)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426171703.18808-3-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index ed41eca114..34ea7bc051 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -936,6 +936,11 @@ virDomainPCIAddressEnsureAddr(virDomainPCIAddressSetPtr addrs,
|
||||
if (!flags)
|
||||
return 0;
|
||||
|
||||
+ /* This function is only called during hotplug, so we require hotplug
|
||||
+ * support from the controller.
|
||||
+ */
|
||||
+ flags |= VIR_PCI_CONNECT_HOTPLUGGABLE;
|
||||
+
|
||||
if (!(addrStr = virPCIDeviceAddressAsString(&dev->addr.pci)))
|
||||
goto cleanup;
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,290 +0,0 @@
|
|||
From 12892e0376be4dc07dc317b807f2ec86c27a94b2 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <12892e0376be4dc07dc317b807f2ec86c27a94b2@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:04:07 -0400
|
||||
Subject: [PATCH] conf: new attribute "hotplug" for pci controllers
|
||||
|
||||
a <controller type='pci'...> element can now have a "hotplug"
|
||||
attribute in the <target> subelement. This is intended to control
|
||||
whether or not the slot(s) of the controller support
|
||||
hotplugging/unplugging a device:
|
||||
|
||||
<controller type='pci' model='pcie-root-port'>
|
||||
<target hotplug='off'/>
|
||||
</controller>
|
||||
|
||||
The default value of hotplug is "on".
|
||||
|
||||
Since support for configuring such an option is hypervisor-dependent
|
||||
(and will vary among different types of PCI controllers even on a
|
||||
single hypervisor), no validation is done in this patch - that
|
||||
validation will be done in the patch that wires support for the
|
||||
setting into the hypervisor.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 78f4d5e6f188a9f0f8d6da6b1fe78b9f4172d9ad)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
Conflicts/Changes from upstread:
|
||||
|
||||
tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml:
|
||||
|
||||
had to be modified to remove reference to the qemu64 CPU type.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426170415.18328-5-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 11 +++
|
||||
docs/schemas/domaincommon.rng | 5 ++
|
||||
src/conf/domain_conf.c | 20 +++++-
|
||||
src/conf/domain_conf.h | 1 +
|
||||
.../pcie-root-port-nohotplug.xml | 35 ++++++++++
|
||||
...pcie-root-port-nohotplug.x86_64-latest.xml | 67 +++++++++++++++++++
|
||||
tests/qemuxml2xmltest.c | 2 +-
|
||||
7 files changed, 139 insertions(+), 2 deletions(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 9c588185df..76799f5ffc 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -4651,6 +4651,17 @@
|
||||
which is visible to the virtual machine. If set, port must be
|
||||
between 0 and 255.
|
||||
</dd>
|
||||
+ <dt><code>hotplug</code></dt>
|
||||
+ <dd>
|
||||
+ pcie-root-port and pcie-switch-downstream-port controllers can
|
||||
+ also have a <code>hotplug</code> attribute in
|
||||
+ the <code><target></code> subelement, which is used to
|
||||
+ disable hotplug/unplug of devices on a particular
|
||||
+ controller. The default setting of <code>hotplug</code>
|
||||
+ is <code>on</code>; it should be set to <code>off</code> to
|
||||
+ disable hotplug/unplug of devices on a particular controller.
|
||||
+ <span class="since">Since 6.3.0</span>
|
||||
+ </dd>
|
||||
<dt><code>busNr</code></dt>
|
||||
<dd>
|
||||
pci-expander-bus and pcie-expander-bus controllers can have an
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index dd8f27243a..9fda5f17e0 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -2475,6 +2475,11 @@
|
||||
<ref name='uint8'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <attribute name='hotplug'>
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
<optional>
|
||||
<element name='node'>
|
||||
<ref name='unsignedInt'/>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 28160a2967..ed9ca0e9d8 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -10933,6 +10933,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
g_autofree char *port = NULL;
|
||||
g_autofree char *busNr = NULL;
|
||||
g_autofree char *targetIndex = NULL;
|
||||
+ g_autofree char *hotplug = NULL;
|
||||
g_autofree char *ioeventfd = NULL;
|
||||
g_autofree char *portsStr = NULL;
|
||||
g_autofree char *iothread = NULL;
|
||||
@@ -11004,6 +11005,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
chassis = virXMLPropString(cur, "chassis");
|
||||
port = virXMLPropString(cur, "port");
|
||||
busNr = virXMLPropString(cur, "busNr");
|
||||
+ hotplug = virXMLPropString(cur, "hotplug");
|
||||
targetIndex = virXMLPropString(cur, "index");
|
||||
processedTarget = true;
|
||||
}
|
||||
@@ -11240,6 +11242,17 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
}
|
||||
def->opts.pciopts.numaNode = numaNode;
|
||||
}
|
||||
+ if (hotplug) {
|
||||
+ int val = virTristateSwitchTypeFromString(hotplug);
|
||||
+
|
||||
+ if (val <= 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("PCI controller unrecognized hotplug setting '%s'"),
|
||||
+ hotplug);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->opts.pciopts.hotplug = val;
|
||||
+ }
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: {
|
||||
g_autofree char *gntframes = virXMLPropString(node, "maxGrantFrames");
|
||||
@@ -25112,7 +25125,8 @@ virDomainControllerDefFormat(virBufferPtr buf,
|
||||
def->opts.pciopts.port != -1 ||
|
||||
def->opts.pciopts.busNr != -1 ||
|
||||
def->opts.pciopts.targetIndex != -1 ||
|
||||
- def->opts.pciopts.numaNode != -1) {
|
||||
+ def->opts.pciopts.numaNode != -1 ||
|
||||
+ def->opts.pciopts.hotplug != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
virBufferAddLit(&childBuf, "<target");
|
||||
if (def->opts.pciopts.chassisNr != -1)
|
||||
virBufferAsprintf(&childBuf, " chassisNr='%d'",
|
||||
@@ -25129,6 +25143,10 @@ virDomainControllerDefFormat(virBufferPtr buf,
|
||||
if (def->opts.pciopts.targetIndex != -1)
|
||||
virBufferAsprintf(&childBuf, " index='%d'",
|
||||
def->opts.pciopts.targetIndex);
|
||||
+ if (def->opts.pciopts.hotplug != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&childBuf, " hotplug='%s'",
|
||||
+ virTristateSwitchTypeToString(def->opts.pciopts.hotplug));
|
||||
+ }
|
||||
if (def->opts.pciopts.numaNode == -1) {
|
||||
virBufferAddLit(&childBuf, "/>\n");
|
||||
} else {
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index 2a382ede72..118077edaa 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -719,6 +719,7 @@ struct _virDomainPCIControllerOpts {
|
||||
* item in memory target config) -1 == unspecified
|
||||
*/
|
||||
int numaNode;
|
||||
+ virTristateSwitch hotplug; /* 'off' to prevent hotplug/unplug, default 'on' */
|
||||
};
|
||||
|
||||
struct _virDomainUSBControllerOpts {
|
||||
diff --git a/tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml b/tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml
|
||||
new file mode 100644
|
||||
index 0000000000..8a01494470
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml
|
||||
@@ -0,0 +1,35 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>guest</name>
|
||||
+ <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid>
|
||||
+ <memory unit='KiB'>2097152</memory>
|
||||
+ <currentMemory unit='KiB'>2097152</currentMemory>
|
||||
+ <vcpu placement='static'>2</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='q35'>hvm</type>
|
||||
+ </os>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <controller type='pci' index='0' model='pcie-root'/>
|
||||
+ <controller type='pci' index='1' model='pcie-root-port'/>
|
||||
+ <controller type='pci' index='2' model='pcie-root-port'>
|
||||
+ <target hotplug='off'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='3' model='pcie-root-port'>
|
||||
+ <model name='ioh3420'/>
|
||||
+ <target hotplug='off'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='4' model='pcie-switch-upstream-port'/>
|
||||
+ <controller type='pci' index='5' model='pcie-switch-downstream-port'>
|
||||
+ <target hotplug='off'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='6' model='pcie-switch-downstream-port'>
|
||||
+ <target hotplug='on'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='7' model='pcie-switch-downstream-port'/>
|
||||
+ <controller type='pci' index='8' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='30' port='0x27'/>
|
||||
+ </controller>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml b/tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml
|
||||
new file mode 100644
|
||||
index 0000000000..f7dbaccae9
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml
|
||||
@@ -0,0 +1,67 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>guest</name>
|
||||
+ <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid>
|
||||
+ <memory unit='KiB'>2097152</memory>
|
||||
+ <currentMemory unit='KiB'>2097152</currentMemory>
|
||||
+ <vcpu placement='static'>2</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='q35'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <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='pci' index='0' model='pcie-root'/>
|
||||
+ <controller type='pci' index='1' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='1' port='0x8'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='2' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='2' port='0x9' hotplug='off'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='3' model='pcie-root-port'>
|
||||
+ <model name='ioh3420'/>
|
||||
+ <target chassis='3' port='0xa' hotplug='off'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='4' model='pcie-switch-upstream-port'>
|
||||
+ <model name='x3130-upstream'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='5' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='5' port='0x0' hotplug='off'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='6' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='6' port='0x1' hotplug='on'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x01' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='7' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='7' port='0x2'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x02' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='8' model='pcie-switch-downstream-port'>
|
||||
+ <model name='xio3130-downstream'/>
|
||||
+ <target chassis='30' port='0x27'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x03' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='usb' index='0' model='qemu-xhci'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='sata' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index 15110dd104..c8218e423e 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -953,7 +953,7 @@ mymain(void)
|
||||
QEMU_CAPS_DEVICE_IOH3420);
|
||||
DO_TEST("pcie-root-port-model-ioh3420",
|
||||
QEMU_CAPS_DEVICE_IOH3420);
|
||||
-
|
||||
+ DO_TEST_CAPS_LATEST("pcie-root-port-nohotplug");
|
||||
DO_TEST("pcie-switch-upstream-port",
|
||||
QEMU_CAPS_DEVICE_IOH3420,
|
||||
QEMU_CAPS_DEVICE_X3130_UPSTREAM,
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,468 +0,0 @@
|
|||
From 653245c4de76aba4e75131da8d40eed5b15ffd0d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <653245c4de76aba4e75131da8d40eed5b15ffd0d@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Thu, 30 Jan 2020 14:12:40 -0500
|
||||
Subject: [PATCH] conf: parse/format <teaming> subelement of <interface>
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The subelement <teaming> of <interface> devices is used to configure a
|
||||
simple teaming association between two interfaces in a domain. Example:
|
||||
|
||||
<interface type='bridge'>
|
||||
<source bridge='br0'/>
|
||||
<model type='virtio'/>
|
||||
<mac address='00:11:22:33:44:55'/>
|
||||
<alias name='ua-backup0'/>
|
||||
<teaming type='persistent'/>
|
||||
</interface>
|
||||
<interface type='hostdev'>
|
||||
<source>
|
||||
<address type='pci' bus='0x02' slot='0x10' function='0x4'/>
|
||||
</source>
|
||||
<mac address='00:11:22:33:44:55'/>
|
||||
<teaming type='transient' persistent='ua-backup0'/>
|
||||
</interface>
|
||||
|
||||
The interface with <teaming type='persistent'/> is assumed to always
|
||||
be present, while the interface with type='transient' may be be
|
||||
unplugged and later re-plugged; the persistent='blah' attribute (and
|
||||
in the one currently available implementation, also the matching MAC
|
||||
addresses) is what associates the two devices with each other. It is
|
||||
up to the hypervisor and the guest network drivers to determine what
|
||||
to do with this information.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit fb0509d06ac57434c2edbd81ee63deb32a0e598a)
|
||||
|
||||
https://bugzilla.redhat.com/1693587
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200130191244.24174-3-laine@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
docs/schemas/domaincommon.rng | 19 ++++++
|
||||
src/conf/domain_conf.c | 47 +++++++++++++
|
||||
src/conf/domain_conf.h | 14 ++++
|
||||
.../net-virtio-teaming-network.xml | 37 +++++++++++
|
||||
tests/qemuxml2argvdata/net-virtio-teaming.xml | 50 ++++++++++++++
|
||||
.../net-virtio-teaming-network.xml | 51 ++++++++++++++
|
||||
.../qemuxml2xmloutdata/net-virtio-teaming.xml | 66 +++++++++++++++++++
|
||||
tests/qemuxml2xmltest.c | 6 ++
|
||||
8 files changed, 290 insertions(+)
|
||||
create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming-network.xml
|
||||
create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/net-virtio-teaming.xml
|
||||
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 76d94b156f..026e753567 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -3158,6 +3158,25 @@
|
||||
<optional>
|
||||
<ref name="vlan"/>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <element name="teaming">
|
||||
+ <choice>
|
||||
+ <group>
|
||||
+ <attribute name="type">
|
||||
+ <value>persistent</value>
|
||||
+ </attribute>
|
||||
+ </group>
|
||||
+ <group>
|
||||
+ <attribute name="type">
|
||||
+ <value>transient</value>
|
||||
+ </attribute>
|
||||
+ <attribute name="persistent">
|
||||
+ <ref name="aliasName"/>
|
||||
+ </attribute>
|
||||
+ </group>
|
||||
+ </choice>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
</interleave>
|
||||
</define>
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 0478914c69..58f72b3b0f 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -554,6 +554,13 @@ VIR_ENUM_IMPL(virDomainNetVirtioTxMode,
|
||||
"timer",
|
||||
);
|
||||
|
||||
+VIR_ENUM_IMPL(virDomainNetTeaming,
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_LAST,
|
||||
+ "none",
|
||||
+ "persistent",
|
||||
+ "transient",
|
||||
+);
|
||||
+
|
||||
VIR_ENUM_IMPL(virDomainNetInterfaceLinkState,
|
||||
VIR_DOMAIN_NET_INTERFACE_LINK_STATE_LAST,
|
||||
"default",
|
||||
@@ -6276,6 +6283,21 @@ virDomainNetDefValidate(const virDomainNetDef *net)
|
||||
virDomainNetTypeToString(net->type));
|
||||
return -1;
|
||||
}
|
||||
+
|
||||
+ if (net->teaming.type == VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT) {
|
||||
+ if (!net->teaming.persistent) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("teaming persistent attribute must be set if teaming type is 'transient'"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (net->teaming.persistent) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("teaming persistent attribute not allowed if teaming type is '%s'"),
|
||||
+ virDomainNetTeamingTypeToString(net->teaming.type));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -11574,6 +11596,8 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
g_autofree char *vhostuser_type = NULL;
|
||||
g_autofree char *trustGuestRxFilters = NULL;
|
||||
g_autofree char *vhost_path = NULL;
|
||||
+ g_autofree char *teamingType = NULL;
|
||||
+ g_autofree char *teamingPersistent = NULL;
|
||||
const char *prefix = xmlopt ? xmlopt->config.netPrefix : NULL;
|
||||
|
||||
if (!(def = virDomainNetDefNew(xmlopt)))
|
||||
@@ -11775,6 +11799,10 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
if (!vhost_path && (tmp = virXMLPropString(cur, "vhost")))
|
||||
vhost_path = virFileSanitizePath(tmp);
|
||||
VIR_FREE(tmp);
|
||||
+ } else if (virXMLNodeNameEqual(cur, "teaming") &&
|
||||
+ !teamingType && !teamingPersistent) {
|
||||
+ teamingType = virXMLPropString(cur, "type");
|
||||
+ teamingPersistent = virXMLPropString(cur, "persistent");
|
||||
}
|
||||
}
|
||||
cur = cur->next;
|
||||
@@ -12296,6 +12324,19 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (teamingType) {
|
||||
+ int tmpTeaming;
|
||||
+
|
||||
+ if ((tmpTeaming = virDomainNetTeamingTypeFromString(teamingType)) <= 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("unknown teaming type '%s'"),
|
||||
+ teamingType);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->teaming.type = tmpTeaming;
|
||||
+ }
|
||||
+ def->teaming.persistent = g_steal_pointer(&teamingPersistent);
|
||||
+
|
||||
rv = virXPathULong("string(./tune/sndbuf)", ctxt, &def->tune.sndbuf);
|
||||
if (rv >= 0) {
|
||||
def->tune.sndbuf_specified = true;
|
||||
@@ -25741,6 +25782,12 @@ virDomainNetDefFormat(virBufferPtr buf,
|
||||
virBufferAddLit(buf, "</tune>\n");
|
||||
}
|
||||
|
||||
+ if (def->teaming.type != VIR_DOMAIN_NET_TEAMING_TYPE_NONE) {
|
||||
+ virBufferAsprintf(buf, "<teaming type='%s'",
|
||||
+ virDomainNetTeamingTypeToString(def->teaming.type));
|
||||
+ virBufferEscapeString(buf, " persistent='%s'", def->teaming.persistent);
|
||||
+ virBufferAddLit(buf, "/>\n");
|
||||
+ }
|
||||
if (def->linkstate) {
|
||||
virBufferAsprintf(buf, "<link state='%s'/>\n",
|
||||
virDomainNetInterfaceLinkStateTypeToString(def->linkstate));
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index 6ae89fa498..ee8eb3ddc0 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -884,6 +884,15 @@ typedef enum {
|
||||
VIR_DOMAIN_NET_VIRTIO_TX_MODE_LAST
|
||||
} virDomainNetVirtioTxModeType;
|
||||
|
||||
+/* the type of teaming device */
|
||||
+typedef enum {
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_NONE,
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_PERSISTENT,
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT,
|
||||
+
|
||||
+ VIR_DOMAIN_NET_TEAMING_TYPE_LAST
|
||||
+} virDomainNetTeamingType;
|
||||
+
|
||||
/* link interface states */
|
||||
typedef enum {
|
||||
VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DEFAULT = 0, /* Default link state (up) */
|
||||
@@ -958,6 +967,10 @@ struct _virDomainNetDef {
|
||||
char *tap;
|
||||
char *vhost;
|
||||
} backend;
|
||||
+ struct {
|
||||
+ virDomainNetTeamingType type;
|
||||
+ char *persistent; /* alias name of persistent device */
|
||||
+ } teaming;
|
||||
union {
|
||||
virDomainChrSourceDefPtr vhostuser;
|
||||
struct {
|
||||
@@ -3425,6 +3438,7 @@ VIR_ENUM_DECL(virDomainFSModel);
|
||||
VIR_ENUM_DECL(virDomainNet);
|
||||
VIR_ENUM_DECL(virDomainNetBackend);
|
||||
VIR_ENUM_DECL(virDomainNetVirtioTxMode);
|
||||
+VIR_ENUM_DECL(virDomainNetTeaming);
|
||||
VIR_ENUM_DECL(virDomainNetInterfaceLinkState);
|
||||
VIR_ENUM_DECL(virDomainNetModel);
|
||||
VIR_ENUM_DECL(virDomainChrDevice);
|
||||
diff --git a/tests/qemuxml2argvdata/net-virtio-teaming-network.xml b/tests/qemuxml2argvdata/net-virtio-teaming-network.xml
|
||||
new file mode 100644
|
||||
index 0000000000..edab52f3a1
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/net-virtio-teaming-network.xml
|
||||
@@ -0,0 +1,37 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' 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>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i386</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0'/>
|
||||
+ <interface type='network'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source network='mybridge'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup0'/>
|
||||
+ </interface>
|
||||
+ <interface type='network'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source network='myhostdevpool'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='transient' persistent='ua-backup0'/>
|
||||
+ </interface>
|
||||
+ <memballoon model='virtio'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvdata/net-virtio-teaming.xml b/tests/qemuxml2argvdata/net-virtio-teaming.xml
|
||||
new file mode 100644
|
||||
index 0000000000..830ce28524
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/net-virtio-teaming.xml
|
||||
@@ -0,0 +1,50 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' 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>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i386</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ </disk>
|
||||
+ <controller type='usb' index='0'/>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup0'/>
|
||||
+ </interface>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='66:44:33:22:11:00'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup1'/>
|
||||
+ </interface>
|
||||
+ <interface type='hostdev' managed='yes'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source>
|
||||
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
|
||||
+ </source>
|
||||
+ <teaming type='transient' persistent='ua-backup0'/>
|
||||
+ </interface>
|
||||
+ <interface type='hostdev' managed='yes'>
|
||||
+ <mac address='66:44:33:22:11:00'/>
|
||||
+ <source>
|
||||
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x2'/>
|
||||
+ </source>
|
||||
+ <teaming type='transient' persistent='ua-backup1'/>
|
||||
+ </interface>
|
||||
+ <memballoon model='virtio'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml b/tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
|
||||
new file mode 100644
|
||||
index 0000000000..e0dbeafe02
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
|
||||
@@ -0,0 +1,51 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' 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>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i386</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'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <controller type='ide' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <interface type='network'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source network='mybridge'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup0'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <interface type='network'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source network='myhostdevpool'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='transient' persistent='ua-backup0'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='virtio'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||
+ </memballoon>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/net-virtio-teaming.xml b/tests/qemuxml2xmloutdata/net-virtio-teaming.xml
|
||||
new file mode 100644
|
||||
index 0000000000..5a5695794a
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/net-virtio-teaming.xml
|
||||
@@ -0,0 +1,66 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' 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>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-i386</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'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <controller type='ide' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup0'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='66:44:33:22:11:00'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <teaming type='persistent'/>
|
||||
+ <alias name='ua-backup1'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <interface type='hostdev' managed='yes'>
|
||||
+ <mac address='00:11:22:33:44:55'/>
|
||||
+ <source>
|
||||
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
|
||||
+ </source>
|
||||
+ <teaming type='transient' persistent='ua-backup0'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <interface type='hostdev' managed='yes'>
|
||||
+ <mac address='66:44:33:22:11:00'/>
|
||||
+ <source>
|
||||
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x2'/>
|
||||
+ </source>
|
||||
+ <teaming type='transient' persistent='ua-backup1'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='virtio'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
|
||||
+ </memballoon>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index 3cefc64833..e54c540ef6 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -451,6 +451,12 @@ mymain(void)
|
||||
DO_TEST("net-eth-unmanaged-tap", NONE);
|
||||
DO_TEST("net-virtio-network-portgroup", NONE);
|
||||
DO_TEST("net-virtio-rxtxqueuesize", NONE);
|
||||
+ DO_TEST("net-virtio-teaming",
|
||||
+ QEMU_CAPS_VIRTIO_NET_FAILOVER,
|
||||
+ QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
+ DO_TEST("net-virtio-teaming-network",
|
||||
+ QEMU_CAPS_VIRTIO_NET_FAILOVER,
|
||||
+ QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
DO_TEST("net-hostdev", NONE);
|
||||
DO_TEST("net-hostdev-bootorder", NONE);
|
||||
DO_TEST("net-hostdev-vfio", QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,327 +0,0 @@
|
|||
From 2fce649fb569ab21c224f387456c996428f8a251 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2fce649fb569ab21c224f387456c996428f8a251@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Wed, 4 Mar 2020 12:42:41 +0100
|
||||
Subject: [PATCH] conf: qemu: add virtiofs fsdriver type
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Introduce a new 'virtiofs' driver type for filesystem.
|
||||
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
<driver type='virtiofs'/>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</filesystem>
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Tested-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit ecc6ad6b90ad674a903c95d2a637f8b1b5833be2)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1694166
|
||||
Message-Id: <abe26807f06ed14b2be3cbd098461afc307e88e3.1583322090.git.jtomko@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomain.html.in | 12 ++-
|
||||
docs/schemas/domaincommon.rng | 6 ++
|
||||
src/conf/domain_conf.c | 1 +
|
||||
src/conf/domain_conf.h | 1 +
|
||||
src/qemu/qemu_command.c | 4 +
|
||||
src/qemu/qemu_domain.c | 4 +
|
||||
src/qemu/qemu_domain_address.c | 4 +
|
||||
.../vhost-user-fs-fd-memory.xml | 39 ++++++++++
|
||||
.../vhost-user-fs-hugepages.xml | 74 +++++++++++++++++++
|
||||
.../vhost-user-fs-fd-memory.x86_64-latest.xml | 1 +
|
||||
.../vhost-user-fs-hugepages.x86_64-latest.xml | 1 +
|
||||
tests/qemuxml2xmltest.c | 3 +
|
||||
12 files changed, 149 insertions(+), 1 deletion(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
create mode 120000 tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
|
||||
create mode 120000 tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 50914a5207..337ab01316 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -3935,6 +3935,11 @@
|
||||
<target dir='/import/from/host'/>
|
||||
<readonly/>
|
||||
</filesystem>
|
||||
+ <filesystem type='mount' accessmode='passthrough'>
|
||||
+ <driver type='virtiofs'/>
|
||||
+ <source dir='/path'/>
|
||||
+ <target dir='mount_tag'/>
|
||||
+ </filesystem>
|
||||
...
|
||||
</devices>
|
||||
...</pre>
|
||||
@@ -3963,6 +3968,9 @@
|
||||
while the value <code>immediate</code> means that a host writeback
|
||||
is immediately triggered for all pages touched during a guest file
|
||||
write operation <span class="since">(since 0.9.10)</span>.
|
||||
+ <span class="since">Since 6.2.0</span>, <code>type='virtiofs'</code>
|
||||
+ is also supported. Using virtiofs requires setting up shared memory,
|
||||
+ see the guide: <a href="kbase/virtiofs.html">Virtio-FS</a>
|
||||
</dd>
|
||||
<dt><code>template</code></dt>
|
||||
<dd>
|
||||
@@ -3998,7 +4006,9 @@
|
||||
The filesystem element has an optional attribute <code>accessmode</code>
|
||||
which specifies the security mode for accessing the source
|
||||
<span class="since">(since 0.8.5)</span>. Currently this only works
|
||||
- with <code>type='mount'</code> for the QEMU/KVM driver. The possible
|
||||
+ with <code>type='mount'</code> for the QEMU/KVM driver.
|
||||
+ For driver type <code>virtiofs</code>, only <code>passthrough</code> is
|
||||
+ supported. For other driver types, the possible
|
||||
values are:
|
||||
|
||||
<dl>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index bfd8786ea8..5a9291b443 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -2645,6 +2645,12 @@
|
||||
</optional>
|
||||
<ref name='virtioOptions'/>
|
||||
</group>
|
||||
+ <group>
|
||||
+ <attribute name="type">
|
||||
+ <value>virtiofs</value>
|
||||
+ </attribute>
|
||||
+ <ref name='virtioOptions'/>
|
||||
+ </group>
|
||||
<empty/>
|
||||
</choice>
|
||||
</element>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 990c5bcc1e..31d4828802 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -476,6 +476,7 @@ VIR_ENUM_IMPL(virDomainFSDriver,
|
||||
"loop",
|
||||
"nbd",
|
||||
"ploop",
|
||||
+ "virtiofs",
|
||||
);
|
||||
|
||||
VIR_ENUM_IMPL(virDomainFSAccessMode,
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index ef2c1b80f7..921cc42a57 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -771,6 +771,7 @@ typedef enum {
|
||||
VIR_DOMAIN_FS_DRIVER_TYPE_LOOP,
|
||||
VIR_DOMAIN_FS_DRIVER_TYPE_NBD,
|
||||
VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP,
|
||||
+ VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS,
|
||||
|
||||
VIR_DOMAIN_FS_DRIVER_TYPE_LAST
|
||||
} virDomainFSDriverType;
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index 252809a8d7..7fdf58f067 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -2695,6 +2695,10 @@ qemuBuildFilesystemCommandLine(virCommandPtr cmd,
|
||||
return -1;
|
||||
break;
|
||||
|
||||
+ case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
|
||||
+ /* TODO: vhost-user-fs-pci */
|
||||
+ break;
|
||||
+
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index ed35260712..402b079b09 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -8361,6 +8361,10 @@ qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
|
||||
_("Filesystem driver type not supported"));
|
||||
return -1;
|
||||
|
||||
+ case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
|
||||
+ /* TODO: vhost-user-fs-pci */
|
||||
+ return 0;
|
||||
+
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
|
||||
default:
|
||||
virReportEnumRangeError(virDomainFSDriverType, fs->fsdriver);
|
||||
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
|
||||
index 9e3bcc434d..3c6ac62ff5 100644
|
||||
--- a/src/qemu/qemu_domain_address.c
|
||||
+++ b/src/qemu/qemu_domain_address.c
|
||||
@@ -690,6 +690,10 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
|
||||
+ /* vhost-user-fs-pci */
|
||||
+ return virtioFlags;
|
||||
+
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
|
||||
case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
|
||||
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
new file mode 100644
|
||||
index 0000000000..a6b6279fb8
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
@@ -0,0 +1,39 @@
|
||||
+<domain type='kvm'>
|
||||
+ <name>guest</name>
|
||||
+ <uuid>126f2720-6f8e-45ab-a886-ec9277079a67</uuid>
|
||||
+ <memory unit='KiB'>14680064</memory>
|
||||
+ <currentMemory unit='KiB'>14680064</currentMemory>
|
||||
+ <memoryBacking>
|
||||
+ <source type='file'/>
|
||||
+ <access mode='shared'/>
|
||||
+ </memoryBacking>
|
||||
+ <vcpu placement='static'>2</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>qemu64</model>
|
||||
+ <numa>
|
||||
+ <cell id='0' cpus='0-1' memory='14680064' unit='KiB' memAccess='shared'/>
|
||||
+ </numa>
|
||||
+ </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='pci' index='0' model='pci-root'/>
|
||||
+ <filesystem type='mount' accessmode='passthrough'>
|
||||
+ <driver type='virtiofs'/>
|
||||
+ <source dir='/path'/>
|
||||
+ <target dir='mount_tag'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
+ </filesystem>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
new file mode 100644
|
||||
index 0000000000..70df7b890d
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
@@ -0,0 +1,74 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>guest</name>
|
||||
+ <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
|
||||
+ <memory unit='KiB'>4194304</memory>
|
||||
+ <currentMemory unit='KiB'>4194304</currentMemory>
|
||||
+ <memoryBacking>
|
||||
+ <hugepages>
|
||||
+ <page size='2048' unit='KiB'/>
|
||||
+ </hugepages>
|
||||
+ <access mode='shared'/>
|
||||
+ </memoryBacking>
|
||||
+ <vcpu placement='static'>2</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='q35'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <features>
|
||||
+ <acpi/>
|
||||
+ <apic/>
|
||||
+ </features>
|
||||
+ <cpu mode='custom' match='exact' check='none'>
|
||||
+ <model fallback='forbid'>qemu64</model>
|
||||
+ <numa>
|
||||
+ <cell id='0' cpus='0-1' memory='2097152' unit='KiB' memAccess='shared'/>
|
||||
+ </numa>
|
||||
+ </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='file' device='disk'>
|
||||
+ <driver name='qemu' type='qcow2'/>
|
||||
+ <source file='/var/lib/libvirt/images/guest.qcow2'/>
|
||||
+ <target dev='vda' bus='virtio'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
|
||||
+ </disk>
|
||||
+ <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'/>
|
||||
+ <controller type='pci' index='1' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='1' port='0x8'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='2' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='2' port='0x9'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='3' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='3' port='0xa'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='4' model='pcie-root-port'>
|
||||
+ <model name='pcie-root-port'/>
|
||||
+ <target chassis='4' port='0xb'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>
|
||||
+ </controller>
|
||||
+ <filesystem type='mount' accessmode='passthrough'>
|
||||
+ <driver type='virtiofs'/>
|
||||
+ <source dir='/path'/>
|
||||
+ <target dir='mount_tag'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
+ </filesystem>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml b/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
|
||||
new file mode 120000
|
||||
index 0000000000..fbc552ef94
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
|
||||
@@ -0,0 +1 @@
|
||||
+../qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml b/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
|
||||
new file mode 120000
|
||||
index 0000000000..0c0f05b254
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
|
||||
@@ -0,0 +1 @@
|
||||
+../qemuxml2argvdata/vhost-user-fs-hugepages.xml
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index d58259587b..f77f59fa3c 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -1428,6 +1428,9 @@ mymain(void)
|
||||
DO_TEST("vhost-vsock-ccw-auto", QEMU_CAPS_DEVICE_VHOST_VSOCK,
|
||||
QEMU_CAPS_CCW);
|
||||
|
||||
+ DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
|
||||
+ DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");
|
||||
+
|
||||
DO_TEST("riscv64-virt",
|
||||
QEMU_CAPS_DEVICE_VIRTIO_MMIO);
|
||||
DO_TEST("riscv64-virt-pci",
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -1,161 +0,0 @@
|
|||
From 4f2bf4edfb640c38281d63e54145433ce8a78d28 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4f2bf4edfb640c38281d63e54145433ce8a78d28@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:04:11 -0400
|
||||
Subject: [PATCH] conf/qemu:
|
||||
s/VIR_PCI_CONNECT_HOTPLUGGABLE/VIR_PCI_CONNECT_AUTOASSIGN/g
|
||||
|
||||
When the HOTPLUGGABLE flag was originally added, it was set for all
|
||||
the PCI controllers that accepted hotplugged devices, and requested
|
||||
for all devices that were auto-assigned to a controller. While we're
|
||||
still autoassigning to the same list of controllers, those controllers
|
||||
may or may not support hotplug, so let's use the flag that fits what
|
||||
we're actually doing.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 7c98f5e3652e19e4eb015d290c1eed2f1b58ee72)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426170415.18328-9-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 18 +++++++++---------
|
||||
src/qemu/qemu_domain_address.c | 14 +++++++-------
|
||||
2 files changed, 16 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index e0be655772..53be6cd34b 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -362,8 +362,8 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
* libvirt's assumptions about whether or not hotplug
|
||||
* capability will be required.
|
||||
*/
|
||||
- if (devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)
|
||||
- busFlags |= VIR_PCI_CONNECT_HOTPLUGGABLE;
|
||||
+ if (devFlags & VIR_PCI_CONNECT_AUTOASSIGN)
|
||||
+ busFlags |= VIR_PCI_CONNECT_AUTOASSIGN;
|
||||
/* if the device is a pci-bridge, allow manually
|
||||
* assigning to any bus that would also accept a
|
||||
* standard PCI device.
|
||||
@@ -419,8 +419,8 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
addrStr, addr->bus, connectStr);
|
||||
return false;
|
||||
}
|
||||
- if ((devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE) &&
|
||||
- !(busFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)) {
|
||||
+ if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
|
||||
+ !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
|
||||
if (reportError) {
|
||||
virReportError(errType,
|
||||
_("The device at PCI address %s requires "
|
||||
@@ -509,7 +509,7 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
*/
|
||||
switch (model) {
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS);
|
||||
@@ -517,14 +517,14 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE:
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
|
||||
bus->minSlot = 1;
|
||||
bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS:
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
|
||||
bus->minSlot = 0;
|
||||
@@ -555,7 +555,7 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_TO_PCI_BRIDGE:
|
||||
/* Same as pci-bridge: 32 hotpluggable traditional PCI slots (0-31),
|
||||
* the first of which is not usable because of the SHPC */
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
|
||||
bus->minSlot = 1;
|
||||
@@ -566,7 +566,7 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
|
||||
/* provides one slot which is pcie, can be used by endpoint
|
||||
* devices, pcie-switch-upstream-ports or pcie-to-pci-bridges,
|
||||
* and is hotpluggable */
|
||||
- bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_DEVICE |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE);
|
||||
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
|
||||
index 3c6ac62ff5..e81585bc6c 100644
|
||||
--- a/src/qemu/qemu_domain_address.c
|
||||
+++ b/src/qemu/qemu_domain_address.c
|
||||
@@ -571,7 +571,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
|
||||
virDomainPCIConnectFlags virtioFlags)
|
||||
{
|
||||
virDomainPCIConnectFlags pciFlags = (VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE);
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN);
|
||||
|
||||
switch ((virDomainDeviceType)dev->type) {
|
||||
case VIR_DOMAIN_DEVICE_CONTROLLER: {
|
||||
@@ -1063,17 +1063,17 @@ qemuDomainFillDevicePCIConnectFlagsIterInit(virDomainDefPtr def,
|
||||
|
||||
if (qemuDomainHasPCIeRoot(def)) {
|
||||
data->pcieFlags = (VIR_PCI_CONNECT_TYPE_PCIE_DEVICE |
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE);
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN);
|
||||
} else {
|
||||
data->pcieFlags = (VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE);
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN);
|
||||
}
|
||||
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY)) {
|
||||
data->virtioFlags = data->pcieFlags;
|
||||
} else {
|
||||
data->virtioFlags = (VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
|
||||
- VIR_PCI_CONNECT_HOTPLUGGABLE);
|
||||
+ VIR_PCI_CONNECT_AUTOASSIGN);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1729,7 +1729,7 @@ qemuDomainValidateDevicePCISlotsPIIX3(virDomainDefPtr def,
|
||||
virPCIDeviceAddress tmp_addr;
|
||||
bool qemuDeviceVideoUsable = virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
|
||||
g_autofree char *addrStr = NULL;
|
||||
- virDomainPCIConnectFlags flags = (VIR_PCI_CONNECT_HOTPLUGGABLE
|
||||
+ virDomainPCIConnectFlags flags = (VIR_PCI_CONNECT_AUTOASSIGN
|
||||
| VIR_PCI_CONNECT_TYPE_PCI_DEVICE);
|
||||
|
||||
/* Verify that first IDE and USB controllers (if any) is on the PIIX3, fn 1 */
|
||||
@@ -2666,7 +2666,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
|
||||
* domain.
|
||||
*/
|
||||
virDomainDeviceInfo info = {
|
||||
- .pciConnectFlags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ .pciConnectFlags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE),
|
||||
.pciAddrExtFlags = VIR_PCI_ADDRESS_EXTENSION_NONE
|
||||
};
|
||||
@@ -2707,7 +2707,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
|
||||
addrs->nbuses > max_idx + 1 &&
|
||||
qemuDomainHasPCIeRoot(def)) {
|
||||
virDomainDeviceInfo info = {
|
||||
- .pciConnectFlags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
|
||||
+ .pciConnectFlags = (VIR_PCI_CONNECT_AUTOASSIGN |
|
||||
VIR_PCI_CONNECT_TYPE_PCIE_DEVICE),
|
||||
.pciAddrExtFlags = VIR_PCI_ADDRESS_EXTENSION_NONE
|
||||
};
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,88 +0,0 @@
|
|||
From 6ece5388a7fb7fc3c703cd1bc9e214ad411451d8 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6ece5388a7fb7fc3c703cd1bc9e214ad411451d8@dist-git>
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Mon, 3 Feb 2020 18:07:23 +0000
|
||||
Subject: [PATCH] conf: remove unused virCapabilitiesSetHostCPU method
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 2ce9474c2a6ba3df4977068dcee35d3fa5468749)
|
||||
|
||||
BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785207
|
||||
BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785211
|
||||
Message-Id: <20200203180726.2203691-3-berrange@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/conf/capabilities.c | 21 ---------------------
|
||||
src/conf/capabilities.h | 6 ------
|
||||
src/libvirt_private.syms | 1 -
|
||||
3 files changed, 28 deletions(-)
|
||||
|
||||
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
|
||||
index 9a39858280..bf1d9936ed 100644
|
||||
--- a/src/conf/capabilities.c
|
||||
+++ b/src/conf/capabilities.c
|
||||
@@ -368,27 +368,6 @@ virCapabilitiesHostNUMAAddCell(virCapsHostNUMAPtr caps,
|
||||
g_ptr_array_add(caps->cells, cell);
|
||||
}
|
||||
|
||||
-
|
||||
-/**
|
||||
- * virCapabilitiesSetHostCPU:
|
||||
- * @caps: capabilities to extend
|
||||
- * @cpu: CPU definition
|
||||
- *
|
||||
- * Sets host CPU specification
|
||||
- */
|
||||
-int
|
||||
-virCapabilitiesSetHostCPU(virCapsPtr caps,
|
||||
- virCPUDefPtr cpu)
|
||||
-{
|
||||
- if (cpu == NULL)
|
||||
- return -1;
|
||||
-
|
||||
- caps->host.cpu = cpu;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-
|
||||
/**
|
||||
* virCapabilitiesAllocMachines:
|
||||
* @machines: machine variants for emulator ('pc', or 'isapc', etc)
|
||||
diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
|
||||
index f604e7b95e..4a49e94aa5 100644
|
||||
--- a/src/conf/capabilities.h
|
||||
+++ b/src/conf/capabilities.h
|
||||
@@ -258,12 +258,6 @@ virCapabilitiesHostNUMAAddCell(virCapsHostNUMAPtr caps,
|
||||
int npageinfo,
|
||||
virCapsHostNUMACellPageInfoPtr pageinfo);
|
||||
|
||||
-
|
||||
-int
|
||||
-virCapabilitiesSetHostCPU(virCapsPtr caps,
|
||||
- virCPUDefPtr cpu);
|
||||
-
|
||||
-
|
||||
virCapsGuestMachinePtr *
|
||||
virCapabilitiesAllocMachines(const char *const *names,
|
||||
int nnames);
|
||||
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
||||
index b97906b852..afa7d4fcae 100644
|
||||
--- a/src/libvirt_private.syms
|
||||
+++ b/src/libvirt_private.syms
|
||||
@@ -77,7 +77,6 @@ virCapabilitiesHostSecModelAddBaseLabel;
|
||||
virCapabilitiesInitCaches;
|
||||
virCapabilitiesInitPages;
|
||||
virCapabilitiesNew;
|
||||
-virCapabilitiesSetHostCPU;
|
||||
virCapabilitiesSetNetPrefix;
|
||||
|
||||
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,144 +0,0 @@
|
|||
From 9b070e02e7b5bb95728a1fcdc8b7dfaaacc5f30a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9b070e02e7b5bb95728a1fcdc8b7dfaaacc5f30a@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 24 Mar 2020 16:25:55 +0100
|
||||
Subject: [PATCH] conf: rename 'namespace' property of struct
|
||||
_virStorageSourceNVMeDef
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
While 'namespace' is not a reserved word in C, it is in C++. Our
|
||||
compilers are happy with it but syntax-hilighting in some editors
|
||||
hilights is as a keyword. Rename it to prevent confusion.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 5793b8baa75747860f6ba97470969047e60c8579)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804617
|
||||
Message-Id: <bfe6cf10a95868ae56a91f362a1ea50667754027.1585063415.git.pkrempa@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 12 ++++++------
|
||||
src/qemu/qemu_block.c | 2 +-
|
||||
src/util/virhostdev.c | 2 +-
|
||||
src/util/virstoragefile.c | 4 ++--
|
||||
src/util/virstoragefile.h | 2 +-
|
||||
5 files changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 8aec85e83c..1e8518139c 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -6054,7 +6054,7 @@ virDomainDiskDefValidate(const virDomainDef *def,
|
||||
|
||||
if (disk->src->type == VIR_STORAGE_TYPE_NVME) {
|
||||
/* NVMe namespaces start from 1 */
|
||||
- if (disk->src->nvme->namespace == 0) {
|
||||
+ if (disk->src->nvme->namespc == 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("NVMe namespace can't be zero"));
|
||||
return -1;
|
||||
@@ -9433,7 +9433,7 @@ virDomainDiskSourceNVMeParse(xmlNodePtr node,
|
||||
{
|
||||
g_autoptr(virStorageSourceNVMeDef) nvme = NULL;
|
||||
g_autofree char *type = NULL;
|
||||
- g_autofree char *namespace = NULL;
|
||||
+ g_autofree char *namespc = NULL;
|
||||
g_autofree char *managed = NULL;
|
||||
xmlNodePtr address;
|
||||
|
||||
@@ -9452,16 +9452,16 @@ virDomainDiskSourceNVMeParse(xmlNodePtr node,
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (!(namespace = virXMLPropString(node, "namespace"))) {
|
||||
+ if (!(namespc = virXMLPropString(node, "namespace"))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("missing 'namespace' attribute to disk source"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (virStrToLong_ull(namespace, NULL, 10, &nvme->namespace) < 0) {
|
||||
+ if (virStrToLong_ull(namespc, NULL, 10, &nvme->namespc) < 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("malformed namespace '%s'"),
|
||||
- namespace);
|
||||
+ namespc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -24444,7 +24444,7 @@ virDomainDiskSourceNVMeFormat(virBufferPtr attrBuf,
|
||||
virBufferAddLit(attrBuf, " type='pci'");
|
||||
virBufferAsprintf(attrBuf, " managed='%s'",
|
||||
virTristateBoolTypeToString(nvme->managed));
|
||||
- virBufferAsprintf(attrBuf, " namespace='%llu'", nvme->namespace);
|
||||
+ virBufferAsprintf(attrBuf, " namespace='%llu'", nvme->namespc);
|
||||
virPCIDeviceAddressFormat(childBuf, nvme->pciAddr, false);
|
||||
}
|
||||
|
||||
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
|
||||
index 73cb5ba4bc..5697d4fc73 100644
|
||||
--- a/src/qemu/qemu_block.c
|
||||
+++ b/src/qemu/qemu_block.c
|
||||
@@ -1008,7 +1008,7 @@ qemuBlockStorageSourceGetNVMeProps(virStorageSourcePtr src)
|
||||
ignore_value(virJSONValueObjectCreate(&ret,
|
||||
"s:driver", "nvme",
|
||||
"s:device", pciAddr,
|
||||
- "U:namespace", nvme->namespace,
|
||||
+ "U:namespace", nvme->namespc,
|
||||
NULL));
|
||||
return ret;
|
||||
}
|
||||
diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
|
||||
index 9b4ea30216..9596482146 100644
|
||||
--- a/src/util/virhostdev.c
|
||||
+++ b/src/util/virhostdev.c
|
||||
@@ -2256,7 +2256,7 @@ virHostdevGetNVMeDeviceList(virNVMeDeviceListPtr nvmeDevices,
|
||||
continue;
|
||||
|
||||
if (!(dev = virNVMeDeviceNew(&srcNVMe->pciAddr,
|
||||
- srcNVMe->namespace,
|
||||
+ srcNVMe->namespc,
|
||||
srcNVMe->managed)))
|
||||
return -1;
|
||||
|
||||
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
|
||||
index fa37840532..2e54620139 100644
|
||||
--- a/src/util/virstoragefile.c
|
||||
+++ b/src/util/virstoragefile.c
|
||||
@@ -2052,7 +2052,7 @@ virStorageSourceNVMeDefCopy(const virStorageSourceNVMeDef *src)
|
||||
|
||||
ret = g_new0(virStorageSourceNVMeDef, 1);
|
||||
|
||||
- ret->namespace = src->namespace;
|
||||
+ ret->namespc = src->namespc;
|
||||
ret->managed = src->managed;
|
||||
virPCIDeviceAddressCopy(&ret->pciAddr, &src->pciAddr);
|
||||
return ret;
|
||||
@@ -2069,7 +2069,7 @@ virStorageSourceNVMeDefIsEqual(const virStorageSourceNVMeDef *a,
|
||||
if (!a || !b)
|
||||
return false;
|
||||
|
||||
- if (a->namespace != b->namespace ||
|
||||
+ if (a->namespc != b->namespc ||
|
||||
a->managed != b->managed ||
|
||||
!virPCIDeviceAddressEqual(&a->pciAddr, &b->pciAddr))
|
||||
return false;
|
||||
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
|
||||
index c1430cadd1..0230f44652 100644
|
||||
--- a/src/util/virstoragefile.h
|
||||
+++ b/src/util/virstoragefile.h
|
||||
@@ -246,7 +246,7 @@ struct _virStorageSourceInitiatorDef {
|
||||
typedef struct _virStorageSourceNVMeDef virStorageSourceNVMeDef;
|
||||
typedef virStorageSourceNVMeDef *virStorageSourceNVMeDefPtr;
|
||||
struct _virStorageSourceNVMeDef {
|
||||
- unsigned long long namespace;
|
||||
+ unsigned long long namespc;
|
||||
int managed; /* enum virTristateBool */
|
||||
virPCIDeviceAddress pciAddr;
|
||||
|
||||
--
|
||||
2.26.0
|
||||
|
|
@ -1,83 +0,0 @@
|
|||
From f52197675b2babfafb1b89058e3fd01decebd8ab Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f52197675b2babfafb1b89058e3fd01decebd8ab@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Sun, 26 Apr 2020 13:04:12 -0400
|
||||
Subject: [PATCH] conf: simplify logic when checking for AUTOASSIGN PCI
|
||||
addresses
|
||||
|
||||
Old behavior: If the address was manually provided by config, copy
|
||||
device AUTOASSIGN flag into the bus flag, and then later on in the
|
||||
function *always* check for a match of the flags (which will always
|
||||
match if the address came from config, since we just copied it).
|
||||
|
||||
New behavior: Don't mess with the bus flags - just directly check if
|
||||
the AUTOASSIGN flag matches in bus and dev, but only make the check if
|
||||
the address didn't come from config (i.e. it was auto-assigned by
|
||||
libvirt).
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit fcdf87d3ef14de9dfb0acaf4b4445e1580dfc629)
|
||||
|
||||
https://bugzilla.redhat.com/1802592
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Message-Id: <20200426170415.18328-10-laine@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_addr.c | 27 ++++++++++-----------------
|
||||
1 file changed, 10 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
|
||||
index 53be6cd34b..05f036e3e6 100644
|
||||
--- a/src/conf/domain_addr.c
|
||||
+++ b/src/conf/domain_addr.c
|
||||
@@ -358,18 +358,22 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
*/
|
||||
if (busFlags & VIR_PCI_CONNECT_TYPES_ENDPOINT)
|
||||
busFlags |= VIR_PCI_CONNECT_TYPES_ENDPOINT;
|
||||
- /* Also allow manual specification of bus to override
|
||||
- * libvirt's assumptions about whether or not hotplug
|
||||
- * capability will be required.
|
||||
- */
|
||||
- if (devFlags & VIR_PCI_CONNECT_AUTOASSIGN)
|
||||
- busFlags |= VIR_PCI_CONNECT_AUTOASSIGN;
|
||||
/* if the device is a pci-bridge, allow manually
|
||||
* assigning to any bus that would also accept a
|
||||
* standard PCI device.
|
||||
*/
|
||||
if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_BRIDGE)
|
||||
devFlags |= VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
|
||||
+ } else if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
|
||||
+ !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
|
||||
+ if (reportError) {
|
||||
+ virReportError(errType,
|
||||
+ _("The device at PCI address %s was auto-assigned "
|
||||
+ "this address, but the PCI controller "
|
||||
+ "with index='%d' doesn't allow auto-assignment"),
|
||||
+ addrStr, addr->bus);
|
||||
+ }
|
||||
+ return false;
|
||||
}
|
||||
|
||||
/* If this bus doesn't allow the type of connection (PCI
|
||||
@@ -419,17 +423,6 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
|
||||
addrStr, addr->bus, connectStr);
|
||||
return false;
|
||||
}
|
||||
- if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
|
||||
- !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
|
||||
- if (reportError) {
|
||||
- virReportError(errType,
|
||||
- _("The device at PCI address %s requires "
|
||||
- "hotplug capability, but the PCI controller "
|
||||
- "with index='%d' doesn't support hotplug"),
|
||||
- addrStr, addr->bus);
|
||||
- }
|
||||
- return false;
|
||||
- }
|
||||
return true;
|
||||
}
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
From d77f180068dab8747f5e2c098a9c59213ce19108 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d77f180068dab8747f5e2c098a9c59213ce19108@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Wed, 4 Mar 2020 12:42:29 +0100
|
||||
Subject: [PATCH] conf: use virXMLFormatElement in virDomainFSDefFormat
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Use the virXMLFormatElement helper to format the driver element
|
||||
to simplify adding further sub-elements.
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 3efdbae5bf054d1a2bdc98fdccff0273abe54c88)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1694166
|
||||
Message-Id: <966ad0eebcb1ae5f20f59fc6cc84008bbfa6426f.1583322090.git.jtomko@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 16 ++++++----------
|
||||
1 file changed, 6 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 8a5f14d6cb..88117187c8 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -24991,7 +24991,7 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
const char *fsdriver = virDomainFSDriverTypeToString(def->fsdriver);
|
||||
const char *wrpolicy = virDomainFSWrpolicyTypeToString(def->wrpolicy);
|
||||
const char *src = def->src->path;
|
||||
- g_auto(virBuffer) driverBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
if (!type) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
@@ -25016,25 +25016,21 @@ virDomainFSDefFormat(virBufferPtr buf,
|
||||
|
||||
virBufferAdjustIndent(buf, 2);
|
||||
if (def->fsdriver) {
|
||||
- virBufferAsprintf(&driverBuf, " type='%s'", fsdriver);
|
||||
+ virBufferAsprintf(&driverAttrBuf, " type='%s'", fsdriver);
|
||||
|
||||
if (def->format)
|
||||
- virBufferAsprintf(&driverBuf, " format='%s'",
|
||||
+ virBufferAsprintf(&driverAttrBuf, " format='%s'",
|
||||
virStorageFileFormatTypeToString(def->format));
|
||||
|
||||
/* Don't generate anything if wrpolicy is set to default */
|
||||
if (def->wrpolicy)
|
||||
- virBufferAsprintf(&driverBuf, " wrpolicy='%s'", wrpolicy);
|
||||
+ virBufferAsprintf(&driverAttrBuf, " wrpolicy='%s'", wrpolicy);
|
||||
|
||||
}
|
||||
|
||||
- virDomainVirtioOptionsFormat(&driverBuf, def->virtio);
|
||||
+ virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
|
||||
|
||||
- if (virBufferUse(&driverBuf)) {
|
||||
- virBufferAddLit(buf, "<driver");
|
||||
- virBufferAddBuffer(buf, &driverBuf);
|
||||
- virBufferAddLit(buf, "/>\n");
|
||||
- }
|
||||
+ virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
|
||||
|
||||
switch (def->type) {
|
||||
case VIR_DOMAIN_FS_TYPE_MOUNT:
|
||||
--
|
||||
2.25.1
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
From 0c09e4225c511ce1b0ebe22e45962f83d5145e66 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0c09e4225c511ce1b0ebe22e45962f83d5145e66@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Fri, 10 Jun 2022 15:10:29 +0200
|
||||
Subject: [PATCH] conf: virtiofs: add thread_pool element
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add an element to configure the thread pool size:
|
||||
|
||||
...
|
||||
<binary>
|
||||
<thread_pool size='16'/>
|
||||
</binary>
|
||||
...
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2072905
|
||||
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 0df2e7df80452f81edbfeb0ee355235b533346a9)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2079582
|
||||
---
|
||||
docs/formatdomain.rst | 6 ++++++
|
||||
docs/schemas/domaincommon.rng | 9 +++++++++
|
||||
src/conf/domain_conf.c | 15 +++++++++++++++
|
||||
src/conf/domain_conf.h | 1 +
|
||||
.../qemuxml2argvdata/vhost-user-fs-fd-memory.xml | 1 +
|
||||
5 files changed, 32 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
|
||||
index 17e89a0c0d..e6cf2ec083 100644
|
||||
--- a/docs/formatdomain.rst
|
||||
+++ b/docs/formatdomain.rst
|
||||
@@ -3316,6 +3316,7 @@ A directory on the host that can be accessed directly from the guest.
|
||||
<cache mode='always'/>
|
||||
<sandbox mode='namespace'/>
|
||||
<lock posix='on' flock='on'/>
|
||||
+ <thread_pool size='16'/>
|
||||
</binary>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'/>
|
||||
@@ -3449,6 +3450,11 @@ A directory on the host that can be accessed directly from the guest.
|
||||
``chroot``, see the
|
||||
`virtiofsd documentation <https://qemu.readthedocs.io/en/latest/tools/virtiofsd.html>`__
|
||||
for more details. ( :since:`Since 7.2.0` )
|
||||
+ Element ``thread_pool`` accepts one attribute ``size`` which defines the
|
||||
+ maximum thread pool size. A value of "0" disables the pool.
|
||||
+ The thread pool helps increase the number of requests in flight when used with
|
||||
+ storage that has a higher latency. However, it has an overhead, and so for
|
||||
+ fast, low latency filesystems, it may be best to turn it off. ( :since:`Since 8.5.0` )
|
||||
``source``
|
||||
The resource on the host that is being accessed in the guest. The ``name``
|
||||
attribute must be used with ``type='template'``, and the ``dir`` attribute
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index c9c1529979..79c8979410 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -3064,6 +3064,15 @@
|
||||
</optional>
|
||||
</element>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <element name="thread_pool">
|
||||
+ <optional>
|
||||
+ <attribute name="size">
|
||||
+ <data type="integer"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 92510973e6..95afd9226e 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -2447,6 +2447,8 @@ virDomainFSDefNew(virDomainXMLOption *xmlopt)
|
||||
|
||||
ret->src = virStorageSourceNew();
|
||||
|
||||
+ ret->thread_pool_size = -1;
|
||||
+
|
||||
if (xmlopt &&
|
||||
xmlopt->privateData.fsNew &&
|
||||
!(ret->privateData = xmlopt->privateData.fsNew()))
|
||||
@@ -9869,6 +9871,7 @@ virDomainFSDefParseXML(virDomainXMLOption *xmlopt,
|
||||
if (def->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
|
||||
g_autofree char *queue_size = virXPathString("string(./driver/@queue)", ctxt);
|
||||
g_autofree char *binary = virXPathString("string(./binary/@path)", ctxt);
|
||||
+ g_autofree char *thread_pool_size = virXPathString("string(./binary/thread_pool/@size)", ctxt);
|
||||
g_autofree char *xattr = virXPathString("string(./binary/@xattr)", ctxt);
|
||||
g_autofree char *cache = virXPathString("string(./binary/cache/@mode)", ctxt);
|
||||
g_autofree char *sandbox = virXPathString("string(./binary/sandbox/@mode)", ctxt);
|
||||
@@ -9883,6 +9886,14 @@ virDomainFSDefParseXML(virDomainXMLOption *xmlopt,
|
||||
goto error;
|
||||
}
|
||||
|
||||
+ if (thread_pool_size &&
|
||||
+ virStrToLong_i(thread_pool_size, NULL, 10, &def->thread_pool_size) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("cannot parse thread pool size '%s' for virtiofs"),
|
||||
+ queue_size);
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
if (binary)
|
||||
def->binary = virFileSanitizePath(binary);
|
||||
|
||||
@@ -24205,6 +24216,10 @@ virDomainFSDefFormat(virBuffer *buf,
|
||||
}
|
||||
|
||||
virXMLFormatElement(&binaryBuf, "lock", &lockAttrBuf, NULL);
|
||||
+
|
||||
+ if (def->thread_pool_size >= 0)
|
||||
+ virBufferAsprintf(&binaryBuf, "<thread_pool size='%d'/>\n", def->thread_pool_size);
|
||||
+
|
||||
}
|
||||
|
||||
virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index 10af94e2e4..d0d0fdc815 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -892,6 +892,7 @@ struct _virDomainFSDef {
|
||||
virTristateSwitch posix_lock;
|
||||
virTristateSwitch flock;
|
||||
virDomainFSSandboxMode sandbox;
|
||||
+ int thread_pool_size;
|
||||
virDomainVirtioOptions *virtio;
|
||||
virObject *privateData;
|
||||
};
|
||||
diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
index abddf0870b..81de8c0dd7 100644
|
||||
--- a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
+++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
|
||||
@@ -32,6 +32,7 @@
|
||||
<cache mode='always'/>
|
||||
<sandbox mode='chroot'/>
|
||||
<lock posix='off' flock='off'/>
|
||||
+ <thread_pool size='16'/>
|
||||
</binary>
|
||||
<source dir='/path'/>
|
||||
<target dir='mount_tag'/>
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
From 2145d7b6f4370dfcd7dadae7daf544767cde0392 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2145d7b6f4370dfcd7dadae7daf544767cde0392@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:51 +0200
|
||||
Subject: [PATCH] cpu: Change control flow in virCPUUpdateLive
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The updateLive CPU sub-driver function is supposed to be called only for
|
||||
a subset of CPU definitions. Let's make it more obvious by turning a
|
||||
negative test and return into a positive check.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 68c0b85ecb07c8cefcf4f4a2ffc28e123baa9e8c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1839999
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <2633727669ca50970bd10abe9b045e24b76028d1.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu.c | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
|
||||
index ae3a0acc10..1cb2dd04f4 100644
|
||||
--- a/src/cpu/cpu.c
|
||||
+++ b/src/cpu/cpu.c
|
||||
@@ -647,13 +647,14 @@ virCPUUpdateLive(virArch arch,
|
||||
if (!driver->updateLive)
|
||||
return 1;
|
||||
|
||||
- if (cpu->mode != VIR_CPU_MODE_CUSTOM)
|
||||
- return 1;
|
||||
+ if (cpu->mode == VIR_CPU_MODE_CUSTOM) {
|
||||
+ if (driver->updateLive(cpu, dataEnabled, dataDisabled) < 0)
|
||||
+ return -1;
|
||||
|
||||
- if (driver->updateLive(cpu, dataEnabled, dataDisabled) < 0)
|
||||
- return -1;
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
- return 0;
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
From 781e82d0330afe60ab1c366e43dfe8292fcf68eb Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <781e82d0330afe60ab1c366e43dfe8292fcf68eb@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:53 +0200
|
||||
Subject: [PATCH] cpu: Honor check='full' for host-passthrough CPUs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The check attribute was completely ignored for host-passthrough CPUs
|
||||
even if they explicitly requested some features to be enabled. For
|
||||
example, a domain with the following CPU definition
|
||||
|
||||
<cpu mode='host-passthrough' check='full'>
|
||||
<feature policy='require' name='svm'/>
|
||||
</cpu>
|
||||
|
||||
would happily start even when 'svm' cannot be enabled.
|
||||
|
||||
Let's call virCPUArchUpdateLive for host-passthrough CPUs with
|
||||
VIR_CPU_CHECK_FULL to make sure the architecture specific code can
|
||||
validate the provided virtual CPU against the desired definition.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1515677
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit ac36a824641862dcac057c6403b27ab1e91874f5)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1839999
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <b8d30055a0df31c423d6c1832ca0bfbf3eafd222.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu.c | 3 ++-
|
||||
src/cpu/cpu_x86.c | 10 +++++++++-
|
||||
2 files changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
|
||||
index 1cb2dd04f4..f2a0f560f6 100644
|
||||
--- a/src/cpu/cpu.c
|
||||
+++ b/src/cpu/cpu.c
|
||||
@@ -647,7 +647,8 @@ virCPUUpdateLive(virArch arch,
|
||||
if (!driver->updateLive)
|
||||
return 1;
|
||||
|
||||
- if (cpu->mode == VIR_CPU_MODE_CUSTOM) {
|
||||
+ if (cpu->mode == VIR_CPU_MODE_CUSTOM ||
|
||||
+ cpu->check == VIR_CPU_CHECK_FULL) {
|
||||
if (driver->updateLive(cpu, dataEnabled, dataDisabled) < 0)
|
||||
return -1;
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 9e686a86d2..8c865bdaa4 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3009,8 +3009,10 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
virCPUDataPtr dataEnabled,
|
||||
virCPUDataPtr dataDisabled)
|
||||
{
|
||||
+ bool hostPassthrough = cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH;
|
||||
virCPUx86MapPtr map;
|
||||
virCPUx86ModelPtr model = NULL;
|
||||
+ virCPUx86ModelPtr modelDisabled = NULL;
|
||||
virCPUx86Data enabled = VIR_CPU_X86_DATA_INIT;
|
||||
virCPUx86Data disabled = VIR_CPU_X86_DATA_INIT;
|
||||
virBuffer bufAdded = VIR_BUFFER_INITIALIZER;
|
||||
@@ -3026,6 +3028,10 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
goto cleanup;
|
||||
|
||||
+ if (hostPassthrough &&
|
||||
+ !(modelDisabled = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)))
|
||||
+ goto cleanup;
|
||||
+
|
||||
if (dataEnabled &&
|
||||
x86DataCopy(&enabled, &dataEnabled->data.x86) < 0)
|
||||
goto cleanup;
|
||||
@@ -3040,7 +3046,8 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
|
||||
if (x86DataIsSubset(&model->data, &feature->data))
|
||||
expected = VIR_CPU_FEATURE_REQUIRE;
|
||||
- else
|
||||
+ else if (!hostPassthrough ||
|
||||
+ x86DataIsSubset(&modelDisabled->data, &feature->data))
|
||||
expected = VIR_CPU_FEATURE_DISABLE;
|
||||
|
||||
if (expected == VIR_CPU_FEATURE_DISABLE &&
|
||||
@@ -3101,6 +3108,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
|
||||
cleanup:
|
||||
x86ModelFree(model);
|
||||
+ x86ModelFree(modelDisabled);
|
||||
virCPUx86DataClear(&enabled);
|
||||
virCPUx86DataClear(&disabled);
|
||||
VIR_FREE(added);
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
From 4b8dbdb81eb6a755dc58b359e65b769ee1dc3f86 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4b8dbdb81eb6a755dc58b359e65b769ee1dc3f86@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 24 Jan 2020 15:05:49 +0100
|
||||
Subject: [PATCH] cpu.c: Check properly for virCapabilitiesGetNodeInfo() retval
|
||||
|
||||
The virCapabilitiesGetNodeInfo() function has the usual return
|
||||
value semantics for integeres: a negative value means an error,
|
||||
zero or a positive value means success. However, the function
|
||||
call done in virCPUProbeHost() doesn't check for the return value
|
||||
accordingly.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 609acf1f5d5d666148355719346c8ee05f911e33)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1794691
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Message-Id: <033f07f79bc9fa26f669c83f9aa790bfaef25b93.1579874719.git.mprivozn@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/cpu/cpu.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
|
||||
index a2ae5b8c07..d99466472b 100644
|
||||
--- a/src/cpu/cpu.c
|
||||
+++ b/src/cpu/cpu.c
|
||||
@@ -455,7 +455,7 @@ virCPUProbeHost(virArch arch)
|
||||
{
|
||||
virNodeInfo nodeinfo;
|
||||
|
||||
- if (virCapabilitiesGetNodeInfo(&nodeinfo))
|
||||
+ if (virCapabilitiesGetNodeInfo(&nodeinfo) < 0)
|
||||
return NULL;
|
||||
|
||||
return virCPUGetHost(arch, VIR_CPU_TYPE_HOST, &nodeinfo, NULL);
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
From 37b27a297ecb87e65f41c212aaabde7311b042d6 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <37b27a297ecb87e65f41c212aaabde7311b042d6@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 20 Feb 2020 09:08:05 +0100
|
||||
Subject: [PATCH] cpu_conf: Format vendor_id for host-model CPUs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In commit v5.9.0-400-gaf8e39921a I removed printing model's fallback and
|
||||
vendor_id attributes when no model is specified. However, vendor_id
|
||||
makes sense even without a specific CPU model (for host-model CPUs).
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1804549
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 0905f222f1bfd9d741e94a8d653e05bb174846d3)
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <0b46ae9e26d1c7dbaa7f2dd58fd1156db237a853.1582186015.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/conf/cpu_conf.c | 14 +++++++++-----
|
||||
tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml | 4 +++-
|
||||
2 files changed, 12 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
|
||||
index 837d77581c..1a2948ce11 100644
|
||||
--- a/src/conf/cpu_conf.c
|
||||
+++ b/src/conf/cpu_conf.c
|
||||
@@ -791,10 +791,10 @@ virCPUDefFormatBuf(virBufferPtr buf,
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (formatModel && def->model) {
|
||||
+ if (formatModel && (def->model || def->vendor_id)) {
|
||||
virBufferAddLit(buf, "<model");
|
||||
|
||||
- if (def->type == VIR_CPU_TYPE_GUEST) {
|
||||
+ if (def->type == VIR_CPU_TYPE_GUEST && def->model) {
|
||||
const char *fallback;
|
||||
|
||||
fallback = virCPUFallbackTypeToString(def->fallback);
|
||||
@@ -805,11 +805,15 @@ virCPUDefFormatBuf(virBufferPtr buf,
|
||||
return -1;
|
||||
}
|
||||
virBufferAsprintf(buf, " fallback='%s'", fallback);
|
||||
- if (def->vendor_id)
|
||||
- virBufferEscapeString(buf, " vendor_id='%s'", def->vendor_id);
|
||||
}
|
||||
|
||||
- virBufferEscapeString(buf, ">%s</model>\n", def->model);
|
||||
+ if (def->type == VIR_CPU_TYPE_GUEST)
|
||||
+ virBufferEscapeString(buf, " vendor_id='%s'", def->vendor_id);
|
||||
+
|
||||
+ if (def->model)
|
||||
+ virBufferEscapeString(buf, ">%s</model>\n", def->model);
|
||||
+ else
|
||||
+ virBufferAddLit(buf, "/>\n");
|
||||
}
|
||||
|
||||
if (formatModel && def->vendor)
|
||||
diff --git a/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml b/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
|
||||
index d2447ccd10..2a7d0246cc 100644
|
||||
--- a/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
|
||||
+++ b/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
|
||||
@@ -8,7 +8,9 @@
|
||||
<type arch='x86_64' machine='pc'>hvm</type>
|
||||
<boot dev='network'/>
|
||||
</os>
|
||||
- <cpu mode='host-model' check='partial'/>
|
||||
+ <cpu mode='host-model' check='partial'>
|
||||
+ <model vendor_id='Libvirt QEMU'/>
|
||||
+ </cpu>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
--
|
||||
2.25.0
|
||||
|
|
@ -1,289 +0,0 @@
|
|||
From 1c8af21807f2cdaaa24651808f6dfeebfbcf75bb Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <1c8af21807f2cdaaa24651808f6dfeebfbcf75bb@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:40 +0200
|
||||
Subject: [PATCH] cpu_map: Add Cooperlake x86 CPU model
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The stepping range (10-11) is likely incomplete. QEMU uses 10 and the
|
||||
CPUID data for Cooperlake show 11. We will update the range if needed
|
||||
once more details about he CPU are available.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
(cherry picked from commit 3944f6855b9d4df73754bb6e5c8023d77399879b)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1781878
|
||||
|
||||
Conflicts:
|
||||
tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
|
||||
tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml
|
||||
tests/domaincapsdata/qemu_5.1.0.x86_64.xml
|
||||
- test data files do not exist downstream
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <62f2fa3e2ecab2026c41e93430b4e2b695c674f0.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/index.xml | 1 +
|
||||
src/cpu_map/x86_Cooperlake.xml | 90 +++++++++++++++++++
|
||||
.../x86_64-cpuid-Cooperlake-guest.xml | 13 +--
|
||||
.../x86_64-cpuid-Cooperlake-host.xml | 13 +--
|
||||
.../x86_64-cpuid-Cooperlake-json.xml | 13 +--
|
||||
.../domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 1 +
|
||||
.../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml | 1 +
|
||||
tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 1 +
|
||||
8 files changed, 100 insertions(+), 33 deletions(-)
|
||||
create mode 100644 src/cpu_map/x86_Cooperlake.xml
|
||||
|
||||
diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
|
||||
index 50b030de29..ff1da2e677 100644
|
||||
--- a/src/cpu_map/index.xml
|
||||
+++ b/src/cpu_map/index.xml
|
||||
@@ -54,6 +54,7 @@
|
||||
<include filename="x86_Icelake-Client-noTSX.xml"/>
|
||||
<include filename="x86_Icelake-Server.xml"/>
|
||||
<include filename="x86_Icelake-Server-noTSX.xml"/>
|
||||
+ <include filename="x86_Cooperlake.xml"/>
|
||||
|
||||
<!-- AMD CPUs -->
|
||||
<include filename="x86_athlon.xml"/>
|
||||
diff --git a/src/cpu_map/x86_Cooperlake.xml b/src/cpu_map/x86_Cooperlake.xml
|
||||
new file mode 100644
|
||||
index 0000000000..41bd210638
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Cooperlake.xml
|
||||
@@ -0,0 +1,90 @@
|
||||
+<cpus>
|
||||
+ <model name='Cooperlake'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
+ <signature family='6' model='85' stepping='10-11'/> <!-- 05065b -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name="3dnowprefetch"/>
|
||||
+ <feature name="abm"/>
|
||||
+ <feature name="adx"/>
|
||||
+ <feature name="aes"/>
|
||||
+ <feature name="apic"/>
|
||||
+ <feature name="arat"/>
|
||||
+ <feature name="arch-capabilities"/>
|
||||
+ <feature name="avx"/>
|
||||
+ <feature name="avx2"/>
|
||||
+ <feature name="avx512-bf16"/>
|
||||
+ <feature name="avx512bw"/>
|
||||
+ <feature name="avx512cd"/>
|
||||
+ <feature name="avx512dq"/>
|
||||
+ <feature name="avx512f"/>
|
||||
+ <feature name="avx512vl"/>
|
||||
+ <feature name="avx512vnni"/>
|
||||
+ <feature name="bmi1"/>
|
||||
+ <feature name="bmi2"/>
|
||||
+ <feature name="clflush"/>
|
||||
+ <feature name="clflushopt"/>
|
||||
+ <feature name="clwb"/>
|
||||
+ <feature name="cmov"/>
|
||||
+ <feature name="cx16"/>
|
||||
+ <feature name="cx8"/>
|
||||
+ <feature name="de"/>
|
||||
+ <feature name="erms"/>
|
||||
+ <feature name="f16c"/>
|
||||
+ <feature name="fma"/>
|
||||
+ <feature name="fpu"/>
|
||||
+ <feature name="fsgsbase"/>
|
||||
+ <feature name="fxsr"/>
|
||||
+ <feature name="hle"/>
|
||||
+ <feature name="ibrs-all"/>
|
||||
+ <feature name="invpcid"/>
|
||||
+ <feature name="lahf_lm"/>
|
||||
+ <feature name="lm"/>
|
||||
+ <feature name="mca"/>
|
||||
+ <feature name="mce"/>
|
||||
+ <feature name="mds-no"/>
|
||||
+ <feature name="mmx"/>
|
||||
+ <feature name="movbe"/>
|
||||
+ <feature name="msr"/>
|
||||
+ <feature name="mtrr"/>
|
||||
+ <feature name="nx"/>
|
||||
+ <feature name="pae"/>
|
||||
+ <feature name="pat"/>
|
||||
+ <feature name="pcid"/>
|
||||
+ <feature name="pclmuldq"/>
|
||||
+ <feature name="pdpe1gb"/>
|
||||
+ <feature name="pge"/>
|
||||
+ <feature name="pku"/>
|
||||
+ <feature name="pni"/>
|
||||
+ <feature name="popcnt"/>
|
||||
+ <feature name="pschange-mc-no"/>
|
||||
+ <feature name="pse"/>
|
||||
+ <feature name="pse36"/>
|
||||
+ <feature name="rdctl-no"/>
|
||||
+ <feature name="rdrand"/>
|
||||
+ <feature name="rdseed"/>
|
||||
+ <feature name="rdtscp"/>
|
||||
+ <feature name="rtm"/>
|
||||
+ <feature name="sep"/>
|
||||
+ <feature name="skip-l1dfl-vmentry"/>
|
||||
+ <feature name="smap"/>
|
||||
+ <feature name="smep"/>
|
||||
+ <feature name="spec-ctrl"/>
|
||||
+ <feature name="ssbd"/>
|
||||
+ <feature name="sse"/>
|
||||
+ <feature name="sse2"/>
|
||||
+ <feature name="sse4.1"/>
|
||||
+ <feature name="sse4.2"/>
|
||||
+ <feature name="ssse3"/>
|
||||
+ <feature name="stibp"/>
|
||||
+ <feature name="syscall"/>
|
||||
+ <feature name="taa-no"/>
|
||||
+ <feature name="tsc"/>
|
||||
+ <feature name="tsc-deadline"/>
|
||||
+ <feature name="vme"/>
|
||||
+ <feature name="x2apic"/>
|
||||
+ <feature name="xgetbv1"/>
|
||||
+ <feature name="xsave"/>
|
||||
+ <feature name="xsavec"/>
|
||||
+ <feature name="xsaveopt"/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
index db5598740c..f169458399 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Cascadelake-Server</model>
|
||||
+ <model fallback='forbid'>Cooperlake</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ds'/>
|
||||
<feature policy='require' name='acpi'/>
|
||||
@@ -20,22 +20,13 @@
|
||||
<feature policy='require' name='osxsave'/>
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
<feature policy='require' name='cmt'/>
|
||||
+ <feature policy='require' name='mpx'/>
|
||||
<feature policy='require' name='intel-pt'/>
|
||||
- <feature policy='require' name='pku'/>
|
||||
<feature policy='require' name='ospke'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
- <feature policy='require' name='stibp'/>
|
||||
- <feature policy='require' name='arch-capabilities'/>
|
||||
- <feature policy='require' name='avx512-bf16'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='mbm_total'/>
|
||||
<feature policy='require' name='mbm_local'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
- <feature policy='require' name='rdctl-no'/>
|
||||
- <feature policy='require' name='ibrs-all'/>
|
||||
- <feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='require' name='mds-no'/>
|
||||
- <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
- <feature policy='require' name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
index 6926b7c975..b0777181bb 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpu>
|
||||
<arch>x86_64</arch>
|
||||
- <model>Cascadelake-Server</model>
|
||||
+ <model>Cooperlake</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature name='ds'/>
|
||||
<feature name='acpi'/>
|
||||
@@ -21,22 +21,13 @@
|
||||
<feature name='osxsave'/>
|
||||
<feature name='tsc_adjust'/>
|
||||
<feature name='cmt'/>
|
||||
+ <feature name='mpx'/>
|
||||
<feature name='intel-pt'/>
|
||||
- <feature name='pku'/>
|
||||
<feature name='ospke'/>
|
||||
<feature name='md-clear'/>
|
||||
- <feature name='stibp'/>
|
||||
- <feature name='arch-capabilities'/>
|
||||
- <feature name='avx512-bf16'/>
|
||||
<feature name='xsaves'/>
|
||||
<feature name='mbm_total'/>
|
||||
<feature name='mbm_local'/>
|
||||
<feature name='invtsc'/>
|
||||
- <feature name='rdctl-no'/>
|
||||
- <feature name='ibrs-all'/>
|
||||
- <feature name='skip-l1dfl-vmentry'/>
|
||||
- <feature name='mds-no'/>
|
||||
- <feature name='pschange-mc-no'/>
|
||||
<feature name='tsx-ctrl'/>
|
||||
- <feature name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
index fc52805b2f..fb319d547c 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
@@ -1,24 +1,15 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Cascadelake-Server</model>
|
||||
+ <model fallback='forbid'>Cooperlake</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ss'/>
|
||||
<feature policy='require' name='vmx'/>
|
||||
<feature policy='require' name='hypervisor'/>
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
+ <feature policy='require' name='mpx'/>
|
||||
<feature policy='require' name='umip'/>
|
||||
- <feature policy='require' name='pku'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
- <feature policy='require' name='stibp'/>
|
||||
- <feature policy='require' name='arch-capabilities'/>
|
||||
- <feature policy='require' name='avx512-bf16'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='ibpb'/>
|
||||
<feature policy='require' name='amd-ssbd'/>
|
||||
- <feature policy='require' name='rdctl-no'/>
|
||||
- <feature policy='require' name='ibrs-all'/>
|
||||
- <feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='require' name='mds-no'/>
|
||||
- <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
- <feature policy='require' name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
index b7e2c8a4fe..7bfd786ff6 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
@@ -93,6 +93,7 @@
|
||||
<model usable='no'>EPYC-IBPB</model>
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
+ <model usable='no'>Cooperlake</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
<model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
index d634803b29..0a4bb16a89 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
@@ -101,6 +101,7 @@
|
||||
<model usable='no'>EPYC-IBPB</model>
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
+ <model usable='no'>Cooperlake</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
<model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
index d2741375b4..d6ee66ab60 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
@@ -92,6 +92,7 @@
|
||||
<model usable='no'>EPYC-IBPB</model>
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
+ <model usable='no'>Cooperlake</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
<model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,749 +0,0 @@
|
|||
From 4658a565f5536002c3a65e942eed0d877cd1d070 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4658a565f5536002c3a65e942eed0d877cd1d070@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:56 +0200
|
||||
Subject: [PATCH] cpu_map: Add <decode> element to x86 CPU model definitions
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The element specifies whether a particular CPU model can be used when
|
||||
creating a CPU definition from raw CPUID/MSR data. The @host attribute
|
||||
determines whether the CPU model can be used (host='on') for creating
|
||||
CPU definition for host capabilities. Usability of the model for domain
|
||||
capabilities and host-model CPU definitions is controlled by the @guest
|
||||
attribute.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
(cherry picked from commit f4914045c2bff46b120c6c2af80066d24e48b609)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840008
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <3097db79eff1e45257ef12f891e8f9243bc8580f.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 43 +++++++++++++++++++
|
||||
src/cpu_map/x86_486.xml | 1 +
|
||||
src/cpu_map/x86_Broadwell-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Broadwell-noTSX-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Broadwell-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Broadwell.xml | 1 +
|
||||
src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Cascadelake-Server.xml | 1 +
|
||||
src/cpu_map/x86_Conroe.xml | 1 +
|
||||
src/cpu_map/x86_Dhyana.xml | 1 +
|
||||
src/cpu_map/x86_EPYC-IBPB.xml | 1 +
|
||||
src/cpu_map/x86_EPYC.xml | 1 +
|
||||
src/cpu_map/x86_Haswell-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Haswell-noTSX-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Haswell-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Haswell.xml | 1 +
|
||||
src/cpu_map/x86_Icelake-Client-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Icelake-Client.xml | 1 +
|
||||
src/cpu_map/x86_Icelake-Server-noTSX.xml | 1 +
|
||||
src/cpu_map/x86_Icelake-Server.xml | 1 +
|
||||
src/cpu_map/x86_IvyBridge-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_IvyBridge.xml | 1 +
|
||||
src/cpu_map/x86_Nehalem-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Nehalem.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G1.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G2.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G3.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G4.xml | 1 +
|
||||
src/cpu_map/x86_Opteron_G5.xml | 1 +
|
||||
src/cpu_map/x86_Penryn.xml | 1 +
|
||||
src/cpu_map/x86_SandyBridge-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_SandyBridge.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Client-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Client.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Server-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Skylake-Server.xml | 1 +
|
||||
src/cpu_map/x86_Westmere-IBRS.xml | 1 +
|
||||
src/cpu_map/x86_Westmere.xml | 1 +
|
||||
src/cpu_map/x86_athlon.xml | 1 +
|
||||
src/cpu_map/x86_core2duo.xml | 1 +
|
||||
src/cpu_map/x86_coreduo.xml | 1 +
|
||||
src/cpu_map/x86_cpu64-rhel5.xml | 1 +
|
||||
src/cpu_map/x86_cpu64-rhel6.xml | 1 +
|
||||
src/cpu_map/x86_kvm32.xml | 1 +
|
||||
src/cpu_map/x86_kvm64.xml | 1 +
|
||||
src/cpu_map/x86_n270.xml | 1 +
|
||||
src/cpu_map/x86_pentium.xml | 1 +
|
||||
src/cpu_map/x86_pentium2.xml | 1 +
|
||||
src/cpu_map/x86_pentium3.xml | 1 +
|
||||
src/cpu_map/x86_pentiumpro.xml | 1 +
|
||||
src/cpu_map/x86_phenom.xml | 1 +
|
||||
src/cpu_map/x86_qemu32.xml | 1 +
|
||||
src/cpu_map/x86_qemu64.xml | 1 +
|
||||
55 files changed, 97 insertions(+)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 8c865bdaa4..7fbb4c9a6c 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -125,6 +125,8 @@ typedef struct _virCPUx86Model virCPUx86Model;
|
||||
typedef virCPUx86Model *virCPUx86ModelPtr;
|
||||
struct _virCPUx86Model {
|
||||
char *name;
|
||||
+ bool decodeHost;
|
||||
+ bool decodeGuest;
|
||||
virCPUx86VendorPtr vendor;
|
||||
size_t nsignatures;
|
||||
uint32_t *signatures;
|
||||
@@ -1347,6 +1349,44 @@ x86ModelCompare(virCPUx86ModelPtr model1,
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+x86ModelParseDecode(virCPUx86ModelPtr model,
|
||||
+ xmlXPathContextPtr ctxt)
|
||||
+{
|
||||
+ g_autofree char *host = NULL;
|
||||
+ g_autofree char *guest = NULL;
|
||||
+ int val;
|
||||
+
|
||||
+ if ((host = virXPathString("string(./decode/@host)", ctxt)))
|
||||
+ val = virTristateSwitchTypeFromString(host);
|
||||
+ else
|
||||
+ val = VIR_TRISTATE_SWITCH_ABSENT;
|
||||
+
|
||||
+ if (val <= 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("invalid or missing decode/host attribute in CPU model %s"),
|
||||
+ model->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ model->decodeHost = val == VIR_TRISTATE_SWITCH_ON;
|
||||
+
|
||||
+ if ((guest = virXPathString("string(./decode/@guest)", ctxt)))
|
||||
+ val = virTristateSwitchTypeFromString(guest);
|
||||
+ else
|
||||
+ val = VIR_TRISTATE_SWITCH_ABSENT;
|
||||
+
|
||||
+ if (val <= 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("invalid or missing decode/guest attribute in CPU model %s"),
|
||||
+ model->name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ model->decodeGuest = val == VIR_TRISTATE_SWITCH_ON;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
x86ModelParseAncestor(virCPUx86ModelPtr model,
|
||||
xmlXPathContextPtr ctxt,
|
||||
@@ -1521,6 +1561,9 @@ x86ModelParse(xmlXPathContextPtr ctxt,
|
||||
|
||||
model->name = g_strdup(name);
|
||||
|
||||
+ if (x86ModelParseDecode(model, ctxt) < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
if (x86ModelParseAncestor(model, ctxt, map) < 0)
|
||||
goto cleanup;
|
||||
|
||||
diff --git a/src/cpu_map/x86_486.xml b/src/cpu_map/x86_486.xml
|
||||
index 61fa3797e8..d05b277392 100644
|
||||
--- a/src/cpu_map/x86_486.xml
|
||||
+++ b/src/cpu_map/x86_486.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='486'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='fpu'/>
|
||||
<feature name='pse'/>
|
||||
<feature name='vme'/>
|
||||
diff --git a/src/cpu_map/x86_Broadwell-IBRS.xml b/src/cpu_map/x86_Broadwell-IBRS.xml
|
||||
index 4600cacec0..9033d5fcd5 100644
|
||||
--- a/src/cpu_map/x86_Broadwell-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Broadwell-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='61'/> <!-- 0306d0 -->
|
||||
<signature family='6' model='71'/> <!-- 040670 -->
|
||||
<signature family='6' model='79'/> <!-- 0406f0 -->
|
||||
diff --git a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
|
||||
index b3fc0b726a..c044b60e36 100644
|
||||
--- a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Broadwell-noTSX-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='61'/> <!-- 0306d0 -->
|
||||
<signature family='6' model='71'/> <!-- 040670 -->
|
||||
<signature family='6' model='79'/> <!-- 0406f0 -->
|
||||
diff --git a/src/cpu_map/x86_Broadwell-noTSX.xml b/src/cpu_map/x86_Broadwell-noTSX.xml
|
||||
index ad932d0853..637f29ba1c 100644
|
||||
--- a/src/cpu_map/x86_Broadwell-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Broadwell-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='61'/> <!-- 0306d0 -->
|
||||
<signature family='6' model='71'/> <!-- 040670 -->
|
||||
<signature family='6' model='79'/> <!-- 0406f0 -->
|
||||
diff --git a/src/cpu_map/x86_Broadwell.xml b/src/cpu_map/x86_Broadwell.xml
|
||||
index 6de9227322..82939a4509 100644
|
||||
--- a/src/cpu_map/x86_Broadwell.xml
|
||||
+++ b/src/cpu_map/x86_Broadwell.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Broadwell'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='61'/> <!-- 0306d0 -->
|
||||
<signature family='6' model='71'/> <!-- 040670 -->
|
||||
<signature family='6' model='79'/> <!-- 0406f0 -->
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
index d24415ebce..5adea664e9 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server.xml b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
index b69ac198b6..d7ec42f57e 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Conroe.xml b/src/cpu_map/x86_Conroe.xml
|
||||
index 89fe0ad2cf..4cacee6142 100644
|
||||
--- a/src/cpu_map/x86_Conroe.xml
|
||||
+++ b/src/cpu_map/x86_Conroe.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Conroe'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='15'/> <!-- 0006f0 -->
|
||||
<signature family='6' model='22'/> <!-- 010660 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_Dhyana.xml b/src/cpu_map/x86_Dhyana.xml
|
||||
index cbc8020a94..689daf8649 100644
|
||||
--- a/src/cpu_map/x86_Dhyana.xml
|
||||
+++ b/src/cpu_map/x86_Dhyana.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Dhyana'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='24' model='0'/> <!-- 900f00 -->
|
||||
<vendor name='Hygon'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_EPYC-IBPB.xml b/src/cpu_map/x86_EPYC-IBPB.xml
|
||||
index 283697ebd1..983c5f4445 100644
|
||||
--- a/src/cpu_map/x86_EPYC-IBPB.xml
|
||||
+++ b/src/cpu_map/x86_EPYC-IBPB.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='EPYC-IBPB'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='23' model='1'/> <!-- 800f10 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_EPYC.xml b/src/cpu_map/x86_EPYC.xml
|
||||
index f0601392fd..3ebba9f4ed 100644
|
||||
--- a/src/cpu_map/x86_EPYC.xml
|
||||
+++ b/src/cpu_map/x86_EPYC.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='EPYC'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='23' model='1'/> <!-- 800f10 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Haswell-IBRS.xml b/src/cpu_map/x86_Haswell-IBRS.xml
|
||||
index 4f86db838f..0ffe2bae0d 100644
|
||||
--- a/src/cpu_map/x86_Haswell-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Haswell-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Haswell-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='60'/> <!-- 0306c0 -->
|
||||
<signature family='6' model='63'/> <!-- 0306f0 -->
|
||||
<signature family='6' model='69'/> <!-- 040650 -->
|
||||
diff --git a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
|
||||
index 47318be6d5..75d709c009 100644
|
||||
--- a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Haswell-noTSX-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='60'/> <!-- 0306c0 -->
|
||||
<signature family='6' model='63'/> <!-- 0306f0 -->
|
||||
<signature family='6' model='69'/> <!-- 040650 -->
|
||||
diff --git a/src/cpu_map/x86_Haswell-noTSX.xml b/src/cpu_map/x86_Haswell-noTSX.xml
|
||||
index efd10c47de..b0a0faa856 100644
|
||||
--- a/src/cpu_map/x86_Haswell-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Haswell-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Haswell-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='60'/> <!-- 0306c0 -->
|
||||
<signature family='6' model='63'/> <!-- 0306f0 -->
|
||||
<signature family='6' model='69'/> <!-- 040650 -->
|
||||
diff --git a/src/cpu_map/x86_Haswell.xml b/src/cpu_map/x86_Haswell.xml
|
||||
index ac358d7967..ee16b30f19 100644
|
||||
--- a/src/cpu_map/x86_Haswell.xml
|
||||
+++ b/src/cpu_map/x86_Haswell.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Haswell'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='60'/> <!-- 0306c0 -->
|
||||
<signature family='6' model='63'/> <!-- 0306f0 -->
|
||||
<signature family='6' model='69'/> <!-- 040650 -->
|
||||
diff --git a/src/cpu_map/x86_Icelake-Client-noTSX.xml b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
index cd51881f40..540732af6f 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Client-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='126'/> <!-- 0706e0 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Client.xml b/src/cpu_map/x86_Icelake-Client.xml
|
||||
index fbd53bbe11..5cf32e91fa 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Client.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Client.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Client'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='126'/> <!-- 0706e0 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
index 538c656712..5a53da23c7 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Server-noTSX'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='134'/> <!-- 080660 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server.xml b/src/cpu_map/x86_Icelake-Server.xml
|
||||
index a565371977..367ade7240 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Server.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Server'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='134'/> <!-- 080660 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_IvyBridge-IBRS.xml b/src/cpu_map/x86_IvyBridge-IBRS.xml
|
||||
index e0f2adfa82..430bc3232d 100644
|
||||
--- a/src/cpu_map/x86_IvyBridge-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_IvyBridge-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='IvyBridge-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='58'/> <!-- 0306a0 -->
|
||||
<signature family='6' model='62'/> <!-- 0306e0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_IvyBridge.xml b/src/cpu_map/x86_IvyBridge.xml
|
||||
index 16213dbc62..eaf5d02e82 100644
|
||||
--- a/src/cpu_map/x86_IvyBridge.xml
|
||||
+++ b/src/cpu_map/x86_IvyBridge.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='IvyBridge'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='58'/> <!-- 0306a0 -->
|
||||
<signature family='6' model='62'/> <!-- 0306e0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_Nehalem-IBRS.xml b/src/cpu_map/x86_Nehalem-IBRS.xml
|
||||
index 8cc19eff03..00d0d2fe51 100644
|
||||
--- a/src/cpu_map/x86_Nehalem-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Nehalem-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Nehalem-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='26'/> <!-- 0106a0 -->
|
||||
<signature family='6' model='30'/> <!-- 0106e0 -->
|
||||
<signature family='6' model='31'/> <!-- 0106f0 -->
|
||||
diff --git a/src/cpu_map/x86_Nehalem.xml b/src/cpu_map/x86_Nehalem.xml
|
||||
index 530e5e8a0d..9968001fe7 100644
|
||||
--- a/src/cpu_map/x86_Nehalem.xml
|
||||
+++ b/src/cpu_map/x86_Nehalem.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Nehalem'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='26'/> <!-- 0106a0 -->
|
||||
<signature family='6' model='30'/> <!-- 0106e0 -->
|
||||
<signature family='6' model='31'/> <!-- 0106f0 -->
|
||||
diff --git a/src/cpu_map/x86_Opteron_G1.xml b/src/cpu_map/x86_Opteron_G1.xml
|
||||
index 73cf1de71e..57648ca93f 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G1.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G1.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G1'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='15' model='6'/> <!-- 100e60 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='apic'/>
|
||||
diff --git a/src/cpu_map/x86_Opteron_G2.xml b/src/cpu_map/x86_Opteron_G2.xml
|
||||
index 342105730e..db961b0067 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G2.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G2.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G2'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='15' model='6'/> <!-- 100e60 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='apic'/>
|
||||
diff --git a/src/cpu_map/x86_Opteron_G3.xml b/src/cpu_map/x86_Opteron_G3.xml
|
||||
index 7fbf8ac9e9..dab59d4f82 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G3.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G3.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G3'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='15' model='6'/> <!-- 100e60 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Opteron_G4.xml b/src/cpu_map/x86_Opteron_G4.xml
|
||||
index 463b3676a0..a7fc8d5828 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G4.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G4.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G4'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='21' model='1'/> <!-- 600f10 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Opteron_G5.xml b/src/cpu_map/x86_Opteron_G5.xml
|
||||
index 0f8fe32c87..ff775bdcef 100644
|
||||
--- a/src/cpu_map/x86_Opteron_G5.xml
|
||||
+++ b/src/cpu_map/x86_Opteron_G5.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Opteron_G5'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='21' model='2'/> <!-- 600f20 -->
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Penryn.xml b/src/cpu_map/x86_Penryn.xml
|
||||
index 279bb05570..29d4cd635b 100644
|
||||
--- a/src/cpu_map/x86_Penryn.xml
|
||||
+++ b/src/cpu_map/x86_Penryn.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Penryn'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='23'/> <!-- 010670 -->
|
||||
<signature family='6' model='29'/> <!-- 0106d0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_SandyBridge-IBRS.xml b/src/cpu_map/x86_SandyBridge-IBRS.xml
|
||||
index 7d1342ec6f..fbdb4f2bf6 100644
|
||||
--- a/src/cpu_map/x86_SandyBridge-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_SandyBridge-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='SandyBridge-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='42'/> <!-- 0206a0 -->
|
||||
<signature family='6' model='45'/> <!-- 0206d0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_SandyBridge.xml b/src/cpu_map/x86_SandyBridge.xml
|
||||
index 48e4ac8082..7c85ed42df 100644
|
||||
--- a/src/cpu_map/x86_SandyBridge.xml
|
||||
+++ b/src/cpu_map/x86_SandyBridge.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='SandyBridge'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='42'/> <!-- 0206a0 -->
|
||||
<signature family='6' model='45'/> <!-- 0206d0 -->
|
||||
<vendor name='Intel'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-IBRS.xml b/src/cpu_map/x86_Skylake-Client-IBRS.xml
|
||||
index 4440313fc4..5709e7c2f9 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Client-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
<signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
index 3d2976692f..0c2f1e6ac4 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Client-noTSX-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
<signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client.xml b/src/cpu_map/x86_Skylake-Client.xml
|
||||
index 1053fa4a04..14cd57e176 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Client'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
<signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-IBRS.xml b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
index 71179f9f74..bd6b6457ad 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
index 455a072119..91a206f575 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-noTSX-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server.xml b/src/cpu_map/x86_Skylake-Server.xml
|
||||
index 2da69e0dfc..f96875a85f 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Westmere-IBRS.xml b/src/cpu_map/x86_Westmere-IBRS.xml
|
||||
index 3baf56f47a..c7898f0c22 100644
|
||||
--- a/src/cpu_map/x86_Westmere-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Westmere-IBRS.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Westmere-IBRS'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='44'/> <!-- 0206c0 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='aes'/>
|
||||
diff --git a/src/cpu_map/x86_Westmere.xml b/src/cpu_map/x86_Westmere.xml
|
||||
index 95c1d690c8..16e4ad6c30 100644
|
||||
--- a/src/cpu_map/x86_Westmere.xml
|
||||
+++ b/src/cpu_map/x86_Westmere.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Westmere'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<signature family='6' model='44'/> <!-- 0206c0 -->
|
||||
<signature family='6' model='47'/> <!-- 0206f0 -->
|
||||
<signature family='6' model='37'/> <!-- 020650 -->
|
||||
diff --git a/src/cpu_map/x86_athlon.xml b/src/cpu_map/x86_athlon.xml
|
||||
index 0d44508e20..81c43c81e8 100644
|
||||
--- a/src/cpu_map/x86_athlon.xml
|
||||
+++ b/src/cpu_map/x86_athlon.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='athlon'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnow'/>
|
||||
<feature name='3dnowext'/>
|
||||
diff --git a/src/cpu_map/x86_core2duo.xml b/src/cpu_map/x86_core2duo.xml
|
||||
index 3c9a148f3c..412039fe55 100644
|
||||
--- a/src/cpu_map/x86_core2duo.xml
|
||||
+++ b/src/cpu_map/x86_core2duo.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='core2duo'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='Intel'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
diff --git a/src/cpu_map/x86_coreduo.xml b/src/cpu_map/x86_coreduo.xml
|
||||
index 676e846920..e2fda9a1d4 100644
|
||||
--- a/src/cpu_map/x86_coreduo.xml
|
||||
+++ b/src/cpu_map/x86_coreduo.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='coreduo'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='Intel'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
diff --git a/src/cpu_map/x86_cpu64-rhel5.xml b/src/cpu_map/x86_cpu64-rhel5.xml
|
||||
index 670a92f274..be6bcdb7a6 100644
|
||||
--- a/src/cpu_map/x86_cpu64-rhel5.xml
|
||||
+++ b/src/cpu_map/x86_cpu64-rhel5.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='cpu64-rhel5'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/src/cpu_map/x86_cpu64-rhel6.xml b/src/cpu_map/x86_cpu64-rhel6.xml
|
||||
index 3cae0f00c2..c62b1b5575 100644
|
||||
--- a/src/cpu_map/x86_cpu64-rhel6.xml
|
||||
+++ b/src/cpu_map/x86_cpu64-rhel6.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='cpu64-rhel6'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/src/cpu_map/x86_kvm32.xml b/src/cpu_map/x86_kvm32.xml
|
||||
index 5f08a5e7fc..9dd96d5b56 100644
|
||||
--- a/src/cpu_map/x86_kvm32.xml
|
||||
+++ b/src/cpu_map/x86_kvm32.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='kvm32'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/src/cpu_map/x86_kvm64.xml b/src/cpu_map/x86_kvm64.xml
|
||||
index 80b24e2a49..185af06f78 100644
|
||||
--- a/src/cpu_map/x86_kvm64.xml
|
||||
+++ b/src/cpu_map/x86_kvm64.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='kvm64'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/src/cpu_map/x86_n270.xml b/src/cpu_map/x86_n270.xml
|
||||
index cb359d968e..5507d2ea3b 100644
|
||||
--- a/src/cpu_map/x86_n270.xml
|
||||
+++ b/src/cpu_map/x86_n270.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='n270'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='Intel'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
diff --git a/src/cpu_map/x86_pentium.xml b/src/cpu_map/x86_pentium.xml
|
||||
index d44c1399b0..f0a8982115 100644
|
||||
--- a/src/cpu_map/x86_pentium.xml
|
||||
+++ b/src/cpu_map/x86_pentium.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='pentium'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='cx8'/>
|
||||
<feature name='de'/>
|
||||
<feature name='fpu'/>
|
||||
diff --git a/src/cpu_map/x86_pentium2.xml b/src/cpu_map/x86_pentium2.xml
|
||||
index 0d772bad2f..aeba082297 100644
|
||||
--- a/src/cpu_map/x86_pentium2.xml
|
||||
+++ b/src/cpu_map/x86_pentium2.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='pentium2'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='cmov'/>
|
||||
<feature name='cx8'/>
|
||||
<feature name='de'/>
|
||||
diff --git a/src/cpu_map/x86_pentium3.xml b/src/cpu_map/x86_pentium3.xml
|
||||
index 24eb227c28..ab85d2967f 100644
|
||||
--- a/src/cpu_map/x86_pentium3.xml
|
||||
+++ b/src/cpu_map/x86_pentium3.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='pentium3'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='cmov'/>
|
||||
<feature name='cx8'/>
|
||||
<feature name='de'/>
|
||||
diff --git a/src/cpu_map/x86_pentiumpro.xml b/src/cpu_map/x86_pentiumpro.xml
|
||||
index 9f7a610a87..b6e061187c 100644
|
||||
--- a/src/cpu_map/x86_pentiumpro.xml
|
||||
+++ b/src/cpu_map/x86_pentiumpro.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='pentiumpro'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='cmov'/>
|
||||
<feature name='cx8'/>
|
||||
diff --git a/src/cpu_map/x86_phenom.xml b/src/cpu_map/x86_phenom.xml
|
||||
index 71f004057b..f0f8ece57a 100644
|
||||
--- a/src/cpu_map/x86_phenom.xml
|
||||
+++ b/src/cpu_map/x86_phenom.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='phenom'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<vendor name='AMD'/>
|
||||
<feature name='3dnow'/>
|
||||
<feature name='3dnowext'/>
|
||||
diff --git a/src/cpu_map/x86_qemu32.xml b/src/cpu_map/x86_qemu32.xml
|
||||
index 3c9cdec981..f3fb1959be 100644
|
||||
--- a/src/cpu_map/x86_qemu32.xml
|
||||
+++ b/src/cpu_map/x86_qemu32.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='qemu32'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='cmov'/>
|
||||
<feature name='cx8'/>
|
||||
diff --git a/src/cpu_map/x86_qemu64.xml b/src/cpu_map/x86_qemu64.xml
|
||||
index a8e8dfe58d..0fe207a2b4 100644
|
||||
--- a/src/cpu_map/x86_qemu64.xml
|
||||
+++ b/src/cpu_map/x86_qemu64.xml
|
||||
@@ -1,5 +1,6 @@
|
||||
<cpus>
|
||||
<model name='qemu64'>
|
||||
+ <decode host='on' guest='on'/>
|
||||
<!-- These are supported only by TCG. KVM supports them only if the
|
||||
host does. So we leave them out:
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,831 +0,0 @@
|
|||
From 59287d64100517e89dbd3a88af6fec4755ceab42 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <59287d64100517e89dbd3a88af6fec4755ceab42@dist-git>
|
||||
From: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Date: Tue, 26 May 2020 10:58:55 +0200
|
||||
Subject: [PATCH] cpu_map: Add more -noTSX x86 CPU models
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
One of the mitigation methods for TAA[1] is to disable TSX
|
||||
support on the host system. Linux added a mechanism to disable
|
||||
TSX globally through the kernel command line, and many Linux
|
||||
distributions now default to tsx=off. This makes existing CPU
|
||||
models that have HLE and RTM enabled not usable anymore.
|
||||
|
||||
Add new versions of all CPU models that have the HLE and RTM
|
||||
features enabled, that can be used when TSX is disabled in the
|
||||
host system.
|
||||
|
||||
On systems disabling the features without those types defined
|
||||
in cpu-maps users end up without modern CPU types in the list
|
||||
of usable CPUs to use in the likes of virsh domcapabilities
|
||||
or tools higher in the stack like virt-manager.
|
||||
|
||||
This adds:
|
||||
-Cascadelake-Server-noTSX
|
||||
-Icelake-Client-noTSX
|
||||
-Icelake-Server-noTSX
|
||||
-Skylake-Server-noTSX-IBRS
|
||||
-Skylake-Client-noTSX-IBRS
|
||||
|
||||
Introduced in QEMU by commit v4.2.0-rc2-3-g9ab2237f19 (function)
|
||||
and commit v4.2.0-rc2-4-g02fa60d101 (names)
|
||||
|
||||
References:
|
||||
|
||||
[1] TAA, TSX asynchronous Abort:
|
||||
https://software.intel.com/security-software-guidance/insights/deep-dive-intel-transactional-synchronization-extensions-intel-tsx-asynchronous-abort
|
||||
https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/tsx_async_abort.html
|
||||
|
||||
Fixes: https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1853200
|
||||
|
||||
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Message-Id: <20200310104806.2723-2-christian.ehrhardt@canonical.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit dd17a4eba8618aeb0144f268f2222f65a85425fc)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840008
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <ab2edc2c9107c87dfa7153b6c54ddd1401c82a4b.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/Makefile.inc.am | 5 ++
|
||||
src/cpu_map/index.xml | 5 ++
|
||||
src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 78 ++++++++++++++++
|
||||
src/cpu_map/x86_Icelake-Client-noTSX.xml | 81 +++++++++++++++++
|
||||
src/cpu_map/x86_Icelake-Server-noTSX.xml | 90 +++++++++++++++++++
|
||||
src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml | 73 +++++++++++++++
|
||||
src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 75 ++++++++++++++++
|
||||
.../x86_64-cpuid-Core-i7-8550U-guest.xml | 4 +-
|
||||
.../x86_64-cpuid-Core-i7-8550U-host.xml | 11 +--
|
||||
.../x86_64-cpuid-Core-i7-8550U-json.xml | 4 +-
|
||||
.../domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 5 ++
|
||||
.../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 5 ++
|
||||
tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 5 ++
|
||||
.../domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 5 ++
|
||||
.../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml | 5 ++
|
||||
tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 5 ++
|
||||
16 files changed, 440 insertions(+), 16 deletions(-)
|
||||
create mode 100644 src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
create mode 100644 src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
create mode 100644 src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
create mode 100644 src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
create mode 100644 src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
|
||||
diff --git a/src/cpu_map/Makefile.inc.am b/src/cpu_map/Makefile.inc.am
|
||||
index e935178304..be64c9a0d4 100644
|
||||
--- a/src/cpu_map/Makefile.inc.am
|
||||
+++ b/src/cpu_map/Makefile.inc.am
|
||||
@@ -20,6 +20,7 @@ cpumap_DATA = \
|
||||
cpu_map/x86_Broadwell-noTSX.xml \
|
||||
cpu_map/x86_Broadwell-noTSX-IBRS.xml \
|
||||
cpu_map/x86_Cascadelake-Server.xml \
|
||||
+ cpu_map/x86_Cascadelake-Server-noTSX.xml \
|
||||
cpu_map/x86_Conroe.xml \
|
||||
cpu_map/x86_core2duo.xml \
|
||||
cpu_map/x86_coreduo.xml \
|
||||
@@ -33,7 +34,9 @@ cpumap_DATA = \
|
||||
cpu_map/x86_Haswell-noTSX.xml \
|
||||
cpu_map/x86_Haswell-noTSX-IBRS.xml \
|
||||
cpu_map/x86_Icelake-Client.xml \
|
||||
+ cpu_map/x86_Icelake-Client-noTSX.xml \
|
||||
cpu_map/x86_Icelake-Server.xml \
|
||||
+ cpu_map/x86_Icelake-Server-noTSX.xml \
|
||||
cpu_map/x86_IvyBridge.xml \
|
||||
cpu_map/x86_IvyBridge-IBRS.xml \
|
||||
cpu_map/x86_kvm32.xml \
|
||||
@@ -58,8 +61,10 @@ cpumap_DATA = \
|
||||
cpu_map/x86_SandyBridge-IBRS.xml \
|
||||
cpu_map/x86_Skylake-Client.xml \
|
||||
cpu_map/x86_Skylake-Client-IBRS.xml \
|
||||
+ cpu_map/x86_Skylake-Client-noTSX-IBRS.xml \
|
||||
cpu_map/x86_Skylake-Server.xml \
|
||||
cpu_map/x86_Skylake-Server-IBRS.xml \
|
||||
+ cpu_map/x86_Skylake-Server-noTSX-IBRS.xml \
|
||||
cpu_map/x86_Westmere.xml \
|
||||
cpu_map/x86_Westmere-IBRS.xml \
|
||||
$(NULL)
|
||||
diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
|
||||
index ffb2f6fe1b..50b030de29 100644
|
||||
--- a/src/cpu_map/index.xml
|
||||
+++ b/src/cpu_map/index.xml
|
||||
@@ -44,11 +44,16 @@
|
||||
<include filename="x86_Broadwell-IBRS.xml"/>
|
||||
<include filename="x86_Skylake-Client.xml"/>
|
||||
<include filename="x86_Skylake-Client-IBRS.xml"/>
|
||||
+ <include filename="x86_Skylake-Client-noTSX-IBRS.xml"/>
|
||||
<include filename="x86_Skylake-Server.xml"/>
|
||||
<include filename="x86_Skylake-Server-IBRS.xml"/>
|
||||
+ <include filename="x86_Skylake-Server-noTSX-IBRS.xml"/>
|
||||
<include filename="x86_Cascadelake-Server.xml"/>
|
||||
+ <include filename="x86_Cascadelake-Server-noTSX.xml"/>
|
||||
<include filename="x86_Icelake-Client.xml"/>
|
||||
+ <include filename="x86_Icelake-Client-noTSX.xml"/>
|
||||
<include filename="x86_Icelake-Server.xml"/>
|
||||
+ <include filename="x86_Icelake-Server-noTSX.xml"/>
|
||||
|
||||
<!-- AMD CPUs -->
|
||||
<include filename="x86_athlon.xml"/>
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
new file mode 100644
|
||||
index 0000000000..d24415ebce
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
@@ -0,0 +1,78 @@
|
||||
+<cpus>
|
||||
+ <model name='Cascadelake-Server-noTSX'>
|
||||
+ <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='avx512bw'/>
|
||||
+ <feature name='avx512cd'/>
|
||||
+ <feature name='avx512dq'/>
|
||||
+ <feature name='avx512f'/>
|
||||
+ <feature name='avx512vl'/>
|
||||
+ <feature name='avx512vnni'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <feature name='clflush'/>
|
||||
+ <feature name='clflushopt'/>
|
||||
+ <feature name='clwb'/>
|
||||
+ <feature name='cmov'/>
|
||||
+ <feature name='cx16'/>
|
||||
+ <feature name='cx8'/>
|
||||
+ <feature name='de'/>
|
||||
+ <feature name='erms'/>
|
||||
+ <feature name='f16c'/>
|
||||
+ <feature name='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pdpe1gb'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <feature name='ssbd'/>
|
||||
+ <feature name='sse'/>
|
||||
+ <feature name='sse2'/>
|
||||
+ <feature name='sse4.1'/>
|
||||
+ <feature name='sse4.2'/>
|
||||
+ <feature name='ssse3'/>
|
||||
+ <feature name='syscall'/>
|
||||
+ <feature name='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Client-noTSX.xml b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
new file mode 100644
|
||||
index 0000000000..cd51881f40
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
@@ -0,0 +1,81 @@
|
||||
+<cpus>
|
||||
+ <model name='Icelake-Client-noTSX'>
|
||||
+ <signature family='6' model='126'/> <!-- 0706e0 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='avx512-vpopcntdq'/>
|
||||
+ <feature name='avx512bitalg'/>
|
||||
+ <feature name='avx512vbmi'/>
|
||||
+ <feature name='avx512vbmi2'/>
|
||||
+ <feature name='avx512vnni'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <feature name='clflush'/>
|
||||
+ <feature name='cmov'/>
|
||||
+ <feature name='cx16'/>
|
||||
+ <feature name='cx8'/>
|
||||
+ <feature name='de'/>
|
||||
+ <feature name='erms'/>
|
||||
+ <feature name='f16c'/>
|
||||
+ <feature name='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='gfni'/>
|
||||
+ <feature name='intel-pt'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pku'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <feature name='ssbd'/>
|
||||
+ <feature name='sse'/>
|
||||
+ <feature name='sse2'/>
|
||||
+ <feature name='sse4.1'/>
|
||||
+ <feature name='sse4.2'/>
|
||||
+ <feature name='ssse3'/>
|
||||
+ <feature name='syscall'/>
|
||||
+ <feature name='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='umip'/>
|
||||
+ <feature name='vaes'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='vpclmulqdq'/>
|
||||
+ <feature name='wbnoinvd'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
new file mode 100644
|
||||
index 0000000000..538c656712
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
@@ -0,0 +1,90 @@
|
||||
+<cpus>
|
||||
+ <model name='Icelake-Server-noTSX'>
|
||||
+ <signature family='6' model='134'/> <!-- 080660 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='avx512-vpopcntdq'/>
|
||||
+ <feature name='avx512bitalg'/>
|
||||
+ <feature name='avx512bw'/>
|
||||
+ <feature name='avx512cd'/>
|
||||
+ <feature name='avx512dq'/>
|
||||
+ <feature name='avx512f'/>
|
||||
+ <feature name='avx512vbmi'/>
|
||||
+ <feature name='avx512vbmi2'/>
|
||||
+ <feature name='avx512vl'/>
|
||||
+ <feature name='avx512vnni'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <feature name='clflush'/>
|
||||
+ <feature name='clflushopt'/>
|
||||
+ <feature name='clwb'/>
|
||||
+ <feature name='cmov'/>
|
||||
+ <feature name='cx16'/>
|
||||
+ <feature name='cx8'/>
|
||||
+ <feature name='de'/>
|
||||
+ <feature name='erms'/>
|
||||
+ <feature name='f16c'/>
|
||||
+ <feature name='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='gfni'/>
|
||||
+ <feature name='intel-pt'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='la57'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pdpe1gb'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pku'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <feature name='ssbd'/>
|
||||
+ <feature name='sse'/>
|
||||
+ <feature name='sse2'/>
|
||||
+ <feature name='sse4.1'/>
|
||||
+ <feature name='sse4.2'/>
|
||||
+ <feature name='ssse3'/>
|
||||
+ <feature name='syscall'/>
|
||||
+ <feature name='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='umip'/>
|
||||
+ <feature name='vaes'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='vpclmulqdq'/>
|
||||
+ <feature name='wbnoinvd'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
new file mode 100644
|
||||
index 0000000000..3d2976692f
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
@@ -0,0 +1,73 @@
|
||||
+<cpus>
|
||||
+ <model name='Skylake-Client-noTSX-IBRS'>
|
||||
+ <signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
+ <signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
+ <!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
+ but we don't have specific models for them. -->
|
||||
+ <signature family='6' model='142'/> <!-- 0806e0 -->
|
||||
+ <signature family='6' model='158'/> <!-- 0906e0 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <feature name='clflush'/>
|
||||
+ <feature name='cmov'/>
|
||||
+ <feature name='cx16'/>
|
||||
+ <feature name='cx8'/>
|
||||
+ <feature name='de'/>
|
||||
+ <feature name='erms'/>
|
||||
+ <feature name='f16c'/>
|
||||
+ <feature name='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <feature name='sse'/>
|
||||
+ <feature name='sse2'/>
|
||||
+ <feature name='sse4.1'/>
|
||||
+ <feature name='sse4.2'/>
|
||||
+ <feature name='ssse3'/>
|
||||
+ <feature name='syscall'/>
|
||||
+ <feature name='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
new file mode 100644
|
||||
index 0000000000..455a072119
|
||||
--- /dev/null
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
@@ -0,0 +1,75 @@
|
||||
+<cpus>
|
||||
+ <model name='Skylake-Server-noTSX-IBRS'>
|
||||
+ <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <vendor name='Intel'/>
|
||||
+ <feature name='3dnowprefetch'/>
|
||||
+ <feature name='abm'/>
|
||||
+ <feature name='adx'/>
|
||||
+ <feature name='aes'/>
|
||||
+ <feature name='apic'/>
|
||||
+ <feature name='arat'/>
|
||||
+ <feature name='avx'/>
|
||||
+ <feature name='avx2'/>
|
||||
+ <feature name='avx512bw'/>
|
||||
+ <feature name='avx512cd'/>
|
||||
+ <feature name='avx512dq'/>
|
||||
+ <feature name='avx512f'/>
|
||||
+ <feature name='avx512vl'/>
|
||||
+ <feature name='bmi1'/>
|
||||
+ <feature name='bmi2'/>
|
||||
+ <feature name='clflush'/>
|
||||
+ <feature name='clwb'/>
|
||||
+ <feature name='cmov'/>
|
||||
+ <feature name='cx16'/>
|
||||
+ <feature name='cx8'/>
|
||||
+ <feature name='de'/>
|
||||
+ <feature name='erms'/>
|
||||
+ <feature name='f16c'/>
|
||||
+ <feature name='fma'/>
|
||||
+ <feature name='fpu'/>
|
||||
+ <feature name='fsgsbase'/>
|
||||
+ <feature name='fxsr'/>
|
||||
+ <feature name='invpcid'/>
|
||||
+ <feature name='lahf_lm'/>
|
||||
+ <feature name='lm'/>
|
||||
+ <feature name='mca'/>
|
||||
+ <feature name='mce'/>
|
||||
+ <feature name='mmx'/>
|
||||
+ <feature name='movbe'/>
|
||||
+ <feature name='mpx'/>
|
||||
+ <feature name='msr'/>
|
||||
+ <feature name='mtrr'/>
|
||||
+ <feature name='nx'/>
|
||||
+ <feature name='pae'/>
|
||||
+ <feature name='pat'/>
|
||||
+ <feature name='pcid'/>
|
||||
+ <feature name='pclmuldq'/>
|
||||
+ <feature name='pdpe1gb'/>
|
||||
+ <feature name='pge'/>
|
||||
+ <feature name='pni'/>
|
||||
+ <feature name='popcnt'/>
|
||||
+ <feature name='pse'/>
|
||||
+ <feature name='pse36'/>
|
||||
+ <feature name='rdrand'/>
|
||||
+ <feature name='rdseed'/>
|
||||
+ <feature name='rdtscp'/>
|
||||
+ <feature name='sep'/>
|
||||
+ <feature name='smap'/>
|
||||
+ <feature name='smep'/>
|
||||
+ <feature name='spec-ctrl'/>
|
||||
+ <feature name='sse'/>
|
||||
+ <feature name='sse2'/>
|
||||
+ <feature name='sse4.1'/>
|
||||
+ <feature name='sse4.2'/>
|
||||
+ <feature name='ssse3'/>
|
||||
+ <feature name='syscall'/>
|
||||
+ <feature name='tsc'/>
|
||||
+ <feature name='tsc-deadline'/>
|
||||
+ <feature name='vme'/>
|
||||
+ <feature name='x2apic'/>
|
||||
+ <feature name='xgetbv1'/>
|
||||
+ <feature name='xsave'/>
|
||||
+ <feature name='xsavec'/>
|
||||
+ <feature name='xsaveopt'/>
|
||||
+ </model>
|
||||
+</cpus>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
index 92404e4d03..e03c4a06ba 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Skylake-Client-IBRS</model>
|
||||
+ <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ds'/>
|
||||
<feature policy='require' name='acpi'/>
|
||||
@@ -26,6 +26,4 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='disable' name='hle'/>
|
||||
- <feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
index 808a8ff969..7f6fe2eac3 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
@@ -1,8 +1,7 @@
|
||||
<cpu>
|
||||
<arch>x86_64</arch>
|
||||
- <model>Broadwell-noTSX-IBRS</model>
|
||||
+ <model>Skylake-Client-noTSX-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
- <feature name='vme'/>
|
||||
<feature name='ds'/>
|
||||
<feature name='acpi'/>
|
||||
<feature name='ss'/>
|
||||
@@ -18,22 +17,14 @@
|
||||
<feature name='xtpr'/>
|
||||
<feature name='pdcm'/>
|
||||
<feature name='osxsave'/>
|
||||
- <feature name='f16c'/>
|
||||
- <feature name='rdrand'/>
|
||||
- <feature name='arat'/>
|
||||
<feature name='tsc_adjust'/>
|
||||
- <feature name='mpx'/>
|
||||
<feature name='clflushopt'/>
|
||||
<feature name='intel-pt'/>
|
||||
<feature name='md-clear'/>
|
||||
<feature name='stibp'/>
|
||||
<feature name='ssbd'/>
|
||||
- <feature name='xsaveopt'/>
|
||||
- <feature name='xsavec'/>
|
||||
- <feature name='xgetbv1'/>
|
||||
<feature name='xsaves'/>
|
||||
<feature name='pdpe1gb'/>
|
||||
- <feature name='abm'/>
|
||||
<feature name='invtsc'/>
|
||||
<feature name='skip-l1dfl-vmentry'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
index 645c0934c2..3d8e6775bf 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Skylake-Client-IBRS</model>
|
||||
+ <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ss'/>
|
||||
<feature policy='require' name='vmx'/>
|
||||
@@ -14,6 +14,4 @@
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='disable' name='hle'/>
|
||||
- <feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
index c4c6bfb564..e257657981 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
@@ -63,8 +63,10 @@
|
||||
<model usable='no'>athlon</model>
|
||||
<model usable='yes'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client</model>
|
||||
<model usable='yes'>SandyBridge-IBRS</model>
|
||||
@@ -79,7 +81,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='yes'>IvyBridge-IBRS</model>
|
||||
<model usable='yes'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='yes'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Haswell-noTSX</model>
|
||||
@@ -89,6 +93,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='yes'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
|
||||
index a7f8d9c5ee..c762b0b600 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
|
||||
@@ -73,8 +73,10 @@
|
||||
<model usable='yes'>athlon</model>
|
||||
<model usable='no'>Westmere-IBRS</model>
|
||||
<model usable='no'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='no'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Client-IBRS</model>
|
||||
<model usable='no'>Skylake-Client</model>
|
||||
<model usable='no'>SandyBridge-IBRS</model>
|
||||
@@ -89,7 +91,9 @@
|
||||
<model usable='no'>Nehalem</model>
|
||||
<model usable='no'>IvyBridge-IBRS</model>
|
||||
<model usable='no'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='no'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='no'>Haswell-noTSX</model>
|
||||
@@ -99,6 +103,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='no'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='no'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
index f0e0f182a4..2918ba9715 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
@@ -62,8 +62,10 @@
|
||||
<model usable='no'>athlon</model>
|
||||
<model usable='yes'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client</model>
|
||||
<model usable='yes'>SandyBridge-IBRS</model>
|
||||
@@ -78,7 +80,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='yes'>IvyBridge-IBRS</model>
|
||||
<model usable='yes'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='yes'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Haswell-noTSX</model>
|
||||
@@ -88,6 +92,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='yes'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
index b635d573ef..7b2a929738 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
@@ -63,8 +63,10 @@
|
||||
<model usable='no'>athlon</model>
|
||||
<model usable='yes'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client</model>
|
||||
<model usable='yes'>SandyBridge-IBRS</model>
|
||||
@@ -79,7 +81,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='yes'>IvyBridge-IBRS</model>
|
||||
<model usable='yes'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='yes'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Haswell-noTSX</model>
|
||||
@@ -89,6 +93,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='yes'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
index 0fbc632267..d634803b29 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
|
||||
@@ -72,8 +72,10 @@
|
||||
<model usable='yes'>athlon</model>
|
||||
<model usable='no'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='no'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Client-IBRS</model>
|
||||
<model usable='no'>Skylake-Client</model>
|
||||
<model usable='no'>SandyBridge-IBRS</model>
|
||||
@@ -88,7 +90,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='no'>IvyBridge-IBRS</model>
|
||||
<model usable='no'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='no'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='no'>Haswell-noTSX</model>
|
||||
@@ -98,6 +102,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='no'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='no'>Broadwell-noTSX</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
index 27f76a8a5e..7609d49020 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
@@ -62,8 +62,10 @@
|
||||
<model usable='no'>athlon</model>
|
||||
<model usable='yes'>Westmere-IBRS</model>
|
||||
<model usable='yes'>Westmere</model>
|
||||
+ <model usable='no'>Skylake-Server-noTSX-IBRS</model>
|
||||
<model usable='no'>Skylake-Server-IBRS</model>
|
||||
<model usable='no'>Skylake-Server</model>
|
||||
+ <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client-IBRS</model>
|
||||
<model usable='yes'>Skylake-Client</model>
|
||||
<model usable='yes'>SandyBridge-IBRS</model>
|
||||
@@ -78,7 +80,9 @@
|
||||
<model usable='yes'>Nehalem</model>
|
||||
<model usable='yes'>IvyBridge-IBRS</model>
|
||||
<model usable='yes'>IvyBridge</model>
|
||||
+ <model usable='no'>Icelake-Server-noTSX</model>
|
||||
<model usable='no'>Icelake-Server</model>
|
||||
+ <model usable='no'>Icelake-Client-noTSX</model>
|
||||
<model usable='no'>Icelake-Client</model>
|
||||
<model usable='yes'>Haswell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Haswell-noTSX</model>
|
||||
@@ -88,6 +92,7 @@
|
||||
<model usable='no'>EPYC</model>
|
||||
<model usable='no'>Dhyana</model>
|
||||
<model usable='yes'>Conroe</model>
|
||||
+ <model usable='no'>Cascadelake-Server-noTSX</model>
|
||||
<model usable='no'>Cascadelake-Server</model>
|
||||
<model usable='yes'>Broadwell-noTSX-IBRS</model>
|
||||
<model usable='yes'>Broadwell-noTSX</model>
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,212 +0,0 @@
|
|||
From 7d0790fb5061cb956390ce5f7a2b92ac9702ada6 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <7d0790fb5061cb956390ce5f7a2b92ac9702ada6@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:39 +0200
|
||||
Subject: [PATCH] cpu_map: Add pschange-mc-no bit in IA32_ARCH_CAPABILITIES MSR
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
(cherry picked from commit 12eb0c9496e802bad9e5ec71cde888b8fdb1b0b4)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1781878
|
||||
|
||||
Conflicts:
|
||||
tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml
|
||||
tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
|
||||
tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
|
||||
tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
|
||||
tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
|
||||
tests/domaincapsdata/qemu_5.1.0.x86_64.xml
|
||||
- test data files do not exist downstream
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <d106df21f8423a9acff9eb5bf75ab25611c1de1f.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_features.xml | 3 +++
|
||||
tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml | 2 +-
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml | 1 +
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml | 2 +-
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml | 1 +
|
||||
tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 1 +
|
||||
tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 1 +
|
||||
tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 1 +
|
||||
tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 1 +
|
||||
14 files changed, 16 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
|
||||
index 2c4c29dc99..8525ae0fa5 100644
|
||||
--- a/src/cpu_map/x86_features.xml
|
||||
+++ b/src/cpu_map/x86_features.xml
|
||||
@@ -509,6 +509,9 @@
|
||||
<feature name='mds-no'>
|
||||
<msr index='0x10a' edx='0x00000000' eax='0x00000020'/>
|
||||
</feature>
|
||||
+ <feature name='pschange-mc-no'>
|
||||
+ <msr index='0x10a' edx='0x00000000' eax='0x00000040'/>
|
||||
+ </feature>
|
||||
<feature name='tsx-ctrl'>
|
||||
<msr index='0x10a' edx='0x00000000' eax='0x00000080'/>
|
||||
</feature>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
index b5137e3c03..db5598740c 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
|
||||
@@ -35,6 +35,7 @@
|
||||
<feature policy='require' name='ibrs-all'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
<feature policy='require' name='mds-no'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
<feature policy='require' name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
index 52b352f4f1..6926b7c975 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
|
||||
@@ -36,6 +36,7 @@
|
||||
<feature name='ibrs-all'/>
|
||||
<feature name='skip-l1dfl-vmentry'/>
|
||||
<feature name='mds-no'/>
|
||||
+ <feature name='pschange-mc-no'/>
|
||||
<feature name='tsx-ctrl'/>
|
||||
<feature name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
index e323d6205e..fc52805b2f 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
|
||||
@@ -18,6 +18,7 @@
|
||||
<feature policy='require' name='ibrs-all'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
<feature policy='require' name='mds-no'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
<feature policy='require' name='taa-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
|
||||
index 6c480eeacf..57f8ebabba 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
|
||||
@@ -5,5 +5,5 @@
|
||||
<cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x009c47ab' ecx='0x00000004' edx='0xac000400'/>
|
||||
<cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
|
||||
<cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
|
||||
- <msr index='0x10a' edx='0x00000000' eax='0x00000008'/>
|
||||
+ <msr index='0x10a' edx='0x00000000' eax='0x00000048'/>
|
||||
</cpudata>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
index 92404e4d03..ed06515e99 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
@@ -26,6 +26,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='disable' name='hle'/>
|
||||
<feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
index 7f6fe2eac3..7681c94649 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
|
||||
@@ -27,4 +27,5 @@
|
||||
<feature name='pdpe1gb'/>
|
||||
<feature name='invtsc'/>
|
||||
<feature name='skip-l1dfl-vmentry'/>
|
||||
+ <feature name='pschange-mc-no'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
index 645c0934c2..4774d39c7e 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
@@ -14,6 +14,7 @@
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='disable' name='hle'/>
|
||||
<feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
|
||||
index 43c3a93a16..cd082feffe 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
|
||||
@@ -6,5 +6,5 @@
|
||||
<cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
|
||||
<cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
|
||||
<cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x01001000' ecx='0x00000000' edx='0x00000000'/>
|
||||
- <msr index='0x10a' edx='0x00000000' eax='0x000000ab'/>
|
||||
+ <msr index='0x10a' edx='0x00000000' eax='0x000000eb'/>
|
||||
</cpudata>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
|
||||
index 36e95029be..10c256ee1e 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
|
||||
@@ -17,5 +17,6 @@
|
||||
<feature policy='require' name='ibrs-all'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
<feature policy='require' name='mds-no'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
</cpu>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
index e257657981..4d9616cb69 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
|
||||
@@ -47,6 +47,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
</mode>
|
||||
<mode name='custom' supported='yes'>
|
||||
<model usable='yes'>qemu64</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
index 2918ba9715..5210c917aa 100644
|
||||
--- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
|
||||
@@ -46,6 +46,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
</mode>
|
||||
<mode name='custom' supported='yes'>
|
||||
<model usable='yes'>qemu64</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
index 7b2a929738..b7e2c8a4fe 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
|
||||
@@ -47,6 +47,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
</mode>
|
||||
<mode name='custom' supported='yes'>
|
||||
<model usable='yes'>qemu64</model>
|
||||
diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
index 7609d49020..d2741375b4 100644
|
||||
--- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
|
||||
@@ -46,6 +46,7 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
</mode>
|
||||
<mode name='custom' supported='yes'>
|
||||
<model usable='yes'>qemu64</model>
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
From 46f4cfe513f0f893c862dca7f02ed7d7932b2115 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <46f4cfe513f0f893c862dca7f02ed7d7932b2115@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 Apr 2022 12:50:41 +0200
|
||||
Subject: [PATCH] cpu_map: Disable cpu64-rhel* for host-model and baseline
|
||||
|
||||
These ancient RHEL-only CPU models should not really be used by any CPU
|
||||
definition created by libvirt. We keep them just for backwards
|
||||
compatibility with domains which might still be using them.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit d2e4d66be35cd04da72e5f5129a8a4da6a931505)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1851227
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_cpu64-rhel5.xml | 2 +-
|
||||
src/cpu_map/x86_cpu64-rhel6.xml | 2 +-
|
||||
tests/cputestdata/x86_64-baseline-no-vendor-result.xml | 3 ++-
|
||||
3 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/cpu_map/x86_cpu64-rhel5.xml b/src/cpu_map/x86_cpu64-rhel5.xml
|
||||
index be6bcdb7a6..7402b7603c 100644
|
||||
--- a/src/cpu_map/x86_cpu64-rhel5.xml
|
||||
+++ b/src/cpu_map/x86_cpu64-rhel5.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='cpu64-rhel5'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='off' guest='off'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/src/cpu_map/x86_cpu64-rhel6.xml b/src/cpu_map/x86_cpu64-rhel6.xml
|
||||
index c62b1b5575..061939c733 100644
|
||||
--- a/src/cpu_map/x86_cpu64-rhel6.xml
|
||||
+++ b/src/cpu_map/x86_cpu64-rhel6.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='cpu64-rhel6'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='off' guest='off'/>
|
||||
<feature name='apic'/>
|
||||
<feature name='clflush'/>
|
||||
<feature name='cmov'/>
|
||||
diff --git a/tests/cputestdata/x86_64-baseline-no-vendor-result.xml b/tests/cputestdata/x86_64-baseline-no-vendor-result.xml
|
||||
index 00e03b2152..4b4921cf93 100644
|
||||
--- a/tests/cputestdata/x86_64-baseline-no-vendor-result.xml
|
||||
+++ b/tests/cputestdata/x86_64-baseline-no-vendor-result.xml
|
||||
@@ -1,3 +1,4 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='allow'>cpu64-rhel6</model>
|
||||
+ <model fallback='allow'>kvm64</model>
|
||||
+ <feature policy='require' name='lahf_lm'/>
|
||||
</cpu>
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -1,154 +0,0 @@
|
|||
From f1926a0cb9147ce54484858f5e0f7376ee9ac648 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f1926a0cb9147ce54484858f5e0f7376ee9ac648@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:37 +0200
|
||||
Subject: [PATCH] cpu_map: Distinguish Cascadelake-Server from Skylake-Server
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The signatures of these two CPU model differ only in stepping as both
|
||||
report family 6 and model 85. Skylake-Server uses stepping 4 or less and
|
||||
Cascadelake-Server uses stepping 5..7.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1761678
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 5d6059f8ec16d64f240dc5e6413ca55a3b46b3f7)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <8711c401083e2605e7d8734764a5fe1b092749b0.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 2 +-
|
||||
src/cpu_map/x86_Cascadelake-Server.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Server-IBRS.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Server.xml | 2 +-
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml | 5 +++--
|
||||
tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml | 5 +++--
|
||||
7 files changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
index 459174a30d..bfd4629836 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server-noTSX'>
|
||||
<decode host='on' guest='off'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='5-7'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server.xml b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
index d7ec42f57e..335e9cb584 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server'>
|
||||
<decode host='on' guest='on'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='5-7'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-IBRS.xml b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
index bd6b6457ad..9fb3488809 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-IBRS.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-IBRS'>
|
||||
<decode host='on' guest='on'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='0-4'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
index c2b7de40e8..c162c0acc3 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-noTSX-IBRS'>
|
||||
<decode host='on' guest='off'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='0-4'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server.xml b/src/cpu_map/x86_Skylake-Server.xml
|
||||
index f96875a85f..e022d94c84 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server.xml
|
||||
@@ -1,7 +1,7 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server'>
|
||||
<decode host='on' guest='on'/>
|
||||
- <signature family='6' model='85'/> <!-- 050654 -->
|
||||
+ <signature family='6' model='85' stepping='0-4'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
<feature name='abm'/>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
|
||||
index cfb0eb982d..c21cb1e600 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Cascadelake-Server</model>
|
||||
+ <model fallback='forbid'>Skylake-Server-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ds'/>
|
||||
<feature policy='require' name='acpi'/>
|
||||
@@ -20,14 +20,15 @@
|
||||
<feature policy='require' name='osxsave'/>
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
<feature policy='require' name='cmt'/>
|
||||
+ <feature policy='require' name='clflushopt'/>
|
||||
<feature policy='require' name='intel-pt'/>
|
||||
<feature policy='require' name='pku'/>
|
||||
<feature policy='require' name='ospke'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
<feature policy='require' name='stibp'/>
|
||||
+ <feature policy='require' name='ssbd'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='mbm_total'/>
|
||||
<feature policy='require' name='mbm_local'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
- <feature policy='disable' name='avx512vnni'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
|
||||
index 968d904557..b482043ccf 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
|
||||
@@ -1,16 +1,17 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Cascadelake-Server</model>
|
||||
+ <model fallback='forbid'>Skylake-Server-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ss'/>
|
||||
<feature policy='require' name='vmx'/>
|
||||
<feature policy='require' name='hypervisor'/>
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
+ <feature policy='require' name='clflushopt'/>
|
||||
<feature policy='require' name='umip'/>
|
||||
<feature policy='require' name='pku'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
<feature policy='require' name='stibp'/>
|
||||
<feature policy='require' name='arch-capabilities'/>
|
||||
+ <feature policy='require' name='ssbd'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
- <feature policy='disable' name='avx512vnni'/>
|
||||
</cpu>
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
From a48703c3f77054ba1bdfa1adf3aa8277814874d1 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a48703c3f77054ba1bdfa1adf3aa8277814874d1@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 28 May 2020 09:50:05 +0200
|
||||
Subject: [PATCH] cpu_map: Distribute x86_Cooperlake.xml
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 1c425857fb9f652c7811f075f3d31ff561b95632)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1781878
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <98b6a65536435b8130694e50adc9f39ff3110d90.1590652079.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/Makefile.inc.am | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/cpu_map/Makefile.inc.am b/src/cpu_map/Makefile.inc.am
|
||||
index be64c9a0d4..b949cb0bea 100644
|
||||
--- a/src/cpu_map/Makefile.inc.am
|
||||
+++ b/src/cpu_map/Makefile.inc.am
|
||||
@@ -22,6 +22,7 @@ cpumap_DATA = \
|
||||
cpu_map/x86_Cascadelake-Server.xml \
|
||||
cpu_map/x86_Cascadelake-Server-noTSX.xml \
|
||||
cpu_map/x86_Conroe.xml \
|
||||
+ cpu_map/x86_Cooperlake.xml \
|
||||
cpu_map/x86_core2duo.xml \
|
||||
cpu_map/x86_coreduo.xml \
|
||||
cpu_map/x86_cpu64-rhel5.xml \
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,137 +0,0 @@
|
|||
From 2268a9862c16c87007bfbae117d345268f8420e4 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2268a9862c16c87007bfbae117d345268f8420e4@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:58 +0200
|
||||
Subject: [PATCH] cpu_map: Don't use new noTSX models for host-model CPUs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Host-model CPU definitions (and domain capabilities) will use the
|
||||
original CPU models (without noTSX in their name) and explicitly disable
|
||||
hle and rtm features. This way domains with host-model CPUs will be
|
||||
migratable even to older versions of libvirt which do not support the
|
||||
noTSX model variants.
|
||||
|
||||
The new models will be advertised in host capabilities and they may
|
||||
be used explicitly with custom CPUs.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
(cherry picked from commit 17cdefe5f197030c70a0d250f3c5387b41663516)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840008
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <d27a0adb8f142f053fbd830947f03bad04eff264.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 2 +-
|
||||
src/cpu_map/x86_Icelake-Client-noTSX.xml | 2 +-
|
||||
src/cpu_map/x86_Icelake-Server-noTSX.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml | 2 +-
|
||||
src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 2 +-
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml | 4 +++-
|
||||
tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml | 4 +++-
|
||||
7 files changed, 11 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
index 5adea664e9..459174a30d 100644
|
||||
--- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Cascadelake-Server-noTSX'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Client-noTSX.xml b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
index 540732af6f..65e648ae21 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Client-noTSX.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Client-noTSX'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='126'/> <!-- 0706e0 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
index 5a53da23c7..2fd6906406 100644
|
||||
--- a/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Icelake-Server-noTSX'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='134'/> <!-- 080660 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
index 0c2f1e6ac4..ffba34502a 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Client-noTSX-IBRS'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='94'/> <!-- 0506e0 -->
|
||||
<signature family='6' model='78'/> <!-- 0406e0 -->
|
||||
<!-- These are Kaby Lake and Coffee Lake successors to Skylake,
|
||||
diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
index 91a206f575..c2b7de40e8 100644
|
||||
--- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
<cpus>
|
||||
<model name='Skylake-Server-noTSX-IBRS'>
|
||||
- <decode host='on' guest='on'/>
|
||||
+ <decode host='on' guest='off'/>
|
||||
<signature family='6' model='85'/> <!-- 050654 -->
|
||||
<vendor name='Intel'/>
|
||||
<feature name='3dnowprefetch'/>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
index e03c4a06ba..92404e4d03 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
|
||||
+ <model fallback='forbid'>Skylake-Client-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ds'/>
|
||||
<feature policy='require' name='acpi'/>
|
||||
@@ -26,4 +26,6 @@
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='disable' name='hle'/>
|
||||
+ <feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
index 3d8e6775bf..645c0934c2 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
|
||||
@@ -1,5 +1,5 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
|
||||
+ <model fallback='forbid'>Skylake-Client-IBRS</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ss'/>
|
||||
<feature policy='require' name='vmx'/>
|
||||
@@ -14,4 +14,6 @@
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='pdpe1gb'/>
|
||||
<feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='disable' name='hle'/>
|
||||
+ <feature policy='disable' name='rtm'/>
|
||||
</cpu>
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,183 +0,0 @@
|
|||
From 51290a9442c1b9347c43b2fec34b7aa979d26c77 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <51290a9442c1b9347c43b2fec34b7aa979d26c77@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:34 +0200
|
||||
Subject: [PATCH] cpu_x86: Add support for stepping part of CPU signature
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
CPU models defined in the cpu_map can use signature/@stepping attribute
|
||||
to match a limited set of stepping numbers. The value is a bitmap for
|
||||
bits 0..15 each corresponding to a single stepping value. For example,
|
||||
stepping='4-6,9' will match 4, 5, 6, and 9. Omitting the attribute is
|
||||
equivalent to stepping='0-15'.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit c7a27949954d78dc95459758e329fb9c580361bb)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <20bd9df72a22a004bb665409ddba20ff89a5b66d.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 60 +++++++++++++++++++++++++++++++++++++++--------
|
||||
1 file changed, 50 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 45a073c1d0..0d81f3d2ae 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -125,6 +125,7 @@ typedef struct _virCPUx86Signature virCPUx86Signature;
|
||||
struct _virCPUx86Signature {
|
||||
unsigned int family;
|
||||
unsigned int model;
|
||||
+ virBitmapPtr stepping;
|
||||
};
|
||||
|
||||
typedef struct _virCPUx86Signatures virCPUx86Signatures;
|
||||
@@ -732,7 +733,17 @@ x86MakeSignature(unsigned int family,
|
||||
static uint32_t
|
||||
virCPUx86SignatureToCPUID(virCPUx86Signature *sig)
|
||||
{
|
||||
- return x86MakeSignature(sig->family, sig->model, 0);
|
||||
+ unsigned int stepping = 0;
|
||||
+
|
||||
+ if (sig->stepping) {
|
||||
+ ssize_t firstBit;
|
||||
+
|
||||
+ firstBit = virBitmapNextSetBit(sig->stepping, -1);
|
||||
+ if (firstBit >= 0)
|
||||
+ stepping = firstBit;
|
||||
+ }
|
||||
+
|
||||
+ return x86MakeSignature(sig->family, sig->model, stepping);
|
||||
}
|
||||
|
||||
|
||||
@@ -767,8 +778,8 @@ x86DataToSignatureFull(const virCPUx86Data *data,
|
||||
}
|
||||
|
||||
|
||||
-/* Mask out irrelevant bits (R and Step) from processor signature. */
|
||||
-#define SIGNATURE_MASK 0x0fff3ff0
|
||||
+/* Mask out reserved bits from processor signature. */
|
||||
+#define SIGNATURE_MASK 0x0fff3fff
|
||||
|
||||
static uint32_t
|
||||
x86DataToSignature(const virCPUx86Data *data)
|
||||
@@ -1134,9 +1145,14 @@ virCPUx86SignaturesNew(size_t count)
|
||||
static void
|
||||
virCPUx86SignaturesFree(virCPUx86SignaturesPtr sigs)
|
||||
{
|
||||
+ size_t i;
|
||||
+
|
||||
if (!sigs)
|
||||
return;
|
||||
|
||||
+ for (i = 0; i < sigs->count; i++)
|
||||
+ virBitmapFree(sigs->items[i].stepping);
|
||||
+
|
||||
g_free(sigs->items);
|
||||
g_free(sigs);
|
||||
}
|
||||
@@ -1153,8 +1169,12 @@ virCPUx86SignaturesCopy(virCPUx86SignaturesPtr src)
|
||||
|
||||
dst = virCPUx86SignaturesNew(src->count);
|
||||
|
||||
- for (i = 0; i < src->count; i++)
|
||||
- dst->items[i] = src->items[i];
|
||||
+ for (i = 0; i < src->count; i++) {
|
||||
+ dst->items[i].family = src->items[i].family;
|
||||
+ dst->items[i].model = src->items[i].model;
|
||||
+ if (src->items[i].stepping)
|
||||
+ dst->items[i].stepping = virBitmapNewCopy(src->items[i].stepping);
|
||||
+ }
|
||||
|
||||
return dst;
|
||||
}
|
||||
@@ -1176,7 +1196,9 @@ virCPUx86SignaturesMatch(virCPUx86SignaturesPtr sigs,
|
||||
|
||||
for (i = 0; i < sigs->count; i++) {
|
||||
if (sigs->items[i].family == family &&
|
||||
- sigs->items[i].model == model)
|
||||
+ sigs->items[i].model == model &&
|
||||
+ (!sigs->items[i].stepping ||
|
||||
+ virBitmapIsBitSet(sigs->items[i].stepping, stepping)))
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1194,9 +1216,15 @@ virCPUx86SignaturesFormat(virCPUx86SignaturesPtr sigs)
|
||||
return virBufferContentAndReset(&buf);
|
||||
|
||||
for (i = 0; i < sigs->count; i++) {
|
||||
- virBufferAsprintf(&buf, "(%u,%u,0), ",
|
||||
+ g_autofree char *stepping = NULL;
|
||||
+
|
||||
+ if (sigs->items[i].stepping)
|
||||
+ stepping = virBitmapFormat(sigs->items[i].stepping);
|
||||
+
|
||||
+ virBufferAsprintf(&buf, "(%u,%u,%s), ",
|
||||
sigs->items[i].family,
|
||||
- sigs->items[i].model);
|
||||
+ sigs->items[i].model,
|
||||
+ stepping ? stepping : "0-15");
|
||||
}
|
||||
|
||||
virBufferTrim(&buf, ", ", -1);
|
||||
@@ -1473,6 +1501,7 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
virCPUx86Signature *sig = &model->signatures->items[i];
|
||||
+ g_autofree char *stepping = NULL;
|
||||
int rc;
|
||||
|
||||
ctxt->node = nodes[i];
|
||||
@@ -1492,6 +1521,11 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
|
||||
model->name);
|
||||
return -1;
|
||||
}
|
||||
+
|
||||
+ stepping = virXPathString("string(@stepping)", ctxt);
|
||||
+ /* stepping corresponds to 4 bits in 32b signature, see above */
|
||||
+ if (stepping && virBitmapParse(stepping, &sig->stepping, 16) < 0)
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
ctxt->node = root;
|
||||
@@ -2090,6 +2124,9 @@ x86Decode(virCPUDefPtr cpu,
|
||||
virDomainCapsCPUModelPtr hvModel = NULL;
|
||||
g_autofree char *sigs = NULL;
|
||||
uint32_t signature;
|
||||
+ unsigned int sigFamily;
|
||||
+ unsigned int sigModel;
|
||||
+ unsigned int sigStepping;
|
||||
ssize_t i;
|
||||
int rc;
|
||||
|
||||
@@ -2103,6 +2140,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
|
||||
vendor = x86DataToVendor(&data, map);
|
||||
signature = x86DataToSignature(&data);
|
||||
+ virCPUx86SignatureFromCPUID(signature, &sigFamily, &sigModel, &sigStepping);
|
||||
|
||||
x86DataFilterTSX(&data, vendor, map);
|
||||
|
||||
@@ -2184,8 +2222,10 @@ x86Decode(virCPUDefPtr cpu,
|
||||
|
||||
sigs = virCPUx86SignaturesFormat(model->signatures);
|
||||
|
||||
- VIR_DEBUG("Using CPU model %s (signatures %s) for CPU with signature %06lx",
|
||||
- model->name, NULLSTR(sigs), (unsigned long)signature);
|
||||
+ VIR_DEBUG("Using CPU model %s with signatures [%s] for "
|
||||
+ "CPU with signature (%u,%u,%u)",
|
||||
+ model->name, NULLSTR(sigs),
|
||||
+ sigFamily, sigModel, sigStepping);
|
||||
|
||||
cpu->model = g_steal_pointer(&cpuModel->model);
|
||||
cpu->features = g_steal_pointer(&cpuModel->features);
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
From 99a298a4a0575bf0072f504c4b8e4551400c44c0 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <99a298a4a0575bf0072f504c4b8e4551400c44c0@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 Apr 2022 11:58:07 +0200
|
||||
Subject: [PATCH] cpu_x86: Consolidate signature match in x86DecodeUseCandidate
|
||||
|
||||
Checking the signature in two different places makes no sense since the
|
||||
code in between can only mark the candidate as the best option so far,
|
||||
which is what the second signature match does as well.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 35ce086667e68e8f546cf36473591dd7c19c72eb)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1851227
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 31 ++++++++++++++-----------------
|
||||
1 file changed, 14 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 5cb9caef8a..f007487824 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2020,15 +2020,22 @@ x86DecodeUseCandidate(virCPUx86Model *current,
|
||||
}
|
||||
|
||||
/* Ideally we want to select a model with family/model equal to
|
||||
- * family/model of the real CPU. Once we found such model, we only
|
||||
+ * family/model of the real CPU and once we found such model, we only
|
||||
* consider candidates with matching family/model.
|
||||
*/
|
||||
- if (signature &&
|
||||
- virCPUx86SignaturesMatch(current->signatures, signature) &&
|
||||
- !virCPUx86SignaturesMatch(candidate->signatures, signature)) {
|
||||
- VIR_DEBUG("%s differs in signature from matching %s",
|
||||
- cpuCandidate->model, cpuCurrent->model);
|
||||
- return 0;
|
||||
+ if (signature) {
|
||||
+ if (virCPUx86SignaturesMatch(current->signatures, signature) &&
|
||||
+ !virCPUx86SignaturesMatch(candidate->signatures, signature)) {
|
||||
+ VIR_DEBUG("%s differs in signature from matching %s",
|
||||
+ cpuCandidate->model, cpuCurrent->model);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (!virCPUx86SignaturesMatch(current->signatures, signature) &&
|
||||
+ virCPUx86SignaturesMatch(candidate->signatures, signature)) {
|
||||
+ VIR_DEBUG("%s provides matching signature", cpuCandidate->model);
|
||||
+ return 1;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (cpuCurrent->nfeatures > cpuCandidate->nfeatures) {
|
||||
@@ -2037,16 +2044,6 @@ x86DecodeUseCandidate(virCPUx86Model *current,
|
||||
return 1;
|
||||
}
|
||||
|
||||
- /* Prefer a candidate with matching signature even though it would
|
||||
- * result in longer list of features.
|
||||
- */
|
||||
- if (signature &&
|
||||
- virCPUx86SignaturesMatch(candidate->signatures, signature) &&
|
||||
- !virCPUx86SignaturesMatch(current->signatures, signature)) {
|
||||
- VIR_DEBUG("%s provides matching signature", cpuCandidate->model);
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
VIR_DEBUG("%s does not result in shorter feature list than %s",
|
||||
cpuCandidate->model, cpuCurrent->model);
|
||||
return 0;
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
From 8a18e258633c347eb421904c63c2265ed59d61b5 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <8a18e258633c347eb421904c63c2265ed59d61b5@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:33 +0200
|
||||
Subject: [PATCH] cpu_x86: Don't check return value of x86ModelCopy
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Thanks to glib allocation functions which abort on OOM the function
|
||||
cannot ever return NULL.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 70f3041d39802e53a19901bee040ff33850cd5e0)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <3db9e891cf44e608a45504b120a5c276ead3ea8d.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 14 ++++----------
|
||||
1 file changed, 4 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index b87e3753da..45a073c1d0 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1287,9 +1287,6 @@ x86ModelFromCPU(const virCPUDef *cpu,
|
||||
model = g_new0(virCPUx86Model, 1);
|
||||
}
|
||||
|
||||
- if (!model)
|
||||
- return NULL;
|
||||
-
|
||||
for (i = 0; i < cpu->nfeatures; i++) {
|
||||
virCPUx86FeaturePtr feature;
|
||||
virCPUFeaturePolicy fpol;
|
||||
@@ -1869,9 +1866,7 @@ x86Compute(virCPUDefPtr host,
|
||||
return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
- if (!(diff = x86ModelCopy(host_model)))
|
||||
- return VIR_CPU_COMPARE_ERROR;
|
||||
-
|
||||
+ diff = x86ModelCopy(host_model);
|
||||
x86DataSubtract(&diff->data, &cpu_optional->data);
|
||||
x86DataSubtract(&diff->data, &cpu_require->data);
|
||||
x86DataSubtract(&diff->data, &cpu_disable->data);
|
||||
@@ -1892,8 +1887,7 @@ x86Compute(virCPUDefPtr host,
|
||||
}
|
||||
|
||||
if (guest) {
|
||||
- if (!(guest_model = x86ModelCopy(host_model)))
|
||||
- return VIR_CPU_COMPARE_ERROR;
|
||||
+ guest_model = x86ModelCopy(host_model);
|
||||
|
||||
if (cpu->vendor && host_model->vendor &&
|
||||
virCPUx86DataAddItem(&guest_model->data,
|
||||
@@ -3131,8 +3125,8 @@ virCPUx86ExpandFeatures(virCPUDefPtr cpu)
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (!(model = x86ModelCopy(model)) ||
|
||||
- x86DataToCPUFeatures(expanded, host ? -1 : VIR_CPU_FEATURE_REQUIRE,
|
||||
+ model = x86ModelCopy(model);
|
||||
+ if (x86DataToCPUFeatures(expanded, host ? -1 : VIR_CPU_FEATURE_REQUIRE,
|
||||
&model->data, map) < 0)
|
||||
return -1;
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
From 882e0241f82b5bcbe239cf00134950e141de642a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <882e0241f82b5bcbe239cf00134950e141de642a@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:59 +0200
|
||||
Subject: [PATCH] cpu_x86: Drop noTSX hint for incompatible CPUs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The hint was introduced a long time ago when broken TSX implementation
|
||||
was found in Haswell and Broadwell CPUs. Since then many more CPUs with
|
||||
TSX were introduced and and disabled due to TAA vulnerability.
|
||||
|
||||
Thus the hint is not very useful and I think removing it is a better
|
||||
choice then updating it to cover all current noTSX models.
|
||||
|
||||
This partially reverts:
|
||||
commit 7f127ded657b24e0e55cd5f3539ef5b2dc935908
|
||||
cpu: Rework cpuCompare* APIs
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 8452779049ef785b1d2e373b4d42633d4a929a60)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <1126fcc8a0e18f0eed38c182013429fd7266c274.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 44 ++++++--------------------------------------
|
||||
1 file changed, 6 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index b4d5c795f7..1b388ec1b2 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1937,8 +1937,6 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
bool failIncompatible)
|
||||
{
|
||||
virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR;
|
||||
- virCPUx86MapPtr map;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
char *message = NULL;
|
||||
|
||||
if (!host || !host->model) {
|
||||
@@ -1954,46 +1952,16 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
|
||||
ret = x86Compute(host, cpu, NULL, &message);
|
||||
|
||||
- if (ret == VIR_CPU_COMPARE_INCOMPATIBLE) {
|
||||
- bool noTSX = false;
|
||||
-
|
||||
- if (STREQ_NULLABLE(cpu->model, "Haswell") ||
|
||||
- STREQ_NULLABLE(cpu->model, "Broadwell")) {
|
||||
- if (!(map = virCPUx86GetMap()))
|
||||
- goto cleanup;
|
||||
-
|
||||
- if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- noTSX = !x86FeatureInData("hle", &model->data, map) ||
|
||||
- !x86FeatureInData("rtm", &model->data, map);
|
||||
- }
|
||||
-
|
||||
- if (failIncompatible) {
|
||||
- ret = VIR_CPU_COMPARE_ERROR;
|
||||
- if (message) {
|
||||
- if (noTSX) {
|
||||
- virReportError(VIR_ERR_CPU_INCOMPATIBLE,
|
||||
- _("%s; try using '%s-noTSX' CPU model"),
|
||||
- message, cpu->model);
|
||||
- } else {
|
||||
- virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message);
|
||||
- }
|
||||
- } else {
|
||||
- if (noTSX) {
|
||||
- virReportError(VIR_ERR_CPU_INCOMPATIBLE,
|
||||
- _("try using '%s-noTSX' CPU model"),
|
||||
- cpu->model);
|
||||
- } else {
|
||||
- virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL);
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
+ if (ret == VIR_CPU_COMPARE_INCOMPATIBLE && failIncompatible) {
|
||||
+ ret = VIR_CPU_COMPARE_ERROR;
|
||||
+ if (message)
|
||||
+ virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message);
|
||||
+ else
|
||||
+ virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(message);
|
||||
- x86ModelFree(model);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
From ba2f2a8c39f2e7fe5684d9b84a0a832be482a3ab Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ba2f2a8c39f2e7fe5684d9b84a0a832be482a3ab@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:57 +0200
|
||||
Subject: [PATCH] cpu_x86: Honor CPU models' <decode> element
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
(cherry picked from commit 7cd896ef31d33f78d40df918a33fe3867e251509)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840008
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <15f1eedf2c0df29a3942b4b28bc4575fa51ca19a.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 22 +++++++++++++++++-----
|
||||
1 file changed, 17 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 7fbb4c9a6c..b4d5c795f7 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2044,10 +2044,23 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
virCPUx86ModelPtr candidate,
|
||||
virCPUDefPtr cpuCandidate,
|
||||
uint32_t signature,
|
||||
- const char *preferred,
|
||||
- bool checkPolicy)
|
||||
+ const char *preferred)
|
||||
{
|
||||
- if (checkPolicy) {
|
||||
+ if (cpuCandidate->type == VIR_CPU_TYPE_HOST &&
|
||||
+ !candidate->decodeHost) {
|
||||
+ VIR_DEBUG("%s is not supposed to be used for host CPU definition",
|
||||
+ cpuCandidate->model);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (cpuCandidate->type == VIR_CPU_TYPE_GUEST &&
|
||||
+ !candidate->decodeGuest) {
|
||||
+ VIR_DEBUG("%s is not supposed to be used for guest CPU definition",
|
||||
+ cpuCandidate->model);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (cpuCandidate->type == VIR_CPU_TYPE_HOST) {
|
||||
size_t i;
|
||||
for (i = 0; i < cpuCandidate->nfeatures; i++) {
|
||||
if (cpuCandidate->features[i].policy == VIR_CPU_FEATURE_DISABLE)
|
||||
@@ -2209,8 +2222,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
|
||||
if ((rc = x86DecodeUseCandidate(model, cpuModel,
|
||||
candidate, cpuCandidate,
|
||||
- signature, preferred,
|
||||
- cpu->type == VIR_CPU_TYPE_HOST))) {
|
||||
+ signature, preferred))) {
|
||||
virCPUDefFree(cpuModel);
|
||||
cpuModel = cpuCandidate;
|
||||
model = candidate;
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,272 @@
|
|||
From 752c74eeae67d41e7550991cb3bbe289984ec9d3 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <752c74eeae67d41e7550991cb3bbe289984ec9d3@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Fri, 29 Apr 2022 10:35:02 +0200
|
||||
Subject: [PATCH] cpu_x86: Ignore enabled features for input models in
|
||||
x86DecodeUseCandidate
|
||||
|
||||
While we don't want to aim for the shortest list of disabled features in
|
||||
the baseline result (it would select a very old model), we want to do so
|
||||
while looking at any of the input models for which we're trying to
|
||||
compute a baseline CPU model. Given a set of input models, we always
|
||||
want to take the least capable one of them (i.e., the one with shortest
|
||||
list of disabled features) or a better model which is not one of the
|
||||
input models.
|
||||
|
||||
So when considering an input model, we just check whether its list of
|
||||
disabled features is shorter than the currently best one. When looking
|
||||
at other models we check both enabled and disabled features while
|
||||
penalizing disabled features as implemented by the previous patch.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit bb6cedd2082599323257ee0df18c93a6e0551b0b)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1851227
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 66 ++++++++++++-------
|
||||
...4-baseline-Westmere+Nehalem-migratable.xml | 8 ++-
|
||||
...86_64-baseline-Westmere+Nehalem-result.xml | 8 ++-
|
||||
...-cpuid-baseline-Cooperlake+Cascadelake.xml | 13 ++--
|
||||
4 files changed, 64 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index ebcd96edb1..7b59dad8bf 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1975,7 +1975,8 @@ virCPUx86Compare(virCPUDef *host,
|
||||
|
||||
static int
|
||||
virCPUx86CompareCandidateFeatureList(virCPUDef *cpuCurrent,
|
||||
- virCPUDef *cpuCandidate)
|
||||
+ virCPUDef *cpuCandidate,
|
||||
+ bool isPreferred)
|
||||
{
|
||||
size_t current = cpuCurrent->nfeatures;
|
||||
size_t enabledCurrent = current;
|
||||
@@ -2017,6 +2018,14 @@ virCPUx86CompareCandidateFeatureList(virCPUDef *cpuCurrent,
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ if (isPreferred && disabled < disabledCurrent) {
|
||||
+ VIR_DEBUG("%s is in the list of preferred models and provides fewer "
|
||||
+ "disabled features than %s: %zu < %zu",
|
||||
+ cpuCandidate->model, cpuCurrent->model,
|
||||
+ disabled, disabledCurrent);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
VIR_DEBUG("%s is not better than %s: %zu (%zu, %zu) >= %zu (%zu, %zu)",
|
||||
cpuCandidate->model, cpuCurrent->model,
|
||||
candidate, enabled, disabled,
|
||||
@@ -2039,8 +2048,10 @@ x86DecodeUseCandidate(virCPUx86Model *current,
|
||||
virCPUx86Model *candidate,
|
||||
virCPUDef *cpuCandidate,
|
||||
uint32_t signature,
|
||||
- const char *preferred)
|
||||
+ const char **preferred)
|
||||
{
|
||||
+ bool isPreferred = false;
|
||||
+
|
||||
if (cpuCandidate->type == VIR_CPU_TYPE_HOST &&
|
||||
!candidate->decodeHost) {
|
||||
VIR_DEBUG("%s is not supposed to be used for host CPU definition",
|
||||
@@ -2064,9 +2075,13 @@ x86DecodeUseCandidate(virCPUx86Model *current,
|
||||
}
|
||||
}
|
||||
|
||||
- if (preferred && STREQ(cpuCandidate->model, preferred)) {
|
||||
- VIR_DEBUG("%s is the preferred model", cpuCandidate->model);
|
||||
- return 2;
|
||||
+ if (preferred) {
|
||||
+ isPreferred = g_strv_contains(preferred, cpuCandidate->model);
|
||||
+
|
||||
+ if (isPreferred && !preferred[1]) {
|
||||
+ VIR_DEBUG("%s is the preferred model", cpuCandidate->model);
|
||||
+ return 2;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (!cpuCurrent) {
|
||||
@@ -2093,7 +2108,8 @@ x86DecodeUseCandidate(virCPUx86Model *current,
|
||||
}
|
||||
}
|
||||
|
||||
- return virCPUx86CompareCandidateFeatureList(cpuCurrent, cpuCandidate);
|
||||
+ return virCPUx86CompareCandidateFeatureList(cpuCurrent, cpuCandidate,
|
||||
+ isPreferred);
|
||||
}
|
||||
|
||||
|
||||
@@ -2136,7 +2152,7 @@ static int
|
||||
x86Decode(virCPUDef *cpu,
|
||||
const virCPUx86Data *cpuData,
|
||||
virDomainCapsCPUModels *models,
|
||||
- const char *preferred,
|
||||
+ const char **preferred,
|
||||
bool migratable)
|
||||
{
|
||||
virCPUx86Map *map;
|
||||
@@ -2169,6 +2185,9 @@ x86Decode(virCPUDef *cpu,
|
||||
|
||||
x86DataFilterTSX(&data, vendor, map);
|
||||
|
||||
+ if (preferred && !preferred[0])
|
||||
+ preferred = NULL;
|
||||
+
|
||||
/* Walk through the CPU models in reverse order to check newest
|
||||
* models first.
|
||||
*/
|
||||
@@ -2176,16 +2195,18 @@ x86Decode(virCPUDef *cpu,
|
||||
candidate = map->models[i];
|
||||
if (models &&
|
||||
!(hvModel = virDomainCapsCPUModelsGet(models, candidate->name))) {
|
||||
- if (preferred && STREQ(candidate->name, preferred)) {
|
||||
+ if (preferred &&
|
||||
+ !preferred[1] &&
|
||||
+ STREQ(candidate->name, preferred[0])) {
|
||||
if (cpu->fallback != VIR_CPU_FALLBACK_ALLOW) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("CPU model %s is not supported by hypervisor"),
|
||||
- preferred);
|
||||
+ preferred[0]);
|
||||
return -1;
|
||||
} else {
|
||||
VIR_WARN("Preferred CPU model %s not allowed by"
|
||||
" hypervisor; closest supported model will be"
|
||||
- " used", preferred);
|
||||
+ " used", preferred[0]);
|
||||
}
|
||||
} else {
|
||||
VIR_DEBUG("CPU model %s not allowed by hypervisor; ignoring",
|
||||
@@ -2793,8 +2814,8 @@ virCPUx86Baseline(virCPUDef **cpus,
|
||||
size_t i;
|
||||
virCPUx86Vendor *vendor = NULL;
|
||||
bool outputVendor = true;
|
||||
- const char *modelName;
|
||||
- bool matchingNames = true;
|
||||
+ g_autofree char **modelNames = NULL;
|
||||
+ size_t namesLen = 0;
|
||||
g_autoptr(virCPUData) featData = NULL;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
@@ -2816,19 +2837,17 @@ virCPUx86Baseline(virCPUDef **cpus,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- modelName = cpus[0]->model;
|
||||
+ modelNames = g_new0(char *, ncpus + 1);
|
||||
+ if (cpus[0]->model)
|
||||
+ modelNames[namesLen++] = cpus[0]->model;
|
||||
+
|
||||
for (i = 1; i < ncpus; i++) {
|
||||
g_autoptr(virCPUx86Model) model = NULL;
|
||||
const char *vn = NULL;
|
||||
|
||||
- if (matchingNames && cpus[i]->model) {
|
||||
- if (!modelName) {
|
||||
- modelName = cpus[i]->model;
|
||||
- } else if (STRNEQ(modelName, cpus[i]->model)) {
|
||||
- modelName = NULL;
|
||||
- matchingNames = false;
|
||||
- }
|
||||
- }
|
||||
+ if (cpus[i]->model &&
|
||||
+ !g_strv_contains((const char **) modelNames, cpus[i]->model))
|
||||
+ modelNames[namesLen++] = cpus[i]->model;
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpus[i], map, -1)))
|
||||
return NULL;
|
||||
@@ -2891,10 +2910,11 @@ virCPUx86Baseline(virCPUDef **cpus,
|
||||
virCPUx86DataAddItem(&base_model->data, &vendor->data) < 0)
|
||||
return NULL;
|
||||
|
||||
- if (x86Decode(cpu, &base_model->data, models, modelName, migratable) < 0)
|
||||
+ if (x86Decode(cpu, &base_model->data, models,
|
||||
+ (const char **) modelNames, migratable) < 0)
|
||||
return NULL;
|
||||
|
||||
- if (STREQ_NULLABLE(cpu->model, modelName))
|
||||
+ if (namesLen == 1 && STREQ(cpu->model, modelNames[0]))
|
||||
cpu->fallback = VIR_CPU_FALLBACK_FORBID;
|
||||
|
||||
if (!outputVendor)
|
||||
diff --git a/tests/cputestdata/x86_64-baseline-Westmere+Nehalem-migratable.xml b/tests/cputestdata/x86_64-baseline-Westmere+Nehalem-migratable.xml
|
||||
index 775a27de2e..f5846b1619 100644
|
||||
--- a/tests/cputestdata/x86_64-baseline-Westmere+Nehalem-migratable.xml
|
||||
+++ b/tests/cputestdata/x86_64-baseline-Westmere+Nehalem-migratable.xml
|
||||
@@ -1,10 +1,14 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='allow'>SandyBridge</model>
|
||||
+ <model fallback='allow'>Westmere</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='vme'/>
|
||||
<feature policy='require' name='ss'/>
|
||||
+ <feature policy='require' name='pclmuldq'/>
|
||||
<feature policy='require' name='pcid'/>
|
||||
+ <feature policy='require' name='x2apic'/>
|
||||
+ <feature policy='require' name='tsc-deadline'/>
|
||||
+ <feature policy='require' name='xsave'/>
|
||||
<feature policy='require' name='osxsave'/>
|
||||
+ <feature policy='require' name='avx'/>
|
||||
<feature policy='require' name='hypervisor'/>
|
||||
- <feature policy='disable' name='rdtscp'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-baseline-Westmere+Nehalem-result.xml b/tests/cputestdata/x86_64-baseline-Westmere+Nehalem-result.xml
|
||||
index cafca97d62..166833276c 100644
|
||||
--- a/tests/cputestdata/x86_64-baseline-Westmere+Nehalem-result.xml
|
||||
+++ b/tests/cputestdata/x86_64-baseline-Westmere+Nehalem-result.xml
|
||||
@@ -1,11 +1,15 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='allow'>SandyBridge</model>
|
||||
+ <model fallback='allow'>Westmere</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='vme'/>
|
||||
<feature policy='require' name='ss'/>
|
||||
+ <feature policy='require' name='pclmuldq'/>
|
||||
<feature policy='require' name='pcid'/>
|
||||
+ <feature policy='require' name='x2apic'/>
|
||||
+ <feature policy='require' name='tsc-deadline'/>
|
||||
+ <feature policy='require' name='xsave'/>
|
||||
<feature policy='require' name='osxsave'/>
|
||||
+ <feature policy='require' name='avx'/>
|
||||
<feature policy='require' name='hypervisor'/>
|
||||
<feature policy='require' name='invtsc'/>
|
||||
- <feature policy='disable' name='rdtscp'/>
|
||||
</cpu>
|
||||
diff --git a/tests/cputestdata/x86_64-cpuid-baseline-Cooperlake+Cascadelake.xml b/tests/cputestdata/x86_64-cpuid-baseline-Cooperlake+Cascadelake.xml
|
||||
index 46c32c996f..ecac749b97 100644
|
||||
--- a/tests/cputestdata/x86_64-cpuid-baseline-Cooperlake+Cascadelake.xml
|
||||
+++ b/tests/cputestdata/x86_64-cpuid-baseline-Cooperlake+Cascadelake.xml
|
||||
@@ -1,17 +1,22 @@
|
||||
<cpu mode='custom' match='exact'>
|
||||
- <model fallback='allow'>Cooperlake</model>
|
||||
+ <model fallback='allow'>Cascadelake-Server</model>
|
||||
<vendor>Intel</vendor>
|
||||
<feature policy='require' name='ss'/>
|
||||
<feature policy='require' name='vmx'/>
|
||||
<feature policy='require' name='hypervisor'/>
|
||||
<feature policy='require' name='tsc_adjust'/>
|
||||
- <feature policy='require' name='mpx'/>
|
||||
<feature policy='require' name='umip'/>
|
||||
+ <feature policy='require' name='pku'/>
|
||||
<feature policy='require' name='md-clear'/>
|
||||
+ <feature policy='require' name='stibp'/>
|
||||
+ <feature policy='require' name='arch-capabilities'/>
|
||||
<feature policy='require' name='xsaves'/>
|
||||
<feature policy='require' name='ibpb'/>
|
||||
<feature policy='require' name='amd-ssbd'/>
|
||||
+ <feature policy='require' name='rdctl-no'/>
|
||||
+ <feature policy='require' name='ibrs-all'/>
|
||||
+ <feature policy='require' name='skip-l1dfl-vmentry'/>
|
||||
+ <feature policy='require' name='mds-no'/>
|
||||
+ <feature policy='require' name='pschange-mc-no'/>
|
||||
<feature policy='require' name='tsx-ctrl'/>
|
||||
- <feature policy='disable' name='avx512-bf16'/>
|
||||
- <feature policy='disable' name='taa-no'/>
|
||||
</cpu>
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
From 48e546c1097a61c806412efe53e216fbc8beafca Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <48e546c1097a61c806412efe53e216fbc8beafca@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:31 +0200
|
||||
Subject: [PATCH] cpu_x86: Introduce virCPUx86SignatureFromCPUID
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It can be used for separating family, model, and stepping numbers from a
|
||||
single 32b integer as reported by CPUID.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3b474c1f8f3c1f124fab303625733ea79047660c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <1fe352bfb7cf40b5b8e24eea3bf4e476269adb92.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 19 ++++++++++++++-----
|
||||
1 file changed, 14 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index ed2090b0c6..dad3bceff0 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -717,6 +717,18 @@ x86MakeSignature(unsigned int family,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+virCPUx86SignatureFromCPUID(uint32_t sig,
|
||||
+ unsigned int *family,
|
||||
+ unsigned int *model,
|
||||
+ unsigned int *stepping)
|
||||
+{
|
||||
+ *family = ((sig >> 20) & 0xff) + ((sig >> 8) & 0xf);
|
||||
+ *model = ((sig >> 12) & 0xf0) + ((sig >> 4) & 0xf);
|
||||
+ *stepping = sig & 0xf;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
x86DataToSignatureFull(const virCPUx86Data *data,
|
||||
unsigned int *family,
|
||||
@@ -725,17 +737,14 @@ x86DataToSignatureFull(const virCPUx86Data *data,
|
||||
{
|
||||
virCPUx86DataItem leaf1 = CPUID(.eax_in = 0x1);
|
||||
virCPUx86DataItemPtr item;
|
||||
- virCPUx86CPUIDPtr cpuid;
|
||||
|
||||
*family = *model = *stepping = 0;
|
||||
|
||||
if (!(item = virCPUx86DataGet(data, &leaf1)))
|
||||
return;
|
||||
|
||||
- cpuid = &item->data.cpuid;
|
||||
- *family = ((cpuid->eax >> 20) & 0xff) + ((cpuid->eax >> 8) & 0xf);
|
||||
- *model = ((cpuid->eax >> 12) & 0xf0) + ((cpuid->eax >> 4) & 0xf);
|
||||
- *stepping = cpuid->eax & 0xf;
|
||||
+ virCPUx86SignatureFromCPUID(item->data.cpuid.eax,
|
||||
+ family, model, stepping);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
From 75afc6d9dc443666e1207ef6f1c968abdfec712a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <75afc6d9dc443666e1207ef6f1c968abdfec712a@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:30 +0200
|
||||
Subject: [PATCH] cpu_x86: Introduce virCPUx86SignaturesFree
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The function will be used for freeing virCPUx86Signatures structure
|
||||
introduced later in this series.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 372b2cf1ca3f4361546732a3f5f9c0c0be2591e9)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <163ef39d14ce5457272e7508172f64d58d22a56b.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 9248403eff..ed2090b0c6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1090,6 +1090,13 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+virCPUx86SignaturesFree(uint32_t *signatures)
|
||||
+{
|
||||
+ g_free(signatures);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int
|
||||
virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
|
||||
virCPUx86ModelPtr src)
|
||||
@@ -1149,7 +1156,7 @@ x86ModelFree(virCPUx86ModelPtr model)
|
||||
return;
|
||||
|
||||
g_free(model->name);
|
||||
- g_free(model->signatures);
|
||||
+ virCPUx86SignaturesFree(model->signatures);
|
||||
virCPUx86DataClear(&model->data);
|
||||
g_free(model);
|
||||
}
|
||||
@@ -1414,7 +1421,7 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
|
||||
return n;
|
||||
|
||||
/* Remove inherited signatures. */
|
||||
- VIR_FREE(model->signatures);
|
||||
+ virCPUx86SignaturesFree(model->signatures);
|
||||
|
||||
model->nsignatures = n;
|
||||
if (VIR_ALLOC_N(model->signatures, n) < 0)
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
From 2b76e3009c224c0d03a4d951e0686aad6f6dc577 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2b76e3009c224c0d03a4d951e0686aad6f6dc577@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:29 +0200
|
||||
Subject: [PATCH] cpu_x86: Move and rename x86FormatSignatures
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Later in this series the function will work on a newly introduced
|
||||
virCPUx86Signatures structure. Let's move it to the place where all
|
||||
related functions will be added and rename the function as
|
||||
virCPUx86SignaturesFormat for easier review of the virCPUx86Signatures
|
||||
patch.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 7e0d351fa69c468906533b2ac9b24212df13a370)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Conflicts:
|
||||
src/cpu/cpu_x86.c
|
||||
- v6.0.0-264-g0a125c7144 which removes the third argument
|
||||
from virBufferTrim was not backported
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <fd16284339dd71e9f99b57bb7682014065e5d0ec.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 36 ++++++++++++++++++------------------
|
||||
1 file changed, 18 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 65a99876a9..9248403eff 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1125,6 +1125,23 @@ virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
|
||||
}
|
||||
|
||||
|
||||
+static char *
|
||||
+virCPUx86SignaturesFormat(virCPUx86ModelPtr model)
|
||||
+{
|
||||
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
+ size_t i;
|
||||
+
|
||||
+ for (i = 0; i < model->nsignatures; i++) {
|
||||
+ virBufferAsprintf(&buf, "%06lx,",
|
||||
+ (unsigned long)model->signatures[i]);
|
||||
+ }
|
||||
+
|
||||
+ virBufferTrim(&buf, ",", -1);
|
||||
+
|
||||
+ return virBufferContentAndReset(&buf);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
x86ModelFree(virCPUx86ModelPtr model)
|
||||
{
|
||||
@@ -1890,23 +1907,6 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
}
|
||||
|
||||
|
||||
-static char *
|
||||
-x86FormatSignatures(virCPUx86ModelPtr model)
|
||||
-{
|
||||
- virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
- size_t i;
|
||||
-
|
||||
- for (i = 0; i < model->nsignatures; i++) {
|
||||
- virBufferAsprintf(&buf, "%06lx,",
|
||||
- (unsigned long)model->signatures[i]);
|
||||
- }
|
||||
-
|
||||
- virBufferTrim(&buf, ",", -1);
|
||||
-
|
||||
- return virBufferContentAndReset(&buf);
|
||||
-}
|
||||
-
|
||||
-
|
||||
/*
|
||||
* Checks whether a candidate model is a better fit for the CPU data than the
|
||||
* current model.
|
||||
@@ -2134,7 +2134,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
if (vendor)
|
||||
cpu->vendor = g_strdup(vendor->name);
|
||||
|
||||
- sigs = x86FormatSignatures(model);
|
||||
+ sigs = virCPUx86SignaturesFormat(model);
|
||||
|
||||
VIR_DEBUG("Using CPU model %s (signatures %s) for CPU with signature %06lx",
|
||||
model->name, NULLSTR(sigs), (unsigned long)signature);
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
From 33cac9bcf27a885febf12e094cb2579f16a421b6 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <33cac9bcf27a885febf12e094cb2579f16a421b6@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:27 +0200
|
||||
Subject: [PATCH] cpu_x86: Move and rename x86ModelCopySignatures
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Later in this series the function will work on a newly introduced
|
||||
virCPUx86Signatures structure. Let's move it to the place were all
|
||||
related functions will be added and rename the function as
|
||||
virCPUx86SignaturesCopy for easier review of the virCPUx86Signatures
|
||||
patch.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit a8ec1d746ed41ac76df2e28cbc5683b3e37b9a60)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <0d4f902805cd5534eadedd2ec61385e9798c8b40.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 36 ++++++++++++++++++------------------
|
||||
1 file changed, 18 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index b4b1b475d6..16e6aa73d2 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1090,23 +1090,9 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
|
||||
-static void
|
||||
-x86ModelFree(virCPUx86ModelPtr model)
|
||||
-{
|
||||
- if (!model)
|
||||
- return;
|
||||
-
|
||||
- g_free(model->name);
|
||||
- g_free(model->signatures);
|
||||
- virCPUx86DataClear(&model->data);
|
||||
- g_free(model);
|
||||
-}
|
||||
-G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree);
|
||||
-
|
||||
-
|
||||
static int
|
||||
-x86ModelCopySignatures(virCPUx86ModelPtr dst,
|
||||
- virCPUx86ModelPtr src)
|
||||
+virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
|
||||
+ virCPUx86ModelPtr src)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
@@ -1124,6 +1110,20 @@ x86ModelCopySignatures(virCPUx86ModelPtr dst,
|
||||
}
|
||||
|
||||
|
||||
+static void
|
||||
+x86ModelFree(virCPUx86ModelPtr model)
|
||||
+{
|
||||
+ if (!model)
|
||||
+ return;
|
||||
+
|
||||
+ g_free(model->name);
|
||||
+ g_free(model->signatures);
|
||||
+ virCPUx86DataClear(&model->data);
|
||||
+ g_free(model);
|
||||
+}
|
||||
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree);
|
||||
+
|
||||
+
|
||||
static virCPUx86ModelPtr
|
||||
x86ModelCopy(virCPUx86ModelPtr model)
|
||||
{
|
||||
@@ -1132,7 +1132,7 @@ x86ModelCopy(virCPUx86ModelPtr model)
|
||||
copy = g_new0(virCPUx86Model, 1);
|
||||
copy->name = g_strdup(model->name);
|
||||
|
||||
- if (x86ModelCopySignatures(copy, model) < 0) {
|
||||
+ if (virCPUx86SignaturesCopy(copy, model) < 0) {
|
||||
x86ModelFree(copy);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1360,7 +1360,7 @@ x86ModelParseAncestor(virCPUx86ModelPtr model,
|
||||
}
|
||||
|
||||
model->vendor = ancestor->vendor;
|
||||
- if (x86ModelCopySignatures(model, ancestor) < 0)
|
||||
+ if (virCPUx86SignaturesCopy(model, ancestor) < 0)
|
||||
return -1;
|
||||
|
||||
x86DataCopy(&model->data, &ancestor->data);
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,101 +0,0 @@
|
|||
From 693d01f00b9608a4f4cac3b91e38b5537eff754f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <693d01f00b9608a4f4cac3b91e38b5537eff754f@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:28 +0200
|
||||
Subject: [PATCH] cpu_x86: Move and rename x86ModelHasSignature
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Later in this series the function will work on a newly introduced
|
||||
virCPUx86Signatures structure. Let's move it to the place were all
|
||||
related functions will be added and rename the function as
|
||||
virCPUx86SignaturesMatch for easier review of the virCPUx86Signatures
|
||||
patch.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 782be9f0af2e02e725fca45b7674e8b2f008dc6c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <7662ee03449ae588a5381c546eb7e8a3b64cadb3.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 38 +++++++++++++++++++-------------------
|
||||
1 file changed, 19 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 16e6aa73d2..65a99876a9 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1110,6 +1110,21 @@ virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
|
||||
}
|
||||
|
||||
|
||||
+static bool
|
||||
+virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
|
||||
+ uint32_t signature)
|
||||
+{
|
||||
+ size_t i;
|
||||
+
|
||||
+ for (i = 0; i < model->nsignatures; i++) {
|
||||
+ if (model->signatures[i] == signature)
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
x86ModelFree(virCPUx86ModelPtr model)
|
||||
{
|
||||
@@ -1875,21 +1890,6 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
}
|
||||
|
||||
|
||||
-static bool
|
||||
-x86ModelHasSignature(virCPUx86ModelPtr model,
|
||||
- uint32_t signature)
|
||||
-{
|
||||
- size_t i;
|
||||
-
|
||||
- for (i = 0; i < model->nsignatures; i++) {
|
||||
- if (model->signatures[i] == signature)
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- return false;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static char *
|
||||
x86FormatSignatures(virCPUx86ModelPtr model)
|
||||
{
|
||||
@@ -1961,8 +1961,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
* consider candidates with matching family/model.
|
||||
*/
|
||||
if (signature &&
|
||||
- x86ModelHasSignature(current, signature) &&
|
||||
- !x86ModelHasSignature(candidate, signature)) {
|
||||
+ virCPUx86SignaturesMatch(current, signature) &&
|
||||
+ !virCPUx86SignaturesMatch(candidate, signature)) {
|
||||
VIR_DEBUG("%s differs in signature from matching %s",
|
||||
cpuCandidate->model, cpuCurrent->model);
|
||||
return 0;
|
||||
@@ -1978,8 +1978,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
* result in longer list of features.
|
||||
*/
|
||||
if (signature &&
|
||||
- x86ModelHasSignature(candidate, signature) &&
|
||||
- !x86ModelHasSignature(current, signature)) {
|
||||
+ virCPUx86SignaturesMatch(candidate, signature) &&
|
||||
+ !virCPUx86SignaturesMatch(current, signature)) {
|
||||
VIR_DEBUG("%s provides matching signature", cpuCandidate->model);
|
||||
return 1;
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,59 +0,0 @@
|
|||
From 760e248164be819bebc03893ace58e0ddae7e440 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <760e248164be819bebc03893ace58e0ddae7e440@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:58:52 +0200
|
||||
Subject: [PATCH] cpu_x86: Prepare virCPUx86UpdateLive for easier extension
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Adding more checks into the existing if statements would turn them into
|
||||
an unreadable mess.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 8dc791b5d3b20552cc0b8d6c04e34dd0f3ebe2ff)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1839999
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <169ed0334144715b52575ca3f7e67ce3170ba91a.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 12 +++++++++---
|
||||
1 file changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 9b7981d574..9e686a86d2 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3036,9 +3036,15 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
|
||||
for (i = 0; i < map->nfeatures; i++) {
|
||||
virCPUx86FeaturePtr feature = map->features[i];
|
||||
+ virCPUFeaturePolicy expected = VIR_CPU_FEATURE_LAST;
|
||||
|
||||
- if (x86DataIsSubset(&enabled, &feature->data) &&
|
||||
- !x86DataIsSubset(&model->data, &feature->data)) {
|
||||
+ if (x86DataIsSubset(&model->data, &feature->data))
|
||||
+ expected = VIR_CPU_FEATURE_REQUIRE;
|
||||
+ else
|
||||
+ expected = VIR_CPU_FEATURE_DISABLE;
|
||||
+
|
||||
+ 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)
|
||||
virBufferAsprintf(&bufAdded, "%s,", feature->name);
|
||||
@@ -3048,7 +3054,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
}
|
||||
|
||||
if (x86DataIsSubset(&disabled, &feature->data) ||
|
||||
- (x86DataIsSubset(&model->data, &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)
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
From 3d7a4041d31e403dc9e762b34f7faf36f7f20a28 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3d7a4041d31e403dc9e762b34f7faf36f7f20a28@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 Apr 2022 15:02:51 +0200
|
||||
Subject: [PATCH] cpu_x86: Refactor feature list comparison in
|
||||
x86DecodeUseCandidate
|
||||
|
||||
It will become more complicated and so it deserves to be separated into
|
||||
a new function.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 1d6ca40ac23c039abc4392b668f256d0eda33280)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1851227
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 31 ++++++++++++++++++++++---------
|
||||
1 file changed, 22 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index f007487824..81c2441b8b 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1970,6 +1970,27 @@ virCPUx86Compare(virCPUDef *host,
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+virCPUx86CompareCandidateFeatureList(virCPUDef *cpuCurrent,
|
||||
+ virCPUDef *cpuCandidate)
|
||||
+{
|
||||
+ size_t current = cpuCurrent->nfeatures;
|
||||
+ size_t candidate = cpuCandidate->nfeatures;
|
||||
+
|
||||
+ if (candidate < current) {
|
||||
+ VIR_DEBUG("%s is better than %s: %zu < %zu",
|
||||
+ cpuCandidate->model, cpuCurrent->model,
|
||||
+ candidate, current);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ VIR_DEBUG("%s is not better than %s: %zu >= %zu",
|
||||
+ cpuCandidate->model, cpuCurrent->model,
|
||||
+ candidate, current);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/*
|
||||
* Checks whether a candidate model is a better fit for the CPU data than the
|
||||
* current model.
|
||||
@@ -2038,15 +2059,7 @@ x86DecodeUseCandidate(virCPUx86Model *current,
|
||||
}
|
||||
}
|
||||
|
||||
- if (cpuCurrent->nfeatures > cpuCandidate->nfeatures) {
|
||||
- VIR_DEBUG("%s results in shorter feature list than %s",
|
||||
- cpuCandidate->model, cpuCurrent->model);
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
- VIR_DEBUG("%s does not result in shorter feature list than %s",
|
||||
- cpuCandidate->model, cpuCurrent->model);
|
||||
- return 0;
|
||||
+ return virCPUx86CompareCandidateFeatureList(cpuCurrent, cpuCandidate);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -1,325 +0,0 @@
|
|||
From 22fecd96659495908f37e1c33c1ed52be5fb2d44 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <22fecd96659495908f37e1c33c1ed52be5fb2d44@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:32 +0200
|
||||
Subject: [PATCH] cpu_x86: Replace 32b signatures in virCPUx86Model with a
|
||||
struct
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The CPU models in our cpu_map define their signatures using separate
|
||||
family and model numbers. Let's store the signatures in the same way in
|
||||
our runtime representation of the cpu_map.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 22bded201ffc91661e44065203dcb987e51084ca)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Conflicts:
|
||||
src/cpu/cpu_x86.c
|
||||
- v6.0.0-264-g0a125c7144 which removes the third argument
|
||||
from virBufferTrim was not backported
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <21c1eee9c7bb3811f43aa044bb97fa373a159e26.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 149 +++++++++++++++++++++++++++++-----------------
|
||||
1 file changed, 95 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index dad3bceff0..b87e3753da 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -121,6 +121,19 @@ static virCPUx86Feature x86_kvm_features[] =
|
||||
KVM_FEATURE(VIR_CPU_x86_HV_STIMER_DIRECT),
|
||||
};
|
||||
|
||||
+typedef struct _virCPUx86Signature virCPUx86Signature;
|
||||
+struct _virCPUx86Signature {
|
||||
+ unsigned int family;
|
||||
+ unsigned int model;
|
||||
+};
|
||||
+
|
||||
+typedef struct _virCPUx86Signatures virCPUx86Signatures;
|
||||
+typedef virCPUx86Signatures *virCPUx86SignaturesPtr;
|
||||
+struct _virCPUx86Signatures {
|
||||
+ size_t count;
|
||||
+ virCPUx86Signature *items;
|
||||
+};
|
||||
+
|
||||
typedef struct _virCPUx86Model virCPUx86Model;
|
||||
typedef virCPUx86Model *virCPUx86ModelPtr;
|
||||
struct _virCPUx86Model {
|
||||
@@ -128,8 +141,7 @@ struct _virCPUx86Model {
|
||||
bool decodeHost;
|
||||
bool decodeGuest;
|
||||
virCPUx86VendorPtr vendor;
|
||||
- size_t nsignatures;
|
||||
- uint32_t *signatures;
|
||||
+ virCPUx86SignaturesPtr signatures;
|
||||
virCPUx86Data data;
|
||||
};
|
||||
|
||||
@@ -717,6 +729,13 @@ x86MakeSignature(unsigned int family,
|
||||
}
|
||||
|
||||
|
||||
+static uint32_t
|
||||
+virCPUx86SignatureToCPUID(virCPUx86Signature *sig)
|
||||
+{
|
||||
+ return x86MakeSignature(sig->family, sig->model, 0);
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
virCPUx86SignatureFromCPUID(uint32_t sig,
|
||||
unsigned int *family,
|
||||
@@ -1099,41 +1118,65 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
|
||||
+static virCPUx86SignaturesPtr
|
||||
+virCPUx86SignaturesNew(size_t count)
|
||||
+{
|
||||
+ virCPUx86SignaturesPtr sigs;
|
||||
+
|
||||
+ sigs = g_new0(virCPUx86Signatures, 1);
|
||||
+ sigs->items = g_new0(virCPUx86Signature, count);
|
||||
+ sigs->count = count;
|
||||
+
|
||||
+ return sigs;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void
|
||||
-virCPUx86SignaturesFree(uint32_t *signatures)
|
||||
+virCPUx86SignaturesFree(virCPUx86SignaturesPtr sigs)
|
||||
{
|
||||
- g_free(signatures);
|
||||
+ if (!sigs)
|
||||
+ return;
|
||||
+
|
||||
+ g_free(sigs->items);
|
||||
+ g_free(sigs);
|
||||
}
|
||||
|
||||
|
||||
-static int
|
||||
-virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
|
||||
- virCPUx86ModelPtr src)
|
||||
+static virCPUx86SignaturesPtr
|
||||
+virCPUx86SignaturesCopy(virCPUx86SignaturesPtr src)
|
||||
{
|
||||
+ virCPUx86SignaturesPtr dst;
|
||||
size_t i;
|
||||
|
||||
- if (src->nsignatures == 0)
|
||||
- return 0;
|
||||
+ if (!src || src->count == 0)
|
||||
+ return NULL;
|
||||
|
||||
- if (VIR_ALLOC_N(dst->signatures, src->nsignatures) < 0)
|
||||
- return -1;
|
||||
+ dst = virCPUx86SignaturesNew(src->count);
|
||||
|
||||
- dst->nsignatures = src->nsignatures;
|
||||
- for (i = 0; i < src->nsignatures; i++)
|
||||
- dst->signatures[i] = src->signatures[i];
|
||||
+ for (i = 0; i < src->count; i++)
|
||||
+ dst->items[i] = src->items[i];
|
||||
|
||||
- return 0;
|
||||
+ return dst;
|
||||
}
|
||||
|
||||
|
||||
static bool
|
||||
-virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
|
||||
+virCPUx86SignaturesMatch(virCPUx86SignaturesPtr sigs,
|
||||
uint32_t signature)
|
||||
{
|
||||
size_t i;
|
||||
+ unsigned int family;
|
||||
+ unsigned int model;
|
||||
+ unsigned int stepping;
|
||||
|
||||
- for (i = 0; i < model->nsignatures; i++) {
|
||||
- if (model->signatures[i] == signature)
|
||||
+ if (!sigs)
|
||||
+ return false;
|
||||
+
|
||||
+ virCPUx86SignatureFromCPUID(signature, &family, &model, &stepping);
|
||||
+
|
||||
+ for (i = 0; i < sigs->count; i++) {
|
||||
+ if (sigs->items[i].family == family &&
|
||||
+ sigs->items[i].model == model)
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1142,17 +1185,21 @@ virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
|
||||
|
||||
|
||||
static char *
|
||||
-virCPUx86SignaturesFormat(virCPUx86ModelPtr model)
|
||||
+virCPUx86SignaturesFormat(virCPUx86SignaturesPtr sigs)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
size_t i;
|
||||
|
||||
- for (i = 0; i < model->nsignatures; i++) {
|
||||
- virBufferAsprintf(&buf, "%06lx,",
|
||||
- (unsigned long)model->signatures[i]);
|
||||
+ if (!sigs)
|
||||
+ return virBufferContentAndReset(&buf);
|
||||
+
|
||||
+ for (i = 0; i < sigs->count; i++) {
|
||||
+ virBufferAsprintf(&buf, "(%u,%u,0), ",
|
||||
+ sigs->items[i].family,
|
||||
+ sigs->items[i].model);
|
||||
}
|
||||
|
||||
- virBufferTrim(&buf, ",", -1);
|
||||
+ virBufferTrim(&buf, ", ", -1);
|
||||
|
||||
return virBufferContentAndReset(&buf);
|
||||
}
|
||||
@@ -1179,16 +1226,11 @@ x86ModelCopy(virCPUx86ModelPtr model)
|
||||
|
||||
copy = g_new0(virCPUx86Model, 1);
|
||||
copy->name = g_strdup(model->name);
|
||||
-
|
||||
- if (virCPUx86SignaturesCopy(copy, model) < 0) {
|
||||
- x86ModelFree(copy);
|
||||
- return NULL;
|
||||
- }
|
||||
+ copy->signatures = virCPUx86SignaturesCopy(model->signatures);
|
||||
x86DataCopy(©->data, &model->data);
|
||||
-
|
||||
copy->vendor = model->vendor;
|
||||
|
||||
- return copy;
|
||||
+ return g_steal_pointer(©);
|
||||
}
|
||||
|
||||
|
||||
@@ -1408,9 +1450,7 @@ x86ModelParseAncestor(virCPUx86ModelPtr model,
|
||||
}
|
||||
|
||||
model->vendor = ancestor->vendor;
|
||||
- if (virCPUx86SignaturesCopy(model, ancestor) < 0)
|
||||
- return -1;
|
||||
-
|
||||
+ model->signatures = virCPUx86SignaturesCopy(ancestor->signatures);
|
||||
x86DataCopy(&model->data, &ancestor->data);
|
||||
|
||||
return 0;
|
||||
@@ -1432,34 +1472,29 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
|
||||
/* Remove inherited signatures. */
|
||||
virCPUx86SignaturesFree(model->signatures);
|
||||
|
||||
- model->nsignatures = n;
|
||||
- if (VIR_ALLOC_N(model->signatures, n) < 0)
|
||||
- return -1;
|
||||
+ model->signatures = virCPUx86SignaturesNew(n);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
- unsigned int sigFamily = 0;
|
||||
- unsigned int sigModel = 0;
|
||||
+ virCPUx86Signature *sig = &model->signatures->items[i];
|
||||
int rc;
|
||||
|
||||
ctxt->node = nodes[i];
|
||||
|
||||
- rc = virXPathUInt("string(@family)", ctxt, &sigFamily);
|
||||
- if (rc < 0 || sigFamily == 0) {
|
||||
+ rc = virXPathUInt("string(@family)", ctxt, &sig->family);
|
||||
+ if (rc < 0 || sig->family == 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid CPU signature family in model %s"),
|
||||
model->name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
- rc = virXPathUInt("string(@model)", ctxt, &sigModel);
|
||||
+ rc = virXPathUInt("string(@model)", ctxt, &sig->model);
|
||||
if (rc < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid CPU signature model in model %s"),
|
||||
model->name);
|
||||
return -1;
|
||||
}
|
||||
-
|
||||
- model->signatures[i] = x86MakeSignature(sigFamily, sigModel, 0);
|
||||
}
|
||||
|
||||
ctxt->node = root;
|
||||
@@ -1865,9 +1900,12 @@ x86Compute(virCPUDefPtr host,
|
||||
&host_model->vendor->data) < 0)
|
||||
return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
- if (host_model->signatures &&
|
||||
- x86DataAddSignature(&guest_model->data, *host_model->signatures) < 0)
|
||||
- return VIR_CPU_COMPARE_ERROR;
|
||||
+ if (host_model->signatures && host_model->signatures->count > 0) {
|
||||
+ virCPUx86Signature *sig = &host_model->signatures->items[0];
|
||||
+ if (x86DataAddSignature(&guest_model->data,
|
||||
+ virCPUx86SignatureToCPUID(sig)) < 0)
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
+ }
|
||||
|
||||
if (cpu->type == VIR_CPU_TYPE_GUEST
|
||||
&& cpu->match == VIR_CPU_MATCH_EXACT)
|
||||
@@ -1977,8 +2015,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
* consider candidates with matching family/model.
|
||||
*/
|
||||
if (signature &&
|
||||
- virCPUx86SignaturesMatch(current, signature) &&
|
||||
- !virCPUx86SignaturesMatch(candidate, signature)) {
|
||||
+ virCPUx86SignaturesMatch(current->signatures, signature) &&
|
||||
+ !virCPUx86SignaturesMatch(candidate->signatures, signature)) {
|
||||
VIR_DEBUG("%s differs in signature from matching %s",
|
||||
cpuCandidate->model, cpuCurrent->model);
|
||||
return 0;
|
||||
@@ -1994,8 +2032,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
|
||||
* result in longer list of features.
|
||||
*/
|
||||
if (signature &&
|
||||
- virCPUx86SignaturesMatch(candidate, signature) &&
|
||||
- !virCPUx86SignaturesMatch(current, signature)) {
|
||||
+ virCPUx86SignaturesMatch(candidate->signatures, signature) &&
|
||||
+ !virCPUx86SignaturesMatch(current->signatures, signature)) {
|
||||
VIR_DEBUG("%s provides matching signature", cpuCandidate->model);
|
||||
return 1;
|
||||
}
|
||||
@@ -2150,7 +2188,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
if (vendor)
|
||||
cpu->vendor = g_strdup(vendor->name);
|
||||
|
||||
- sigs = virCPUx86SignaturesFormat(model);
|
||||
+ sigs = virCPUx86SignaturesFormat(model->signatures);
|
||||
|
||||
VIR_DEBUG("Using CPU model %s (signatures %s) for CPU with signature %06lx",
|
||||
model->name, NULLSTR(sigs), (unsigned long)signature);
|
||||
@@ -3046,9 +3084,12 @@ virCPUx86Translate(virCPUDefPtr cpu,
|
||||
virCPUx86DataAddItem(&model->data, &model->vendor->data) < 0)
|
||||
return -1;
|
||||
|
||||
- if (model->signatures &&
|
||||
- x86DataAddSignature(&model->data, model->signatures[0]) < 0)
|
||||
- return -1;
|
||||
+ if (model->signatures && model->signatures->count > 0) {
|
||||
+ virCPUx86Signature *sig = &model->signatures->items[0];
|
||||
+ if (x86DataAddSignature(&model->data,
|
||||
+ virCPUx86SignatureToCPUID(sig)) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
if (!(translated = virCPUDefCopyWithoutModel(cpu)))
|
||||
return -1;
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,160 +0,0 @@
|
|||
From da1511d57b10d2cc1cb14d78c6911815ec7d9f64 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <da1511d57b10d2cc1cb14d78c6911815ec7d9f64@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:20 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Baseline
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 5efefe7d7eb129b72bcbbebfbba2d5750ffeeeff)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <d93fb6757fd9ecd9ffe8634c422cc613c8d03e84.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 46 +++++++++++++++++-----------------------------
|
||||
1 file changed, 17 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 1ade53a4a8..6e7311694d 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2697,21 +2697,20 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
bool migratable)
|
||||
{
|
||||
virCPUx86MapPtr map = NULL;
|
||||
- virCPUx86ModelPtr base_model = NULL;
|
||||
- virCPUDefPtr cpu = NULL;
|
||||
+ g_autoptr(virCPUx86Model) base_model = NULL;
|
||||
+ g_autoptr(virCPUDef) cpu = NULL;
|
||||
size_t i;
|
||||
virCPUx86VendorPtr vendor = NULL;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
bool outputVendor = true;
|
||||
const char *modelName;
|
||||
bool matchingNames = true;
|
||||
- virCPUDataPtr featData = NULL;
|
||||
+ g_autoptr(virCPUData) featData = NULL;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
if (!(base_model = x86ModelFromCPU(cpus[0], map, -1)))
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
cpu = virCPUDefNew();
|
||||
|
||||
@@ -2723,11 +2722,12 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
} else if (!(vendor = x86VendorFind(map, cpus[0]->vendor))) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("Unknown CPU vendor %s"), cpus[0]->vendor);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
modelName = cpus[0]->model;
|
||||
for (i = 1; i < ncpus; i++) {
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
const char *vn = NULL;
|
||||
|
||||
if (matchingNames && cpus[i]->model) {
|
||||
@@ -2740,14 +2740,14 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
}
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpus[i], map, -1)))
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
if (cpus[i]->vendor && model->vendor &&
|
||||
STRNEQ(cpus[i]->vendor, model->vendor->name)) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("CPU vendor %s of model %s differs from vendor %s"),
|
||||
model->vendor->name, model->name, cpus[i]->vendor);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
if (cpus[i]->vendor) {
|
||||
@@ -2763,30 +2763,28 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
if (!(vendor = x86VendorFind(map, vn))) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("Unknown CPU vendor %s"), vn);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
} else if (STRNEQ(vendor->name, vn)) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
"%s", _("CPU vendors do not match"));
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
x86DataIntersect(&base_model->data, &model->data);
|
||||
- x86ModelFree(model);
|
||||
- model = NULL;
|
||||
}
|
||||
|
||||
if (features) {
|
||||
virCPUx86FeaturePtr feat;
|
||||
|
||||
if (!(featData = virCPUDataNew(archs[0])))
|
||||
- goto cleanup;
|
||||
+ return NULL;
|
||||
|
||||
for (i = 0; features[i]; i++) {
|
||||
if ((feat = x86FeatureFind(map, features[i])) &&
|
||||
x86DataAdd(&featData->data.x86, &feat->data) < 0)
|
||||
- goto cleanup;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
x86DataIntersect(&base_model->data, &featData->data.x86);
|
||||
@@ -2795,15 +2793,15 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
if (x86DataIsEmpty(&base_model->data)) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
"%s", _("CPUs are incompatible"));
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
if (vendor &&
|
||||
virCPUx86DataAddItem(&base_model->data, &vendor->data) < 0)
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
if (x86Decode(cpu, &base_model->data, models, modelName, migratable) < 0)
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
if (STREQ_NULLABLE(cpu->model, modelName))
|
||||
cpu->fallback = VIR_CPU_FALLBACK_FORBID;
|
||||
@@ -2811,17 +2809,7 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
|
||||
if (!outputVendor)
|
||||
VIR_FREE(cpu->vendor);
|
||||
|
||||
- cleanup:
|
||||
- x86ModelFree(base_model);
|
||||
- virCPUx86DataFree(featData);
|
||||
-
|
||||
- return cpu;
|
||||
-
|
||||
- error:
|
||||
- x86ModelFree(model);
|
||||
- virCPUDefFree(cpu);
|
||||
- cpu = NULL;
|
||||
- goto cleanup;
|
||||
+ return g_steal_pointer(&cpu);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
From 22d4493fd34661f4b93c8d4c885e627d561f2e70 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <22d4493fd34661f4b93c8d4c885e627d561f2e70@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:18 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86CheckFeature
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3b5f1ca58e8f12bc7b768206cb9c7c2ef237e3ff)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <0834c0debe689b9b8a5f694738edc149856a08fa.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 11 +++--------
|
||||
1 file changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 56081145c0..0aebe534e6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2278,21 +2278,16 @@ static int
|
||||
virCPUx86CheckFeature(const virCPUDef *cpu,
|
||||
const char *name)
|
||||
{
|
||||
- int ret = -1;
|
||||
virCPUx86MapPtr map;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
return -1;
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- ret = x86FeatureInData(name, &model->data, map);
|
||||
+ return -1;
|
||||
|
||||
- cleanup:
|
||||
- x86ModelFree(model);
|
||||
- return ret;
|
||||
+ return x86FeatureInData(name, &model->data, map);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
From 2abd91246d3967f62473a9034f5d11f8e8ea8980 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2abd91246d3967f62473a9034f5d11f8e8ea8980@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:14 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Compare
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit bc62d7a49141d745b19d066c07599f228020a0b3)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <548eeddbf9eabf5e4a872390189bb0adf746c75f.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 16 +++++++---------
|
||||
1 file changed, 7 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 1a1c846383..c111ff45d4 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1847,32 +1847,30 @@ virCPUx86Compare(virCPUDefPtr host,
|
||||
virCPUDefPtr cpu,
|
||||
bool failIncompatible)
|
||||
{
|
||||
- virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR;
|
||||
- char *message = NULL;
|
||||
+ virCPUCompareResult ret;
|
||||
+ g_autofree char *message = NULL;
|
||||
|
||||
if (!host || !host->model) {
|
||||
if (failIncompatible) {
|
||||
virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s",
|
||||
_("unknown host CPU"));
|
||||
- } else {
|
||||
- VIR_WARN("unknown host CPU");
|
||||
- ret = VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
}
|
||||
- goto cleanup;
|
||||
+
|
||||
+ VIR_WARN("unknown host CPU");
|
||||
+ return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
ret = x86Compute(host, cpu, NULL, &message);
|
||||
|
||||
if (ret == VIR_CPU_COMPARE_INCOMPATIBLE && failIncompatible) {
|
||||
- ret = VIR_CPU_COMPARE_ERROR;
|
||||
if (message)
|
||||
virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message);
|
||||
else
|
||||
virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL);
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- VIR_FREE(message);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
From a96d5bdc7d2d2de7b35820530f0665dda3c66c68 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a96d5bdc7d2d2de7b35820530f0665dda3c66c68@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:26 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86CopyMigratable
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit a32a3e934f5e7769dc9d12a221f344319200b435)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <240a340d63d1c8612e58c2d5c52970291f3e7b6d.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 10 +++-------
|
||||
1 file changed, 3 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 917cf857a6..b4b1b475d6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3109,7 +3109,7 @@ x86FeatureFilterMigratable(const char *name,
|
||||
static virCPUDefPtr
|
||||
virCPUx86CopyMigratable(virCPUDefPtr cpu)
|
||||
{
|
||||
- virCPUDefPtr copy;
|
||||
+ g_autoptr(virCPUDef) copy = NULL;
|
||||
virCPUx86MapPtr map;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
@@ -3120,13 +3120,9 @@ virCPUx86CopyMigratable(virCPUDefPtr cpu)
|
||||
|
||||
if (virCPUDefCopyModelFilter(copy, cpu, false,
|
||||
x86FeatureFilterMigratable, map) < 0)
|
||||
- goto error;
|
||||
-
|
||||
- return copy;
|
||||
+ return NULL;
|
||||
|
||||
- error:
|
||||
- virCPUDefFree(copy);
|
||||
- return NULL;
|
||||
+ return g_steal_pointer(©);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
From 45226d208c57719b50152dbec99a75969989208b Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <45226d208c57719b50152dbec99a75969989208b@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:12 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86DataParse
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit c1532711dda6db27c7f6fa7d86ab5ec5d2ab2224)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <e98c6869043aa0b7d0cc3adffe879f5d7d3c39f2.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 23 ++++++++---------------
|
||||
1 file changed, 8 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index cb5a2f941e..107fd9227d 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1636,8 +1636,8 @@ virCPUx86DataFormat(const virCPUData *data)
|
||||
static virCPUDataPtr
|
||||
virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
{
|
||||
- xmlNodePtr *nodes = NULL;
|
||||
- virCPUDataPtr cpuData = NULL;
|
||||
+ g_autofree xmlNodePtr *nodes = NULL;
|
||||
+ g_autoptr(virCPUData) cpuData = NULL;
|
||||
virCPUx86DataItem item;
|
||||
size_t i;
|
||||
int n;
|
||||
@@ -1646,11 +1646,11 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
if (n <= 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("no x86 CPU data found"));
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
if (!(cpuData = virCPUDataNew(VIR_ARCH_X86_64)))
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
ctxt->node = nodes[i];
|
||||
@@ -1658,28 +1658,21 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
if (x86ParseCPUID(ctxt, &item) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to parse cpuid[%zu]"), i);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
} else {
|
||||
if (x86ParseMSR(ctxt, &item) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to parse msr[%zu]"), i);
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (virCPUx86DataAdd(cpuData, &item) < 0)
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- VIR_FREE(nodes);
|
||||
- return cpuData;
|
||||
-
|
||||
- error:
|
||||
- virCPUx86DataFree(cpuData);
|
||||
- cpuData = NULL;
|
||||
- goto cleanup;
|
||||
+ return g_steal_pointer(&cpuData);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
From 5f9b035adcf2813beb6cc82200b745f5e34acd8d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5f9b035adcf2813beb6cc82200b745f5e34acd8d@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:25 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86ExpandFeatures
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit ff6897c84504a3e663759d710968ad1f72bc9208)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <d82daa166403fda2bcd89c68478162b45d8b9711.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 22 ++++++++--------------
|
||||
1 file changed, 8 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index c4654c8d4c..917cf857a6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3055,30 +3055,29 @@ static int
|
||||
virCPUx86ExpandFeatures(virCPUDefPtr cpu)
|
||||
{
|
||||
virCPUx86MapPtr map;
|
||||
- virCPUDefPtr expanded = NULL;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
+ g_autoptr(virCPUDef) expanded = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
bool host = cpu->type == VIR_CPU_TYPE_HOST;
|
||||
size_t i;
|
||||
- int ret = -1;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!(expanded = virCPUDefCopy(cpu)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
virCPUDefFreeFeatures(expanded);
|
||||
|
||||
if (!(model = x86ModelFind(map, cpu->model))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("unknown CPU model %s"), cpu->model);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (!(model = x86ModelCopy(model)) ||
|
||||
x86DataToCPUFeatures(expanded, host ? -1 : VIR_CPU_FEATURE_REQUIRE,
|
||||
&model->data, map) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
for (i = 0; i < cpu->nfeatures; i++) {
|
||||
virCPUFeatureDefPtr f = cpu->features + i;
|
||||
@@ -3089,17 +3088,12 @@ virCPUx86ExpandFeatures(virCPUDefPtr cpu)
|
||||
continue;
|
||||
|
||||
if (virCPUDefUpdateFeature(expanded, f->name, f->policy) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
virCPUDefFreeModel(cpu);
|
||||
|
||||
- ret = virCPUDefCopyModel(cpu, expanded, false);
|
||||
-
|
||||
- cleanup:
|
||||
- virCPUDefFree(expanded);
|
||||
- x86ModelFree(model);
|
||||
- return ret;
|
||||
+ return virCPUDefCopyModel(cpu, expanded, false);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
From 0b64dac1a3a9ef9cdfe3446ebbe114da1ae86e97 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0b64dac1a3a9ef9cdfe3446ebbe114da1ae86e97@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:19 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86GetHost
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 4a7f6f43a2a6144780d7ab74b8a6f6b008a7aa9d)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <94056710375d491c42d12a46b20f670453c2a1c8.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 14 ++++++--------
|
||||
1 file changed, 6 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 0aebe534e6..1ade53a4a8 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2637,18 +2637,18 @@ static int
|
||||
virCPUx86GetHost(virCPUDefPtr cpu,
|
||||
virDomainCapsCPUModelsPtr models)
|
||||
{
|
||||
- virCPUDataPtr cpuData = NULL;
|
||||
- int ret = -1;
|
||||
+ g_autoptr(virCPUData) cpuData = NULL;
|
||||
+ int ret;
|
||||
|
||||
if (virCPUx86DriverInitialize() < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!(cpuData = virCPUDataNew(archs[0])))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (cpuidSet(CPUX86_BASIC, cpuData) < 0 ||
|
||||
cpuidSet(CPUX86_EXTENDED, cpuData) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
/* Read the IA32_ARCH_CAPABILITIES MSR (0x10a) if supported.
|
||||
* This is best effort since there might be no way to read the MSR
|
||||
@@ -2668,7 +2668,7 @@ virCPUx86GetHost(virCPUDefPtr cpu,
|
||||
};
|
||||
|
||||
if (virCPUx86DataAdd(cpuData, &item) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2684,8 +2684,6 @@ virCPUx86GetHost(virCPUDefPtr cpu,
|
||||
VIR_DEBUG("Host CPU does not support invariant TSC");
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- virCPUx86DataFree(cpuData);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
From 91a87dbe3a25e405ea5fbd87e4444ca77d04a34c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <91a87dbe3a25e405ea5fbd87e4444ca77d04a34c@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:11 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86LoadMap
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3c650a8f7a89046b925fb5ddc78c4b6669ed76ef)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <63da1b86ef1c4f174234ff34e43d502afe326a2b.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 10 +++-------
|
||||
1 file changed, 3 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 20cdd24390..cb5a2f941e 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1559,18 +1559,14 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Map, x86MapFree);
|
||||
static virCPUx86MapPtr
|
||||
virCPUx86LoadMap(void)
|
||||
{
|
||||
- virCPUx86MapPtr map;
|
||||
+ g_autoptr(virCPUx86Map) map = NULL;
|
||||
|
||||
map = g_new0(virCPUx86Map, 1);
|
||||
|
||||
if (cpuMapLoad("x86", x86VendorParse, x86FeatureParse, x86ModelParse, map) < 0)
|
||||
- goto error;
|
||||
-
|
||||
- return map;
|
||||
+ return NULL;
|
||||
|
||||
- error:
|
||||
- x86MapFree(map);
|
||||
- return NULL;
|
||||
+ return g_steal_pointer(&map);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
From 13d45a3f07d1639250101b037bb65c20aed60763 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <13d45a3f07d1639250101b037bb65c20aed60763@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:24 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Translate
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit dff59020187c34e3f814c2aa24f3832d1d5b34f9)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <574920457f9fec4bc1938615016278eddd46ba90.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 26 ++++++++++----------------
|
||||
1 file changed, 10 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index e3a83061d0..c4654c8d4c 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -3015,45 +3015,39 @@ static int
|
||||
virCPUx86Translate(virCPUDefPtr cpu,
|
||||
virDomainCapsCPUModelsPtr models)
|
||||
{
|
||||
- virCPUDefPtr translated = NULL;
|
||||
+ g_autoptr(virCPUDef) translated = NULL;
|
||||
virCPUx86MapPtr map;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
size_t i;
|
||||
- int ret = -1;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (model->vendor &&
|
||||
virCPUx86DataAddItem(&model->data, &model->vendor->data) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (model->signatures &&
|
||||
x86DataAddSignature(&model->data, model->signatures[0]) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (!(translated = virCPUDefCopyWithoutModel(cpu)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (x86Decode(translated, &model->data, models, NULL, false) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
for (i = 0; i < cpu->nfeatures; i++) {
|
||||
virCPUFeatureDefPtr f = cpu->features + i;
|
||||
if (virCPUDefUpdateFeature(translated, f->name, f->policy) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
virCPUDefStealModel(cpu, translated, true);
|
||||
- ret = 0;
|
||||
-
|
||||
- cleanup:
|
||||
- virCPUDefFree(translated);
|
||||
- x86ModelFree(model);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
From 2631931d1dc94aeab384d92bd00866de912c9b7d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2631931d1dc94aeab384d92bd00866de912c9b7d@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:22 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Update
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit e0244a786db265647ab6c1c37ca3852876e4b0a3)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <1d8ad3e099081c35a41e1013458fa52d8fb4fae0.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 15 +++++----------
|
||||
1 file changed, 5 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 98f7863b6f..1f7a8802f6 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2853,9 +2853,8 @@ static int
|
||||
virCPUx86Update(virCPUDefPtr guest,
|
||||
const virCPUDef *host)
|
||||
{
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
virCPUx86MapPtr map;
|
||||
- int ret = -1;
|
||||
size_t i;
|
||||
|
||||
if (!host) {
|
||||
@@ -2868,14 +2867,14 @@ virCPUx86Update(virCPUDefPtr guest,
|
||||
return -1;
|
||||
|
||||
if (!(model = x86ModelFromCPU(host, map, -1)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
for (i = 0; i < guest->nfeatures; i++) {
|
||||
if (guest->features[i].policy == VIR_CPU_FEATURE_OPTIONAL) {
|
||||
int supported = x86FeatureInData(guest->features[i].name,
|
||||
&model->data, map);
|
||||
if (supported < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
else if (supported)
|
||||
guest->features[i].policy = VIR_CPU_FEATURE_REQUIRE;
|
||||
else
|
||||
@@ -2885,13 +2884,9 @@ virCPUx86Update(virCPUDefPtr guest,
|
||||
|
||||
if (guest->mode == VIR_CPU_MODE_HOST_MODEL ||
|
||||
guest->match == VIR_CPU_MATCH_MINIMUM)
|
||||
- ret = x86UpdateHostModel(guest, host);
|
||||
- else
|
||||
- ret = 0;
|
||||
+ return x86UpdateHostModel(guest, host);
|
||||
|
||||
- cleanup:
|
||||
- x86ModelFree(model);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
From 7a293db132130fdda7b550d701fdb426de5257e3 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <7a293db132130fdda7b550d701fdb426de5257e3@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:23 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86UpdateLive
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 2748e91c548cbc48a5ea499e06e62de528c10d20)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <5c29b10ead2332033087fc6ed487c9ca53b7e3a4.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 42 +++++++++++++++---------------------------
|
||||
1 file changed, 15 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 1f7a8802f6..e3a83061d0 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2897,26 +2897,25 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
{
|
||||
bool hostPassthrough = cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH;
|
||||
virCPUx86MapPtr map;
|
||||
- virCPUx86ModelPtr model = NULL;
|
||||
- virCPUx86ModelPtr modelDisabled = NULL;
|
||||
- virCPUx86Data enabled = VIR_CPU_X86_DATA_INIT;
|
||||
- virCPUx86Data disabled = VIR_CPU_X86_DATA_INIT;
|
||||
- virBuffer bufAdded = VIR_BUFFER_INITIALIZER;
|
||||
- virBuffer bufRemoved = VIR_BUFFER_INITIALIZER;
|
||||
- char *added = NULL;
|
||||
- char *removed = NULL;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) modelDisabled = NULL;
|
||||
+ g_auto(virCPUx86Data) enabled = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_auto(virCPUx86Data) disabled = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_auto(virBuffer) bufAdded = VIR_BUFFER_INITIALIZER;
|
||||
+ g_auto(virBuffer) bufRemoved = VIR_BUFFER_INITIALIZER;
|
||||
+ g_autofree char *added = NULL;
|
||||
+ g_autofree char *removed = NULL;
|
||||
size_t i;
|
||||
- int ret = -1;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
return -1;
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpu, map, -1)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (hostPassthrough &&
|
||||
!(modelDisabled = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (dataEnabled)
|
||||
x86DataCopy(&enabled, &dataEnabled->data.x86);
|
||||
@@ -2941,7 +2940,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
virBufferAsprintf(&bufAdded, "%s,", feature->name);
|
||||
else if (virCPUDefUpdateFeature(cpu, feature->name,
|
||||
VIR_CPU_FEATURE_REQUIRE) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (x86DataIsSubset(&disabled, &feature->data) ||
|
||||
@@ -2952,7 +2951,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
virBufferAsprintf(&bufRemoved, "%s,", feature->name);
|
||||
else if (virCPUDefUpdateFeature(cpu, feature->name,
|
||||
VIR_CPU_FEATURE_DISABLE) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2978,28 +2977,17 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
|
||||
_("guest CPU doesn't match specification: "
|
||||
"missing features: %s"),
|
||||
removed);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (cpu->check == VIR_CPU_CHECK_FULL &&
|
||||
!x86DataIsEmpty(&disabled)) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("guest CPU doesn't match specification"));
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
- ret = 0;
|
||||
-
|
||||
- cleanup:
|
||||
- x86ModelFree(model);
|
||||
- x86ModelFree(modelDisabled);
|
||||
- virCPUx86DataClear(&enabled);
|
||||
- virCPUx86DataClear(&disabled);
|
||||
- VIR_FREE(added);
|
||||
- VIR_FREE(removed);
|
||||
- virBufferFreeAndReset(&bufAdded);
|
||||
- virBufferFreeAndReset(&bufRemoved);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,181 +0,0 @@
|
|||
From b8162d4174443babbd260b36ea4645469eca7d67 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b8162d4174443babbd260b36ea4645469eca7d67@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:13 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86Compute
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit edf3c9045f1742d6c132066e4ba2da25c9ad7b26)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <6022f3717ce7ab0df25d31f2aaa08cac1c5f82de.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 65 +++++++++++++++++------------------------------
|
||||
1 file changed, 24 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 107fd9227d..1a1c846383 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1680,7 +1680,6 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
* redundant code:
|
||||
* MSG: error message
|
||||
* CPU_DEF: a virCPUx86Data pointer with flags that are conflicting
|
||||
- * RET: return code to set
|
||||
*
|
||||
* This macro generates the error string outputs it into logs.
|
||||
*/
|
||||
@@ -1689,13 +1688,12 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
|
||||
char *flagsStr = NULL; \
|
||||
if (!(flagsStr = x86FeatureNames(map, ", ", (CPU_DEF)))) { \
|
||||
virReportOOMError(); \
|
||||
- goto error; \
|
||||
+ return VIR_CPU_COMPARE_ERROR; \
|
||||
} \
|
||||
if (message) \
|
||||
*message = g_strdup_printf("%s: %s", _(MSG), flagsStr); \
|
||||
VIR_DEBUG("%s: %s", MSG, flagsStr); \
|
||||
VIR_FREE(flagsStr); \
|
||||
- ret = VIR_CPU_COMPARE_INCOMPATIBLE; \
|
||||
} while (0)
|
||||
|
||||
|
||||
@@ -1706,15 +1704,15 @@ x86Compute(virCPUDefPtr host,
|
||||
char **message)
|
||||
{
|
||||
virCPUx86MapPtr map = NULL;
|
||||
- virCPUx86ModelPtr host_model = NULL;
|
||||
- virCPUx86ModelPtr cpu_force = NULL;
|
||||
- virCPUx86ModelPtr cpu_require = NULL;
|
||||
- virCPUx86ModelPtr cpu_optional = NULL;
|
||||
- virCPUx86ModelPtr cpu_disable = NULL;
|
||||
- virCPUx86ModelPtr cpu_forbid = NULL;
|
||||
- virCPUx86ModelPtr diff = NULL;
|
||||
- virCPUx86ModelPtr guest_model = NULL;
|
||||
- virCPUDataPtr guestData = NULL;
|
||||
+ g_autoptr(virCPUx86Model) host_model = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_force = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_require = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_optional = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_disable = NULL;
|
||||
+ g_autoptr(virCPUx86Model) cpu_forbid = NULL;
|
||||
+ g_autoptr(virCPUx86Model) diff = NULL;
|
||||
+ g_autoptr(virCPUx86Model) guest_model = NULL;
|
||||
+ g_autoptr(virCPUData) guestData = NULL;
|
||||
virCPUCompareResult ret;
|
||||
virCPUx86CompareResult result;
|
||||
virArch arch;
|
||||
@@ -1764,13 +1762,13 @@ x86Compute(virCPUDefPtr host,
|
||||
!(cpu_optional = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_OPTIONAL)) ||
|
||||
!(cpu_disable = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)) ||
|
||||
!(cpu_forbid = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_FORBID)))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
x86DataIntersect(&cpu_forbid->data, &host_model->data);
|
||||
if (!x86DataIsEmpty(&cpu_forbid->data)) {
|
||||
virX86CpuIncompatible(N_("Host CPU provides forbidden features"),
|
||||
&cpu_forbid->data);
|
||||
- goto cleanup;
|
||||
+ return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
/* first remove features that were inherited from the CPU model and were
|
||||
@@ -1785,20 +1783,20 @@ x86Compute(virCPUDefPtr host,
|
||||
virX86CpuIncompatible(N_("Host CPU does not provide required "
|
||||
"features"),
|
||||
&cpu_require->data);
|
||||
- goto cleanup;
|
||||
+ return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
- ret = VIR_CPU_COMPARE_IDENTICAL;
|
||||
-
|
||||
if (!(diff = x86ModelCopy(host_model)))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
x86DataSubtract(&diff->data, &cpu_optional->data);
|
||||
x86DataSubtract(&diff->data, &cpu_require->data);
|
||||
x86DataSubtract(&diff->data, &cpu_disable->data);
|
||||
x86DataSubtract(&diff->data, &cpu_force->data);
|
||||
|
||||
- if (!x86DataIsEmpty(&diff->data))
|
||||
+ if (x86DataIsEmpty(&diff->data))
|
||||
+ ret = VIR_CPU_COMPARE_IDENTICAL;
|
||||
+ else
|
||||
ret = VIR_CPU_COMPARE_SUPERSET;
|
||||
|
||||
if (ret == VIR_CPU_COMPARE_SUPERSET
|
||||
@@ -1807,54 +1805,39 @@ x86Compute(virCPUDefPtr host,
|
||||
virX86CpuIncompatible(N_("Host CPU does not strictly match guest CPU: "
|
||||
"Extra features"),
|
||||
&diff->data);
|
||||
- goto cleanup;
|
||||
+ return VIR_CPU_COMPARE_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
if (guest) {
|
||||
if (!(guest_model = x86ModelCopy(host_model)))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
if (cpu->vendor && host_model->vendor &&
|
||||
virCPUx86DataAddItem(&guest_model->data,
|
||||
&host_model->vendor->data) < 0)
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
if (host_model->signatures &&
|
||||
x86DataAddSignature(&guest_model->data, *host_model->signatures) < 0)
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
if (cpu->type == VIR_CPU_TYPE_GUEST
|
||||
&& cpu->match == VIR_CPU_MATCH_EXACT)
|
||||
x86DataSubtract(&guest_model->data, &diff->data);
|
||||
|
||||
if (x86DataAdd(&guest_model->data, &cpu_force->data))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
|
||||
x86DataSubtract(&guest_model->data, &cpu_disable->data);
|
||||
|
||||
if (!(guestData = virCPUDataNew(arch)))
|
||||
- goto error;
|
||||
+ return VIR_CPU_COMPARE_ERROR;
|
||||
x86DataCopy(&guestData->data.x86, &guest_model->data);
|
||||
|
||||
- *guest = guestData;
|
||||
+ *guest = g_steal_pointer(&guestData);
|
||||
}
|
||||
|
||||
- cleanup:
|
||||
- x86ModelFree(host_model);
|
||||
- x86ModelFree(diff);
|
||||
- x86ModelFree(cpu_force);
|
||||
- x86ModelFree(cpu_require);
|
||||
- x86ModelFree(cpu_optional);
|
||||
- x86ModelFree(cpu_disable);
|
||||
- x86ModelFree(cpu_forbid);
|
||||
- x86ModelFree(guest_model);
|
||||
-
|
||||
return ret;
|
||||
-
|
||||
- error:
|
||||
- virCPUx86DataFree(guestData);
|
||||
- ret = VIR_CPU_COMPARE_ERROR;
|
||||
- goto cleanup;
|
||||
}
|
||||
#undef virX86CpuIncompatible
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
From caedf791f3486b5b3ed1ef54e9c25e7c97b3a39a Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <caedf791f3486b5b3ed1ef54e9c25e7c97b3a39a@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:06 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86DataToCPU
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 4f2fdad36db2da1aa139470846b3f60f65da8424)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <6f88b9d54c70352f9e4aeadd515cd9f4a599545a.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 20 ++++++--------------
|
||||
1 file changed, 6 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 48f36c2bfc..310dfcbcb3 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -771,9 +771,9 @@ x86DataToCPU(const virCPUx86Data *data,
|
||||
virCPUx86MapPtr map,
|
||||
virDomainCapsCPUModelPtr hvModel)
|
||||
{
|
||||
- virCPUDefPtr cpu;
|
||||
- virCPUx86Data copy = VIR_CPU_X86_DATA_INIT;
|
||||
- virCPUx86Data modelData = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_autoptr(virCPUDef) cpu = NULL;
|
||||
+ g_auto(virCPUx86Data) copy = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_auto(virCPUx86Data) modelData = VIR_CPU_X86_DATA_INIT;
|
||||
virCPUx86VendorPtr vendor;
|
||||
|
||||
cpu = virCPUDefNew();
|
||||
@@ -801,7 +801,7 @@ x86DataToCPU(const virCPUx86Data *data,
|
||||
if ((feature = x86FeatureFind(map, *blocker)) &&
|
||||
!x86DataIsSubset(©, &feature->data))
|
||||
if (x86DataAdd(&modelData, &feature->data) < 0)
|
||||
- goto error;
|
||||
+ return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -810,17 +810,9 @@ x86DataToCPU(const virCPUx86Data *data,
|
||||
|
||||
if (x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_REQUIRE, ©, map) ||
|
||||
x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_DISABLE, &modelData, map))
|
||||
- goto error;
|
||||
-
|
||||
- cleanup:
|
||||
- virCPUx86DataClear(&modelData);
|
||||
- virCPUx86DataClear(©);
|
||||
- return cpu;
|
||||
+ return NULL;
|
||||
|
||||
- error:
|
||||
- virCPUDefFree(cpu);
|
||||
- cpu = NULL;
|
||||
- goto cleanup;
|
||||
+ return g_steal_pointer(&cpu);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,99 +0,0 @@
|
|||
From e9b93240af4c391414b301c7a4a20837bc09b109 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <e9b93240af4c391414b301c7a4a20837bc09b109@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:15 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86Decode
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 9bb9cbf6761ecf985fe9cf8a18030a8aff9b448b)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <1414d86a79eb63d5600cf494455411814cbf10f7.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 24 +++++++-----------------
|
||||
1 file changed, 7 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index c111ff45d4..dba4165527 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2032,15 +2032,12 @@ x86Decode(virCPUDefPtr cpu,
|
||||
const char *preferred,
|
||||
bool migratable)
|
||||
{
|
||||
- int ret = -1;
|
||||
virCPUx86MapPtr map;
|
||||
virCPUx86ModelPtr candidate;
|
||||
virCPUDefPtr cpuCandidate;
|
||||
virCPUx86ModelPtr model = NULL;
|
||||
- virCPUDefPtr cpuModel = NULL;
|
||||
- virCPUx86Data data = VIR_CPU_X86_DATA_INIT;
|
||||
- virCPUx86Data copy = VIR_CPU_X86_DATA_INIT;
|
||||
- virCPUx86Data features = VIR_CPU_X86_DATA_INIT;
|
||||
+ g_autoptr(virCPUDef) cpuModel = NULL;
|
||||
+ g_auto(virCPUx86Data) data = VIR_CPU_X86_DATA_INIT;
|
||||
virCPUx86VendorPtr vendor;
|
||||
virDomainCapsCPUModelPtr hvModel = NULL;
|
||||
g_autofree char *sigs = NULL;
|
||||
@@ -2054,7 +2051,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
x86DataCopy(&data, cpuData);
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
vendor = x86DataToVendor(&data, map);
|
||||
signature = x86DataToSignature(&data);
|
||||
@@ -2073,7 +2070,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("CPU model %s is not supported by hypervisor"),
|
||||
preferred);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
} else {
|
||||
VIR_WARN("Preferred CPU model %s not allowed by"
|
||||
" hypervisor; closest supported model will be"
|
||||
@@ -2096,7 +2093,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
}
|
||||
|
||||
if (!(cpuCandidate = x86DataToCPU(&data, candidate, map, hvModel)))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
cpuCandidate->type = cpu->type;
|
||||
|
||||
if ((rc = x86DecodeUseCandidate(model, cpuModel,
|
||||
@@ -2115,7 +2112,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
if (!cpuModel) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
"%s", _("Cannot find suitable CPU model for given data"));
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
/* Remove non-migratable features if requested
|
||||
@@ -2149,14 +2146,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
cpu->nfeatures_max = cpuModel->nfeatures_max;
|
||||
cpuModel->nfeatures_max = 0;
|
||||
|
||||
- ret = 0;
|
||||
-
|
||||
- cleanup:
|
||||
- virCPUDefFree(cpuModel);
|
||||
- virCPUx86DataClear(&data);
|
||||
- virCPUx86DataClear(©);
|
||||
- virCPUx86DataClear(&features);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,141 +0,0 @@
|
|||
From fc8f77c828ada1bfd3ac4957410f9b4efc659ce1 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <fc8f77c828ada1bfd3ac4957410f9b4efc659ce1@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:17 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86Encode
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit e6e54fcebe99f1c07fe905c419cbe5d12f6844b1)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <4729842dcc538cca58a2ccd18fe2bcf9be410bbb.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 51 +++++++++++++++++++----------------------------
|
||||
1 file changed, 21 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index fd410aeafb..56081145c0 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2188,12 +2188,12 @@ x86Encode(virArch arch,
|
||||
virCPUDataPtr *vendor)
|
||||
{
|
||||
virCPUx86MapPtr map = NULL;
|
||||
- virCPUDataPtr data_forced = NULL;
|
||||
- virCPUDataPtr data_required = NULL;
|
||||
- virCPUDataPtr data_optional = NULL;
|
||||
- virCPUDataPtr data_disabled = NULL;
|
||||
- virCPUDataPtr data_forbidden = NULL;
|
||||
- virCPUDataPtr data_vendor = NULL;
|
||||
+ g_autoptr(virCPUData) data_forced = NULL;
|
||||
+ g_autoptr(virCPUData) data_required = NULL;
|
||||
+ g_autoptr(virCPUData) data_optional = NULL;
|
||||
+ g_autoptr(virCPUData) data_disabled = NULL;
|
||||
+ g_autoptr(virCPUData) data_forbidden = NULL;
|
||||
+ g_autoptr(virCPUData) data_vendor = NULL;
|
||||
|
||||
if (forced)
|
||||
*forced = NULL;
|
||||
@@ -2209,37 +2209,37 @@ x86Encode(virArch arch,
|
||||
*vendor = NULL;
|
||||
|
||||
if (!(map = virCPUx86GetMap()))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (forced &&
|
||||
(!(data_forced = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_forced->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_FORCE) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (required &&
|
||||
(!(data_required = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_required->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_REQUIRE) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (optional &&
|
||||
(!(data_optional = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_optional->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_OPTIONAL) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (disabled &&
|
||||
(!(data_disabled = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_disabled->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_DISABLE) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (forbidden &&
|
||||
(!(data_forbidden = virCPUDataNew(arch)) ||
|
||||
x86EncodePolicy(&data_forbidden->data.x86, cpu, map,
|
||||
VIR_CPU_FEATURE_FORBID) < 0))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (vendor) {
|
||||
virCPUx86VendorPtr v = NULL;
|
||||
@@ -2247,39 +2247,30 @@ x86Encode(virArch arch,
|
||||
if (cpu->vendor && !(v = x86VendorFind(map, cpu->vendor))) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED,
|
||||
_("CPU vendor %s not found"), cpu->vendor);
|
||||
- goto error;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (!(data_vendor = virCPUDataNew(arch)))
|
||||
- goto error;
|
||||
+ return -1;
|
||||
|
||||
if (v && virCPUx86DataAdd(data_vendor, &v->data) < 0)
|
||||
- goto error;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (forced)
|
||||
- *forced = data_forced;
|
||||
+ *forced = g_steal_pointer(&data_forced);
|
||||
if (required)
|
||||
- *required = data_required;
|
||||
+ *required = g_steal_pointer(&data_required);
|
||||
if (optional)
|
||||
- *optional = data_optional;
|
||||
+ *optional = g_steal_pointer(&data_optional);
|
||||
if (disabled)
|
||||
- *disabled = data_disabled;
|
||||
+ *disabled = g_steal_pointer(&data_disabled);
|
||||
if (forbidden)
|
||||
- *forbidden = data_forbidden;
|
||||
+ *forbidden = g_steal_pointer(&data_forbidden);
|
||||
if (vendor)
|
||||
- *vendor = data_vendor;
|
||||
+ *vendor = g_steal_pointer(&data_vendor);
|
||||
|
||||
return 0;
|
||||
-
|
||||
- error:
|
||||
- virCPUx86DataFree(data_forced);
|
||||
- virCPUx86DataFree(data_required);
|
||||
- virCPUx86DataFree(data_optional);
|
||||
- virCPUx86DataFree(data_disabled);
|
||||
- virCPUx86DataFree(data_forbidden);
|
||||
- virCPUx86DataFree(data_vendor);
|
||||
- return -1;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
From b91ae8a08c0906011e9ff2ed4f8c8fce908603b5 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b91ae8a08c0906011e9ff2ed4f8c8fce908603b5@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:16 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86EncodePolicy
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 5b45d2cf1ff0d2d972f103a678c01bc0eb7c1e18)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <cf057cf29d8f8f2369eab3afb5202a6466c0dc2e.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index dba4165527..fd410aeafb 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -2164,7 +2164,7 @@ x86EncodePolicy(virCPUx86Data *data,
|
||||
virCPUx86MapPtr map,
|
||||
virCPUFeaturePolicy policy)
|
||||
{
|
||||
- virCPUx86ModelPtr model;
|
||||
+ g_autoptr(virCPUx86Model) model = NULL;
|
||||
|
||||
if (!(model = x86ModelFromCPU(cpu, map, policy)))
|
||||
return -1;
|
||||
@@ -2172,7 +2172,6 @@ x86EncodePolicy(virCPUx86Data *data,
|
||||
*data = model->data;
|
||||
model->data.len = 0;
|
||||
model->data.items = NULL;
|
||||
- x86ModelFree(model);
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,115 +0,0 @@
|
|||
From 39dea7f80de53e9f7fb8f298d1f9f7f32f20fc29 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <39dea7f80de53e9f7fb8f298d1f9f7f32f20fc29@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 26 May 2020 10:59:08 +0200
|
||||
Subject: [PATCH] cpu_x86: Use g_auto* in x86FeatureParse
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3125688f78f6289e51bfdaa196addb230b0de4e1)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1840010
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Message-Id: <14cf6ca6816ee8bda3e195aa5218162b280715b5.1590483392.git.jdenemar@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/cpu/cpu_x86.c | 31 ++++++++++++-------------------
|
||||
1 file changed, 12 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
|
||||
index 3ffddf0342..10c5fbacf7 100644
|
||||
--- a/src/cpu/cpu_x86.c
|
||||
+++ b/src/cpu/cpu_x86.c
|
||||
@@ -1023,13 +1023,12 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
void *data)
|
||||
{
|
||||
virCPUx86MapPtr map = data;
|
||||
- xmlNodePtr *nodes = NULL;
|
||||
- virCPUx86FeaturePtr feature;
|
||||
+ g_autofree xmlNodePtr *nodes = NULL;
|
||||
+ g_autoptr(virCPUx86Feature) feature = NULL;
|
||||
virCPUx86DataItem item;
|
||||
size_t i;
|
||||
int n;
|
||||
- char *str = NULL;
|
||||
- int ret = -1;
|
||||
+ g_autofree char *str = NULL;
|
||||
|
||||
feature = g_new0(virCPUx86Feature, 1);
|
||||
feature->migratable = true;
|
||||
@@ -1038,7 +1037,7 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
if (x86FeatureFind(map, feature->name)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("CPU feature %s already defined"), feature->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
str = virXPathString("string(@migratable)", ctxt);
|
||||
@@ -1047,13 +1046,13 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
|
||||
n = virXPathNodeSet("./cpuid|./msr", ctxt, &nodes);
|
||||
if (n < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (n == 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Missing cpuid or msr element in feature %s"),
|
||||
feature->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -1063,37 +1062,31 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid cpuid[%zu] in %s feature"),
|
||||
i, feature->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
} else {
|
||||
if (x86ParseMSR(ctxt, &item) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid msr[%zu] in %s feature"),
|
||||
i, feature->name);
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (virCPUx86DataAddItem(&feature->data, &item))
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
if (!feature->migratable &&
|
||||
VIR_APPEND_ELEMENT_COPY(map->migrate_blockers,
|
||||
map->nblockers,
|
||||
feature) < 0)
|
||||
- goto cleanup;
|
||||
+ return -1;
|
||||
|
||||
if (VIR_APPEND_ELEMENT(map->features, map->nfeatures, feature) < 0)
|
||||
- goto cleanup;
|
||||
-
|
||||
- ret = 0;
|
||||
+ return -1;
|
||||
|
||||
- cleanup:
|
||||
- x86FeatureFree(feature);
|
||||
- VIR_FREE(nodes);
|
||||
- VIR_FREE(str);
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.26.2
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue