import libvirt-8.5.0-5.el9
This commit is contained in:
parent
398258cdbc
commit
de6df887c5
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/libvirt-8.0.0.tar.xz
|
||||
SOURCES/libvirt-8.5.0.tar.xz
|
||||
|
@ -1 +1 @@
|
||||
e440412e9b45d7e24f0ef492d8edf5cf2cbd3f4c SOURCES/libvirt-8.0.0.tar.xz
|
||||
d5fc6173368e7c32cd87d6c8e3c9cfd9d5622860 SOURCES/libvirt-8.5.0.tar.xz
|
||||
|
@ -1,89 +0,0 @@
|
||||
From ee1ce580f5373070e4b6a50d1ae4a3218c737a72 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <ee1ce580f5373070e4b6a50d1ae4a3218c737a72@dist-git>
|
||||
From: Martin Kletzander <mkletzan@redhat.com>
|
||||
Date: Mon, 14 Feb 2022 12:37:37 +0100
|
||||
Subject: [PATCH] Make systemd unit ordering more robust
|
||||
|
||||
Since libvirt-guests script/service can operate on various URIs and we do
|
||||
support both socket activation and traditional services, the ordering should be
|
||||
specified for all the possible sockets and services.
|
||||
|
||||
Also remove the Wants= dependency since do not want to start any service. We
|
||||
cannot know which one libvirt-guests is configured, so we'd have to start all
|
||||
the daemons which would break if unused colliding services are not
|
||||
masked (libvirtd.service in the modular case and all the modular daemon service
|
||||
units in the monolithic scenario). Fortunately we can assume that the system is
|
||||
configured properly to start services/sockets that are of interest to the user.
|
||||
That also works with the setup described in https://libvirt.org/daemons.html .
|
||||
|
||||
To make it even more robust we add the daemon service into the machine units
|
||||
created for individual domains as it was missing there.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1868537
|
||||
|
||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 4e42686adef8b9e9266f0099ddcd25bc95c4ed43)
|
||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
---
|
||||
src/util/virsystemd.c | 8 ++++++--
|
||||
tools/libvirt-guests.service.in | 12 +++++++++++-
|
||||
2 files changed, 17 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c
|
||||
index a86d4c6bb9..f156c2f39a 100644
|
||||
--- a/src/util/virsystemd.c
|
||||
+++ b/src/util/virsystemd.c
|
||||
@@ -441,8 +441,10 @@ int virSystemdCreateMachine(const char *name,
|
||||
nicindexes, nnicindexes, sizeof(int));
|
||||
gprops = g_variant_new_parsed("[('Slice', <%s>),"
|
||||
" ('After', <['libvirtd.service']>),"
|
||||
+ " ('After', <['virt%sd.service']>),"
|
||||
" ('Before', <['virt-guest-shutdown.target']>)]",
|
||||
- slicename);
|
||||
+ slicename,
|
||||
+ drivername);
|
||||
message = g_variant_new("(s@ayssus@ai@a(sv))",
|
||||
name,
|
||||
guuid,
|
||||
@@ -489,8 +491,10 @@ int virSystemdCreateMachine(const char *name,
|
||||
uuid, 16, sizeof(unsigned char));
|
||||
gprops = g_variant_new_parsed("[('Slice', <%s>),"
|
||||
" ('After', <['libvirtd.service']>),"
|
||||
+ " ('After', <['virt%sd.service']>),"
|
||||
" ('Before', <['virt-guest-shutdown.target']>)]",
|
||||
- slicename);
|
||||
+ slicename,
|
||||
+ drivername);
|
||||
message = g_variant_new("(s@ayssus@a(sv))",
|
||||
name,
|
||||
guuid,
|
||||
diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in
|
||||
index 1a9b233e11..3cf6476196 100644
|
||||
--- a/tools/libvirt-guests.service.in
|
||||
+++ b/tools/libvirt-guests.service.in
|
||||
@@ -1,10 +1,20 @@
|
||||
[Unit]
|
||||
Description=Suspend/Resume Running libvirt Guests
|
||||
-Wants=libvirtd.service
|
||||
Requires=virt-guest-shutdown.target
|
||||
After=network.target
|
||||
After=time-sync.target
|
||||
+After=libvirtd.socket
|
||||
+After=virtqemud.socket
|
||||
+After=virtlxcd.socket
|
||||
+After=virtvboxd.socket
|
||||
+After=virtvzd.socket
|
||||
+After=virtxend.socket
|
||||
After=libvirtd.service
|
||||
+After=virtqemud.service
|
||||
+After=virtlxcd.service
|
||||
+After=virtvboxd.service
|
||||
+After=virtvzd.service
|
||||
+After=virtxend.service
|
||||
After=virt-guest-shutdown.target
|
||||
Documentation=man:libvirt-guests(8)
|
||||
Documentation=https://libvirt.org
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,46 +0,0 @@
|
||||
From 16b9ab85b004308e1d99db4ed4769a5fa56e2dfa Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <16b9ab85b004308e1d99db4ed4769a5fa56e2dfa@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
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1092363
|
||||
|
||||
RHEL-only.
|
||||
|
||||
Ignore the maximum vcpu limit (KVM_CAP_MAX_VCPUS) on RHEL,
|
||||
since RHEL QEMU treats the recommended limit (KVM_CAP_NR_VCPUS)
|
||||
as the maximum, see:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=998708
|
||||
|
||||
(cherry picked from commit 7dff909fa34bdd93ad200dbffe70c0c1ee931925)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
|
||||
https: //bugzilla.redhat.com/show_bug.cgi?id=1582222
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
---
|
||||
src/util/virhostcpu.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
|
||||
index a07c00a0e9..35f41daef2 100644
|
||||
--- a/src/util/virhostcpu.c
|
||||
+++ b/src/util/virhostcpu.c
|
||||
@@ -1166,6 +1166,11 @@ virHostCPUGetKVMMaxVCPUs(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
+/* Ignore KVM_CAP_MAX_VCPUS on RHEL - the recommended maximum
|
||||
+ * is treated as a hard limit.
|
||||
+ */
|
||||
+# undef KVM_CAP_MAX_VCPUS
|
||||
+
|
||||
# ifdef KVM_CAP_MAX_VCPUS
|
||||
/* 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.34.1
|
||||
|
@ -1,104 +0,0 @@
|
||||
From 81f1508d99d4740e7a2a092128d651cf245a554e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <81f1508d99d4740e7a2a092128d651cf245a554e@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)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2043579
|
||||
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,75 +0,0 @@
|
||||
From f45c99be9258f2d97c1f19b93ae8f5e73f4cb486 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f45c99be9258f2d97c1f19b93ae8f5e73f4cb486@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)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2042529
|
||||
---
|
||||
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.35.0
|
||||
|
@ -1,217 +0,0 @@
|
||||
From 8363046dd5f3e018aaea7b6d9b711fb3d1e417cc Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <8363046dd5f3e018aaea7b6d9b711fb3d1e417cc@dist-git>
|
||||
From: Jim Fehlig <jfehlig@suse.com>
|
||||
Date: Fri, 7 Jan 2022 14:35:10 -0700
|
||||
Subject: [PATCH] docs: Add man page for libvirt-guests
|
||||
|
||||
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 161727417a91bdddf8f3167cf70c3de2829be81c)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2042529
|
||||
---
|
||||
docs/manpages/index.rst | 1 +
|
||||
docs/manpages/libvirt-guests.rst | 151 +++++++++++++++++++++++++++++++
|
||||
docs/manpages/meson.build | 1 +
|
||||
libvirt.spec.in | 1 +
|
||||
tools/libvirt-guests.service.in | 2 +-
|
||||
5 files changed, 155 insertions(+), 1 deletion(-)
|
||||
create mode 100644 docs/manpages/libvirt-guests.rst
|
||||
|
||||
diff --git a/docs/manpages/index.rst b/docs/manpages/index.rst
|
||||
index fb4a36d46a..8fd0d90041 100644
|
||||
--- a/docs/manpages/index.rst
|
||||
+++ b/docs/manpages/index.rst
|
||||
@@ -41,6 +41,7 @@ Tools
|
||||
* `virt-admin(1) <virt-admin.html>`__ - daemon administration interface
|
||||
* `virsh(1) <virsh.html>`__ - management user interface
|
||||
* `virt-qemu-run(1) <virt-qemu-run.html>`__ - run standalone QEMU instances
|
||||
+* `libvirt-guests(8) <libvirt-guests.html>`__ - suspend/resume running libvirt guests
|
||||
|
||||
Key codes
|
||||
=========
|
||||
diff --git a/docs/manpages/libvirt-guests.rst b/docs/manpages/libvirt-guests.rst
|
||||
new file mode 100644
|
||||
index 0000000000..76045ed11a
|
||||
--- /dev/null
|
||||
+++ b/docs/manpages/libvirt-guests.rst
|
||||
@@ -0,0 +1,151 @@
|
||||
+==============
|
||||
+libvirt-guests
|
||||
+==============
|
||||
+
|
||||
+-------------------------------------
|
||||
+suspend/resume running libvirt guests
|
||||
+-------------------------------------
|
||||
+
|
||||
+:Manual section: 8
|
||||
+:Manual group: Virtualization Support
|
||||
+
|
||||
+.. contents::
|
||||
+
|
||||
+SYNOPSIS
|
||||
+========
|
||||
+
|
||||
+``libvirt-guests`` *COMMAND*
|
||||
+
|
||||
+
|
||||
+DESCRIPTION
|
||||
+===========
|
||||
+
|
||||
+``libvirt-guests`` is a service that can be used to coordinate guest and host
|
||||
+lifecyle actions. By default, ``libvirt-guests`` will suspend running guests
|
||||
+when the host shuts down, and restore them to their pre-shutdown state when
|
||||
+the host reboots.
|
||||
+
|
||||
+``libvirt-guests`` is typically under control of systemd. When
|
||||
+``libvirt-guests.service`` is enabled, systemd will call ``libvirt-guests``
|
||||
+with the ``start`` *COMMAND* when the host boots. Conversely, systemd will call
|
||||
+``libvirt-guests`` with the ``stop`` *COMMAND* when the host shuts down.
|
||||
+
|
||||
+``libvirt-guests`` can be used directly. In addition to the ``start`` and
|
||||
+``stop`` *COMMAND*\s, it also supports ``status``, ``restart``, ``condrestart``,
|
||||
+``try-restart``, ``reload``, ``force-reload``, ``gueststatus``, and
|
||||
+``shutdown`` *COMMAND*\s.
|
||||
+
|
||||
+
|
||||
+FILES
|
||||
+=====
|
||||
+
|
||||
+``libvirt-guests`` defines several variables to control service behavior.
|
||||
+The default vaule of these variables can be overridden in:
|
||||
+
|
||||
+* ``@SYSCONFDIR@/sysconfig/libvirt-guests``
|
||||
+
|
||||
+The following variables are supported:
|
||||
+
|
||||
+- URIS=default
|
||||
+
|
||||
+ URIs to check for running guests. Example:
|
||||
+ ``URIS='default xen:///system xen+tcp://host/system lxc:///system'``
|
||||
+
|
||||
+- ON_BOOT=start
|
||||
+
|
||||
+ Action taken on host boot
|
||||
+
|
||||
+ * start
|
||||
+
|
||||
+ All guests which were running on shutdown are started on boot regardless
|
||||
+ of their autostart settings
|
||||
+
|
||||
+ * ignore
|
||||
+
|
||||
+ ``libvirt-guests`` won't start any guest on boot, however, guests marked
|
||||
+ as autostart will still be automatically started by libvirtd
|
||||
+
|
||||
+- START_DELAY=0
|
||||
+
|
||||
+ Number of seconds to wait between each guest start. Set to 0 to allow parallel
|
||||
+ startup.
|
||||
+
|
||||
+- ON_SHUTDOWN=suspend
|
||||
+
|
||||
+ Action taken on host shutdown
|
||||
+
|
||||
+ * suspend
|
||||
+
|
||||
+ All running guests are suspended using virsh managedsave
|
||||
+
|
||||
+ * shutdown
|
||||
+
|
||||
+ All running guests are asked to shutdown. Please be careful with this
|
||||
+ settings since there is no way to distinguish between a guest which is
|
||||
+ stuck or ignores shutdown requests and a guest which just needs a long
|
||||
+ time to shutdown. When setting ON_SHUTDOWN=shutdown, you must also set
|
||||
+ SHUTDOWN_TIMEOUT to a value suitable for your guests.
|
||||
+
|
||||
+- PARALLEL_SHUTDOWN=0
|
||||
+
|
||||
+ Number of guests will be shutdown concurrently, taking effect when
|
||||
+ "ON_SHUTDOWN" is set to "shutdown". If Set to 0, guests will be shutdown one
|
||||
+ after another. Number of guests on shutdown at any time will not exceed number
|
||||
+ set in this variable.
|
||||
+
|
||||
+- SHUTDOWN_TIMEOUT=300
|
||||
+
|
||||
+ Number of seconds we're willing to wait for a guest to shut down. If parallel
|
||||
+ shutdown is enabled, this timeout applies as a timeout for shutting down all
|
||||
+ guests on a single URI defined in the variable URIS. If this is 0, then there
|
||||
+ is no time out (use with caution, as guests might not respond to a shutdown
|
||||
+ request). The default value is 300 seconds (5 minutes).
|
||||
+
|
||||
+- BYPASS_CACHE=0
|
||||
+
|
||||
+ If non-zero, try to bypass the file system cache when saving and
|
||||
+ restoring guests, even though this may give slower operation for
|
||||
+ some file systems.
|
||||
+
|
||||
+- SYNC_TIME=0
|
||||
+
|
||||
+ If non-zero, try to sync guest time on domain resume. Be aware, that
|
||||
+ this requires guest agent with support for time synchronization
|
||||
+ running in the guest. By default, this functionality is turned off.
|
||||
+
|
||||
+
|
||||
+BUGS
|
||||
+====
|
||||
+
|
||||
+Please report all bugs you discover. This should be done via either:
|
||||
+
|
||||
+#. the mailing list
|
||||
+
|
||||
+ `https://libvirt.org/contact.html <https://libvirt.org/contact.html>`_
|
||||
+
|
||||
+#. the bug tracker
|
||||
+
|
||||
+ `https://libvirt.org/bugs.html <https://libvirt.org/bugs.html>`_
|
||||
+
|
||||
+Alternatively, you may report bugs to your software distributor / vendor.
|
||||
+
|
||||
+
|
||||
+AUTHORS
|
||||
+=======
|
||||
+
|
||||
+Please refer to the AUTHORS file distributed with libvirt.
|
||||
+
|
||||
+
|
||||
+LICENSE
|
||||
+=======
|
||||
+
|
||||
+``libvirt-guests`` is distributed under the terms of the GNU LGPL v2.1+.
|
||||
+This is free software; see the source for copying conditions. There
|
||||
+is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
+PURPOSE
|
||||
+
|
||||
+
|
||||
+SEE ALSO
|
||||
+========
|
||||
+
|
||||
+libvirtd(8), `https://libvirt.org/ <https://libvirt.org/>`_
|
||||
diff --git a/docs/manpages/meson.build b/docs/manpages/meson.build
|
||||
index 150f45d296..bad9b62a2e 100644
|
||||
--- a/docs/manpages/meson.build
|
||||
+++ b/docs/manpages/meson.build
|
||||
@@ -21,6 +21,7 @@ docs_man_files = [
|
||||
{ 'name': 'virt-qemu-run', 'section': '1', 'install': conf.has('WITH_QEMU') },
|
||||
{ 'name': 'virt-xml-validate', 'section': '1', 'install': true },
|
||||
|
||||
+ { 'name': 'libvirt-guests', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') },
|
||||
{ 'name': 'libvirtd', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') },
|
||||
{ 'name': 'virt-sanlock-cleanup', 'section': '8', 'install': conf.has('WITH_SANLOCK') },
|
||||
{ 'name': 'virt-ssh-helper', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') },
|
||||
diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in
|
||||
index 10c664016a..1a9b233e11 100644
|
||||
--- a/tools/libvirt-guests.service.in
|
||||
+++ b/tools/libvirt-guests.service.in
|
||||
@@ -6,7 +6,7 @@ After=network.target
|
||||
After=time-sync.target
|
||||
After=libvirtd.service
|
||||
After=virt-guest-shutdown.target
|
||||
-Documentation=man:libvirtd(8)
|
||||
+Documentation=man:libvirt-guests(8)
|
||||
Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
--
|
||||
2.35.0
|
||||
|
62
SOURCES/libvirt-docs-Document-TPM-portion-of-domcaps.patch
Normal file
62
SOURCES/libvirt-docs-Document-TPM-portion-of-domcaps.patch
Normal file
@ -0,0 +1,62 @@
|
||||
From b5a226f307b01bb1b58a88c95d29da34c246757f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b5a226f307b01bb1b58a88c95d29da34c246757f@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 12 Jul 2022 16:10:08 +0200
|
||||
Subject: [PATCH] docs: Document TPM portion of domcaps
|
||||
|
||||
Surprisingly, we don't document TPM part of domain capabilities.
|
||||
Fortunately, the information exposed is pretty much self
|
||||
explanatory, but we should document it regardless.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 6a00c565c4d0f0ec970e043ea2686bd30396ed79)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103119
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomaincaps.rst | 29 +++++++++++++++++++++++++++++
|
||||
1 file changed, 29 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomaincaps.rst b/docs/formatdomaincaps.rst
|
||||
index 933469b2a2..3c425a9a4a 100644
|
||||
--- a/docs/formatdomaincaps.rst
|
||||
+++ b/docs/formatdomaincaps.rst
|
||||
@@ -494,6 +494,35 @@ instance:
|
||||
``driverType``
|
||||
Options for the ``type`` attribute of the <filesystem><driver> element.
|
||||
|
||||
+TPM device
|
||||
+^^^^^^^^^^
|
||||
+
|
||||
+TPM device capabilities are exposed under the ``tpm`` element. For instance:
|
||||
+
|
||||
+::
|
||||
+
|
||||
+ <domainCapabilities>
|
||||
+ ...
|
||||
+ <devices>
|
||||
+ <tpm supported='yes'>
|
||||
+ <enum name='model'>
|
||||
+ <value>tpm-tis</value>
|
||||
+ <value>tpm-crb</value>
|
||||
+ </enum>
|
||||
+ <enum name='backendModel'>
|
||||
+ <value>passthrough</value>
|
||||
+ <value>emulator</value>
|
||||
+ </enum>
|
||||
+ </tpm>
|
||||
+ ...
|
||||
+ </devices>
|
||||
+ </domainCapabilities>
|
||||
+
|
||||
+``model``
|
||||
+ Options for the ``model`` attribute of the ``<tpm/>`` element.
|
||||
+``backendModel``
|
||||
+ Options for the ``type`` attribute of the ``<tpm><backend/>`` element.
|
||||
+
|
||||
Features
|
||||
~~~~~~~~
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,96 @@
|
||||
From a39ce54007de67ce6909c1770a7759b09c41bfd6 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a39ce54007de67ce6909c1770a7759b09c41bfd6@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 7 Jul 2022 16:29:18 +0200
|
||||
Subject: [PATCH] domain_conf: Format <defaultiothread/> more often
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The <defaultiothread/> element is formatted inside
|
||||
virDomainDefaultIOThreadDefFormat() which is called only from
|
||||
virDomainDefIOThreadsFormat() (so that IOThread related stuff is
|
||||
formatted calling one function). However, when there are no
|
||||
<iothreadids/> defined (or only autoallocated ones are present),
|
||||
then the outer formatting function exits early never calling the
|
||||
<defaultiothread/> formatter.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 24fa7004e47ce86b92bc23c1f2ef9c3d6152c3a8)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2059511
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 46 ++++++++++++++++++++----------------------
|
||||
1 file changed, 22 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 709ca53790..207a45d9ae 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -27763,40 +27763,38 @@ static void
|
||||
virDomainDefIOThreadsFormat(virBuffer *buf,
|
||||
const virDomainDef *def)
|
||||
{
|
||||
- g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
- size_t i;
|
||||
-
|
||||
- if (def->niothreadids == 0)
|
||||
- return;
|
||||
+ if (def->niothreadids > 0) {
|
||||
+ virBufferAsprintf(buf, "<iothreads>%zu</iothreads>\n",
|
||||
+ def->niothreadids);
|
||||
+ }
|
||||
|
||||
- virBufferAsprintf(buf, "<iothreads>%zu</iothreads>\n",
|
||||
- def->niothreadids);
|
||||
+ if (virDomainDefIothreadShouldFormat(def)) {
|
||||
+ g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||
+ size_t i;
|
||||
|
||||
- if (!virDomainDefIothreadShouldFormat(def))
|
||||
- return;
|
||||
+ for (i = 0; i < def->niothreadids; i++) {
|
||||
+ virDomainIOThreadIDDef *iothread = def->iothreadids[i];
|
||||
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
- for (i = 0; i < def->niothreadids; i++) {
|
||||
- virDomainIOThreadIDDef *iothread = def->iothreadids[i];
|
||||
- g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
|
||||
+ virBufferAsprintf(&attrBuf, " id='%u'",
|
||||
+ iothread->iothread_id);
|
||||
|
||||
- virBufferAsprintf(&attrBuf, " id='%u'",
|
||||
- iothread->iothread_id);
|
||||
+ if (iothread->thread_pool_min >= 0) {
|
||||
+ virBufferAsprintf(&attrBuf, " thread_pool_min='%d'",
|
||||
+ iothread->thread_pool_min);
|
||||
+ }
|
||||
|
||||
- if (iothread->thread_pool_min >= 0) {
|
||||
- virBufferAsprintf(&attrBuf, " thread_pool_min='%d'",
|
||||
- iothread->thread_pool_min);
|
||||
- }
|
||||
+ if (iothread->thread_pool_max >= 0) {
|
||||
+ virBufferAsprintf(&attrBuf, " thread_pool_max='%d'",
|
||||
+ iothread->thread_pool_max);
|
||||
+ }
|
||||
|
||||
- if (iothread->thread_pool_max >= 0) {
|
||||
- virBufferAsprintf(&attrBuf, " thread_pool_max='%d'",
|
||||
- iothread->thread_pool_max);
|
||||
+ virXMLFormatElement(&childrenBuf, "iothread", &attrBuf, NULL);
|
||||
}
|
||||
|
||||
- virXMLFormatElement(&childrenBuf, "iothread", &attrBuf, NULL);
|
||||
+ virXMLFormatElement(buf, "iothreadids", NULL, &childrenBuf);
|
||||
}
|
||||
|
||||
- virXMLFormatElement(buf, "iothreadids", NULL, &childrenBuf);
|
||||
-
|
||||
virDomainDefaultIOThreadDefFormat(buf, def);
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,61 @@
|
||||
From 711cf329b9847c4d42994389d89a7e7b83c71596 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <711cf329b9847c4d42994389d89a7e7b83c71596@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 7 Jul 2022 16:29:33 +0200
|
||||
Subject: [PATCH] domain_conf: Format iothread IDs more often
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
When formatting IOThreads (in virDomainDefIOThreadsFormat()), we
|
||||
may only output the number of IOThreads, or the full list of IOThreads too:
|
||||
|
||||
<iothreads>4</iothreads>
|
||||
<iothreadids>
|
||||
<iothread id='1' thread_pool_max='10'/>
|
||||
<iothread id='2' thread_pool_min='2' thread_pool_max='10'/>
|
||||
<iothread id='3'/>
|
||||
<iothread id='4'/>
|
||||
</iothreadids>
|
||||
|
||||
Now, the deciding factor here is whether those individual
|
||||
IOThreads were so called 'autofill-ed' or user provided. Well, we
|
||||
need to take another factor in: if an IOThread has pool size
|
||||
limit set, then we ought to format the full list.
|
||||
|
||||
But how can we get into a situation when a thread is autofilled
|
||||
(i.e. not provided by user in the XML) and yet it has pool size
|
||||
limit set? virDomainSetIOThreadParams() is the answer.
|
||||
|
||||
Sure, we could also unset the autofill flag whenever a pool size
|
||||
limit is being set. But this approach allows us to not format
|
||||
anything if the limits are reset (we don't lose the autofill
|
||||
information).
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 5aa24958546c94a48fb8f8d6022213ca7c07c8a7)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2059511
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/conf/domain_conf.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 207a45d9ae..fbc285d981 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -27728,7 +27728,9 @@ virDomainDefIothreadShouldFormat(const virDomainDef *def)
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < def->niothreadids; i++) {
|
||||
- if (!def->iothreadids[i]->autofill)
|
||||
+ if (!def->iothreadids[i]->autofill ||
|
||||
+ def->iothreadids[i]->thread_pool_min >= 0 ||
|
||||
+ def->iothreadids[i]->thread_pool_max >= 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
74
SOURCES/libvirt-domcaps-Introduce-TPM-backendVersion.patch
Normal file
74
SOURCES/libvirt-domcaps-Introduce-TPM-backendVersion.patch
Normal file
@ -0,0 +1,74 @@
|
||||
From 266e8c9174249b4d5a53dc8a43a3d7d9481d8b1c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <266e8c9174249b4d5a53dc8a43a3d7d9481d8b1c@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 12 Jul 2022 15:58:12 +0200
|
||||
Subject: [PATCH] domcaps: Introduce TPM backendVersion
|
||||
|
||||
We accept TPM version in the domain XML. However, supported
|
||||
version depends on the host (swtpm_setup binary) and thus it may
|
||||
be tricky for users (or mgmt applications) chose a version.
|
||||
Introduce machinery for reporting supported version in domain
|
||||
capabilities.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 1277a9c884039e92765c977917420511f45e52e8)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103119
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
docs/formatdomaincaps.rst | 6 ++++++
|
||||
src/conf/domain_capabilities.c | 1 +
|
||||
src/conf/domain_capabilities.h | 1 +
|
||||
3 files changed, 8 insertions(+)
|
||||
|
||||
diff --git a/docs/formatdomaincaps.rst b/docs/formatdomaincaps.rst
|
||||
index 3c425a9a4a..70f46b972a 100644
|
||||
--- a/docs/formatdomaincaps.rst
|
||||
+++ b/docs/formatdomaincaps.rst
|
||||
@@ -513,6 +513,10 @@ TPM device capabilities are exposed under the ``tpm`` element. For instance:
|
||||
<value>passthrough</value>
|
||||
<value>emulator</value>
|
||||
</enum>
|
||||
+ <enum name='backendVersion'>
|
||||
+ <value>1.2</value>
|
||||
+ <value>2.0</value>
|
||||
+ </enum>
|
||||
</tpm>
|
||||
...
|
||||
</devices>
|
||||
@@ -522,6 +526,8 @@ TPM device capabilities are exposed under the ``tpm`` element. For instance:
|
||||
Options for the ``model`` attribute of the ``<tpm/>`` element.
|
||||
``backendModel``
|
||||
Options for the ``type`` attribute of the ``<tpm><backend/>`` element.
|
||||
+``backendVersion``
|
||||
+ Options for the ``version`` attribute of the ``<tpm><backend/>`` element.
|
||||
|
||||
Features
|
||||
~~~~~~~~
|
||||
diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
|
||||
index 895e8d00e8..33570a51db 100644
|
||||
--- a/src/conf/domain_capabilities.c
|
||||
+++ b/src/conf/domain_capabilities.c
|
||||
@@ -539,6 +539,7 @@ virDomainCapsDeviceTPMFormat(virBuffer *buf,
|
||||
|
||||
ENUM_PROCESS(tpm, model, virDomainTPMModelTypeToString);
|
||||
ENUM_PROCESS(tpm, backendModel, virDomainTPMBackendTypeToString);
|
||||
+ ENUM_PROCESS(tpm, backendVersion, virDomainTPMVersionTypeToString);
|
||||
|
||||
FORMAT_EPILOGUE(tpm);
|
||||
}
|
||||
diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
|
||||
index f2eed80b15..a526969cda 100644
|
||||
--- a/src/conf/domain_capabilities.h
|
||||
+++ b/src/conf/domain_capabilities.h
|
||||
@@ -127,6 +127,7 @@ struct _virDomainCapsDeviceTPM {
|
||||
virTristateBool supported;
|
||||
virDomainCapsEnum model; /* virDomainTPMModel */
|
||||
virDomainCapsEnum backendModel; /* virDomainTPMBackendType */
|
||||
+ virDomainCapsEnum backendVersion; /* virDomainTPMVersion */
|
||||
};
|
||||
|
||||
STATIC_ASSERT_ENUM(VIR_DOMAIN_FS_DRIVER_TYPE_LAST);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,77 +0,0 @@
|
||||
From bbab997f4307da65856dedd3f319037ce442d17e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <bbab997f4307da65856dedd3f319037ce442d17e@dist-git>
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Thu, 24 Feb 2022 18:41:29 +0000
|
||||
Subject: [PATCH] nwfilter: hold filter update lock when creating/deleting
|
||||
bindings
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The nwfilter update lock is historically acquired by the virt
|
||||
drivers in order to achieve serialization between nwfilter
|
||||
define/undefine, and instantiation/teardown of filters.
|
||||
|
||||
When running in the modular daemons, however, the mutex that
|
||||
the virt drivers are locking is in a completely different
|
||||
process from the mutex that the nwfilter driver is locking.
|
||||
|
||||
Serialization is lost and thus call from the virt driver to
|
||||
virNWFilterBindingCreateXML can deadlock with a concurrent
|
||||
call to the virNWFilterDefineXML method.
|
||||
|
||||
The solution is surprisingly easy, the update lock simply
|
||||
needs acquiring in the virNWFilterBindingCreateXML method
|
||||
and virNWFilterBindingUndefine method instead of in the
|
||||
virt drivers.
|
||||
|
||||
The only semantic difference here is that when a virtual
|
||||
machine has multiple NICs, the instantiation and teardown
|
||||
of filters is no longer serialized for the whole VM, but
|
||||
rather for each NIC. This should not be a problem since
|
||||
the virt drivers already need to cope with tearing down
|
||||
a partially created VM where only some of the NICs are
|
||||
setup.
|
||||
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 65dc79f50b96b34b2253601b8972d5ca90658f33)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2044379
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/nwfilter/nwfilter_driver.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c
|
||||
index 200451d6b1..a4479fc9fe 100644
|
||||
--- a/src/nwfilter/nwfilter_driver.c
|
||||
+++ b/src/nwfilter/nwfilter_driver.c
|
||||
@@ -760,12 +760,15 @@ nwfilterBindingCreateXML(virConnectPtr conn,
|
||||
if (!(ret = virGetNWFilterBinding(conn, def->portdevname, def->filter)))
|
||||
goto cleanup;
|
||||
|
||||
+ virNWFilterReadLockFilterUpdates();
|
||||
if (virNWFilterInstantiateFilter(driver, def) < 0) {
|
||||
+ virNWFilterUnlockFilterUpdates();
|
||||
virNWFilterBindingObjListRemove(driver->bindings, obj);
|
||||
virObjectUnref(ret);
|
||||
ret = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
+ virNWFilterUnlockFilterUpdates();
|
||||
virNWFilterBindingObjSave(obj, driver->bindingDir);
|
||||
|
||||
cleanup:
|
||||
@@ -802,7 +805,9 @@ nwfilterBindingDelete(virNWFilterBindingPtr binding)
|
||||
if (virNWFilterBindingDeleteEnsureACL(binding->conn, def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
+ virNWFilterReadLockFilterUpdates();
|
||||
virNWFilterTeardownFilter(def);
|
||||
+ virNWFilterUnlockFilterUpdates();
|
||||
virNWFilterBindingObjDelete(obj, driver->bindingDir);
|
||||
virNWFilterBindingObjListRemove(driver->bindings, obj);
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,183 @@
|
||||
From b020ddee84458afd8de70d9f296b91fa2b6a95fd Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b020ddee84458afd8de70d9f296b91fa2b6a95fd@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Fri, 15 Jul 2022 14:16:54 +0200
|
||||
Subject: [PATCH] qemu: Always assume support for
|
||||
QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE
|
||||
|
||||
The 'xbzrle-cache-size' parameter was added in qemu-2.11 thus all
|
||||
supported qemu versions now use the new code path.
|
||||
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 06e0ba3da71ec6c58024efe57d0f55d3d1352d60)
|
||||
|
||||
This commit is not strictly needed for fixing the following BZ, but it
|
||||
removes a code which will be never executed in RHEL 9 and backporting it
|
||||
avoids conflicts with the actual bug fix.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 56 +++++++++-----------------------
|
||||
src/qemu/qemu_migration_params.c | 18 ----------
|
||||
2 files changed, 16 insertions(+), 58 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 17e4c23199..256e126ae1 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -13172,10 +13172,8 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr dom,
|
||||
{
|
||||
virQEMUDriver *driver = dom->conn->privateData;
|
||||
virDomainObj *vm;
|
||||
- qemuDomainObjPrivate *priv;
|
||||
g_autoptr(qemuMigrationParams) migParams = NULL;
|
||||
int ret = -1;
|
||||
- int rc;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
@@ -13191,8 +13189,6 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr dom,
|
||||
if (virDomainObjCheckActive(vm) < 0)
|
||||
goto endjob;
|
||||
|
||||
- priv = vm->privateData;
|
||||
-
|
||||
if (!qemuMigrationCapsGet(vm, QEMU_MIGRATION_CAP_XBZRLE)) {
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("Compressed migration is not supported by "
|
||||
@@ -13200,22 +13196,14 @@ qemuDomainMigrateGetCompressionCache(virDomainPtr dom,
|
||||
goto endjob;
|
||||
}
|
||||
|
||||
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE)) {
|
||||
- if (qemuMigrationParamsFetch(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- &migParams) < 0)
|
||||
- goto endjob;
|
||||
+ if (qemuMigrationParamsFetch(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
+ &migParams) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
- if (qemuMigrationParamsGetULL(migParams,
|
||||
- QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
|
||||
- cacheSize) < 0)
|
||||
- goto endjob;
|
||||
- } else {
|
||||
- qemuDomainObjEnterMonitor(driver, vm);
|
||||
- rc = qemuMonitorGetMigrationCacheSize(priv->mon, cacheSize);
|
||||
- qemuDomainObjExitMonitor(vm);
|
||||
- if (rc < 0)
|
||||
- goto endjob;
|
||||
- }
|
||||
+ if (qemuMigrationParamsGetULL(migParams,
|
||||
+ QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
|
||||
+ cacheSize) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
ret = 0;
|
||||
|
||||
@@ -13234,10 +13222,8 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr dom,
|
||||
{
|
||||
virQEMUDriver *driver = dom->conn->privateData;
|
||||
virDomainObj *vm;
|
||||
- qemuDomainObjPrivate *priv;
|
||||
g_autoptr(qemuMigrationParams) migParams = NULL;
|
||||
int ret = -1;
|
||||
- int rc;
|
||||
|
||||
virCheckFlags(0, -1);
|
||||
|
||||
@@ -13253,8 +13239,6 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr dom,
|
||||
if (virDomainObjCheckActive(vm) < 0)
|
||||
goto endjob;
|
||||
|
||||
- priv = vm->privateData;
|
||||
-
|
||||
if (!qemuMigrationCapsGet(vm, QEMU_MIGRATION_CAP_XBZRLE)) {
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("Compressed migration is not supported by "
|
||||
@@ -13263,25 +13247,17 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr dom,
|
||||
}
|
||||
|
||||
VIR_DEBUG("Setting compression cache to %llu B", cacheSize);
|
||||
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE)) {
|
||||
- if (!(migParams = qemuMigrationParamsNew()))
|
||||
- goto endjob;
|
||||
+ if (!(migParams = qemuMigrationParamsNew()))
|
||||
+ goto endjob;
|
||||
|
||||
- if (qemuMigrationParamsSetULL(migParams,
|
||||
- QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
|
||||
- cacheSize) < 0)
|
||||
- goto endjob;
|
||||
+ if (qemuMigrationParamsSetULL(migParams,
|
||||
+ QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE,
|
||||
+ cacheSize) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
- if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- migParams, 0) < 0)
|
||||
- goto endjob;
|
||||
- } else {
|
||||
- qemuDomainObjEnterMonitor(driver, vm);
|
||||
- rc = qemuMonitorSetMigrationCacheSize(priv->mon, cacheSize);
|
||||
- qemuDomainObjExitMonitor(vm);
|
||||
- if (rc < 0)
|
||||
- goto endjob;
|
||||
- }
|
||||
+ if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
+ migParams, 0) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
ret = 0;
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 6ea0bde13a..0bce358ac3 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -886,10 +886,8 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
unsigned long apiFlags)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
- bool xbzrleCacheSize_old = false;
|
||||
g_autoptr(virJSONValue) params = NULL;
|
||||
g_autoptr(virJSONValue) caps = NULL;
|
||||
- qemuMigrationParam xbzrle = QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE;
|
||||
bool postcopyResume = !!(apiFlags & VIR_MIGRATE_POSTCOPY_RESUME);
|
||||
int ret = -1;
|
||||
|
||||
@@ -917,19 +915,6 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
}
|
||||
}
|
||||
|
||||
- /* If QEMU is too old to support xbzrle-cache-size migration parameter,
|
||||
- * we need to set it via migrate-set-cache-size and tell
|
||||
- * qemuMonitorSetMigrationParams to ignore this parameter.
|
||||
- */
|
||||
- if (migParams->params[xbzrle].set &&
|
||||
- !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE)) {
|
||||
- if (qemuMonitorSetMigrationCacheSize(priv->mon,
|
||||
- migParams->params[xbzrle].value.ull) < 0)
|
||||
- goto cleanup;
|
||||
- xbzrleCacheSize_old = true;
|
||||
- migParams->params[xbzrle].set = false;
|
||||
- }
|
||||
-
|
||||
if (!(params = qemuMigrationParamsToJSON(migParams, postcopyResume)))
|
||||
goto cleanup;
|
||||
|
||||
@@ -942,9 +927,6 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
cleanup:
|
||||
qemuDomainObjExitMonitor(vm);
|
||||
|
||||
- if (xbzrleCacheSize_old)
|
||||
- migParams->params[xbzrle].set = true;
|
||||
-
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
195
SOURCES/libvirt-qemu-Make-IOThread-changing-more-robust.patch
Normal file
195
SOURCES/libvirt-qemu-Make-IOThread-changing-more-robust.patch
Normal file
@ -0,0 +1,195 @@
|
||||
From 5853ac5261b2934ca300b24a7bd78cc4b377c90c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5853ac5261b2934ca300b24a7bd78cc4b377c90c@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 7 Jul 2022 17:37:46 +0200
|
||||
Subject: [PATCH] qemu: Make IOThread changing more robust
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
There are three APIs that allow changing IOThreads:
|
||||
|
||||
virDomainAddIOThread()
|
||||
virDomainDelIOThread()
|
||||
virDomainSetIOThreadParams()
|
||||
|
||||
In case of QEMU driver these are handled by
|
||||
qemuDomainChgIOThread() which attempts to be versatile enough to
|
||||
work on both inactive and live domain definitions at the same
|
||||
time. However, it's a bit clumsy - when a change to live
|
||||
definition succeeds but fails in inactive definition then there's
|
||||
no rollback. And somewhat rightfully so - changes to live
|
||||
definition are in general harder to roll back. Therefore, do what
|
||||
we do elsewhere (qemuDomainAttachDeviceLiveAndConfig(),
|
||||
qemuDomainDetachDeviceAliasLiveAndConfig(), ...):
|
||||
|
||||
1) do the change to inactive XML first,
|
||||
2) in fact, do the change to a copy of inactive XML,
|
||||
3) swap inactive XML and its copy only after everything
|
||||
succeeded.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 6db9c95a45d4e24cdcd5c009b7fe5da3745b5d59)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2059511
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 74 ++++++++++++++++++++++++------------------
|
||||
1 file changed, 43 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 3b5c3db67c..2c627396f1 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -5594,6 +5594,7 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
|
||||
{
|
||||
g_autoptr(virQEMUDriverConfig) cfg = NULL;
|
||||
qemuDomainObjPrivate *priv;
|
||||
+ g_autoptr(virDomainDef) defcopy = NULL;
|
||||
virDomainDef *def;
|
||||
virDomainDef *persistentDef;
|
||||
virDomainIOThreadIDDef *iothreaddef = NULL;
|
||||
@@ -5609,34 +5610,34 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
|
||||
if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (def) {
|
||||
- if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) {
|
||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
- _("IOThreads not supported with this binary"));
|
||||
- goto endjob;
|
||||
- }
|
||||
+ if (persistentDef) {
|
||||
+ /* Make a copy of persistent definition and do all the changes there.
|
||||
+ * Swap the definitions only after changes to live definition
|
||||
+ * succeeded. */
|
||||
+ if (!(defcopy = virDomainObjCopyPersistentDef(vm, driver->xmlopt,
|
||||
+ priv->qemuCaps)))
|
||||
+ return -1;
|
||||
|
||||
switch (action) {
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_ADD:
|
||||
- if (virDomainDriverAddIOThreadCheck(def, iothread.iothread_id) < 0)
|
||||
+ if (virDomainDriverAddIOThreadCheck(defcopy, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (qemuDomainHotplugAddIOThread(driver, vm, iothread.iothread_id) < 0)
|
||||
+ if (!virDomainIOThreadIDAdd(defcopy, iothread.iothread_id))
|
||||
goto endjob;
|
||||
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_DEL:
|
||||
- if (virDomainDriverDelIOThreadCheck(def, iothread.iothread_id) < 0)
|
||||
+ if (virDomainDriverDelIOThreadCheck(defcopy, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (qemuDomainHotplugDelIOThread(driver, vm, iothread.iothread_id) < 0)
|
||||
- goto endjob;
|
||||
+ virDomainIOThreadIDDel(defcopy, iothread.iothread_id);
|
||||
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_MOD:
|
||||
- iothreaddef = virDomainIOThreadIDFind(def, iothread.iothread_id);
|
||||
+ iothreaddef = virDomainIOThreadIDFind(defcopy, iothread.iothread_id);
|
||||
|
||||
if (!iothreaddef) {
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
@@ -5645,41 +5646,47 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
|
||||
goto endjob;
|
||||
}
|
||||
|
||||
- if (qemuDomainIOThreadValidate(iothreaddef, iothread, true) < 0)
|
||||
+ if (qemuDomainIOThreadValidate(iothreaddef, iothread, false) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (qemuDomainHotplugModIOThread(driver, vm, iothread) < 0)
|
||||
+ if (qemuDomainHotplugModIOThreadIDDef(iothreaddef, iothread) < 0) {
|
||||
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
+ _("configuring persistent polling values is not supported"));
|
||||
goto endjob;
|
||||
+ }
|
||||
|
||||
- qemuDomainHotplugModIOThreadIDDef(iothreaddef, iothread);
|
||||
break;
|
||||
-
|
||||
}
|
||||
-
|
||||
- qemuDomainSaveStatus(vm);
|
||||
}
|
||||
|
||||
- if (persistentDef) {
|
||||
+ if (def) {
|
||||
+ if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("IOThreads not supported with this binary"));
|
||||
+ goto endjob;
|
||||
+ }
|
||||
+
|
||||
switch (action) {
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_ADD:
|
||||
- if (virDomainDriverAddIOThreadCheck(persistentDef, iothread.iothread_id) < 0)
|
||||
+ if (virDomainDriverAddIOThreadCheck(def, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (!virDomainIOThreadIDAdd(persistentDef, iothread.iothread_id))
|
||||
+ if (qemuDomainHotplugAddIOThread(driver, vm, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_DEL:
|
||||
- if (virDomainDriverDelIOThreadCheck(persistentDef, iothread.iothread_id) < 0)
|
||||
+ if (virDomainDriverDelIOThreadCheck(def, iothread.iothread_id) < 0)
|
||||
goto endjob;
|
||||
|
||||
- virDomainIOThreadIDDel(persistentDef, iothread.iothread_id);
|
||||
+ if (qemuDomainHotplugDelIOThread(driver, vm, iothread.iothread_id) < 0)
|
||||
+ goto endjob;
|
||||
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_IOTHREAD_ACTION_MOD:
|
||||
- iothreaddef = virDomainIOThreadIDFind(persistentDef, iothread.iothread_id);
|
||||
+ iothreaddef = virDomainIOThreadIDFind(def, iothread.iothread_id);
|
||||
|
||||
if (!iothreaddef) {
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
@@ -5688,21 +5695,26 @@ qemuDomainChgIOThread(virQEMUDriver *driver,
|
||||
goto endjob;
|
||||
}
|
||||
|
||||
- if (qemuDomainIOThreadValidate(iothreaddef, iothread, false) < 0)
|
||||
+ if (qemuDomainIOThreadValidate(iothreaddef, iothread, true) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (qemuDomainHotplugModIOThreadIDDef(iothreaddef, iothread) < 0) {
|
||||
- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
- _("configuring persistent polling values is not supported"));
|
||||
+ if (qemuDomainHotplugModIOThread(driver, vm, iothread) < 0)
|
||||
goto endjob;
|
||||
- }
|
||||
|
||||
+ qemuDomainHotplugModIOThreadIDDef(iothreaddef, iothread);
|
||||
break;
|
||||
+
|
||||
}
|
||||
|
||||
- if (virDomainDefSave(persistentDef, driver->xmlopt,
|
||||
- cfg->configDir) < 0)
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
+ }
|
||||
+
|
||||
+ /* Finally, if no error until here, we can save config. */
|
||||
+ if (defcopy) {
|
||||
+ if (virDomainDefSave(defcopy, driver->xmlopt, cfg->configDir) < 0)
|
||||
goto endjob;
|
||||
+
|
||||
+ virDomainObjAssignDef(vm, &defcopy, false, NULL);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,148 @@
|
||||
From 4c906acec14efe3893491d749465ed7e285a825c Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <4c906acec14efe3893491d749465ed7e285a825c@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 29 Jun 2022 12:00:03 +0200
|
||||
Subject: [PATCH] qemu: Pass migration flags to qemuMigrationParamsApply
|
||||
|
||||
The flags will later be used to determine which parameters should
|
||||
actually be applied.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 0eae541257cd4f01c9d90db62056ad8d03c5af23)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2111070
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 6 +++---
|
||||
src/qemu/qemu_migration.c | 8 ++++----
|
||||
src/qemu/qemu_migration_params.c | 11 ++++++++---
|
||||
src/qemu/qemu_migration_params.h | 3 ++-
|
||||
4 files changed, 17 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 847c96639d..17e4c23199 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -13091,7 +13091,7 @@ qemuDomainMigrateSetMaxDowntime(virDomainPtr dom,
|
||||
goto endjob;
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- migParams) < 0)
|
||||
+ migParams, 0) < 0)
|
||||
goto endjob;
|
||||
} else {
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
@@ -13273,7 +13273,7 @@ qemuDomainMigrateSetCompressionCache(virDomainPtr dom,
|
||||
goto endjob;
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- migParams) < 0)
|
||||
+ migParams, 0) < 0)
|
||||
goto endjob;
|
||||
} else {
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
@@ -13360,7 +13360,7 @@ qemuDomainMigrateSetMaxSpeed(virDomainPtr dom,
|
||||
goto endjob;
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
- migParams) < 0)
|
||||
+ migParams, 0) < 0)
|
||||
goto endjob;
|
||||
} else {
|
||||
int rc;
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 76903d612b..8cbd73a809 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -3259,7 +3259,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver,
|
||||
}
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_MIGRATION_IN,
|
||||
- migParams) < 0)
|
||||
+ migParams, flags) < 0)
|
||||
goto error;
|
||||
|
||||
if (mig->nbd &&
|
||||
@@ -4847,7 +4847,7 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
goto error;
|
||||
|
||||
if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
- migParams) < 0)
|
||||
+ migParams, flags) < 0)
|
||||
goto error;
|
||||
|
||||
if (flags & VIR_MIGRATE_ZEROCOPY) {
|
||||
@@ -6941,7 +6941,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm,
|
||||
QEMU_DOMAIN_MIG_BANDWIDTH_MAX * 1024 * 1024) < 0)
|
||||
return -1;
|
||||
|
||||
- if (qemuMigrationParamsApply(driver, vm, asyncJob, migParams) < 0)
|
||||
+ if (qemuMigrationParamsApply(driver, vm, asyncJob, migParams, 0) < 0)
|
||||
return -1;
|
||||
|
||||
priv->migMaxBandwidth = QEMU_DOMAIN_MIG_BANDWIDTH_MAX;
|
||||
@@ -7037,7 +7037,7 @@ qemuMigrationSrcToFile(virQEMUDriver *driver, virDomainObj *vm,
|
||||
QEMU_MIGRATION_PARAM_MAX_BANDWIDTH,
|
||||
saveMigBandwidth * 1024 * 1024) == 0)
|
||||
ignore_value(qemuMigrationParamsApply(driver, vm, asyncJob,
|
||||
- migParams));
|
||||
+ migParams, 0));
|
||||
} else {
|
||||
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) {
|
||||
qemuMonitorSetMigrationSpeed(priv->mon, saveMigBandwidth);
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index cc66ed8229..398c07efd0 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -833,8 +833,10 @@ qemuMigrationCapsToJSON(virBitmap *caps,
|
||||
* @vm: domain object
|
||||
* @asyncJob: migration job
|
||||
* @migParams: migration parameters to send to QEMU
|
||||
+ * @apiFlags: migration flags, some of them may affect which parameters are applied
|
||||
*
|
||||
- * Send all parameters stored in @migParams to QEMU.
|
||||
+ * Send parameters stored in @migParams to QEMU. If @apiFlags is non-zero, some
|
||||
+ * parameters that do not make sense for the enabled flags will be ignored.
|
||||
*
|
||||
* Returns 0 on success, -1 on failure.
|
||||
*/
|
||||
@@ -842,7 +844,8 @@ int
|
||||
qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
int asyncJob,
|
||||
- qemuMigrationParams *migParams)
|
||||
+ qemuMigrationParams *migParams,
|
||||
+ unsigned long apiFlags G_GNUC_UNUSED)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
bool xbzrleCacheSize_old = false;
|
||||
@@ -1245,7 +1248,9 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
if (!virDomainObjIsActive(vm) || !origParams)
|
||||
goto cleanup;
|
||||
|
||||
- if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams) < 0)
|
||||
+ /* Do not pass apiFlags to qemuMigrationParamsApply here to make sure all
|
||||
+ * parameters and capabilities are reset. */
|
||||
+ if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams, 0) < 0)
|
||||
goto cleanup;
|
||||
|
||||
qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_params.h
|
||||
index d1184acded..9e990e09bd 100644
|
||||
--- a/src/qemu/qemu_migration_params.h
|
||||
+++ b/src/qemu/qemu_migration_params.h
|
||||
@@ -98,7 +98,8 @@ int
|
||||
qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
int asyncJob,
|
||||
- qemuMigrationParams *migParams);
|
||||
+ qemuMigrationParams *migParams,
|
||||
+ unsigned long apiFlags);
|
||||
|
||||
int
|
||||
qemuMigrationParamsEnableTLS(virQEMUDriver *driver,
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,38 @@
|
||||
From b35eb8dd4800be4dba22eb0a38da4d4d1c54521f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b35eb8dd4800be4dba22eb0a38da4d4d1c54521f@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 27 Jul 2022 15:40:12 +0200
|
||||
Subject: [PATCH] qemu: Properly release job in qemuDomainSaveInternal
|
||||
|
||||
The function would fail to release the job in case
|
||||
qemuMigrationSrcIsAllowed failed.
|
||||
|
||||
Fixes v8.5.0-157-g69e0e33873
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
|
||||
(cherry picked from commit 9c3d398df11024ef6c00a50c98fcc0f1f66c16a1)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1497907
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 256e126ae1..ebd6365f52 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -2655,7 +2655,7 @@ qemuDomainSaveInternal(virQEMUDriver *driver,
|
||||
goto cleanup;
|
||||
|
||||
if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_SAVE, 0))
|
||||
- goto cleanup;
|
||||
+ goto endjob;
|
||||
|
||||
if (!virDomainObjIsActive(vm)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,49 @@
|
||||
From b3d2dae261768c00b5d92203351ff6dd7cde468e Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b3d2dae261768c00b5d92203351ff6dd7cde468e@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 12 Jul 2022 15:58:17 +0200
|
||||
Subject: [PATCH] qemu: Report supported TPM version in domcaps
|
||||
|
||||
Now that we have everything prepared, we can start detecting
|
||||
supported TPM versions and setting corresponding values in
|
||||
backendModel struct.
|
||||
|
||||
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/340
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103119
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 430ab88ab17727ac9774ee5b47f09f69c57add73)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_capabilities.c | 15 ++++++++++++---
|
||||
1 file changed, 12 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index 2c3be3ecec..8586930266 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -6368,9 +6368,18 @@ virQEMUCapsFillDomainDeviceTPMCaps(virQEMUCaps *qemuCaps,
|
||||
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_PASSTHROUGH))
|
||||
VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendModel, VIR_DOMAIN_TPM_TYPE_PASSTHROUGH);
|
||||
- if (virTPMHasSwtpm() &&
|
||||
- virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_EMULATOR))
|
||||
- VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendModel, VIR_DOMAIN_TPM_TYPE_EMULATOR);
|
||||
+ if (virTPMHasSwtpm()) {
|
||||
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_TPM_EMULATOR))
|
||||
+ VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendModel, VIR_DOMAIN_TPM_TYPE_EMULATOR);
|
||||
+ if (virTPMSwtpmSetupCapsGet(VIR_TPM_SWTPM_SETUP_FEATURE_TPM_1_2)) {
|
||||
+ VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendVersion, VIR_DOMAIN_TPM_VERSION_1_2);
|
||||
+ tpm->backendVersion.report = true;
|
||||
+ }
|
||||
+ if (virTPMSwtpmSetupCapsGet(VIR_TPM_SWTPM_SETUP_FEATURE_TPM_2_0)) {
|
||||
+ VIR_DOMAIN_CAPS_ENUM_SET(tpm->backendVersion, VIR_DOMAIN_TPM_VERSION_2_0);
|
||||
+ tpm->backendVersion.report = true;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Need at least one frontend if it is to be usable by applications
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,85 @@
|
||||
From a1d825e5dcb8cbe0854fa852d25e5997a52d57cd Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <a1d825e5dcb8cbe0854fa852d25e5997a52d57cd@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 27 Jul 2022 14:33:23 +0200
|
||||
Subject: [PATCH] qemu: Restore original memory locking limit on reconnect
|
||||
|
||||
Commit v8.4.0-287-gd4d3bb8130 tried to make sure the original
|
||||
pre-migration memory locking limit is restored at the end of migration,
|
||||
but it missed the case when libvirt daemon is restarted during
|
||||
migration which needs to be aborted on reconnect.
|
||||
|
||||
And if this was not enough, I forgot to actually save the status XML
|
||||
after setting the field in priv (in the commit mentioned above and also
|
||||
in v8.4.0-291-gd375993ab3).
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107424
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit bb9badb9168ad0d40bca86b6463ef504624f096d)
|
||||
|
||||
Conflicts:
|
||||
src/qemu/qemu_migration.c
|
||||
- commit v8.5.0-2-gf9dcc01a0f not backported
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 13 +++++++++----
|
||||
src/qemu/qemu_process.c | 2 ++
|
||||
2 files changed, 11 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 9289df81eb..61fcaf4258 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -4672,10 +4672,12 @@ qemuMigrationSrcStart(virDomainObj *vm,
|
||||
switch (spec->destType) {
|
||||
case MIGRATION_DEST_HOST:
|
||||
if (STREQ(spec->dest.host.protocol, "rdma") &&
|
||||
- vm->def->mem.hard_limit > 0 &&
|
||||
- qemuDomainSetMaxMemLock(vm, vm->def->mem.hard_limit << 10,
|
||||
- &priv->preMigrationMemlock) < 0) {
|
||||
- return -1;
|
||||
+ vm->def->mem.hard_limit > 0) {
|
||||
+ if (qemuDomainSetMaxMemLock(vm, vm->def->mem.hard_limit << 10,
|
||||
+ &priv->preMigrationMemlock) < 0)
|
||||
+ return -1;
|
||||
+ /* Store the original memory locking limit */
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
}
|
||||
return qemuMonitorMigrateToHost(priv->mon, migrateFlags,
|
||||
spec->dest.host.protocol,
|
||||
@@ -4870,6 +4872,9 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
|
||||
if (qemuDomainSetMaxMemLock(vm, limit << 10, &priv->preMigrationMemlock) < 0)
|
||||
goto error;
|
||||
+
|
||||
+ /* Store the original memory locking limit */
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
}
|
||||
|
||||
if (storageMigration) {
|
||||
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||
index 771a623ef7..1c28d4b102 100644
|
||||
--- a/src/qemu/qemu_process.c
|
||||
+++ b/src/qemu/qemu_process.c
|
||||
@@ -3677,6 +3677,7 @@ qemuProcessRecoverMigration(virQEMUDriver *driver,
|
||||
{
|
||||
virDomainJobStatus migStatus = VIR_DOMAIN_JOB_STATUS_NONE;
|
||||
qemuDomainJobPrivate *jobPriv = job->privateData;
|
||||
+ qemuDomainObjPrivate *priv = vm->privateData;
|
||||
virDomainState state;
|
||||
int reason;
|
||||
int rc;
|
||||
@@ -3726,6 +3727,7 @@ qemuProcessRecoverMigration(virQEMUDriver *driver,
|
||||
|
||||
qemuMigrationParamsReset(driver, vm, VIR_ASYNC_JOB_NONE,
|
||||
jobPriv->migParams, job->apiFlags);
|
||||
+ qemuDomainSetMaxMemLock(vm, 0, &priv->preMigrationMemlock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,71 +0,0 @@
|
||||
From 84cedeca547585a51f6044186d241a501ff757d2 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <84cedeca547585a51f6044186d241a501ff757d2@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Mon, 31 Jan 2022 12:55:47 +0100
|
||||
Subject: [PATCH] qemu: Validate domain definition even on migration
|
||||
|
||||
When we are about to spawn QEMU, we validate the domain
|
||||
definition against qemuCaps. Except when domain is/was already
|
||||
running before (i.e. on incoming migration, snapshots, resume
|
||||
from a file). However, especially on incoming migration it may
|
||||
happen that the destination QEMU is different to the source
|
||||
QEMU, e.g. the destination QEMU may have some devices disabled.
|
||||
|
||||
And we have a function that validates devices/features requested
|
||||
in domain XML against the desired QEMU capabilities (aka
|
||||
qemuCaps) - it's virDomainDefValidate() which calls
|
||||
qemuValidateDomainDef() and qemuValidateDomainDeviceDef()
|
||||
subsequently.
|
||||
|
||||
But the problem here is that the validation function is
|
||||
explicitly skipped over in specific scenarios (like incoming
|
||||
migration, restore from a snapshot or previously saved file).
|
||||
|
||||
This in turn means that we may spawn QEMU and request
|
||||
device/features it doesn't support. When that happens QEMU fails
|
||||
to load migration stream:
|
||||
|
||||
qemu-kvm: ... 'virtio-mem-pci' is not a valid device model name
|
||||
|
||||
(NB, while the example shows one particular device, the problem
|
||||
is paramount)
|
||||
|
||||
This problem is easier to run into since we are slowly moving
|
||||
validation from qemu_command.c into said validation functions.
|
||||
|
||||
The solution is simple: do the validation in all cases. And while
|
||||
it may happen that users would be unable to migrate/restore a
|
||||
guest due to a bug in our validator, spawning QEMU without
|
||||
validation is worse (especially when you consider that users can
|
||||
supply their own XMLs for migrate/restore operations - these were
|
||||
never validated).
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2048435
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 517b8c12b98d7ac0bb4d582e0b491d50d776eb6d)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_process.c | 6 +-----
|
||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||
index 5c9ca0fe4f..5c6657a876 100644
|
||||
--- a/src/qemu/qemu_process.c
|
||||
+++ b/src/qemu/qemu_process.c
|
||||
@@ -5411,11 +5411,7 @@ qemuProcessStartValidate(virQEMUDriver *driver,
|
||||
|
||||
}
|
||||
|
||||
- /* Checks below should not be executed when starting a qemu process for a
|
||||
- * VM that was running before (migration, snapshots, save). It's more
|
||||
- * important to start such VM than keep the configuration clean */
|
||||
- if ((flags & VIR_QEMU_PROCESS_START_NEW) &&
|
||||
- virDomainDefValidate(vm->def, 0, driver->xmlopt, qemuCaps) < 0)
|
||||
+ if (virDomainDefValidate(vm->def, 0, driver->xmlopt, qemuCaps) < 0)
|
||||
return -1;
|
||||
|
||||
if (qemuProcessStartValidateGraphics(vm) < 0)
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,61 @@
|
||||
From d51e6092ed7977daf662ed1def0f6cd5cc6ba33d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d51e6092ed7977daf662ed1def0f6cd5cc6ba33d@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Wed, 27 Jul 2022 12:14:10 -0400
|
||||
Subject: [PATCH] qemu: don't call qemuMigrationSrcIsAllowedHostdev() from
|
||||
qemuMigrationDstPrepareFresh()
|
||||
|
||||
This call to qemuMigrationSrcIsAllowedHostdev() (which does a
|
||||
hardcoded fail of the migration if there is any PCI or mdev hostdev
|
||||
device in the domain) while doing the destination side of migration
|
||||
prep was found once the call to that same function was removed from
|
||||
the source side migration prep (commit 25883cd5).
|
||||
|
||||
According to jdenemar, for the V2 migration protocol, prep of the
|
||||
destination is the first step, so this *was* the proper place to do
|
||||
the check, but for V3 migration this is in a way redundant (since we
|
||||
will have already done the check on the source side (updated by
|
||||
25883cd5 to query QEMU rather than do a hardcoded fail)).
|
||||
|
||||
Of course it's possible that the source could support migration of a
|
||||
particular VFIO device, but the destination doesn't. But the current
|
||||
check on the destination side is worthless even in that case, since it
|
||||
is just *always* failing rather than querying QEMU; and QEMU can't be
|
||||
queried at the point where the destination check is happening, since
|
||||
it isn't yet running.
|
||||
|
||||
Anyway QEMU should complain when it's started if it's going to fail,
|
||||
so removing this check should just move the failure to happen a bit
|
||||
later. So the best solution to this problem is to simply remove the
|
||||
hardcoded check/fail from qemuMigrationDstPrepareFresh() and rely on
|
||||
QEMU to fail if it needs to.
|
||||
|
||||
Fixes: 25883cd5f0b188f2417f294b7d219a77b219f7c2
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 640d185f01858b7a8db401235c929ac4798592d0)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1497907
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 61fcaf4258..e3ba4c3f78 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -3382,9 +3382,6 @@ qemuMigrationDstPrepareFresh(virQEMUDriver *driver,
|
||||
QEMU_MIGRATION_COOKIE_CAPS;
|
||||
}
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowedHostdev(*def))
|
||||
- goto cleanup;
|
||||
-
|
||||
/* Let migration hook filter domain XML */
|
||||
if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
|
||||
g_autofree char *xml = NULL;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,87 @@
|
||||
From 80ac99d0f947f5e2fe4ff7fe9fb63b6dc6cbc1bb Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <80ac99d0f947f5e2fe4ff7fe9fb63b6dc6cbc1bb@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 01:56:11 -0400
|
||||
Subject: [PATCH] qemu: don't try to query QEMU about migration blockers during
|
||||
offline migration
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The new code that queries QEMU about migration blockers was put at the
|
||||
top of qemuMigrationSrcIsAllowed(), but that function can also be
|
||||
called in the case of offline migration (ie when the domain is
|
||||
inactive / QEMU isn't running). This check should have been put inside
|
||||
the "if (!(flags & VIR_MIGRATE_OFFLINE))" conditional, so let's move
|
||||
it there.
|
||||
|
||||
Fixes: 156e99f686690855be4e45d9b8b3194191a8bc31
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 2dd5587f1dc8e2cf4e6e0a4e4cf576b8183b33cd)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 39 +++++++++++++++++++++------------------
|
||||
1 file changed, 21 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 735eb02673..96c4c0f1da 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1458,24 +1458,6 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
int nsnapshots;
|
||||
int pauseReason;
|
||||
size_t i;
|
||||
- bool blockedReasonsCap = virQEMUCapsGet(priv->qemuCaps,
|
||||
- QEMU_CAPS_MIGRATION_BLOCKED_REASONS);
|
||||
-
|
||||
- /* Ask qemu if it has a migration blocker */
|
||||
- if (blockedReasonsCap) {
|
||||
- g_auto(GStrv) blockers = NULL;
|
||||
- if (qemuDomainGetMigrationBlockers(driver, vm,
|
||||
- VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
- &blockers) < 0)
|
||||
- return false;
|
||||
-
|
||||
- if (blockers && blockers[0]) {
|
||||
- g_autofree char *reasons = g_strjoinv("; ", blockers);
|
||||
- virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
- _("cannot migrate domain: %s"), reasons);
|
||||
- return false;
|
||||
- }
|
||||
- }
|
||||
|
||||
/* perform these checks only when migrating to remote hosts */
|
||||
if (remote) {
|
||||
@@ -1493,6 +1475,27 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
|
||||
/* following checks don't make sense for offline migration */
|
||||
if (!(flags & VIR_MIGRATE_OFFLINE)) {
|
||||
+ bool blockedReasonsCap = virQEMUCapsGet(priv->qemuCaps,
|
||||
+ QEMU_CAPS_MIGRATION_BLOCKED_REASONS);
|
||||
+
|
||||
+ /* Ask qemu if it has a migration blocker */
|
||||
+ if (blockedReasonsCap) {
|
||||
+ g_auto(GStrv) blockers = NULL;
|
||||
+
|
||||
+ if (qemuDomainGetMigrationBlockers(driver, vm,
|
||||
+ VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
+ &blockers) < 0) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if (blockers && blockers[0]) {
|
||||
+ g_autofree char *reasons = g_strjoinv("; ", blockers);
|
||||
+ virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
+ _("cannot migrate domain: %s"), reasons);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (remote) {
|
||||
/* cancel migration if disk I/O error is emitted while migrating */
|
||||
if (flags & VIR_MIGRATE_ABORT_ON_ERROR &&
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 1911ebd62779701aae271dd3e047415bfd2cd303 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <1911ebd62779701aae271dd3e047415bfd2cd303@dist-git>
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Thu, 20 Jan 2022 14:53:33 +0100
|
||||
Subject: [PATCH] qemu: fix inactive snapshot revert
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The commit splitting out the qemuSnapshotRevertInactive function
|
||||
dropped the 'defined = true' line by accident and instead
|
||||
returned -1, leaving the user with a cryptic error:
|
||||
error: An error occurred, but the cause is unknown
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2039136
|
||||
https://gitlab.com/libvirt/libvirt/-/issues/266
|
||||
|
||||
Fixes: 85e4a13c3f19078fb6af5ffb4a80022c142cbc7e
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 76deb656132bb8817ddae4b7f417930c4db824c9)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_snapshot.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
|
||||
index f92e00f9c0..ac7bab90f8 100644
|
||||
--- a/src/qemu/qemu_snapshot.c
|
||||
+++ b/src/qemu/qemu_snapshot.c
|
||||
@@ -2193,7 +2193,7 @@ qemuSnapshotRevertInactive(virDomainObj *vm,
|
||||
|
||||
if (*inactiveConfig) {
|
||||
virDomainObjAssignDef(vm, inactiveConfig, false, NULL);
|
||||
- return -1;
|
||||
+ defined = true;
|
||||
}
|
||||
|
||||
if (flags & (VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
|
||||
--
|
||||
2.35.0
|
||||
|
@ -0,0 +1,206 @@
|
||||
From 81f8b07ed1e4e485ded7f366739c110351120785 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <81f8b07ed1e4e485ded7f366739c110351120785@dist-git>
|
||||
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 19:29:05 +0200
|
||||
Subject: [PATCH] qemu: introduce capability
|
||||
QEMU_CAPS_MIGRATION_BLOCKED_REASONS
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
since qemu 6.0, if migration is blocked for some reason, 'query-migrate'
|
||||
will return an array of error strings describing the migration blockers.
|
||||
This can be used to check whether there are any devices blocking
|
||||
migration, etc.
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
(cherry picked from commit 1e9d84d9f9513a73572842db30e3d1445e892291)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_capabilities.c | 2 ++
|
||||
src/qemu/qemu_capabilities.h | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml | 1 +
|
||||
tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml | 1 +
|
||||
13 files changed, 14 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||
index 8586930266..48002f3b58 100644
|
||||
--- a/src/qemu/qemu_capabilities.c
|
||||
+++ b/src/qemu/qemu_capabilities.c
|
||||
@@ -671,6 +671,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
|
||||
"chardev.qemu-vdagent", /* QEMU_CAPS_CHARDEV_QEMU_VDAGENT */
|
||||
"display-dbus", /* QEMU_CAPS_DISPLAY_DBUS */
|
||||
"iothread.thread-pool-max", /* QEMU_CAPS_IOTHREAD_THREAD_POOL_MAX */
|
||||
+ "migration.blocked-reasons", /* QEMU_CAPS_MIGRATION_BLOCKED_REASONS */
|
||||
);
|
||||
|
||||
|
||||
@@ -1623,6 +1624,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
|
||||
{ "chardev-add/arg-type/backend/+qemu-vdagent", QEMU_CAPS_CHARDEV_QEMU_VDAGENT },
|
||||
{ "query-display-options/ret-type/+dbus", QEMU_CAPS_DISPLAY_DBUS },
|
||||
{ "object-add/arg-type/+iothread/thread-pool-max", QEMU_CAPS_IOTHREAD_THREAD_POOL_MAX },
|
||||
+ { "query-migrate/ret-type/blocked-reasons", QEMU_CAPS_MIGRATION_BLOCKED_REASONS },
|
||||
};
|
||||
|
||||
typedef struct _virQEMUCapsObjectTypeProps virQEMUCapsObjectTypeProps;
|
||||
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||||
index 6f35ba1485..570e43292d 100644
|
||||
--- a/src/qemu/qemu_capabilities.h
|
||||
+++ b/src/qemu/qemu_capabilities.h
|
||||
@@ -650,6 +650,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
|
||||
QEMU_CAPS_CHARDEV_QEMU_VDAGENT, /* -chardev qemu-vdagent */
|
||||
QEMU_CAPS_DISPLAY_DBUS, /* -display dbus */
|
||||
QEMU_CAPS_IOTHREAD_THREAD_POOL_MAX, /* -object iothread.thread-pool-max */
|
||||
+ QEMU_CAPS_MIGRATION_BLOCKED_REASONS, /* query-migrate returns 'blocked-reasons */
|
||||
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml
|
||||
index 4b4cc2d3aa..3e48d17811 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml
|
||||
@@ -189,6 +189,7 @@
|
||||
<flag name='memory-backend-file.prealloc-threads'/>
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>61700242</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml
|
||||
index 06543071aa..790b7221d4 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml
|
||||
@@ -147,6 +147,7 @@
|
||||
<flag name='memory-backend-file.prealloc-threads'/>
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>39100242</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml
|
||||
index 8c61bf8a84..86c3732c72 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml
|
||||
@@ -231,6 +231,7 @@
|
||||
<flag name='memory-backend-file.prealloc-threads'/>
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100242</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml
|
||||
index afd8f606eb..bd76a7a398 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml
|
||||
@@ -236,6 +236,7 @@
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6001000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100243</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml
|
||||
index 86fc46918f..6ed51ec796 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.2.0.aarch64.xml
|
||||
@@ -201,6 +201,7 @@
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6001050</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>61700244</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml
|
||||
index 983b54430d..1a98fe122e 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.2.0.ppc64.xml
|
||||
@@ -196,6 +196,7 @@
|
||||
<flag name='memory-backend-file.prealloc-threads'/>
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6002000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>42900244</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml
|
||||
index 19605d93ae..a77efaaa37 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_6.2.0.x86_64.xml
|
||||
@@ -238,6 +238,7 @@
|
||||
<flag name='virtio-iommu-pci'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6002000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100244</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml
|
||||
index e24e2235fb..6848a075a8 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.0.0.aarch64.xml
|
||||
@@ -209,6 +209,7 @@
|
||||
<flag name='virtio-iommu.boot-bypass'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>6002092</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>61700243</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml
|
||||
index 83e0f50e3a..cf4286b78b 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.0.0.ppc64.xml
|
||||
@@ -213,6 +213,7 @@
|
||||
<flag name='virtio-iommu.boot-bypass'/>
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>7000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>42900243</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml
|
||||
index 05f844fd5b..8e2c1652f9 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.0.0.x86_64.xml
|
||||
@@ -243,6 +243,7 @@
|
||||
<flag name='virtio-net.rss'/>
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
<flag name='display-dbus'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>7000000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100243</microcodeVersion>
|
||||
diff --git a/tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml
|
||||
index 3707d9b7c9..9bdb207c4e 100644
|
||||
--- a/tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml
|
||||
+++ b/tests/qemucapabilitiesdata/caps_7.1.0.x86_64.xml
|
||||
@@ -244,6 +244,7 @@
|
||||
<flag name='chardev.qemu-vdagent'/>
|
||||
<flag name='display-dbus'/>
|
||||
<flag name='iothread.thread-pool-max'/>
|
||||
+ <flag name='migration.blocked-reasons'/>
|
||||
<version>7000050</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<microcodeVersion>43100244</microcodeVersion>
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,222 +0,0 @@
|
||||
From 7bcd75ca73d8eda05fafa8342309a8fd058cd326 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <7bcd75ca73d8eda05fafa8342309a8fd058cd326@dist-git>
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Thu, 24 Feb 2022 19:02:32 +0000
|
||||
Subject: [PATCH] qemu,lxc: remove use to nwfilter update lock
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Now that the virNWFilterBinding APIs are using the nwfilter
|
||||
update lock directly, there is no need for the virt drivers
|
||||
to do it themselves.
|
||||
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 5f8b090f421cd6a6c46f44905431491e2d3cf8f5)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2044379
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/lxc/lxc_driver.c | 6 ------
|
||||
src/qemu/qemu_driver.c | 18 ------------------
|
||||
src/qemu/qemu_migration.c | 3 ---
|
||||
src/qemu/qemu_process.c | 4 ----
|
||||
4 files changed, 31 deletions(-)
|
||||
|
||||
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
|
||||
index 7bc39120ee..e581c62668 100644
|
||||
--- a/src/lxc/lxc_driver.c
|
||||
+++ b/src/lxc/lxc_driver.c
|
||||
@@ -971,8 +971,6 @@ static int lxcDomainCreateWithFiles(virDomainPtr dom,
|
||||
|
||||
virCheckFlags(VIR_DOMAIN_START_AUTODESTROY, -1);
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
if (!(vm = lxcDomObjFromDomain(dom)))
|
||||
goto cleanup;
|
||||
|
||||
@@ -1014,7 +1012,6 @@ static int lxcDomainCreateWithFiles(virDomainPtr dom,
|
||||
cleanup:
|
||||
virDomainObjEndAPI(&vm);
|
||||
virObjectEventStateQueue(driver->domainEventState, event);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1080,8 +1077,6 @@ lxcDomainCreateXMLWithFiles(virConnectPtr conn,
|
||||
if (flags & VIR_DOMAIN_START_VALIDATE)
|
||||
parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA;
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
if (!(caps = virLXCDriverGetCapabilities(driver, false)))
|
||||
goto cleanup;
|
||||
|
||||
@@ -1138,7 +1133,6 @@ lxcDomainCreateXMLWithFiles(virConnectPtr conn,
|
||||
cleanup:
|
||||
virDomainObjEndAPI(&vm);
|
||||
virObjectEventStateQueue(driver->domainEventState, event);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
return dom;
|
||||
}
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index d3d76c003f..00a86b6c7c 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -1603,8 +1603,6 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
|
||||
if (flags & VIR_DOMAIN_START_AUTODESTROY)
|
||||
start_flags |= VIR_QEMU_PROCESS_START_AUTODESTROY;
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
if (!(def = virDomainDefParseString(xml, driver->xmlopt,
|
||||
NULL, parse_flags)))
|
||||
goto cleanup;
|
||||
@@ -1658,7 +1656,6 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
|
||||
virDomainObjEndAPI(&vm);
|
||||
virObjectEventStateQueue(driver->domainEventState, event);
|
||||
virObjectEventStateQueue(driver->domainEventState, event2);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
return dom;
|
||||
}
|
||||
|
||||
@@ -5773,8 +5770,6 @@ qemuDomainRestoreFlags(virConnectPtr conn,
|
||||
VIR_DOMAIN_SAVE_PAUSED, -1);
|
||||
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
fd = qemuSaveImageOpen(driver, NULL, path, &def, &data,
|
||||
(flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) != 0,
|
||||
&wrapperFd, false, false);
|
||||
@@ -5846,7 +5841,6 @@ qemuDomainRestoreFlags(virConnectPtr conn,
|
||||
if (vm && ret < 0)
|
||||
qemuDomainRemoveInactiveJob(driver, vm);
|
||||
virDomainObjEndAPI(&vm);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -6395,8 +6389,6 @@ qemuDomainCreateWithFlags(virDomainPtr dom, unsigned int flags)
|
||||
VIR_DOMAIN_START_BYPASS_CACHE |
|
||||
VIR_DOMAIN_START_FORCE_BOOT, -1);
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
if (!(vm = qemuDomainObjFromDomain(dom)))
|
||||
goto cleanup;
|
||||
|
||||
@@ -6425,7 +6417,6 @@ qemuDomainCreateWithFlags(virDomainPtr dom, unsigned int flags)
|
||||
|
||||
cleanup:
|
||||
virDomainObjEndAPI(&vm);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -7811,8 +7802,6 @@ qemuDomainAttachDeviceFlags(virDomainPtr dom,
|
||||
virDomainObj *vm = NULL;
|
||||
int ret = -1;
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
if (!(vm = qemuDomainObjFromDomain(dom)))
|
||||
goto cleanup;
|
||||
|
||||
@@ -7835,7 +7824,6 @@ qemuDomainAttachDeviceFlags(virDomainPtr dom,
|
||||
|
||||
cleanup:
|
||||
virDomainObjEndAPI(&vm);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -7865,8 +7853,6 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
|
||||
VIR_DOMAIN_AFFECT_CONFIG |
|
||||
VIR_DOMAIN_DEVICE_MODIFY_FORCE, -1);
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
cfg = virQEMUDriverGetConfig(driver);
|
||||
|
||||
if (!(vm = qemuDomainObjFromDomain(dom)))
|
||||
@@ -7943,7 +7929,6 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
|
||||
if (dev != dev_copy)
|
||||
virDomainDeviceDefFree(dev_copy);
|
||||
virDomainObjEndAPI(&vm);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -13644,8 +13629,6 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
||||
virDomainObj *vm = NULL;
|
||||
int ret = -1;
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
if (!(vm = qemuDomObjFromSnapshot(snapshot)))
|
||||
goto cleanup;
|
||||
|
||||
@@ -13656,7 +13639,6 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
||||
|
||||
cleanup:
|
||||
virDomainObjEndAPI(&vm);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
return ret;
|
||||
}
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 2635ef1162..358cb9c3b5 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -2779,8 +2779,6 @@ qemuMigrationDstPrepareAny(virQEMUDriver *driver,
|
||||
int rv;
|
||||
g_autofree char *tlsAlias = NULL;
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
if (flags & VIR_MIGRATE_OFFLINE) {
|
||||
if (flags & (VIR_MIGRATE_NON_SHARED_DISK |
|
||||
VIR_MIGRATE_NON_SHARED_INC)) {
|
||||
@@ -3101,7 +3099,6 @@ qemuMigrationDstPrepareAny(virQEMUDriver *driver,
|
||||
virDomainObjEndAPI(&vm);
|
||||
virObjectEventStateQueue(driver->domainEventState, event);
|
||||
qemuMigrationCookieFree(mig);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
virErrorRestore(&origErr);
|
||||
return ret;
|
||||
|
||||
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||
index 5c6657a876..914f9bef8b 100644
|
||||
--- a/src/qemu/qemu_process.c
|
||||
+++ b/src/qemu/qemu_process.c
|
||||
@@ -8986,7 +8986,6 @@ qemuProcessReconnect(void *opaque)
|
||||
qemuDomainRemoveInactiveJob(driver, obj);
|
||||
}
|
||||
virDomainObjEndAPI(&obj);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
virIdentitySetCurrent(NULL);
|
||||
return;
|
||||
|
||||
@@ -9038,8 +9037,6 @@ qemuProcessReconnectHelper(virDomainObj *obj,
|
||||
data->obj = obj;
|
||||
data->identity = virIdentityGetCurrent();
|
||||
|
||||
- virNWFilterReadLockFilterUpdates();
|
||||
-
|
||||
/* this lock and reference will be eventually transferred to the thread
|
||||
* that handles the reconnect */
|
||||
virObjectLock(obj);
|
||||
@@ -9062,7 +9059,6 @@ qemuProcessReconnectHelper(virDomainObj *obj,
|
||||
qemuDomainRemoveInactiveJobLocked(src->driver, obj);
|
||||
|
||||
virDomainObjEndAPI(&obj);
|
||||
- virNWFilterUnlockFilterUpdates();
|
||||
g_clear_object(&data->identity);
|
||||
VIR_FREE(data);
|
||||
return -1;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,140 @@
|
||||
From 90d326f60706a990db3ed49ba338d911471578c0 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <90d326f60706a990db3ed49ba338d911471578c0@dist-git>
|
||||
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 19:29:10 +0200
|
||||
Subject: [PATCH] qemu: new function to retrieve migration blocker reasons from
|
||||
QEMU
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Since QEMU 6.0, if migration is blocked for some reason,
|
||||
'query-migrate' will return an array of error strings describing the
|
||||
migration blockers. This can be used to check whether there are any
|
||||
devices, or other conditions, that would cause migration to fail.
|
||||
|
||||
This patch adds a function that sends this query via a QMP command and
|
||||
returns the resulting array of reasons. qemuMigrationSrcIsAllowed()
|
||||
will be able to use the new function to ask QEMU for migration
|
||||
blockers, instead of the hardcoded guesses that libvirt currently has.
|
||||
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
(cherry picked from commit 7e52c4839fabac2d19c6f22c99142e992e3d898e)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_monitor.c | 12 ++++++++++
|
||||
src/qemu/qemu_monitor.h | 4 ++++
|
||||
src/qemu/qemu_monitor_json.c | 46 ++++++++++++++++++++++++++++++++++++
|
||||
src/qemu/qemu_monitor_json.h | 3 +++
|
||||
4 files changed, 65 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
|
||||
index fda5d2f368..865a3e69ed 100644
|
||||
--- a/src/qemu/qemu_monitor.c
|
||||
+++ b/src/qemu/qemu_monitor.c
|
||||
@@ -4541,3 +4541,15 @@ qemuMonitorMigrateRecover(qemuMonitor *mon,
|
||||
|
||||
return qemuMonitorJSONMigrateRecover(mon, uri);
|
||||
}
|
||||
+
|
||||
+
|
||||
+int
|
||||
+qemuMonitorGetMigrationBlockers(qemuMonitor *mon,
|
||||
+ char ***blockers)
|
||||
+{
|
||||
+ VIR_DEBUG("blockers=%p", blockers);
|
||||
+
|
||||
+ QEMU_CHECK_MONITOR(mon);
|
||||
+
|
||||
+ return qemuMonitorJSONGetMigrationBlockers(mon, blockers);
|
||||
+}
|
||||
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
|
||||
index 95267ec6c7..0c3f023419 100644
|
||||
--- a/src/qemu/qemu_monitor.h
|
||||
+++ b/src/qemu/qemu_monitor.h
|
||||
@@ -1554,3 +1554,7 @@ qemuMonitorChangeMemoryRequestedSize(qemuMonitor *mon,
|
||||
int
|
||||
qemuMonitorMigrateRecover(qemuMonitor *mon,
|
||||
const char *uri);
|
||||
+
|
||||
+int
|
||||
+qemuMonitorGetMigrationBlockers(qemuMonitor *mon,
|
||||
+ char ***blockers);
|
||||
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
|
||||
index 3aad2ab212..84f4589c42 100644
|
||||
--- a/src/qemu/qemu_monitor_json.c
|
||||
+++ b/src/qemu/qemu_monitor_json.c
|
||||
@@ -3434,6 +3434,52 @@ int qemuMonitorJSONMigrate(qemuMonitor *mon,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+
|
||||
+/*
|
||||
+ * Get the exposed migration blockers.
|
||||
+ *
|
||||
+ * This function assume qemu has the capability of request them.
|
||||
+ *
|
||||
+ * It returns a NULL terminated array on blockers if there are any, or it set
|
||||
+ * it to NULL otherwise.
|
||||
+ */
|
||||
+int
|
||||
+qemuMonitorJSONGetMigrationBlockers(qemuMonitor *mon,
|
||||
+ char ***blockers)
|
||||
+{
|
||||
+ g_autoptr(virJSONValue) cmd = NULL;
|
||||
+ g_autoptr(virJSONValue) reply = NULL;
|
||||
+ virJSONValue *data;
|
||||
+ virJSONValue *jblockers;
|
||||
+ size_t i;
|
||||
+
|
||||
+ *blockers = NULL;
|
||||
+ if (!(cmd = qemuMonitorJSONMakeCommand("query-migrate", NULL)))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_OBJECT) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ data = virJSONValueObjectGetObject(reply, "return");
|
||||
+
|
||||
+ if (!(jblockers = virJSONValueObjectGetArray(data, "blocked-reasons")))
|
||||
+ return 0;
|
||||
+
|
||||
+ *blockers = g_new0(char *, virJSONValueArraySize(jblockers) + 1);
|
||||
+ for (i = 0; i < virJSONValueArraySize(jblockers); i++) {
|
||||
+ virJSONValue *jblocker = virJSONValueArrayGet(jblockers, i);
|
||||
+ const char *blocker = virJSONValueGetString(jblocker);
|
||||
+
|
||||
+ (*blockers)[i] = g_strdup(blocker);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
int qemuMonitorJSONMigrateCancel(qemuMonitor *mon)
|
||||
{
|
||||
g_autoptr(virJSONValue) cmd = qemuMonitorJSONMakeCommand("migrate_cancel", NULL);
|
||||
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
|
||||
index ad3853ae69..4e7d6a1a8d 100644
|
||||
--- a/src/qemu/qemu_monitor_json.h
|
||||
+++ b/src/qemu/qemu_monitor_json.h
|
||||
@@ -199,6 +199,9 @@ qemuMonitorJSONMigrate(qemuMonitor *mon,
|
||||
unsigned int flags,
|
||||
const char *uri);
|
||||
int
|
||||
+qemuMonitorJSONGetMigrationBlockers(qemuMonitor *mon,
|
||||
+ char ***blockers);
|
||||
+int
|
||||
qemuMonitorJSONGetSpiceMigrationStatus(qemuMonitor *mon,
|
||||
bool *spice_migrated);
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,80 @@
|
||||
From 9764a6c484d4f3586b0e0be33e8c53de63b11edd Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9764a6c484d4f3586b0e0be33e8c53de63b11edd@dist-git>
|
||||
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 19:29:13 +0200
|
||||
Subject: [PATCH] qemu: query QEMU for migration blockers before our own
|
||||
harcoded checks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Since QEMU 6.0, if QEMU knows that a migration would fail,
|
||||
'query-migrate' will return an array of error strings describing the
|
||||
migration blockers. This can be used to check whether there are any
|
||||
devices/conditions blocking migration.
|
||||
|
||||
This patch adds a call to this query at the top of
|
||||
qemuMigrationSrcIsAllowed().
|
||||
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
(cherry picked from commit 156e99f686690855be4e45d9b8b3194191a8bc31)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 30 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 30 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 2a6b7b7819..cfb7626bb0 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1415,6 +1415,22 @@ qemuMigrationSrcIsAllowedHostdev(const virDomainDef *def)
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+qemuDomainGetMigrationBlockers(virQEMUDriver *driver,
|
||||
+ virDomainObj *vm,
|
||||
+ char ***blockers)
|
||||
+{
|
||||
+ qemuDomainObjPrivate *priv = vm->privateData;
|
||||
+ int rc;
|
||||
+
|
||||
+ qemuDomainObjEnterMonitor(driver, vm);
|
||||
+ rc = qemuMonitorGetMigrationBlockers(priv->mon, blockers);
|
||||
+ qemuDomainObjExitMonitor(vm);
|
||||
+
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* qemuMigrationSrcIsAllowed:
|
||||
* @driver: qemu driver struct
|
||||
@@ -1440,6 +1456,20 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
int pauseReason;
|
||||
size_t i;
|
||||
|
||||
+ /* Ask qemu if it has a migration blocker */
|
||||
+ if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_BLOCKED_REASONS)) {
|
||||
+ g_auto(GStrv) blockers = NULL;
|
||||
+ if (qemuDomainGetMigrationBlockers(driver, vm, &blockers) < 0)
|
||||
+ return false;
|
||||
+
|
||||
+ if (blockers && blockers[0]) {
|
||||
+ g_autofree char *reasons = g_strjoinv("; ", blockers);
|
||||
+ virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
+ _("cannot migrate domain: %s"), reasons);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* perform these checks only when migrating to remote hosts */
|
||||
if (remote) {
|
||||
nsnapshots = virDomainSnapshotObjListNum(vm->snapshots, NULL, 0);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,58 @@
|
||||
From 0ba11af2300d0aaf80456575e03848f843ae29de Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0ba11af2300d0aaf80456575e03848f843ae29de@dist-git>
|
||||
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 19:29:15 +0200
|
||||
Subject: [PATCH] qemu: remove hardcoded migration fail for vDPA devices if we
|
||||
can ask QEMU
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
vDPA devices will be migratable soon, so we shouldn't unconditionally
|
||||
block migration of any domain with a vDPA device. Instead, we should
|
||||
rely on QEMU to make the decision when that info is available from the
|
||||
query-migrate QMP command (QEMU versions too old to have that info in
|
||||
the results of query-migrate don't support migration of vDPA devices,
|
||||
so in that case we will continue to unconditionally block migration).
|
||||
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||
|
||||
(cherry picked from commit 2103807e330487952f423d86f541a7a28e003e95)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index cfb7626bb0..2f77e45abf 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1455,9 +1455,11 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
int nsnapshots;
|
||||
int pauseReason;
|
||||
size_t i;
|
||||
+ bool blockedReasonsCap = virQEMUCapsGet(priv->qemuCaps,
|
||||
+ QEMU_CAPS_MIGRATION_BLOCKED_REASONS);
|
||||
|
||||
- /* Ask qemu if it has a migration blocker */
|
||||
- if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_BLOCKED_REASONS)) {
|
||||
+ /* Ask qemu if it have a migration blocker */
|
||||
+ if (blockedReasonsCap) {
|
||||
g_auto(GStrv) blockers = NULL;
|
||||
if (qemuDomainGetMigrationBlockers(driver, vm, &blockers) < 0)
|
||||
return false;
|
||||
@@ -1576,7 +1578,7 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
virDomainNetDef *net = vm->def->nets[i];
|
||||
qemuSlirp *slirp;
|
||||
|
||||
- if (net->type == VIR_DOMAIN_NET_TYPE_VDPA) {
|
||||
+ if (!blockedReasonsCap && net->type == VIR_DOMAIN_NET_TYPE_VDPA) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("vDPA devices cannot be migrated"));
|
||||
return false;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,62 @@
|
||||
From 8f2cd77dc208cfa90b37faa18b092ca4a76a0716 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <8f2cd77dc208cfa90b37faa18b092ca4a76a0716@dist-git>
|
||||
From: Laine Stump <laine@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 02:03:49 -0400
|
||||
Subject: [PATCH] qemu: skip hardcoded hostdev migration check if QEMU can do
|
||||
it for us
|
||||
|
||||
libvirt currently will block migration for any vfio-assigned device
|
||||
unless it is a network device that is associated with a virtio-net
|
||||
failover device (ie. if the hostdev object has a teaming->type ==
|
||||
VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT).
|
||||
|
||||
In the future there will be other vfio devices that can be migrated,
|
||||
so we don't want to rely on this hardcoded block. QEMU 6.0+ will
|
||||
anyway inform us of any devices that will block migration (as a part
|
||||
of qemuDomainGetMigrationBlockers()), so we only need to do the
|
||||
hardcoded check in the case of old QEMU that can't provide that
|
||||
information.
|
||||
|
||||
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 25883cd5f0b188f2417f294b7d219a77b219f7c2)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1497907
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index f571c9eb27..76903d612b 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1495,6 +1495,14 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
_("cannot migrate domain: %s"), reasons);
|
||||
return false;
|
||||
}
|
||||
+ } else {
|
||||
+ /* checks here are for anything that doesn't need to be
|
||||
+ * checked by libvirt if running QEMU that can be queried
|
||||
+ * about migration blockers.
|
||||
+ */
|
||||
+
|
||||
+ if (!qemuMigrationSrcIsAllowedHostdev(vm->def))
|
||||
+ return false;
|
||||
}
|
||||
|
||||
if (remote) {
|
||||
@@ -1521,9 +1529,6 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
return false;
|
||||
}
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowedHostdev(vm->def))
|
||||
- return false;
|
||||
-
|
||||
if (vm->def->cpu) {
|
||||
/* QEMU blocks migration and save with invariant TSC enabled
|
||||
* unless TSC frequency is explicitly set.
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,471 +0,0 @@
|
||||
From 3cde498c98be902fc8fe87c895dfeaaa95352b38 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <3cde498c98be902fc8fe87c895dfeaaa95352b38@dist-git>
|
||||
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||
Date: Thu, 3 Feb 2022 13:43:18 +0000
|
||||
Subject: [PATCH] qemu: support firmware descriptor flash 'mode' for optional
|
||||
NVRAM
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Currently the 'nvram_template' entry is mandatory when parsing the
|
||||
firmware descriptor based on flash. QEMU is extending the firmware
|
||||
descriptor spec to make the 'nvram_template' optional, depending
|
||||
on the value of a new 'mode' field:
|
||||
|
||||
- "split"
|
||||
* "executable" contains read-only CODE
|
||||
* "nvram_template" contains read-write VARS
|
||||
|
||||
- "combined"
|
||||
* "executable" contains read-write CODE and VARs
|
||||
* "nvram_template" not present
|
||||
|
||||
- "stateless"
|
||||
* "executable" contains read-only CODE and VARs
|
||||
* "nvram_template" not present
|
||||
|
||||
In the latter case, the guest OS can write vars but the
|
||||
firmware will make no attempt to persist them, so any changes
|
||||
will be lost at poweroff.
|
||||
|
||||
For now we parse this new 'mode' but discard any firmware
|
||||
which is not 'mode=split' when matching for a domain.
|
||||
|
||||
In the tests we have a mixture of files with and without the
|
||||
mode attribute.
|
||||
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||
(cherry picked from commit 32b9d8b0ae00669555f01f91ee11612a636c4b69)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2057769
|
||||
---
|
||||
src/qemu/qemu_firmware.c | 79 ++++++++++++++++---
|
||||
.../share/qemu/firmware/50-ovmf-sb-keys.json | 33 ++++++++
|
||||
.../out/usr/share/qemu/firmware/61-ovmf.json | 31 ++++++++
|
||||
.../out/usr/share/qemu/firmware/70-aavmf.json | 28 +++++++
|
||||
.../qemu/firmware/45-ovmf-sev-stateless.json | 31 ++++++++
|
||||
.../qemu/firmware/55-ovmf-sb-combined.json | 33 ++++++++
|
||||
.../usr/share/qemu/firmware/60-ovmf-sb.json | 1 +
|
||||
tests/qemufirmwaretest.c | 31 ++++++--
|
||||
8 files changed, 246 insertions(+), 21 deletions(-)
|
||||
create mode 100644 tests/qemufirmwaredata/out/usr/share/qemu/firmware/50-ovmf-sb-keys.json
|
||||
create mode 100644 tests/qemufirmwaredata/out/usr/share/qemu/firmware/61-ovmf.json
|
||||
create mode 100644 tests/qemufirmwaredata/out/usr/share/qemu/firmware/70-aavmf.json
|
||||
create mode 100644 tests/qemufirmwaredata/usr/share/qemu/firmware/45-ovmf-sev-stateless.json
|
||||
create mode 100644 tests/qemufirmwaredata/usr/share/qemu/firmware/55-ovmf-sb-combined.json
|
||||
|
||||
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
|
||||
index 529ab8d68e..7911d45aa0 100644
|
||||
--- a/src/qemu/qemu_firmware.c
|
||||
+++ b/src/qemu/qemu_firmware.c
|
||||
@@ -59,6 +59,22 @@ VIR_ENUM_IMPL(qemuFirmwareOSInterface,
|
||||
);
|
||||
|
||||
|
||||
+typedef enum {
|
||||
+ QEMU_FIRMWARE_FLASH_MODE_SPLIT,
|
||||
+ QEMU_FIRMWARE_FLASH_MODE_COMBINED,
|
||||
+ QEMU_FIRMWARE_FLASH_MODE_STATELESS,
|
||||
+
|
||||
+ QEMU_FIRMWARE_FLASH_MODE_LAST,
|
||||
+} qemuFirmwareFlashMode;
|
||||
+
|
||||
+VIR_ENUM_DECL(qemuFirmwareFlashMode);
|
||||
+VIR_ENUM_IMPL(qemuFirmwareFlashMode,
|
||||
+ QEMU_FIRMWARE_FLASH_MODE_LAST,
|
||||
+ "split",
|
||||
+ "combined",
|
||||
+ "stateless",
|
||||
+);
|
||||
+
|
||||
typedef struct _qemuFirmwareFlashFile qemuFirmwareFlashFile;
|
||||
struct _qemuFirmwareFlashFile {
|
||||
char *filename;
|
||||
@@ -68,6 +84,7 @@ struct _qemuFirmwareFlashFile {
|
||||
|
||||
typedef struct _qemuFirmwareMappingFlash qemuFirmwareMappingFlash;
|
||||
struct _qemuFirmwareMappingFlash {
|
||||
+ qemuFirmwareFlashMode mode;
|
||||
qemuFirmwareFlashFile executable;
|
||||
qemuFirmwareFlashFile nvram_template;
|
||||
};
|
||||
@@ -359,9 +376,31 @@ qemuFirmwareMappingFlashParse(const char *path,
|
||||
virJSONValue *doc,
|
||||
qemuFirmwareMappingFlash *flash)
|
||||
{
|
||||
+ virJSONValue *mode;
|
||||
virJSONValue *executable;
|
||||
virJSONValue *nvram_template;
|
||||
|
||||
+ if (!(mode = virJSONValueObjectGet(doc, "mode"))) {
|
||||
+ /* Historical default */
|
||||
+ flash->mode = QEMU_FIRMWARE_FLASH_MODE_SPLIT;
|
||||
+ } else {
|
||||
+ const char *modestr = virJSONValueGetString(mode);
|
||||
+ int modeval;
|
||||
+ if (!modestr) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
+ _("Firmware flash mode value was malformed"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ modeval = qemuFirmwareFlashModeTypeFromString(modestr);
|
||||
+ if (modeval < 0) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("Firmware flash mode value '%s' unexpected"),
|
||||
+ modestr);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ flash->mode = modeval;
|
||||
+ }
|
||||
+
|
||||
if (!(executable = virJSONValueObjectGet(doc, "executable"))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("missing 'executable' in '%s'"),
|
||||
@@ -372,15 +411,17 @@ qemuFirmwareMappingFlashParse(const char *path,
|
||||
if (qemuFirmwareFlashFileParse(path, executable, &flash->executable) < 0)
|
||||
return -1;
|
||||
|
||||
- if (!(nvram_template = virJSONValueObjectGet(doc, "nvram-template"))) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("missing 'nvram-template' in '%s'"),
|
||||
- path);
|
||||
- return -1;
|
||||
- }
|
||||
+ if (flash->mode == QEMU_FIRMWARE_FLASH_MODE_SPLIT) {
|
||||
+ if (!(nvram_template = virJSONValueObjectGet(doc, "nvram-template"))) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
+ _("missing 'nvram-template' in '%s'"),
|
||||
+ path);
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
- if (qemuFirmwareFlashFileParse(path, nvram_template, &flash->nvram_template) < 0)
|
||||
- return -1;
|
||||
+ if (qemuFirmwareFlashFileParse(path, nvram_template, &flash->nvram_template) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -693,10 +734,12 @@ qemuFirmwareMappingFlashFormat(virJSONValue *mapping,
|
||||
g_autoptr(virJSONValue) executable = NULL;
|
||||
g_autoptr(virJSONValue) nvram_template = NULL;
|
||||
|
||||
- if (!(executable = qemuFirmwareFlashFileFormat(flash->executable)))
|
||||
+ if (virJSONValueObjectAppendString(mapping,
|
||||
+ "mode",
|
||||
+ qemuFirmwareFlashModeTypeToString(flash->mode)) < 0)
|
||||
return -1;
|
||||
|
||||
- if (!(nvram_template = qemuFirmwareFlashFileFormat(flash->nvram_template)))
|
||||
+ if (!(executable = qemuFirmwareFlashFileFormat(flash->executable)))
|
||||
return -1;
|
||||
|
||||
if (virJSONValueObjectAppend(mapping,
|
||||
@@ -704,11 +747,15 @@ qemuFirmwareMappingFlashFormat(virJSONValue *mapping,
|
||||
&executable) < 0)
|
||||
return -1;
|
||||
|
||||
+ if (flash->mode == QEMU_FIRMWARE_FLASH_MODE_SPLIT) {
|
||||
+ if (!(nvram_template = qemuFirmwareFlashFileFormat(flash->nvram_template)))
|
||||
+ return -1;
|
||||
|
||||
- if (virJSONValueObjectAppend(mapping,
|
||||
+ if (virJSONValueObjectAppend(mapping,
|
||||
"nvram-template",
|
||||
- &nvram_template) < 0)
|
||||
- return -1;
|
||||
+ &nvram_template) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1053,6 +1100,12 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
|
||||
return false;
|
||||
}
|
||||
|
||||
+ if (fw->mapping.device == QEMU_FIRMWARE_DEVICE_FLASH &&
|
||||
+ fw->mapping.data.flash.mode != QEMU_FIRMWARE_FLASH_MODE_SPLIT) {
|
||||
+ VIR_DEBUG("Discarding loader without split flash");
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
if (def->sec) {
|
||||
switch ((virDomainLaunchSecurity) def->sec->sectype) {
|
||||
case VIR_DOMAIN_LAUNCH_SECURITY_SEV:
|
||||
diff --git a/tests/qemufirmwaredata/out/usr/share/qemu/firmware/50-ovmf-sb-keys.json b/tests/qemufirmwaredata/out/usr/share/qemu/firmware/50-ovmf-sb-keys.json
|
||||
new file mode 100644
|
||||
index 0000000000..c251682cd9
|
||||
--- /dev/null
|
||||
+++ b/tests/qemufirmwaredata/out/usr/share/qemu/firmware/50-ovmf-sb-keys.json
|
||||
@@ -0,0 +1,33 @@
|
||||
+{
|
||||
+ "interface-types": [
|
||||
+ "uefi"
|
||||
+ ],
|
||||
+ "mapping": {
|
||||
+ "device": "flash",
|
||||
+ "mode": "split",
|
||||
+ "executable": {
|
||||
+ "filename": "/usr/share/OVMF/OVMF_CODE.secboot.fd",
|
||||
+ "format": "raw"
|
||||
+ },
|
||||
+ "nvram-template": {
|
||||
+ "filename": "/usr/share/OVMF/OVMF_VARS.secboot.fd",
|
||||
+ "format": "raw"
|
||||
+ }
|
||||
+ },
|
||||
+ "targets": [
|
||||
+ {
|
||||
+ "architecture": "x86_64",
|
||||
+ "machines": [
|
||||
+ "pc-q35-*"
|
||||
+ ]
|
||||
+ }
|
||||
+ ],
|
||||
+ "features": [
|
||||
+ "acpi-s3",
|
||||
+ "amd-sev",
|
||||
+ "enrolled-keys",
|
||||
+ "requires-smm",
|
||||
+ "secure-boot",
|
||||
+ "verbose-dynamic"
|
||||
+ ]
|
||||
+}
|
||||
diff --git a/tests/qemufirmwaredata/out/usr/share/qemu/firmware/61-ovmf.json b/tests/qemufirmwaredata/out/usr/share/qemu/firmware/61-ovmf.json
|
||||
new file mode 100644
|
||||
index 0000000000..2a9aa23efb
|
||||
--- /dev/null
|
||||
+++ b/tests/qemufirmwaredata/out/usr/share/qemu/firmware/61-ovmf.json
|
||||
@@ -0,0 +1,31 @@
|
||||
+{
|
||||
+ "interface-types": [
|
||||
+ "uefi"
|
||||
+ ],
|
||||
+ "mapping": {
|
||||
+ "device": "flash",
|
||||
+ "mode": "split",
|
||||
+ "executable": {
|
||||
+ "filename": "/usr/share/OVMF/OVMF_CODE.fd",
|
||||
+ "format": "raw"
|
||||
+ },
|
||||
+ "nvram-template": {
|
||||
+ "filename": "/usr/share/OVMF/OVMF_VARS.fd",
|
||||
+ "format": "raw"
|
||||
+ }
|
||||
+ },
|
||||
+ "targets": [
|
||||
+ {
|
||||
+ "architecture": "x86_64",
|
||||
+ "machines": [
|
||||
+ "pc-i440fx-*",
|
||||
+ "pc-q35-*"
|
||||
+ ]
|
||||
+ }
|
||||
+ ],
|
||||
+ "features": [
|
||||
+ "acpi-s3",
|
||||
+ "amd-sev",
|
||||
+ "verbose-dynamic"
|
||||
+ ]
|
||||
+}
|
||||
diff --git a/tests/qemufirmwaredata/out/usr/share/qemu/firmware/70-aavmf.json b/tests/qemufirmwaredata/out/usr/share/qemu/firmware/70-aavmf.json
|
||||
new file mode 100644
|
||||
index 0000000000..9bd5ac2868
|
||||
--- /dev/null
|
||||
+++ b/tests/qemufirmwaredata/out/usr/share/qemu/firmware/70-aavmf.json
|
||||
@@ -0,0 +1,28 @@
|
||||
+{
|
||||
+ "interface-types": [
|
||||
+ "uefi"
|
||||
+ ],
|
||||
+ "mapping": {
|
||||
+ "device": "flash",
|
||||
+ "mode": "split",
|
||||
+ "executable": {
|
||||
+ "filename": "/usr/share/AAVMF/AAVMF_CODE.fd",
|
||||
+ "format": "raw"
|
||||
+ },
|
||||
+ "nvram-template": {
|
||||
+ "filename": "/usr/share/AAVMF/AAVMF_VARS.fd",
|
||||
+ "format": "raw"
|
||||
+ }
|
||||
+ },
|
||||
+ "targets": [
|
||||
+ {
|
||||
+ "architecture": "aarch64",
|
||||
+ "machines": [
|
||||
+ "virt-*"
|
||||
+ ]
|
||||
+ }
|
||||
+ ],
|
||||
+ "features": [
|
||||
+
|
||||
+ ]
|
||||
+}
|
||||
diff --git a/tests/qemufirmwaredata/usr/share/qemu/firmware/45-ovmf-sev-stateless.json b/tests/qemufirmwaredata/usr/share/qemu/firmware/45-ovmf-sev-stateless.json
|
||||
new file mode 100644
|
||||
index 0000000000..5a619f3ab0
|
||||
--- /dev/null
|
||||
+++ b/tests/qemufirmwaredata/usr/share/qemu/firmware/45-ovmf-sev-stateless.json
|
||||
@@ -0,0 +1,31 @@
|
||||
+{
|
||||
+ "description": "OVMF for x86_64, with SEV, without SB, without SMM, with NO varstore",
|
||||
+ "interface-types": [
|
||||
+ "uefi"
|
||||
+ ],
|
||||
+ "mapping": {
|
||||
+ "device": "flash",
|
||||
+ "mode": "stateless",
|
||||
+ "executable": {
|
||||
+ "filename": "/usr/share/OVMF/OVMF.sev.fd",
|
||||
+ "format": "raw"
|
||||
+ }
|
||||
+ },
|
||||
+ "targets": [
|
||||
+ {
|
||||
+ "architecture": "x86_64",
|
||||
+ "machines": [
|
||||
+ "pc-q35-*"
|
||||
+ ]
|
||||
+ }
|
||||
+ ],
|
||||
+ "features": [
|
||||
+ "acpi-s3",
|
||||
+ "amd-sev",
|
||||
+ "amd-sev-es",
|
||||
+ "verbose-dynamic"
|
||||
+ ],
|
||||
+ "tags": [
|
||||
+
|
||||
+ ]
|
||||
+}
|
||||
diff --git a/tests/qemufirmwaredata/usr/share/qemu/firmware/55-ovmf-sb-combined.json b/tests/qemufirmwaredata/usr/share/qemu/firmware/55-ovmf-sb-combined.json
|
||||
new file mode 100644
|
||||
index 0000000000..eb3332e4ab
|
||||
--- /dev/null
|
||||
+++ b/tests/qemufirmwaredata/usr/share/qemu/firmware/55-ovmf-sb-combined.json
|
||||
@@ -0,0 +1,33 @@
|
||||
+{
|
||||
+ "description": "OVMF with SB+SMM, SB enabled, MS certs enrolled",
|
||||
+ "interface-types": [
|
||||
+ "uefi"
|
||||
+ ],
|
||||
+ "mapping": {
|
||||
+ "device": "flash",
|
||||
+ "mode": "combined",
|
||||
+ "executable": {
|
||||
+ "filename": "/usr/share/OVMF/OVMF.secboot.fd",
|
||||
+ "format": "raw"
|
||||
+ }
|
||||
+ },
|
||||
+ "targets": [
|
||||
+ {
|
||||
+ "architecture": "x86_64",
|
||||
+ "machines": [
|
||||
+ "pc-q35-*"
|
||||
+ ]
|
||||
+ }
|
||||
+ ],
|
||||
+ "features": [
|
||||
+ "acpi-s3",
|
||||
+ "amd-sev",
|
||||
+ "enrolled-keys",
|
||||
+ "requires-smm",
|
||||
+ "secure-boot",
|
||||
+ "verbose-dynamic"
|
||||
+ ],
|
||||
+ "tags": [
|
||||
+
|
||||
+ ]
|
||||
+}
|
||||
diff --git a/tests/qemufirmwaredata/usr/share/qemu/firmware/60-ovmf-sb.json b/tests/qemufirmwaredata/usr/share/qemu/firmware/60-ovmf-sb.json
|
||||
index 5e8a94ae78..a5273a5e8b 100644
|
||||
--- a/tests/qemufirmwaredata/usr/share/qemu/firmware/60-ovmf-sb.json
|
||||
+++ b/tests/qemufirmwaredata/usr/share/qemu/firmware/60-ovmf-sb.json
|
||||
@@ -5,6 +5,7 @@
|
||||
],
|
||||
"mapping": {
|
||||
"device": "flash",
|
||||
+ "mode": "split",
|
||||
"executable": {
|
||||
"filename": "/usr/share/OVMF/OVMF_CODE.secboot.fd",
|
||||
"format": "raw"
|
||||
diff --git a/tests/qemufirmwaretest.c b/tests/qemufirmwaretest.c
|
||||
index cad4b6d383..fc3416b2ae 100644
|
||||
--- a/tests/qemufirmwaretest.c
|
||||
+++ b/tests/qemufirmwaretest.c
|
||||
@@ -17,22 +17,31 @@ static int
|
||||
testParseFormatFW(const void *opaque)
|
||||
{
|
||||
const char *filename = opaque;
|
||||
- g_autofree char *path = NULL;
|
||||
+ g_autofree char *inpath = NULL;
|
||||
+ g_autofree char *outpath = NULL;
|
||||
g_autoptr(qemuFirmware) fw = NULL;
|
||||
- g_autofree char *buf = NULL;
|
||||
g_autoptr(virJSONValue) json = NULL;
|
||||
g_autofree char *expected = NULL;
|
||||
g_autofree char *actual = NULL;
|
||||
+ g_autofree char *buf = NULL;
|
||||
|
||||
- path = g_strdup_printf("%s/qemufirmwaredata/%s", abs_srcdir, filename);
|
||||
+ inpath = g_strdup_printf("%s/qemufirmwaredata/%s", abs_srcdir, filename);
|
||||
+ outpath = g_strdup_printf("%s/qemufirmwaredata/out/%s", abs_srcdir, filename);
|
||||
|
||||
- if (!(fw = qemuFirmwareParse(path)))
|
||||
+ if (!(fw = qemuFirmwareParse(inpath)))
|
||||
return -1;
|
||||
|
||||
- if (virFileReadAll(path,
|
||||
- 1024 * 1024, /* 1MiB */
|
||||
- &buf) < 0)
|
||||
- return -1;
|
||||
+ if (virFileExists(outpath)) {
|
||||
+ if (virFileReadAll(outpath,
|
||||
+ 1024 * 1024, /* 1MiB */
|
||||
+ &buf) < 0)
|
||||
+ return -1;
|
||||
+ } else {
|
||||
+ if (virFileReadAll(inpath,
|
||||
+ 1024 * 1024, /* 1MiB */
|
||||
+ &buf) < 0)
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
if (!(json = virJSONValueFromString(buf)))
|
||||
return -1;
|
||||
@@ -60,7 +69,9 @@ testFWPrecedence(const void *opaque G_GNUC_UNUSED)
|
||||
const char *expected[] = {
|
||||
PREFIX "/share/qemu/firmware/40-bios.json",
|
||||
SYSCONFDIR "/qemu/firmware/40-ovmf-sb-keys.json",
|
||||
+ PREFIX "/share/qemu/firmware/45-ovmf-sev-stateless.json",
|
||||
PREFIX "/share/qemu/firmware/50-ovmf-sb-keys.json",
|
||||
+ PREFIX "/share/qemu/firmware/55-ovmf-sb-combined.json",
|
||||
PREFIX "/share/qemu/firmware/61-ovmf.json",
|
||||
PREFIX "/share/qemu/firmware/70-aavmf.json",
|
||||
NULL
|
||||
@@ -218,7 +229,9 @@ mymain(void)
|
||||
} while (0)
|
||||
|
||||
DO_PARSE_TEST("usr/share/qemu/firmware/40-bios.json");
|
||||
+ DO_PARSE_TEST("usr/share/qemu/firmware/45-ovmf-sev-stateless.json");
|
||||
DO_PARSE_TEST("usr/share/qemu/firmware/50-ovmf-sb-keys.json");
|
||||
+ DO_PARSE_TEST("usr/share/qemu/firmware/55-ovmf-sb-combined.json");
|
||||
DO_PARSE_TEST("usr/share/qemu/firmware/60-ovmf-sb.json");
|
||||
DO_PARSE_TEST("usr/share/qemu/firmware/61-ovmf.json");
|
||||
DO_PARSE_TEST("usr/share/qemu/firmware/70-aavmf.json");
|
||||
@@ -250,6 +263,8 @@ mymain(void)
|
||||
DO_SUPPORTED_TEST("pc-q35-3.1", VIR_ARCH_X86_64, true,
|
||||
"/usr/share/seabios/bios-256k.bin:NULL:"
|
||||
"/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.secboot.fd:"
|
||||
+ "/usr/share/OVMF/OVMF.sev.fd:NULL:"
|
||||
+ "/usr/share/OVMF/OVMF.secboot.fd:NULL:"
|
||||
"/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd",
|
||||
VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS,
|
||||
VIR_DOMAIN_OS_DEF_FIRMWARE_EFI);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,186 +0,0 @@
|
||||
From 563e17f59f088d4ba76e7a95ea8958792ae165e2 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <563e17f59f088d4ba76e7a95ea8958792ae165e2@dist-git>
|
||||
From: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Date: Tue, 1 Mar 2022 16:55:21 -0600
|
||||
Subject: [PATCH] qemu: support multiqueue for vdpa net device
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2024406
|
||||
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
|
||||
(cherry picked from commit a5e659f071ae5f5fc9aadb46ad7c31736425f8cf)
|
||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_domain.c | 3 +-
|
||||
.../net-vdpa-multiqueue.x86_64-latest.args | 36 +++++++++++++++++++
|
||||
.../qemuxml2argvdata/net-vdpa-multiqueue.xml | 30 ++++++++++++++++
|
||||
tests/qemuxml2argvtest.c | 1 +
|
||||
.../net-vdpa-multiqueue.xml | 36 +++++++++++++++++++
|
||||
tests/qemuxml2xmltest.c | 1 +
|
||||
6 files changed, 106 insertions(+), 1 deletion(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/net-vdpa-multiqueue.x86_64-latest.args
|
||||
create mode 100644 tests/qemuxml2argvdata/net-vdpa-multiqueue.xml
|
||||
create mode 100644 tests/qemuxml2xmloutdata/net-vdpa-multiqueue.xml
|
||||
|
||||
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||
index a8401bac30..68052769af 100644
|
||||
--- a/src/qemu/qemu_domain.c
|
||||
+++ b/src/qemu/qemu_domain.c
|
||||
@@ -4511,7 +4511,8 @@ qemuDomainValidateActualNetDef(const virDomainNetDef *net,
|
||||
actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
|
||||
actualType == VIR_DOMAIN_NET_TYPE_DIRECT ||
|
||||
actualType == VIR_DOMAIN_NET_TYPE_ETHERNET ||
|
||||
- actualType == VIR_DOMAIN_NET_TYPE_VHOSTUSER)) {
|
||||
+ actualType == VIR_DOMAIN_NET_TYPE_VHOSTUSER ||
|
||||
+ actualType == VIR_DOMAIN_NET_TYPE_VDPA)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("interface %s - multiqueue is not supported for network interfaces of type %s"),
|
||||
macstr, virDomainNetTypeToString(actualType));
|
||||
diff --git a/tests/qemuxml2argvdata/net-vdpa-multiqueue.x86_64-latest.args b/tests/qemuxml2argvdata/net-vdpa-multiqueue.x86_64-latest.args
|
||||
new file mode 100644
|
||||
index 0000000000..61ba85a847
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/net-vdpa-multiqueue.x86_64-latest.args
|
||||
@@ -0,0 +1,36 @@
|
||||
+LC_ALL=C \
|
||||
+PATH=/bin \
|
||||
+HOME=/tmp/lib/domain--1-QEMUGuest1 \
|
||||
+USER=test \
|
||||
+LOGNAME=test \
|
||||
+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
|
||||
+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
|
||||
+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
+/usr/bin/qemu-system-x86_64 \
|
||||
+-name guest=QEMUGuest1,debug-threads=on \
|
||||
+-S \
|
||||
+-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \
|
||||
+-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram \
|
||||
+-accel tcg \
|
||||
+-cpu qemu64 \
|
||||
+-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 \
|
||||
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
+-display none \
|
||||
+-no-user-config \
|
||||
+-nodefaults \
|
||||
+-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
|
||||
+-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
+-rtc base=utc \
|
||||
+-no-shutdown \
|
||||
+-no-acpi \
|
||||
+-boot strict=on \
|
||||
+-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-add-fd set=0,fd=1732,opaque=/dev/vhost-vdpa-0 \
|
||||
+-netdev vhost-vdpa,vhostdev=/dev/fdset/0,id=hostnet0 \
|
||||
+-device virtio-net-pci,mq=on,vectors=6,netdev=hostnet0,id=net0,mac=52:54:00:95:db:c0,bus=pci.0,addr=0x2 \
|
||||
+-audiodev '{"id":"audio1","driver":"none"}' \
|
||||
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
+-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/net-vdpa-multiqueue.xml b/tests/qemuxml2argvdata/net-vdpa-multiqueue.xml
|
||||
new file mode 100644
|
||||
index 0000000000..6e369c1916
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/net-vdpa-multiqueue.xml
|
||||
@@ -0,0 +1,30 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219136</memory>
|
||||
+ <currentMemory unit='KiB'>219136</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <controller type='usb' index='0'/>
|
||||
+ <controller type='ide' index='0'/>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <interface type='vdpa'>
|
||||
+ <mac address='52:54:00:95:db:c0'/>
|
||||
+ <source dev='/dev/vhost-vdpa-0'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <driver queues='2'/>
|
||||
+ </interface>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index cc67d806e4..1abb5d0124 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -1652,6 +1652,7 @@ mymain(void)
|
||||
DO_TEST_FAILURE("net-hostdev-fail",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
DO_TEST_CAPS_LATEST("net-vdpa");
|
||||
+ DO_TEST_CAPS_LATEST("net-vdpa-multiqueue");
|
||||
|
||||
DO_TEST("hostdev-pci-multifunction",
|
||||
QEMU_CAPS_KVM,
|
||||
diff --git a/tests/qemuxml2xmloutdata/net-vdpa-multiqueue.xml b/tests/qemuxml2xmloutdata/net-vdpa-multiqueue.xml
|
||||
new file mode 100644
|
||||
index 0000000000..0876d5df62
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/net-vdpa-multiqueue.xml
|
||||
@@ -0,0 +1,36 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219136</memory>
|
||||
+ <currentMemory unit='KiB'>219136</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <controller type='usb' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='ide' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='0' model='pci-root'/>
|
||||
+ <interface type='vdpa'>
|
||||
+ <mac address='52:54:00:95:db:c0'/>
|
||||
+ <source dev='/dev/vhost-vdpa-0'/>
|
||||
+ <model type='virtio'/>
|
||||
+ <driver queues='2'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <audio id='1' type='none'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index fb438269b9..772586cf19 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -461,6 +461,7 @@ mymain(void)
|
||||
DO_TEST_NOCAPS("net-coalesce");
|
||||
DO_TEST_NOCAPS("net-many-models");
|
||||
DO_TEST("net-vdpa", QEMU_CAPS_NETDEV_VHOST_VDPA);
|
||||
+ DO_TEST("net-vdpa-multiqueue", QEMU_CAPS_NETDEV_VHOST_VDPA);
|
||||
|
||||
DO_TEST_NOCAPS("serial-tcp-tlsx509-chardev");
|
||||
DO_TEST_NOCAPS("serial-tcp-tlsx509-chardev-notls");
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,41 @@
|
||||
From 9b00b5666a014999a3bc9e2e8a6a844ca7a4326f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <9b00b5666a014999a3bc9e2e8a6a844ca7a4326f@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 8 Jul 2022 09:35:39 +0200
|
||||
Subject: [PATCH] qemuDomainSetIOThreadParams: Accept VIR_DOMAIN_AFFECT_CONFIG
|
||||
flag
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It was always possible to modify the inactive XML, because
|
||||
VIR_DOMAIN_AFFECT_CURRENT (= 0) is accepted implicitly. But now
|
||||
that the logic when changing both config and live XMLs is more
|
||||
robust we can accept VIR_DOMAIN_AFFECT_CONFIG flag too.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3096965ce78923b099fa39e4950279b2f21ab60a)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2059511
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 2c627396f1..654b5d65e5 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -5818,7 +5818,8 @@ qemuDomainSetIOThreadParams(virDomainPtr dom,
|
||||
qemuMonitorIOThreadInfo iothread = {0};
|
||||
int ret = -1;
|
||||
|
||||
- virCheckFlags(VIR_DOMAIN_AFFECT_LIVE, -1);
|
||||
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
||||
+ VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||
|
||||
if (iothread_id == 0) {
|
||||
virReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 0eec7bae9f59b2693798d25d346243109e92aeff Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0eec7bae9f59b2693798d25d346243109e92aeff@dist-git>
|
||||
From: Peter Krempa <pkrempa@redhat.com>
|
||||
Date: Tue, 25 Jan 2022 17:49:00 +0100
|
||||
Subject: [PATCH] qemuDomainSetupDisk: Initialize 'targetPaths'
|
||||
|
||||
Compiler isn't able to see that 'virDevMapperGetTargets' in cases e.g.
|
||||
when the devmapper isn't available may not initialize the value in the
|
||||
pointer passed as the second argument.
|
||||
|
||||
The usage 'qemuDomainSetupDisk' lead to an accidental infinite loop as
|
||||
previous calls apparently doctored the stack to a point where
|
||||
'g_slist_concat' would end up in an infinite loop trying to find the end
|
||||
of the list.
|
||||
|
||||
Fixes: 6c49c2ee9fcb88de02cdc333f666a8e95d60a3b0
|
||||
Closes: https://gitlab.com/libvirt/libvirt/-/issues/268
|
||||
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit ddb2384f0c78a91c40d95afdbc7fe325e95ef2bc)
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2046170
|
||||
---
|
||||
src/qemu/qemu_namespace.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c
|
||||
index 23b1160c5e..94453033f5 100644
|
||||
--- a/src/qemu/qemu_namespace.c
|
||||
+++ b/src/qemu/qemu_namespace.c
|
||||
@@ -251,7 +251,7 @@ qemuDomainSetupDisk(virStorageSource *src,
|
||||
if (!(tmpPath = virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
|
||||
return -1;
|
||||
} else {
|
||||
- GSList *targetPaths;
|
||||
+ GSList *targetPaths = NULL;
|
||||
|
||||
if (virStorageSourceIsEmpty(next) ||
|
||||
!virStorageSourceIsLocalStorage(next)) {
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,662 +0,0 @@
|
||||
From 6f692c60b1d58135f439ad91e95d18540dfa6556 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6f692c60b1d58135f439ad91e95d18540dfa6556@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 27 Jan 2022 11:13:53 +0100
|
||||
Subject: [PATCH] qemu_command: Generate memory only after controllers
|
||||
|
||||
Currently, memory device (def->mems) part of cmd line is
|
||||
generated before any controller. In majority of cases it doesn't
|
||||
matter because neither of memory devices live on a bus that's
|
||||
created by an exposed controller (e.g. there's no DIMM
|
||||
controller, at least not exposed). Except for virtio-mem and
|
||||
virtio-pmem, which do have a PCI address. And if it so happens
|
||||
that the device goes onto non-default bus (pci.0) starting such
|
||||
guest fails, because the controller that creates the desired bus
|
||||
wasn't processed yet. QEMU processes arguments in order.
|
||||
|
||||
For instance, if virtio-mem has address with bus='0x01' QEMU
|
||||
refuses to start with the following message:
|
||||
|
||||
Bus 'pci.1' not found
|
||||
|
||||
Similarly for virtio-pmem. I've successfully tested migration and
|
||||
changing the order does not affect migration stream.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2047271
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit af23241cfed712f69450e82135d7c7b4899736de)
|
||||
|
||||
Conflicts:
|
||||
tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args:
|
||||
tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args:
|
||||
tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args:
|
||||
tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args:
|
||||
tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args:
|
||||
tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args:
|
||||
tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args:
|
||||
tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args:
|
||||
tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args:
|
||||
tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args:
|
||||
These happened because downstream we don't use JSON for -device,
|
||||
but upstream we do (as of 1a691fe1c84090da80a652c4c80ac00a6134a69b).
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_command.c | 6 +++---
|
||||
tests/qemuxml2argvdata/hugepages-memaccess.args | 4 ++--
|
||||
tests/qemuxml2argvdata/hugepages-memaccess2.args | 4 ++--
|
||||
tests/qemuxml2argvdata/hugepages-numa-default-dimm.args | 4 ++--
|
||||
.../qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args | 4 ++--
|
||||
.../qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args | 4 ++--
|
||||
tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args | 8 ++++----
|
||||
tests/qemuxml2argvdata/memory-hotplug-dimm.args | 8 ++++----
|
||||
.../memory-hotplug-nvdimm-access.x86_64-latest.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm-align.x86_64-5.2.0.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm-align.x86_64-latest.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm-label.x86_64-5.2.0.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm-label.x86_64-latest.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm-pmem.x86_64-latest.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm-ppc64-abi-update.args | 4 ++--
|
||||
tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm-readonly.x86_64-latest.args | 4 ++--
|
||||
.../memory-hotplug-nvdimm.x86_64-latest.args | 4 ++--
|
||||
.../memory-hotplug-ppc64-nonuma-abi-update.args | 8 ++++----
|
||||
tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args | 8 ++++----
|
||||
.../memory-hotplug-virtio-mem.x86_64-latest.args | 8 ++++----
|
||||
.../memory-hotplug-virtio-pmem.x86_64-5.2.0.args | 4 ++--
|
||||
.../memory-hotplug-virtio-pmem.x86_64-latest.args | 4 ++--
|
||||
tests/qemuxml2argvdata/pages-dimm-discard.args | 8 ++++----
|
||||
26 files changed, 65 insertions(+), 65 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||
index d822533ccb..509bab08ef 100644
|
||||
--- a/src/qemu/qemu_command.c
|
||||
+++ b/src/qemu/qemu_command.c
|
||||
@@ -10543,9 +10543,6 @@ qemuBuildCommandLine(virQEMUDriver *driver,
|
||||
qemuBuildNumaCommandLine(cfg, def, cmd, priv) < 0)
|
||||
return NULL;
|
||||
|
||||
- if (qemuBuildMemoryDeviceCommandLine(cmd, cfg, def, priv) < 0)
|
||||
- return NULL;
|
||||
-
|
||||
virUUIDFormat(def->uuid, uuid);
|
||||
virCommandAddArgList(cmd, "-uuid", uuid, NULL);
|
||||
|
||||
@@ -10595,6 +10592,9 @@ qemuBuildCommandLine(virQEMUDriver *driver,
|
||||
if (qemuBuildControllersCommandLine(cmd, def, qemuCaps) < 0)
|
||||
return NULL;
|
||||
|
||||
+ if (qemuBuildMemoryDeviceCommandLine(cmd, cfg, def, priv) < 0)
|
||||
+ return NULL;
|
||||
+
|
||||
if (qemuBuildHubCommandLine(cmd, def, qemuCaps) < 0)
|
||||
return NULL;
|
||||
|
||||
diff --git a/tests/qemuxml2argvdata/hugepages-memaccess.args b/tests/qemuxml2argvdata/hugepages-memaccess.args
|
||||
index b89f791697..a369c7f6da 100644
|
||||
--- a/tests/qemuxml2argvdata/hugepages-memaccess.args
|
||||
+++ b/tests/qemuxml2argvdata/hugepages-memaccess.args
|
||||
@@ -24,8 +24,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-numa node,nodeid=2,cpus=2,memdev=ram-node2 \
|
||||
-object memory-backend-file,id=ram-node3,mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,share=off,prealloc=on,size=1073741824,host-nodes=3,policy=bind \
|
||||
-numa node,nodeid=3,cpus=3,memdev=ram-node3 \
|
||||
--object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,share=on,prealloc=on,size=536870912,host-nodes=0-3,policy=bind \
|
||||
--device pc-dimm,node=1,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -37,6 +35,8 @@ QEMU_AUDIO_DRV=none \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-usb \
|
||||
+-object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,share=on,prealloc=on,size=536870912,host-nodes=0-3,policy=bind \
|
||||
+-device pc-dimm,node=1,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
|
||||
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \
|
||||
diff --git a/tests/qemuxml2argvdata/hugepages-memaccess2.args b/tests/qemuxml2argvdata/hugepages-memaccess2.args
|
||||
index 0c296797e9..434ebdaa62 100644
|
||||
--- a/tests/qemuxml2argvdata/hugepages-memaccess2.args
|
||||
+++ b/tests/qemuxml2argvdata/hugepages-memaccess2.args
|
||||
@@ -24,8 +24,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-numa node,nodeid=2,cpus=2,memdev=ram-node2 \
|
||||
-object memory-backend-file,id=ram-node3,mem-path=/var/lib/libvirt/qemu/ram/-1-QEMUGuest1/ram-node3,share=off,size=1073741824,host-nodes=3,policy=bind \
|
||||
-numa node,nodeid=3,cpus=3,memdev=ram-node3 \
|
||||
--object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,share=on,prealloc=on,size=536870912,host-nodes=0-3,policy=bind \
|
||||
--device pc-dimm,node=1,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -37,6 +35,8 @@ QEMU_AUDIO_DRV=none \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-usb \
|
||||
+-object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,share=on,prealloc=on,size=536870912,host-nodes=0-3,policy=bind \
|
||||
+-device pc-dimm,node=1,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
|
||||
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \
|
||||
diff --git a/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args b/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
|
||||
index f560cabf8e..57bb70346d 100644
|
||||
--- a/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
|
||||
+++ b/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
|
||||
@@ -19,8 +19,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-mem-prealloc \
|
||||
-mem-path /dev/hugepages2M/libvirt/qemu/-1-fedora \
|
||||
-numa node,nodeid=0,cpus=0-1,mem=1024 \
|
||||
--object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,size=1073741824,host-nodes=1-3,policy=bind \
|
||||
--device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
-uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -32,4 +30,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-usb \
|
||||
+-object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,size=1073741824,host-nodes=1-3,policy=bind \
|
||||
+-device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args b/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
|
||||
index 8b5665f86e..7d9dcfb4df 100644
|
||||
--- a/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-file","id":"ram-node0","mem-path":"/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1","share":true,"prealloc":true,"size":1073741824}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":true,"prealloc":true,"size":536870912}' \
|
||||
--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":true,"prealloc":true,"size":536870912}' \
|
||||
+-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-audiodev '{"id":"audio1","driver":"none"}' \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args b/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
|
||||
index 8a40e2d79c..04a320d469 100644
|
||||
--- a/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-instance-00000092/.config \
|
||||
-smp 8,sockets=1,dies=1,cores=8,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-memfd","id":"ram-node0","hugetlb":true,"hugetlbsize":2097152,"share":true,"prealloc":true,"size":15032385536,"host-nodes":[3],"policy":"preferred"}' \
|
||||
-numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":true,"prealloc":true,"size":536870912,"host-nodes":[3],"policy":"preferred"}' \
|
||||
--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid 126f2720-6f8e-45ab-a886-ec9277079a67 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-instance-00000092/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":true,"prealloc":true,"size":536870912,"host-nodes":[3],"policy":"preferred"}' \
|
||||
+-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-audiodev '{"id":"audio1","driver":"none"}' \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args b/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args
|
||||
index 907072d55d..b36117f1e8 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args
|
||||
@@ -17,10 +17,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-realtime mlock=off \
|
||||
-smp 2,sockets=2,cores=1,threads=1 \
|
||||
-numa node,nodeid=0,cpus=0-1,mem=214 \
|
||||
--object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,prealloc=on,size=536870912,host-nodes=1-3,policy=bind \
|
||||
--device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
|
||||
--object memory-backend-ram,id=memdimm2,size=536870912 \
|
||||
--device pc-dimm,node=0,memdev=memdimm2,id=dimm2,slot=2 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -32,6 +28,10 @@ QEMU_AUDIO_DRV=none \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-usb \
|
||||
+-object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,prealloc=on,size=536870912,host-nodes=1-3,policy=bind \
|
||||
+-device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
|
||||
+-object memory-backend-ram,id=memdimm2,size=536870912 \
|
||||
+-device pc-dimm,node=0,memdev=memdimm2,id=dimm2,slot=2 \
|
||||
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-dimm.args b/tests/qemuxml2argvdata/memory-hotplug-dimm.args
|
||||
index 5d87f4a3ef..72c2803c5e 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-dimm.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-dimm.args
|
||||
@@ -17,10 +17,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-realtime mlock=off \
|
||||
-smp 2,sockets=2,cores=1,threads=1 \
|
||||
-numa node,nodeid=0,cpus=0-1,mem=214 \
|
||||
--object memory-backend-ram,id=memdimm0,size=536870912 \
|
||||
--device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
--object memory-backend-file,id=memdimm1,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,prealloc=on,size=536870912,host-nodes=1-3,policy=bind \
|
||||
--device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -32,6 +28,10 @@ QEMU_AUDIO_DRV=none \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-usb \
|
||||
+-object memory-backend-ram,id=memdimm0,size=536870912 \
|
||||
+-device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
+-object memory-backend-file,id=memdimm1,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,prealloc=on,size=536870912,host-nodes=1-3,policy=bind \
|
||||
+-device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
|
||||
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
|
||||
index 3664150c51..94aeadabce 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
|
||||
--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
|
||||
+-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-5.2.0.args
|
||||
index 6c28c86004..0b29a6fded 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-5.2.0.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-5.2.0.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object memory-backend-ram,id=ram-node0,size=224395264 \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912,align=2097152 \
|
||||
--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912,align=2097152 \
|
||||
+-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
|
||||
index aa77849079..5045cc8318 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912,"align":2097152}' \
|
||||
--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912,"align":2097152}' \
|
||||
+-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-5.2.0.args
|
||||
index c45b401af5..7c67161b78 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-5.2.0.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-5.2.0.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object memory-backend-ram,id=ram-node0,size=224395264 \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912 \
|
||||
--device nvdimm,node=0,label-size=131072,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912 \
|
||||
+-device nvdimm,node=0,label-size=131072,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
|
||||
index 07863ba87c..9466877699 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
|
||||
--device nvdimm,node=0,label-size=131072,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
|
||||
+-device nvdimm,node=0,label-size=131072,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args
|
||||
index 3f35d4dca2..c4dae0cfd1 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object memory-backend-ram,id=ram-node0,size=224395264 \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,size=536870912,pmem=on \
|
||||
--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,size=536870912,pmem=on \
|
||||
+-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
|
||||
index 4ed86feb01..9324535ac3 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"size":536870912,"pmem":true}' \
|
||||
--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"size":536870912,"pmem":true}' \
|
||||
+-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.args
|
||||
index ebdb0429d0..55b16c9dc2 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.args
|
||||
@@ -17,8 +17,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-realtime mlock=off \
|
||||
-smp 2,sockets=2,cores=1,threads=1 \
|
||||
-numa node,nodeid=0,cpus=0-1,mem=1024 \
|
||||
--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,prealloc=on,size=537001984 \
|
||||
--device nvdimm,node=0,label-size=131072,uuid=49545eb3-75e1-2d0a-acdd-f0294406c99e,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -28,4 +26,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-boot strict=on \
|
||||
+-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,prealloc=on,size=537001984 \
|
||||
+-device nvdimm,node=0,label-size=131072,uuid=49545eb3-75e1-2d0a-acdd-f0294406c99e,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args
|
||||
index ebdb0429d0..55b16c9dc2 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args
|
||||
@@ -17,8 +17,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-realtime mlock=off \
|
||||
-smp 2,sockets=2,cores=1,threads=1 \
|
||||
-numa node,nodeid=0,cpus=0-1,mem=1024 \
|
||||
--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,prealloc=on,size=537001984 \
|
||||
--device nvdimm,node=0,label-size=131072,uuid=49545eb3-75e1-2d0a-acdd-f0294406c99e,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -28,4 +26,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-boot strict=on \
|
||||
+-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,prealloc=on,size=537001984 \
|
||||
+-device nvdimm,node=0,label-size=131072,uuid=49545eb3-75e1-2d0a-acdd-f0294406c99e,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args
|
||||
index bca2f286ba..b1873c100f 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object memory-backend-ram,id=ram-node0,size=224395264 \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912 \
|
||||
--device nvdimm,node=0,unarmed=on,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912 \
|
||||
+-device nvdimm,node=0,unarmed=on,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
|
||||
index 8be7f35cec..4f11d22e00 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
|
||||
--device nvdimm,node=0,unarmed=on,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
|
||||
+-device nvdimm,node=0,unarmed=on,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
|
||||
index 307698749e..434a0f91cf 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":1073741824}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","prealloc":true,"size":536870912}' \
|
||||
--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","prealloc":true,"size":536870912}' \
|
||||
+-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma-abi-update.args b/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma-abi-update.args
|
||||
index 5380c9e805..e8a6451841 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma-abi-update.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma-abi-update.args
|
||||
@@ -16,10 +16,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-m size=1048576k,slots=16,maxmem=4194304k \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
--object memory-backend-ram,id=memdimm0,size=536870912 \
|
||||
--device pc-dimm,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
--object memory-backend-ram,id=memdimm1,size=536870912 \
|
||||
--device pc-dimm,memdev=memdimm1,id=dimm1,slot=1 \
|
||||
-uuid 49545eb3-75e1-2d0a-acdd-f0294406c99e \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -29,4 +25,8 @@ QEMU_AUDIO_DRV=none \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-boot strict=on \
|
||||
+-object memory-backend-ram,id=memdimm0,size=536870912 \
|
||||
+-device pc-dimm,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
+-object memory-backend-ram,id=memdimm1,size=536870912 \
|
||||
+-device pc-dimm,memdev=memdimm1,id=dimm1,slot=1 \
|
||||
-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args b/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args
|
||||
index acff36eb78..181409cde0 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args
|
||||
@@ -16,10 +16,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-m size=1310720k,slots=16,maxmem=4194304k \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
--object memory-backend-ram,id=memdimm0,size=536870912 \
|
||||
--device pc-dimm,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
--object memory-backend-ram,id=memdimm1,size=536870912 \
|
||||
--device pc-dimm,memdev=memdimm1,id=dimm1,slot=1 \
|
||||
-uuid 49545eb3-75e1-2d0a-acdd-f0294406c99e \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -29,4 +25,8 @@ QEMU_AUDIO_DRV=none \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-boot strict=on \
|
||||
+-object memory-backend-ram,id=memdimm0,size=536870912 \
|
||||
+-device pc-dimm,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
+-object memory-backend-ram,id=memdimm1,size=536870912 \
|
||||
+-device pc-dimm,memdev=memdimm1,id=dimm1,slot=1 \
|
||||
-msg timestamp=on
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
|
||||
index 8747b249da..30b635d365 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
|
||||
@@ -18,10 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":2145386496}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-ram","id":"memvirtiomem0","reserve":false,"size":1073741824}' \
|
||||
--device virtio-mem-pci,node=0,block-size=2097152,requested-size=536870912,memdev=memvirtiomem0,id=virtiomem0,bus=pci.0,addr=0x2 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memvirtiomem1","mem-path":"/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1","reserve":false,"size":2147483648,"host-nodes":[1,2,3],"policy":"bind"}' \
|
||||
--device virtio-mem-pci,node=0,block-size=2097152,requested-size=1073741824,memdev=memvirtiomem1,id=virtiomem1,bus=pci.0,addr=0x3 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -33,6 +29,10 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-ram","id":"memvirtiomem0","reserve":false,"size":1073741824}' \
|
||||
+-device virtio-mem-pci,node=0,block-size=2097152,requested-size=536870912,memdev=memvirtiomem0,id=virtiomem0,bus=pci.0,addr=0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memvirtiomem1","mem-path":"/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1","reserve":false,"size":2147483648,"host-nodes":[1,2,3],"policy":"bind"}' \
|
||||
+-device virtio-mem-pci,node=0,block-size=2097152,requested-size=1073741824,memdev=memvirtiomem1,id=virtiomem1,bus=pci.0,addr=0x3 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-5.2.0.args
|
||||
index 17fd98fb88..8fa678c209 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-5.2.0.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-5.2.0.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object memory-backend-ram,id=ram-node0,size=2145386496 \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object memory-backend-file,id=memvirtiopmem0,mem-path=/tmp/virtio_pmem,share=on,size=536870912 \
|
||||
--device virtio-pmem-pci,memdev=memvirtiopmem0,id=virtiopmem0,bus=pci.0,addr=0x5 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object memory-backend-file,id=memvirtiopmem0,mem-path=/tmp/virtio_pmem,share=on,size=536870912 \
|
||||
+-device virtio-pmem-pci,memdev=memvirtiopmem0,id=virtiopmem0,bus=pci.0,addr=0x5 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args
|
||||
index e5a91b6d33..95ff490cef 100644
|
||||
--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args
|
||||
+++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args
|
||||
@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":2145386496}' \
|
||||
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
|
||||
--object '{"qom-type":"memory-backend-file","id":"memvirtiopmem0","mem-path":"/tmp/virtio_pmem","share":true,"size":536870912}' \
|
||||
--device virtio-pmem-pci,memdev=memvirtiopmem0,id=virtiopmem0,bus=pci.0,addr=0x5 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
+-object '{"qom-type":"memory-backend-file","id":"memvirtiopmem0","mem-path":"/tmp/virtio_pmem","share":true,"size":536870912}' \
|
||||
+-device virtio-pmem-pci,memdev=memvirtiopmem0,id=virtiopmem0,bus=pci.0,addr=0x5 \
|
||||
-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
|
||||
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
|
||||
-device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
|
||||
diff --git a/tests/qemuxml2argvdata/pages-dimm-discard.args b/tests/qemuxml2argvdata/pages-dimm-discard.args
|
||||
index 2ebe9c1350..e63c908549 100644
|
||||
--- a/tests/qemuxml2argvdata/pages-dimm-discard.args
|
||||
+++ b/tests/qemuxml2argvdata/pages-dimm-discard.args
|
||||
@@ -17,10 +17,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-realtime mlock=off \
|
||||
-smp 2,sockets=2,cores=1,threads=1 \
|
||||
-numa node,nodeid=0,cpus=0-1,mem=1024 \
|
||||
--object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,prealloc=on,size=1073741824,host-nodes=1-3,policy=bind \
|
||||
--device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
--object memory-backend-file,id=memdimm1,mem-path=/var/lib/libvirt/qemu/ram/-1-fedora/dimm1,discard-data=on,share=off,size=536870912 \
|
||||
--device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
|
||||
-uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
@@ -32,4 +28,8 @@ QEMU_AUDIO_DRV=none \
|
||||
-no-acpi \
|
||||
-boot strict=on \
|
||||
-usb \
|
||||
+-object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,prealloc=on,size=1073741824,host-nodes=1-3,policy=bind \
|
||||
+-device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
|
||||
+-object memory-backend-file,id=memdimm1,mem-path=/var/lib/libvirt/qemu/ram/-1-fedora/dimm1,discard-data=on,share=off,size=536870912 \
|
||||
+-device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
|
||||
-msg timestamp=on
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,132 @@
|
||||
From d4c4660b097695916244307d1125a17c30c0c9ef Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d4c4660b097695916244307d1125a17c30c0c9ef@dist-git>
|
||||
From: Martin Kletzander <mkletzan@redhat.com>
|
||||
Date: Fri, 22 Jul 2022 12:20:04 +0200
|
||||
Subject: [PATCH] qemu_migration: Acquire correct job in
|
||||
qemuMigrationSrcIsAllowed
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Commit 62627524607f added the acquiring of a job, but it is not always
|
||||
VIR_ASYNC_JOB_MIGRATION_OUT, so the code fails when doing save or anything else.
|
||||
Correct the async job by passing it from the caller as another parameter.
|
||||
|
||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 69e0e33873f1aec55df77f12fb0197d50dca3319)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_driver.c | 8 ++++----
|
||||
src/qemu/qemu_migration.c | 7 ++++---
|
||||
src/qemu/qemu_migration.h | 1 +
|
||||
src/qemu/qemu_snapshot.c | 4 ++--
|
||||
4 files changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 654b5d65e5..847c96639d 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -2650,13 +2650,13 @@ qemuDomainSaveInternal(virQEMUDriver *driver,
|
||||
virQEMUSaveData *data = NULL;
|
||||
g_autoptr(qemuDomainSaveCookie) cookie = NULL;
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
|
||||
- goto cleanup;
|
||||
-
|
||||
if (qemuDomainObjBeginAsyncJob(driver, vm, VIR_ASYNC_JOB_SAVE,
|
||||
VIR_DOMAIN_JOB_OPERATION_SAVE, flags) < 0)
|
||||
goto cleanup;
|
||||
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_SAVE, 0))
|
||||
+ goto cleanup;
|
||||
+
|
||||
if (!virDomainObjIsActive(vm)) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("guest unexpectedly quit"));
|
||||
@@ -3176,7 +3176,7 @@ doCoreDump(virQEMUDriver *driver,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_DUMP, 0))
|
||||
goto cleanup;
|
||||
|
||||
if (qemuMigrationSrcToFile(driver, vm, fd, compressor,
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 96c4c0f1da..f571c9eb27 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1452,6 +1452,7 @@ bool
|
||||
qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
bool remote,
|
||||
+ int asyncJob,
|
||||
unsigned int flags)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
@@ -1483,7 +1484,7 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
g_auto(GStrv) blockers = NULL;
|
||||
|
||||
if (qemuDomainGetMigrationBlockers(driver, vm,
|
||||
- VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
+ asyncJob,
|
||||
&blockers) < 0) {
|
||||
return false;
|
||||
}
|
||||
@@ -2632,7 +2633,7 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
|
||||
qemuMigrationJobStartPhase(vm, QEMU_MIGRATION_PHASE_BEGIN3) < 0)
|
||||
return NULL;
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, true, flags))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, true, priv->job.asyncJob, flags))
|
||||
return NULL;
|
||||
|
||||
if (!(flags & (VIR_MIGRATE_UNSAFE | VIR_MIGRATE_OFFLINE)) &&
|
||||
@@ -6033,7 +6034,7 @@ qemuMigrationSrcPerformJob(virQEMUDriver *driver,
|
||||
if (!(flags & VIR_MIGRATE_OFFLINE) && virDomainObjCheckActive(vm) < 0)
|
||||
goto endjob;
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, true, flags))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, true, VIR_ASYNC_JOB_MIGRATION_OUT, flags))
|
||||
goto endjob;
|
||||
|
||||
if (!(flags & (VIR_MIGRATE_UNSAFE | VIR_MIGRATE_OFFLINE)) &&
|
||||
diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h
|
||||
index 81cc1e91c0..61d12d6eb1 100644
|
||||
--- a/src/qemu/qemu_migration.h
|
||||
+++ b/src/qemu/qemu_migration.h
|
||||
@@ -229,6 +229,7 @@ bool
|
||||
qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
bool remote,
|
||||
+ int asyncJob,
|
||||
unsigned int flags);
|
||||
|
||||
int
|
||||
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
|
||||
index 833f880252..0733d44faa 100644
|
||||
--- a/src/qemu/qemu_snapshot.c
|
||||
+++ b/src/qemu/qemu_snapshot.c
|
||||
@@ -291,7 +291,7 @@ qemuSnapshotCreateActiveInternal(virQEMUDriver *driver,
|
||||
virDomainSnapshotDef *snapdef = virDomainSnapshotObjGetDef(snap);
|
||||
int ret = -1;
|
||||
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_SNAPSHOT, 0))
|
||||
goto cleanup;
|
||||
|
||||
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
|
||||
@@ -1422,7 +1422,7 @@ qemuSnapshotCreateActiveExternal(virQEMUDriver *driver,
|
||||
/* do the memory snapshot if necessary */
|
||||
if (memory) {
|
||||
/* check if migration is possible */
|
||||
- if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
|
||||
+ if (!qemuMigrationSrcIsAllowed(driver, vm, false, VIR_ASYNC_JOB_SNAPSHOT, 0))
|
||||
goto cleanup;
|
||||
|
||||
qemuDomainJobSetStatsType(priv->job.current,
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,229 @@
|
||||
From b8c791a3fc2767e6d899e3e0c590a93cb0ee7e03 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <b8c791a3fc2767e6d899e3e0c590a93cb0ee7e03@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 30 Jun 2022 12:52:38 +0200
|
||||
Subject: [PATCH] qemu_migration: Apply max-postcopy-bandwidth on post-copy
|
||||
resume
|
||||
|
||||
When resuming post-copy migration users may want to limit the bandwidth
|
||||
used by the migration and use a value that is different from the one
|
||||
specified when the migration was originally started.
|
||||
|
||||
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/333
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 766abdc291ba606379a7d197bff477fef25fb508)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2111070
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 12 ++++++--
|
||||
src/qemu/qemu_migration_params.c | 45 ++++++++++++++++++----------
|
||||
src/qemu/qemu_migration_paramspriv.h | 3 +-
|
||||
tests/qemumigparamstest.c | 2 +-
|
||||
tests/qemumigrationcookiexmltest.c | 2 +-
|
||||
5 files changed, 42 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 285a49c5ff..8a2f5b09a1 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -5097,12 +5097,13 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
|
||||
static int
|
||||
qemuMigrationSrcResume(virDomainObj *vm,
|
||||
- qemuMigrationParams *migParams G_GNUC_UNUSED,
|
||||
+ qemuMigrationParams *migParams,
|
||||
const char *cookiein,
|
||||
int cookieinlen,
|
||||
char **cookieout,
|
||||
int *cookieoutlen,
|
||||
- qemuMigrationSpec *spec)
|
||||
+ qemuMigrationSpec *spec,
|
||||
+ unsigned long flags)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
virQEMUDriver *driver = priv->driver;
|
||||
@@ -5119,6 +5120,10 @@ qemuMigrationSrcResume(virDomainObj *vm,
|
||||
if (!mig)
|
||||
return -1;
|
||||
|
||||
+ if (qemuMigrationParamsApply(driver, vm, VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
+ migParams, flags) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
if (qemuDomainObjEnterMonitorAsync(driver, vm,
|
||||
VIR_ASYNC_JOB_MIGRATION_OUT) < 0)
|
||||
return -1;
|
||||
@@ -5200,6 +5205,7 @@ qemuMigrationSrcPerformNative(virQEMUDriver *driver,
|
||||
|
||||
if (STREQ(uribits->scheme, "unix")) {
|
||||
if ((flags & VIR_MIGRATE_TLS) &&
|
||||
+ !(flags & VIR_MIGRATE_POSTCOPY_RESUME) &&
|
||||
!qemuMigrationParamsTLSHostnameIsSet(migParams)) {
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("Explicit destination hostname is required "
|
||||
@@ -5231,7 +5237,7 @@ qemuMigrationSrcPerformNative(virQEMUDriver *driver,
|
||||
|
||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||
ret = qemuMigrationSrcResume(vm, migParams, cookiein, cookieinlen,
|
||||
- cookieout, cookieoutlen, &spec);
|
||||
+ cookieout, cookieoutlen, &spec, flags);
|
||||
} else {
|
||||
ret = qemuMigrationSrcRun(driver, vm, persist_xml, cookiein, cookieinlen,
|
||||
cookieout, cookieoutlen, flags, resource,
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index a68aed9aa4..6ea0bde13a 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -141,6 +141,7 @@ struct _qemuMigrationParamsTPMapItem {
|
||||
typedef struct _qemuMigrationParamInfoItem qemuMigrationParamInfoItem;
|
||||
struct _qemuMigrationParamInfoItem {
|
||||
qemuMigrationParamType type;
|
||||
+ bool applyOnPostcopyResume;
|
||||
};
|
||||
|
||||
/* Migration capabilities which should always be enabled as long as they
|
||||
@@ -265,6 +266,7 @@ static const qemuMigrationParamInfoItem qemuMigrationParamInfo[] = {
|
||||
},
|
||||
[QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH] = {
|
||||
.type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ .applyOnPostcopyResume = true,
|
||||
},
|
||||
[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS] = {
|
||||
.type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
@@ -782,7 +784,8 @@ qemuMigrationParamsFromJSON(virJSONValue *params)
|
||||
|
||||
|
||||
virJSONValue *
|
||||
-qemuMigrationParamsToJSON(qemuMigrationParams *migParams)
|
||||
+qemuMigrationParamsToJSON(qemuMigrationParams *migParams,
|
||||
+ bool postcopyResume)
|
||||
{
|
||||
g_autoptr(virJSONValue) params = virJSONValueNewObject();
|
||||
size_t i;
|
||||
@@ -795,6 +798,9 @@ qemuMigrationParamsToJSON(qemuMigrationParams *migParams)
|
||||
if (!pv->set)
|
||||
continue;
|
||||
|
||||
+ if (postcopyResume && !qemuMigrationParamInfo[i].applyOnPostcopyResume)
|
||||
+ continue;
|
||||
+
|
||||
switch (qemuMigrationParamInfo[i].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
rc = virJSONValueObjectAppendNumberInt(params, name, pv->value.i);
|
||||
@@ -868,6 +874,7 @@ qemuMigrationCapsToJSON(virBitmap *caps,
|
||||
*
|
||||
* Send parameters stored in @migParams to QEMU. If @apiFlags is non-zero, some
|
||||
* parameters that do not make sense for the enabled flags will be ignored.
|
||||
+ * VIR_MIGRATE_POSTCOPY_RESUME is the only flag checked currently.
|
||||
*
|
||||
* Returns 0 on success, -1 on failure.
|
||||
*/
|
||||
@@ -876,32 +883,38 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
int asyncJob,
|
||||
qemuMigrationParams *migParams,
|
||||
- unsigned long apiFlags G_GNUC_UNUSED)
|
||||
+ unsigned long apiFlags)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
bool xbzrleCacheSize_old = false;
|
||||
g_autoptr(virJSONValue) params = NULL;
|
||||
g_autoptr(virJSONValue) caps = NULL;
|
||||
qemuMigrationParam xbzrle = QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE;
|
||||
+ bool postcopyResume = !!(apiFlags & VIR_MIGRATE_POSTCOPY_RESUME);
|
||||
int ret = -1;
|
||||
|
||||
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
||||
return -1;
|
||||
|
||||
- if (asyncJob == VIR_ASYNC_JOB_NONE) {
|
||||
- if (!virBitmapIsAllClear(migParams->caps)) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("Migration capabilities can only be set by "
|
||||
- "a migration job"));
|
||||
- goto cleanup;
|
||||
- }
|
||||
- } else {
|
||||
- if (!(caps = qemuMigrationCapsToJSON(priv->migrationCaps, migParams->caps)))
|
||||
- goto cleanup;
|
||||
+ /* Changing capabilities is only allowed before migration starts, we need
|
||||
+ * to skip them when resuming post-copy migration.
|
||||
+ */
|
||||
+ if (!postcopyResume) {
|
||||
+ if (asyncJob == VIR_ASYNC_JOB_NONE) {
|
||||
+ if (!virBitmapIsAllClear(migParams->caps)) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
+ _("Migration capabilities can only be set by "
|
||||
+ "a migration job"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (!(caps = qemuMigrationCapsToJSON(priv->migrationCaps, migParams->caps)))
|
||||
+ goto cleanup;
|
||||
|
||||
- if (virJSONValueArraySize(caps) > 0 &&
|
||||
- qemuMonitorSetMigrationCapabilities(priv->mon, &caps) < 0)
|
||||
- goto cleanup;
|
||||
+ if (virJSONValueArraySize(caps) > 0 &&
|
||||
+ qemuMonitorSetMigrationCapabilities(priv->mon, &caps) < 0)
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* If QEMU is too old to support xbzrle-cache-size migration parameter,
|
||||
@@ -917,7 +930,7 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
migParams->params[xbzrle].set = false;
|
||||
}
|
||||
|
||||
- if (!(params = qemuMigrationParamsToJSON(migParams)))
|
||||
+ if (!(params = qemuMigrationParamsToJSON(migParams, postcopyResume)))
|
||||
goto cleanup;
|
||||
|
||||
if (virJSONValueObjectKeysNumber(params) > 0 &&
|
||||
diff --git a/src/qemu/qemu_migration_paramspriv.h b/src/qemu/qemu_migration_paramspriv.h
|
||||
index f7e0f51fbd..34d51231ff 100644
|
||||
--- a/src/qemu/qemu_migration_paramspriv.h
|
||||
+++ b/src/qemu/qemu_migration_paramspriv.h
|
||||
@@ -26,7 +26,8 @@
|
||||
#pragma once
|
||||
|
||||
virJSONValue *
|
||||
-qemuMigrationParamsToJSON(qemuMigrationParams *migParams);
|
||||
+qemuMigrationParamsToJSON(qemuMigrationParams *migParams,
|
||||
+ bool postcopyResume);
|
||||
|
||||
qemuMigrationParams *
|
||||
qemuMigrationParamsFromJSON(virJSONValue *params);
|
||||
diff --git a/tests/qemumigparamstest.c b/tests/qemumigparamstest.c
|
||||
index bcdee5f32b..5d45a9dd58 100644
|
||||
--- a/tests/qemumigparamstest.c
|
||||
+++ b/tests/qemumigparamstest.c
|
||||
@@ -155,7 +155,7 @@ qemuMigParamsTestJSON(const void *opaque)
|
||||
if (!(migParams = qemuMigrationParamsFromJSON(paramsIn)))
|
||||
return -1;
|
||||
|
||||
- if (!(paramsOut = qemuMigrationParamsToJSON(migParams)) ||
|
||||
+ if (!(paramsOut = qemuMigrationParamsToJSON(migParams, false)) ||
|
||||
!(actualJSON = virJSONValueToString(paramsOut, true)))
|
||||
return -1;
|
||||
|
||||
diff --git a/tests/qemumigrationcookiexmltest.c b/tests/qemumigrationcookiexmltest.c
|
||||
index 316bfedd15..9731348b53 100644
|
||||
--- a/tests/qemumigrationcookiexmltest.c
|
||||
+++ b/tests/qemumigrationcookiexmltest.c
|
||||
@@ -333,7 +333,7 @@ testQemuMigrationCookieBlockDirtyBitmaps(const void *opaque)
|
||||
|
||||
qemuMigrationParamsSetBlockDirtyBitmapMapping(migParams, &migParamsBitmaps);
|
||||
|
||||
- if (!(paramsOut = qemuMigrationParamsToJSON(migParams)) ||
|
||||
+ if (!(paramsOut = qemuMigrationParamsToJSON(migParams, false)) ||
|
||||
!(actualJSON = virJSONValueToString(paramsOut, true)))
|
||||
return -1;
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,70 @@
|
||||
From d24586ede83472f850d1a0c520d482ac5f908696 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <d24586ede83472f850d1a0c520d482ac5f908696@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 30 Jun 2022 12:51:55 +0200
|
||||
Subject: [PATCH] qemu_migration: Pass migParams to qemuMigrationSrcResume
|
||||
|
||||
So the we can apply selected migration parameters even when resuming
|
||||
post-copy migration.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 8c335b5530194dbcef719a4d88c89b8723b831a5)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2111070
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 8cbd73a809..285a49c5ff 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -5097,6 +5097,7 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
|
||||
static int
|
||||
qemuMigrationSrcResume(virDomainObj *vm,
|
||||
+ qemuMigrationParams *migParams G_GNUC_UNUSED,
|
||||
const char *cookiein,
|
||||
int cookieinlen,
|
||||
char **cookieout,
|
||||
@@ -5229,7 +5230,7 @@ qemuMigrationSrcPerformNative(virQEMUDriver *driver,
|
||||
spec.fwdType = MIGRATION_FWD_DIRECT;
|
||||
|
||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||
- ret = qemuMigrationSrcResume(vm, cookiein, cookieinlen,
|
||||
+ ret = qemuMigrationSrcResume(vm, migParams, cookiein, cookieinlen,
|
||||
cookieout, cookieoutlen, &spec);
|
||||
} else {
|
||||
ret = qemuMigrationSrcRun(driver, vm, persist_xml, cookiein, cookieinlen,
|
||||
@@ -6124,6 +6125,7 @@ qemuMigrationSrcPerformResume(virQEMUDriver *driver,
|
||||
virConnectPtr conn,
|
||||
virDomainObj *vm,
|
||||
const char *uri,
|
||||
+ qemuMigrationParams *migParams,
|
||||
const char *cookiein,
|
||||
int cookieinlen,
|
||||
char **cookieout,
|
||||
@@ -6148,7 +6150,7 @@ qemuMigrationSrcPerformResume(virQEMUDriver *driver,
|
||||
ret = qemuMigrationSrcPerformNative(driver, vm, NULL, uri,
|
||||
cookiein, cookieinlen,
|
||||
cookieout, cookieoutlen, flags,
|
||||
- 0, NULL, NULL, 0, NULL, NULL, NULL);
|
||||
+ 0, NULL, NULL, 0, NULL, migParams, NULL);
|
||||
|
||||
if (virCloseCallbacksSet(driver->closeCallbacks, vm, conn,
|
||||
qemuMigrationAnyConnectionClosed) < 0)
|
||||
@@ -6188,7 +6190,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver,
|
||||
int ret = -1;
|
||||
|
||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||
- return qemuMigrationSrcPerformResume(driver, conn, vm, uri,
|
||||
+ return qemuMigrationSrcPerformResume(driver, conn, vm, uri, migParams,
|
||||
cookiein, cookieinlen,
|
||||
cookieout, cookieoutlen, flags);
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,51 @@
|
||||
From c50cae68f0d083ad0c5ffcf85908cc62eeaa866d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c50cae68f0d083ad0c5ffcf85908cc62eeaa866d@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Tue, 19 Jul 2022 13:48:44 +0200
|
||||
Subject: [PATCH] qemu_migration: Store original migration params in status XML
|
||||
|
||||
We keep original values of migration parameters so that we can restore
|
||||
them at the end of migration to make sure later migration does not use
|
||||
some random values. However, this does not really work when libvirt
|
||||
daemon is restarted on the source host because we failed to explicitly
|
||||
save the status XML after getting the migration parameters from QEMU.
|
||||
Actually it might work if the status XML is written later for some other
|
||||
reason such as domain state change, but that's not how it should work.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit c7238941357f0d2e94524cf8c5ad7d9c82dcf2f9)
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 8a2f5b09a1..9289df81eb 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -3245,6 +3245,9 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver,
|
||||
migParams, mig->caps->automatic) < 0)
|
||||
goto error;
|
||||
|
||||
+ /* Save original migration parameters */
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
+
|
||||
/* Migrations using TLS need to add the "tls-creds-x509" object and
|
||||
* set the migration TLS parameters */
|
||||
if (flags & VIR_MIGRATE_TLS) {
|
||||
@@ -4822,6 +4825,9 @@ qemuMigrationSrcRun(virQEMUDriver *driver,
|
||||
migParams, mig->caps->automatic) < 0)
|
||||
goto error;
|
||||
|
||||
+ /* Save original migration parameters */
|
||||
+ qemuDomainSaveStatus(vm);
|
||||
+
|
||||
if (flags & VIR_MIGRATE_TLS) {
|
||||
const char *hostname = NULL;
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,64 @@
|
||||
From 25fe3cf8990b654fd568f580b8885102b3f92789 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <25fe3cf8990b654fd568f580b8885102b3f92789@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 15:00:28 +0200
|
||||
Subject: [PATCH] qemu_migration: Use EnterMonitorAsync in
|
||||
qemuDomainGetMigrationBlockers
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The code is run with an async job and thus needs to make sure a nested
|
||||
job is acquired before entering the monitor.
|
||||
|
||||
While touching the code in qemuMigrationSrcIsAllowed I also fixed the
|
||||
grammar which was accidentally broken by v8.5.0-140-g2103807e33.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 62627524607f214e724a48fcac575737f49a271c)
|
||||
Resolves: https://bugzilla.redhat.com/2092833
|
||||
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||
index 2f77e45abf..735eb02673 100644
|
||||
--- a/src/qemu/qemu_migration.c
|
||||
+++ b/src/qemu/qemu_migration.c
|
||||
@@ -1418,12 +1418,15 @@ qemuMigrationSrcIsAllowedHostdev(const virDomainDef *def)
|
||||
static int
|
||||
qemuDomainGetMigrationBlockers(virQEMUDriver *driver,
|
||||
virDomainObj *vm,
|
||||
+ int asyncJob,
|
||||
char ***blockers)
|
||||
{
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
int rc;
|
||||
|
||||
- qemuDomainObjEnterMonitor(driver, vm);
|
||||
+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
rc = qemuMonitorGetMigrationBlockers(priv->mon, blockers);
|
||||
qemuDomainObjExitMonitor(vm);
|
||||
|
||||
@@ -1458,10 +1461,12 @@ qemuMigrationSrcIsAllowed(virQEMUDriver *driver,
|
||||
bool blockedReasonsCap = virQEMUCapsGet(priv->qemuCaps,
|
||||
QEMU_CAPS_MIGRATION_BLOCKED_REASONS);
|
||||
|
||||
- /* Ask qemu if it have a migration blocker */
|
||||
+ /* Ask qemu if it has a migration blocker */
|
||||
if (blockedReasonsCap) {
|
||||
g_auto(GStrv) blockers = NULL;
|
||||
- if (qemuDomainGetMigrationBlockers(driver, vm, &blockers) < 0)
|
||||
+ if (qemuDomainGetMigrationBlockers(driver, vm,
|
||||
+ VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||
+ &blockers) < 0)
|
||||
return false;
|
||||
|
||||
if (blockers && blockers[0]) {
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,62 @@
|
||||
From 0022c9aef2ecf60e9091e6df57e56065b14b67c5 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <0022c9aef2ecf60e9091e6df57e56065b14b67c5@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 28 Jul 2022 15:35:45 +0200
|
||||
Subject: [PATCH] qemu_migration_params: Avoid deadlock in
|
||||
qemuMigrationParamsReset
|
||||
|
||||
In my recent comnmit v8.5.0-188-gc47f1abb81 I accidentally moved
|
||||
qemuMigrationParamsResetTLS after qemuDomainObjEnterMonitorAsync not
|
||||
noticing qemuMigrationParamsResetTLS will try to enter the monitor
|
||||
again. The second call will time out and return with a domain object
|
||||
locked. But we're still in monitor section and the object should be
|
||||
unlocked which means qemuDomainObjExitMonitor will deadlock trying to
|
||||
lock it again.
|
||||
|
||||
Fixes: c47f1abb81194461377a0c608a7ecd87f9ce9146
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 8cb19a9b9a56ab6ebefc1f913c545e0bb86d4364)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration_params.c | 12 +++++++++---
|
||||
1 file changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 4a824ff5e1..4766d16e64 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -1291,6 +1291,7 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
{
|
||||
virErrorPtr err;
|
||||
g_autoptr(virBitmap) clearCaps = NULL;
|
||||
+ int rc;
|
||||
|
||||
virErrorPreserveLast(&err);
|
||||
|
||||
@@ -1305,11 +1306,16 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
|
||||
clearCaps = virBitmapNew(0);
|
||||
|
||||
- if (qemuMigrationParamsApplyCaps(vm, clearCaps) == 0 &&
|
||||
- qemuMigrationParamsApplyValues(vm, origParams, false) == 0)
|
||||
- qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
+ rc = 0;
|
||||
+ if (qemuMigrationParamsApplyCaps(vm, clearCaps) < 0 ||
|
||||
+ qemuMigrationParamsApplyValues(vm, origParams, false) < 0)
|
||||
+ rc = -1;
|
||||
|
||||
qemuDomainObjExitMonitor(vm);
|
||||
+ if (rc < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
|
||||
cleanup:
|
||||
virErrorRestore(&err);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,107 @@
|
||||
From 852927ea725deae6d4ef8a87383a78d9b0b1cd83 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <852927ea725deae6d4ef8a87383a78d9b0b1cd83@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 15:59:51 +0200
|
||||
Subject: [PATCH] qemu_migration_params: Refactor qemuMigrationParamsApply
|
||||
|
||||
qemuMigrationParamsApply restricts when capabilities can be set, but
|
||||
this is not useful in all cases. Let's create new helpers for setting
|
||||
migration capabilities and parameters which can be reused in more places
|
||||
without the restriction.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit c0824fd03802085db698c10fe62c98cc95a57941)
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration_params.c | 55 +++++++++++++++++++++++---------
|
||||
1 file changed, 40 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 0bce358ac3..7b9e5453f6 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -864,6 +864,43 @@ qemuMigrationCapsToJSON(virBitmap *caps,
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+qemuMigrationParamsApplyCaps(virDomainObj *vm,
|
||||
+ virBitmap *states)
|
||||
+{
|
||||
+ qemuDomainObjPrivate *priv = vm->privateData;
|
||||
+ g_autoptr(virJSONValue) json = NULL;
|
||||
+
|
||||
+ if (!(json = qemuMigrationCapsToJSON(priv->migrationCaps, states)))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (virJSONValueArraySize(json) > 0 &&
|
||||
+ qemuMonitorSetMigrationCapabilities(priv->mon, &json) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
+qemuMigrationParamsApplyValues(virDomainObj *vm,
|
||||
+ qemuMigrationParams *params,
|
||||
+ bool postcopyResume)
|
||||
+{
|
||||
+ qemuDomainObjPrivate *priv = vm->privateData;
|
||||
+ g_autoptr(virJSONValue) json = NULL;
|
||||
+
|
||||
+ if (!(json = qemuMigrationParamsToJSON(params, postcopyResume)))
|
||||
+ return -1;
|
||||
+
|
||||
+ if (virJSONValueObjectKeysNumber(json) > 0 &&
|
||||
+ qemuMonitorSetMigrationParams(priv->mon, &json) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* qemuMigrationParamsApply
|
||||
* @driver: qemu driver
|
||||
@@ -885,9 +922,6 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
qemuMigrationParams *migParams,
|
||||
unsigned long apiFlags)
|
||||
{
|
||||
- qemuDomainObjPrivate *priv = vm->privateData;
|
||||
- g_autoptr(virJSONValue) params = NULL;
|
||||
- g_autoptr(virJSONValue) caps = NULL;
|
||||
bool postcopyResume = !!(apiFlags & VIR_MIGRATE_POSTCOPY_RESUME);
|
||||
int ret = -1;
|
||||
|
||||
@@ -905,21 +939,12 @@ qemuMigrationParamsApply(virQEMUDriver *driver,
|
||||
"a migration job"));
|
||||
goto cleanup;
|
||||
}
|
||||
- } else {
|
||||
- if (!(caps = qemuMigrationCapsToJSON(priv->migrationCaps, migParams->caps)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- if (virJSONValueArraySize(caps) > 0 &&
|
||||
- qemuMonitorSetMigrationCapabilities(priv->mon, &caps) < 0)
|
||||
- goto cleanup;
|
||||
+ } else if (qemuMigrationParamsApplyCaps(vm, migParams->caps) < 0) {
|
||||
+ goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
- if (!(params = qemuMigrationParamsToJSON(migParams, postcopyResume)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- if (virJSONValueObjectKeysNumber(params) > 0 &&
|
||||
- qemuMonitorSetMigrationParams(priv->mon, ¶ms) < 0)
|
||||
+ if (qemuMigrationParamsApplyValues(vm, migParams, postcopyResume) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,63 @@
|
||||
From 2a05454cd2d6ba283c128158f44d84d65832ebf7 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <2a05454cd2d6ba283c128158f44d84d65832ebf7@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Thu, 21 Jul 2022 16:49:09 +0200
|
||||
Subject: [PATCH] qemu_migration_params: Refactor qemuMigrationParamsReset
|
||||
|
||||
Because qemuMigrationParamsReset used to call qemuMigrationParamsApply
|
||||
for resetting migration capabilities and parameters, it did not work
|
||||
well since commit v5.1.0-83-ga1dec315c9 which only allowed capabilities
|
||||
to be set from an async job. However, when reconnecting to running
|
||||
domains after daemon restart we do not have an async job. Thus the
|
||||
capabilities were not properly reset in case the daemon was restarted
|
||||
during an ongoing migration. We need to avoid calling
|
||||
qemuMigrationParamsApply to make sure both parameters and capabilities
|
||||
can be reset by a normal job.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2107892
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit c47f1abb81194461377a0c608a7ecd87f9ce9146)
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration_params.c | 14 +++++++++-----
|
||||
1 file changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 7b9e5453f6..4a824ff5e1 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -1290,6 +1290,7 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
unsigned long apiFlags)
|
||||
{
|
||||
virErrorPtr err;
|
||||
+ g_autoptr(virBitmap) clearCaps = NULL;
|
||||
|
||||
virErrorPreserveLast(&err);
|
||||
|
||||
@@ -1299,13 +1300,16 @@ qemuMigrationParamsReset(virQEMUDriver *driver,
|
||||
if (!virDomainObjIsActive(vm) || !origParams)
|
||||
goto cleanup;
|
||||
|
||||
- /* Do not pass apiFlags to qemuMigrationParamsApply here to make sure all
|
||||
- * parameters and capabilities are reset. */
|
||||
- if (qemuMigrationParamsApply(driver, vm, asyncJob, origParams, 0) < 0)
|
||||
+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
||||
goto cleanup;
|
||||
|
||||
- qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
- /* We don't reset 'block-bitmap-mapping' as it can't be unset */
|
||||
+ clearCaps = virBitmapNew(0);
|
||||
+
|
||||
+ if (qemuMigrationParamsApplyCaps(vm, clearCaps) == 0 &&
|
||||
+ qemuMigrationParamsApplyValues(vm, origParams, false) == 0)
|
||||
+ qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams, apiFlags);
|
||||
+
|
||||
+ qemuDomainObjExitMonitor(vm);
|
||||
|
||||
cleanup:
|
||||
virErrorRestore(&err);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,176 @@
|
||||
From aa4b6b4877d60218c24d4ae713786f5ee37ac6dc Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <aa4b6b4877d60218c24d4ae713786f5ee37ac6dc@dist-git>
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Wed, 29 Jun 2022 15:12:20 +0200
|
||||
Subject: [PATCH] qemu_migration_params: Replace qemuMigrationParamTypes array
|
||||
|
||||
We will need to annotate individual parameters a bit more than just
|
||||
noting their type. Let's introduce qemuMigrationParamInfo replacing
|
||||
simple qemuMigrationParamTypes with an array of structs.
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
(cherry picked from commit 184749691f27f30a39f6f6c77828ffb951af0255)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2111070
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
---
|
||||
src/qemu/qemu_migration_params.c | 77 ++++++++++++++++++++++----------
|
||||
1 file changed, 54 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||
index 398c07efd0..a68aed9aa4 100644
|
||||
--- a/src/qemu/qemu_migration_params.c
|
||||
+++ b/src/qemu/qemu_migration_params.c
|
||||
@@ -138,6 +138,11 @@ struct _qemuMigrationParamsTPMapItem {
|
||||
int party; /* bit-wise OR of qemuMigrationParty */
|
||||
};
|
||||
|
||||
+typedef struct _qemuMigrationParamInfoItem qemuMigrationParamInfoItem;
|
||||
+struct _qemuMigrationParamInfoItem {
|
||||
+ qemuMigrationParamType type;
|
||||
+};
|
||||
+
|
||||
/* Migration capabilities which should always be enabled as long as they
|
||||
* are supported by QEMU. If the capability is supposed to be enabled on both
|
||||
* sides of migration, it won't be enabled unless both sides support it.
|
||||
@@ -224,22 +229,48 @@ static const qemuMigrationParamsTPMapItem qemuMigrationParamsTPMap[] = {
|
||||
.party = QEMU_MIGRATION_SOURCE},
|
||||
};
|
||||
|
||||
-static const qemuMigrationParamType qemuMigrationParamTypes[] = {
|
||||
- [QEMU_MIGRATION_PARAM_COMPRESS_LEVEL] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_COMPRESS_THREADS] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_THROTTLE_INITIAL] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
- [QEMU_MIGRATION_PARAM_TLS_CREDS] = QEMU_MIGRATION_PARAM_TYPE_STRING,
|
||||
- [QEMU_MIGRATION_PARAM_TLS_HOSTNAME] = QEMU_MIGRATION_PARAM_TYPE_STRING,
|
||||
- [QEMU_MIGRATION_PARAM_MAX_BANDWIDTH] = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
- [QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT] = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
- [QEMU_MIGRATION_PARAM_BLOCK_INCREMENTAL] = QEMU_MIGRATION_PARAM_TYPE_BOOL,
|
||||
- [QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE] = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
- [QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH] = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
- [QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS] = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+static const qemuMigrationParamInfoItem qemuMigrationParamInfo[] = {
|
||||
+ [QEMU_MIGRATION_PARAM_COMPRESS_LEVEL] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_COMPRESS_THREADS] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_DECOMPRESS_THREADS] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_THROTTLE_INITIAL] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_THROTTLE_INCREMENT] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_TLS_CREDS] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_STRING,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_TLS_HOSTNAME] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_STRING,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_MAX_BANDWIDTH] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_DOWNTIME_LIMIT] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_BLOCK_INCREMENTAL] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_BOOL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_ULL,
|
||||
+ },
|
||||
+ [QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS] = {
|
||||
+ .type = QEMU_MIGRATION_PARAM_TYPE_INT,
|
||||
+ },
|
||||
};
|
||||
-G_STATIC_ASSERT(G_N_ELEMENTS(qemuMigrationParamTypes) == QEMU_MIGRATION_PARAM_LAST);
|
||||
+G_STATIC_ASSERT(G_N_ELEMENTS(qemuMigrationParamInfo) == QEMU_MIGRATION_PARAM_LAST);
|
||||
|
||||
|
||||
virBitmap *
|
||||
@@ -281,7 +312,7 @@ qemuMigrationParamsFree(qemuMigrationParams *migParams)
|
||||
return;
|
||||
|
||||
for (i = 0; i < QEMU_MIGRATION_PARAM_LAST; i++) {
|
||||
- if (qemuMigrationParamTypes[i] == QEMU_MIGRATION_PARAM_TYPE_STRING)
|
||||
+ if (qemuMigrationParamInfo[i].type == QEMU_MIGRATION_PARAM_TYPE_STRING)
|
||||
g_free(migParams->params[i].value.s);
|
||||
}
|
||||
|
||||
@@ -295,7 +326,7 @@ static int
|
||||
qemuMigrationParamsCheckType(qemuMigrationParam param,
|
||||
qemuMigrationParamType type)
|
||||
{
|
||||
- if (qemuMigrationParamTypes[param] != type) {
|
||||
+ if (qemuMigrationParamInfo[param].type != type) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Type mismatch for '%s' migration parameter"),
|
||||
qemuMigrationParamTypeToString(param));
|
||||
@@ -595,7 +626,7 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params,
|
||||
VIR_DEBUG("Setting migration parameter '%s' from '%s'",
|
||||
qemuMigrationParamTypeToString(item->param), item->typedParam);
|
||||
|
||||
- switch (qemuMigrationParamTypes[item->param]) {
|
||||
+ switch (qemuMigrationParamInfo[item->param].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
if (qemuMigrationParamsGetTPInt(migParams, item->param, params,
|
||||
nparams, item->typedParam,
|
||||
@@ -671,7 +702,7 @@ qemuMigrationParamsDump(qemuMigrationParams *migParams,
|
||||
if (!(item->party & QEMU_MIGRATION_DESTINATION))
|
||||
continue;
|
||||
|
||||
- switch (qemuMigrationParamTypes[item->param]) {
|
||||
+ switch (qemuMigrationParamInfo[item->param].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
if (qemuMigrationParamsSetTPInt(migParams, item->param,
|
||||
params, nparams, maxparams,
|
||||
@@ -721,7 +752,7 @@ qemuMigrationParamsFromJSON(virJSONValue *params)
|
||||
name = qemuMigrationParamTypeToString(i);
|
||||
pv = &migParams->params[i];
|
||||
|
||||
- switch (qemuMigrationParamTypes[i]) {
|
||||
+ switch (qemuMigrationParamInfo[i].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
if (virJSONValueObjectGetNumberInt(params, name, &pv->value.i) == 0)
|
||||
pv->set = true;
|
||||
@@ -764,7 +795,7 @@ qemuMigrationParamsToJSON(qemuMigrationParams *migParams)
|
||||
if (!pv->set)
|
||||
continue;
|
||||
|
||||
- switch (qemuMigrationParamTypes[i]) {
|
||||
+ switch (qemuMigrationParamInfo[i].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
rc = virJSONValueObjectAppendNumberInt(params, name, pv->value.i);
|
||||
break;
|
||||
@@ -1280,7 +1311,7 @@ qemuMigrationParamsFormat(virBuffer *buf,
|
||||
virBufferAsprintf(buf, "<param name='%s' ",
|
||||
qemuMigrationParamTypeToString(i));
|
||||
|
||||
- switch (qemuMigrationParamTypes[i]) {
|
||||
+ switch (qemuMigrationParamInfo[i].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
virBufferAsprintf(buf, "value='%d'", pv->value.i);
|
||||
break;
|
||||
@@ -1357,7 +1388,7 @@ qemuMigrationParamsParse(xmlXPathContextPtr ctxt,
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
- switch (qemuMigrationParamTypes[param]) {
|
||||
+ switch (qemuMigrationParamInfo[param].type) {
|
||||
case QEMU_MIGRATION_PARAM_TYPE_INT:
|
||||
rc = virStrToLong_i(value, NULL, 10, &pv->value.i);
|
||||
break;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,846 +0,0 @@
|
||||
From fabb2642be1ef180b221af36e5810f819622fc58 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <fabb2642be1ef180b221af36e5810f819622fc58@dist-git>
|
||||
From: Olaf Hering <olaf@aepfle.de>
|
||||
Date: Wed, 12 Jan 2022 11:45:08 +0100
|
||||
Subject: [PATCH] remove sysconfig files
|
||||
|
||||
sysconfig files are owned by the admin of the host. They have the
|
||||
liberty to put anything they want into these files. This makes it
|
||||
difficult to provide different built-in defaults.
|
||||
|
||||
Remove the sysconfig file and place the current desired default into
|
||||
the service file.
|
||||
|
||||
Local customizations can now go either into /etc/sysconfig/name
|
||||
or /etc/systemd/system/name.service.d/my-knobs.conf
|
||||
|
||||
Attempt to handle upgrades in libvirt.spec.
|
||||
Dirty files which are marked as %config will be renamed to file.rpmsave.
|
||||
To restore them automatically, move stale .rpmsave files away, and
|
||||
catch any new rpmsave files in %posttrans.
|
||||
|
||||
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
||||
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||
(cherry picked from commit 8eb4461645c5738674232ee26c15f5555230b7ff)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2042529
|
||||
---
|
||||
docs/daemons.rst | 21 ++++++++
|
||||
docs/remote.html.in | 6 +--
|
||||
libvirt.spec.in | 69 +++++++++++++++++++------
|
||||
src/ch/meson.build | 5 --
|
||||
src/ch/virtchd.service.in | 1 +
|
||||
src/ch/virtchd.sysconf | 3 --
|
||||
src/interface/meson.build | 5 --
|
||||
src/interface/virtinterfaced.service.in | 1 +
|
||||
src/interface/virtinterfaced.sysconf | 3 --
|
||||
src/libxl/meson.build | 5 --
|
||||
src/libxl/virtxend.service.in | 1 +
|
||||
src/libxl/virtxend.sysconf | 3 --
|
||||
src/locking/meson.build | 5 --
|
||||
src/locking/virtlockd.service.in | 1 +
|
||||
src/locking/virtlockd.sysconf | 3 --
|
||||
src/logging/meson.build | 5 --
|
||||
src/logging/virtlogd.sysconf | 3 --
|
||||
src/lxc/meson.build | 5 --
|
||||
src/lxc/virtlxcd.service.in | 1 +
|
||||
src/lxc/virtlxcd.sysconf | 3 --
|
||||
src/meson.build | 16 ------
|
||||
src/network/meson.build | 5 --
|
||||
src/network/virtnetworkd.service.in | 1 +
|
||||
src/network/virtnetworkd.sysconf | 3 --
|
||||
src/node_device/meson.build | 5 --
|
||||
src/node_device/virtnodedevd.service.in | 1 +
|
||||
src/node_device/virtnodedevd.sysconf | 3 --
|
||||
src/nwfilter/meson.build | 5 --
|
||||
src/nwfilter/virtnwfilterd.service.in | 1 +
|
||||
src/nwfilter/virtnwfilterd.sysconf | 3 --
|
||||
src/qemu/meson.build | 5 --
|
||||
src/qemu/virtqemud.service.in | 1 +
|
||||
src/qemu/virtqemud.sysconf | 12 -----
|
||||
src/remote/libvirtd.service.in | 1 +
|
||||
src/remote/libvirtd.sysconf | 21 --------
|
||||
src/remote/meson.build | 10 ----
|
||||
src/remote/virtproxyd.service.in | 1 +
|
||||
src/remote/virtproxyd.sysconf | 3 --
|
||||
src/secret/meson.build | 5 --
|
||||
src/secret/virtsecretd.service.in | 1 +
|
||||
src/secret/virtsecretd.sysconf | 3 --
|
||||
src/storage/meson.build | 5 --
|
||||
src/storage/virtstoraged.service.in | 1 +
|
||||
src/storage/virtstoraged.sysconf | 3 --
|
||||
src/vbox/meson.build | 5 --
|
||||
src/vbox/virtvboxd.service.in | 1 +
|
||||
src/vbox/virtvboxd.sysconf | 3 --
|
||||
src/vz/meson.build | 5 --
|
||||
src/vz/virtvzd.service.in | 1 +
|
||||
src/vz/virtvzd.sysconf | 3 --
|
||||
tools/libvirt-guests.sysconf | 50 ------------------
|
||||
tools/meson.build | 6 ---
|
||||
52 files changed, 93 insertions(+), 245 deletions(-)
|
||||
delete mode 100644 src/ch/virtchd.sysconf
|
||||
delete mode 100644 src/interface/virtinterfaced.sysconf
|
||||
delete mode 100644 src/libxl/virtxend.sysconf
|
||||
delete mode 100644 src/locking/virtlockd.sysconf
|
||||
delete mode 100644 src/logging/virtlogd.sysconf
|
||||
delete mode 100644 src/lxc/virtlxcd.sysconf
|
||||
delete mode 100644 src/network/virtnetworkd.sysconf
|
||||
delete mode 100644 src/node_device/virtnodedevd.sysconf
|
||||
delete mode 100644 src/nwfilter/virtnwfilterd.sysconf
|
||||
delete mode 100644 src/qemu/virtqemud.sysconf
|
||||
delete mode 100644 src/remote/libvirtd.sysconf
|
||||
delete mode 100644 src/remote/virtproxyd.sysconf
|
||||
delete mode 100644 src/secret/virtsecretd.sysconf
|
||||
delete mode 100644 src/storage/virtstoraged.sysconf
|
||||
delete mode 100644 src/vbox/virtvboxd.sysconf
|
||||
delete mode 100644 src/vz/virtvzd.sysconf
|
||||
delete mode 100644 tools/libvirt-guests.sysconf
|
||||
|
||||
diff --git a/docs/daemons.rst b/docs/daemons.rst
|
||||
index c8ae3b0cef..1f9bc34260 100644
|
||||
--- a/docs/daemons.rst
|
||||
+++ b/docs/daemons.rst
|
||||
@@ -686,3 +686,24 @@ socket unit names into the service. When using these old versions, the
|
||||
``unix_sock_dir`` setting in ``virtlockd.conf`` must be changed in
|
||||
lock-step with the equivalent setting in the unit files to ensure that
|
||||
``virtlockd`` can identify the sockets.
|
||||
+
|
||||
+Changing command line options for daemons
|
||||
+=========================================
|
||||
+
|
||||
+Two ways exist to override the defaults in the provided service files:
|
||||
+either a systemd "drop-in" configuration file, or a ``/etc/sysconfig/$daemon``
|
||||
+file must be created. For example, to change the command line option
|
||||
+for a debug session of ``libvirtd``, create a file
|
||||
+``/etc/systemd/system/libvirtd.service.d/debug.conf`` with the following content:
|
||||
+
|
||||
+ ::
|
||||
+
|
||||
+ [Unit]
|
||||
+ Description=Virtualization daemon, with override from debug.conf
|
||||
+
|
||||
+ [Service]
|
||||
+ Environment=G_DEBUG=fatal-warnings
|
||||
+ Environment=LIBVIRTD_ARGS="--listen --verbose"
|
||||
+
|
||||
+After changes to systemd "drop-in" configuration files it is required to run
|
||||
+``systemctl daemon-reload``.
|
||||
diff --git a/docs/remote.html.in b/docs/remote.html.in
|
||||
index efdb2b3253..47fb2d4df3 100644
|
||||
--- a/docs/remote.html.in
|
||||
+++ b/docs/remote.html.in
|
||||
@@ -138,9 +138,9 @@ Blank lines and comments beginning with <code>#</code> are ignored.
|
||||
<td> 1 (on) </td>
|
||||
<td>
|
||||
Listen for secure TLS connections on the public TCP/IP port.
|
||||
- Note: it is also necessary to start the server in listening mode by
|
||||
- running it with --listen or editing /etc/sysconfig/libvirtd by uncommenting the LIBVIRTD_ARGS="--listen" line
|
||||
- to cause the server to come up in listening mode whenever it is started.
|
||||
+ Note: it is also necessary to start the server in listening mode
|
||||
+ by running it with --listen or adding a LIBVIRTD_ARGS="--listen"
|
||||
+ line to /etc/sysconfig/libvirtd.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
diff --git a/src/ch/meson.build b/src/ch/meson.build
|
||||
index e0afdb390a..a4bf0c6649 100644
|
||||
--- a/src/ch/meson.build
|
||||
+++ b/src/ch/meson.build
|
||||
@@ -63,11 +63,6 @@ if conf.has('WITH_CH')
|
||||
'sockets': [ 'main', 'ro', 'admin' ],
|
||||
}
|
||||
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtchd',
|
||||
- 'file': files('virtchd.sysconf'),
|
||||
- }
|
||||
-
|
||||
virt_install_dirs += [
|
||||
localstatedir / 'lib' / 'libvirt' / 'ch',
|
||||
runstatedir / 'libvirt' / 'ch',
|
||||
diff --git a/src/ch/virtchd.service.in b/src/ch/virtchd.service.in
|
||||
index cc1e85d1df..f08339f211 100644
|
||||
--- a/src/ch/virtchd.service.in
|
||||
+++ b/src/ch/virtchd.service.in
|
||||
@@ -18,6 +18,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTCHD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtchd
|
||||
ExecStart=@sbindir@/virtchd $VIRTCHD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/ch/virtchd.sysconf b/src/ch/virtchd.sysconf
|
||||
deleted file mode 100644
|
||||
index 5ee44be5cf..0000000000
|
||||
--- a/src/ch/virtchd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtchd.service systemd unit
|
||||
-
|
||||
-VIRTCHD_ARGS="--timeout 120"
|
||||
diff --git a/src/interface/meson.build b/src/interface/meson.build
|
||||
index 2d4e30362c..f9f378aeb0 100644
|
||||
--- a/src/interface/meson.build
|
||||
+++ b/src/interface/meson.build
|
||||
@@ -54,9 +54,4 @@ if conf.has('WITH_INTERFACE')
|
||||
'name': 'virtinterfaced',
|
||||
'in_file': files('virtinterfaced.init.in')
|
||||
}
|
||||
-
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtinterfaced',
|
||||
- 'file': files('virtinterfaced.sysconf'),
|
||||
- }
|
||||
endif
|
||||
diff --git a/src/interface/virtinterfaced.service.in b/src/interface/virtinterfaced.service.in
|
||||
index 73d409b81b..3d944e17a9 100644
|
||||
--- a/src/interface/virtinterfaced.service.in
|
||||
+++ b/src/interface/virtinterfaced.service.in
|
||||
@@ -13,6 +13,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTINTERFACED_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtinterfaced
|
||||
ExecStart=@sbindir@/virtinterfaced $VIRTINTERFACED_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/interface/virtinterfaced.sysconf b/src/interface/virtinterfaced.sysconf
|
||||
deleted file mode 100644
|
||||
index 0685da31b8..0000000000
|
||||
--- a/src/interface/virtinterfaced.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtinterfaced.service systemd unit
|
||||
-
|
||||
-VIRTINTERFACED_ARGS="--timeout 120"
|
||||
diff --git a/src/libxl/meson.build b/src/libxl/meson.build
|
||||
index 9793899106..8347a3c966 100644
|
||||
--- a/src/libxl/meson.build
|
||||
+++ b/src/libxl/meson.build
|
||||
@@ -78,11 +78,6 @@ if conf.has('WITH_LIBXL')
|
||||
'in_file': files('virtxend.init.in'),
|
||||
}
|
||||
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtxend',
|
||||
- 'file': files('virtxend.sysconf'),
|
||||
- }
|
||||
-
|
||||
virt_install_dirs += [
|
||||
localstatedir / 'lib' / 'libvirt' / 'libxl',
|
||||
runstatedir / 'libvirt' / 'libxl',
|
||||
diff --git a/src/libxl/virtxend.service.in b/src/libxl/virtxend.service.in
|
||||
index 19b19ce3e6..2b5163e179 100644
|
||||
--- a/src/libxl/virtxend.service.in
|
||||
+++ b/src/libxl/virtxend.service.in
|
||||
@@ -18,6 +18,7 @@ ConditionPathExists=/proc/xen/capabilities
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTXEND_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtxend
|
||||
ExecStart=@sbindir@/virtxend $VIRTXEND_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/libxl/virtxend.sysconf b/src/libxl/virtxend.sysconf
|
||||
deleted file mode 100644
|
||||
index 301da47e8d..0000000000
|
||||
--- a/src/libxl/virtxend.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtxend.service systemd unit
|
||||
-
|
||||
-VIRTXEND_ARGS="--timeout 120"
|
||||
diff --git a/src/locking/meson.build b/src/locking/meson.build
|
||||
index 184d3c3f56..72f7780438 100644
|
||||
--- a/src/locking/meson.build
|
||||
+++ b/src/locking/meson.build
|
||||
@@ -156,11 +156,6 @@ if conf.has('WITH_LIBVIRTD')
|
||||
'in_file': files('virtlockd.init.in'),
|
||||
}
|
||||
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtlockd',
|
||||
- 'file': files('virtlockd.sysconf'),
|
||||
- }
|
||||
-
|
||||
if conf.has('WITH_SANLOCK')
|
||||
virt_helpers += {
|
||||
'name': 'libvirt_sanlock_helper',
|
||||
diff --git a/src/locking/virtlockd.service.in b/src/locking/virtlockd.service.in
|
||||
index 4a6fab05ab..19271d1e7d 100644
|
||||
--- a/src/locking/virtlockd.service.in
|
||||
+++ b/src/locking/virtlockd.service.in
|
||||
@@ -7,6 +7,7 @@ Documentation=man:virtlockd(8)
|
||||
Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
+Environment=VIRTLOCKD_ARGS=
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtlockd
|
||||
ExecStart=@sbindir@/virtlockd $VIRTLOCKD_ARGS
|
||||
ExecReload=/bin/kill -USR1 $MAINPID
|
||||
diff --git a/src/locking/virtlockd.sysconf b/src/locking/virtlockd.sysconf
|
||||
deleted file mode 100644
|
||||
index 03aea9e1bc..0000000000
|
||||
--- a/src/locking/virtlockd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtlockd.service systemd unit
|
||||
-
|
||||
-VIRTLOCKD_ARGS=""
|
||||
diff --git a/src/logging/meson.build b/src/logging/meson.build
|
||||
index 89e06a0d5a..7066f16fad 100644
|
||||
--- a/src/logging/meson.build
|
||||
+++ b/src/logging/meson.build
|
||||
@@ -101,11 +101,6 @@ if conf.has('WITH_LIBVIRTD')
|
||||
'name': 'virtlogd',
|
||||
'in_file': files('virtlogd.init.in'),
|
||||
}
|
||||
-
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtlogd',
|
||||
- 'file': files('virtlogd.sysconf'),
|
||||
- }
|
||||
endif
|
||||
|
||||
log_inc_dir = include_directories('.')
|
||||
diff --git a/src/logging/virtlogd.sysconf b/src/logging/virtlogd.sysconf
|
||||
deleted file mode 100644
|
||||
index 67993e83ce..0000000000
|
||||
--- a/src/logging/virtlogd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtlogd.service systemd unit
|
||||
-
|
||||
-VIRTLOGD_ARGS=""
|
||||
diff --git a/src/lxc/meson.build b/src/lxc/meson.build
|
||||
index ad5c659dba..c1f71b43e1 100644
|
||||
--- a/src/lxc/meson.build
|
||||
+++ b/src/lxc/meson.build
|
||||
@@ -175,11 +175,6 @@ if conf.has('WITH_LXC')
|
||||
'in_file': files('virtlxcd.init.in'),
|
||||
}
|
||||
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtlxcd',
|
||||
- 'file': files('virtlxcd.sysconf'),
|
||||
- }
|
||||
-
|
||||
virt_install_dirs += [
|
||||
localstatedir / 'lib' / 'libvirt' / 'lxc',
|
||||
runstatedir / 'libvirt' / 'lxc',
|
||||
diff --git a/src/lxc/virtlxcd.service.in b/src/lxc/virtlxcd.service.in
|
||||
index 3af7c1a52d..d58bde9f5d 100644
|
||||
--- a/src/lxc/virtlxcd.service.in
|
||||
+++ b/src/lxc/virtlxcd.service.in
|
||||
@@ -18,6 +18,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTLXCD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtlxcd
|
||||
ExecStart=@sbindir@/virtlxcd $VIRTLXCD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/lxc/virtlxcd.sysconf b/src/lxc/virtlxcd.sysconf
|
||||
deleted file mode 100644
|
||||
index 119a4a23f3..0000000000
|
||||
--- a/src/lxc/virtlxcd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtlxcd.service systemd unit
|
||||
-
|
||||
-VIRTLXCD_ARGS="--timeout 120"
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 2408344ef7..fc6c77f5d1 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -208,12 +208,6 @@ virt_daemon_units = []
|
||||
# * in_file - source init file (required)
|
||||
openrc_init_files = []
|
||||
|
||||
-# sysconf_files
|
||||
-# install libvirt daemon sysconf files
|
||||
-# * name - daemon name (required)
|
||||
-# * file - source sysconf file (required)
|
||||
-sysconf_files = []
|
||||
-
|
||||
# virt_install_dirs:
|
||||
# list of directories to create during installation
|
||||
virt_install_dirs = []
|
||||
@@ -868,16 +862,6 @@ if conf.has('WITH_LIBVIRTD')
|
||||
endif
|
||||
endif
|
||||
|
||||
-if init_script != 'none'
|
||||
- foreach sysconf : sysconf_files
|
||||
- install_data(
|
||||
- sysconf['file'],
|
||||
- install_dir: sysconfdir / 'sysconfig',
|
||||
- rename: [ sysconf['name'] ],
|
||||
- )
|
||||
- endforeach
|
||||
-endif
|
||||
-
|
||||
if conf.has('WITH_DTRACE_PROBES')
|
||||
custom_target(
|
||||
'libvirt_functions.stp',
|
||||
diff --git a/src/network/meson.build b/src/network/meson.build
|
||||
index d6fb624bb7..e7c43bc4c4 100644
|
||||
--- a/src/network/meson.build
|
||||
+++ b/src/network/meson.build
|
||||
@@ -72,11 +72,6 @@ if conf.has('WITH_NETWORK')
|
||||
'in_file': files('virtnetworkd.init.in'),
|
||||
}
|
||||
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtnetworkd',
|
||||
- 'file': files('virtnetworkd.sysconf'),
|
||||
- }
|
||||
-
|
||||
virt_install_dirs += [
|
||||
localstatedir / 'lib' / 'libvirt' / 'network',
|
||||
localstatedir / 'lib' / 'libvirt' / 'dnsmasq',
|
||||
diff --git a/src/network/virtnetworkd.service.in b/src/network/virtnetworkd.service.in
|
||||
index 4c39d2a5d7..3decfbbf1d 100644
|
||||
--- a/src/network/virtnetworkd.service.in
|
||||
+++ b/src/network/virtnetworkd.service.in
|
||||
@@ -16,6 +16,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTNETWORKD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtnetworkd
|
||||
ExecStart=@sbindir@/virtnetworkd $VIRTNETWORKD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/network/virtnetworkd.sysconf b/src/network/virtnetworkd.sysconf
|
||||
deleted file mode 100644
|
||||
index 93f3a7a327..0000000000
|
||||
--- a/src/network/virtnetworkd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtnetworkd.service systemd unit
|
||||
-
|
||||
-VIRTNETWORKD_ARGS="--timeout 120"
|
||||
diff --git a/src/node_device/meson.build b/src/node_device/meson.build
|
||||
index 15f9c3ad29..5013d825b3 100644
|
||||
--- a/src/node_device/meson.build
|
||||
+++ b/src/node_device/meson.build
|
||||
@@ -62,9 +62,4 @@ if conf.has('WITH_NODE_DEVICES')
|
||||
'name': 'virtnodedevd',
|
||||
'in_file': files('virtnodedevd.init.in'),
|
||||
}
|
||||
-
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtnodedevd',
|
||||
- 'file': files('virtnodedevd.sysconf'),
|
||||
- }
|
||||
endif
|
||||
diff --git a/src/node_device/virtnodedevd.service.in b/src/node_device/virtnodedevd.service.in
|
||||
index d2453dd620..688cf89822 100644
|
||||
--- a/src/node_device/virtnodedevd.service.in
|
||||
+++ b/src/node_device/virtnodedevd.service.in
|
||||
@@ -13,6 +13,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTNODEDEVD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtnodedevd
|
||||
ExecStart=@sbindir@/virtnodedevd $VIRTNODEDEVD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/node_device/virtnodedevd.sysconf b/src/node_device/virtnodedevd.sysconf
|
||||
deleted file mode 100644
|
||||
index fa7faa3a79..0000000000
|
||||
--- a/src/node_device/virtnodedevd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtnodedevd.service systemd unit
|
||||
-
|
||||
-VIRTNODEDEVD_ARGS="--timeout 120"
|
||||
diff --git a/src/nwfilter/meson.build b/src/nwfilter/meson.build
|
||||
index a21e575925..ebbe712906 100644
|
||||
--- a/src/nwfilter/meson.build
|
||||
+++ b/src/nwfilter/meson.build
|
||||
@@ -61,10 +61,5 @@ if conf.has('WITH_NWFILTER')
|
||||
'in_file': files('virtnwfilterd.init.in'),
|
||||
}
|
||||
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtnwfilterd',
|
||||
- 'file': files('virtnwfilterd.sysconf'),
|
||||
- }
|
||||
-
|
||||
subdir('xml')
|
||||
endif
|
||||
diff --git a/src/nwfilter/virtnwfilterd.service.in b/src/nwfilter/virtnwfilterd.service.in
|
||||
index dda7c01a3d..36d00b58f0 100644
|
||||
--- a/src/nwfilter/virtnwfilterd.service.in
|
||||
+++ b/src/nwfilter/virtnwfilterd.service.in
|
||||
@@ -13,6 +13,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTNWFILTERD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtnwfilterd
|
||||
ExecStart=@sbindir@/virtnwfilterd $VIRTNWFILTERD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/nwfilter/virtnwfilterd.sysconf b/src/nwfilter/virtnwfilterd.sysconf
|
||||
deleted file mode 100644
|
||||
index 80cc645ba5..0000000000
|
||||
--- a/src/nwfilter/virtnwfilterd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtnwfilterd.service systemd unit
|
||||
-
|
||||
-VIRTNWFILTERD_ARGS="--timeout 120"
|
||||
diff --git a/src/qemu/meson.build b/src/qemu/meson.build
|
||||
index 66ef594006..5f82f687c1 100644
|
||||
--- a/src/qemu/meson.build
|
||||
+++ b/src/qemu/meson.build
|
||||
@@ -165,11 +165,6 @@ if conf.has('WITH_QEMU')
|
||||
'in_file': files('virtqemud.init.in'),
|
||||
}
|
||||
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtqemud',
|
||||
- 'file': files('virtqemud.sysconf'),
|
||||
- }
|
||||
-
|
||||
if conf.has('WITH_SYSCTL')
|
||||
install_data(
|
||||
'postcopy-migration.sysctl',
|
||||
diff --git a/src/qemu/virtqemud.service.in b/src/qemu/virtqemud.service.in
|
||||
index 20e1b43a6e..551eb4d405 100644
|
||||
--- a/src/qemu/virtqemud.service.in
|
||||
+++ b/src/qemu/virtqemud.service.in
|
||||
@@ -20,6 +20,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTQEMUD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtqemud
|
||||
ExecStart=@sbindir@/virtqemud $VIRTQEMUD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/qemu/virtqemud.sysconf b/src/qemu/virtqemud.sysconf
|
||||
deleted file mode 100644
|
||||
index 87b626e3ed..0000000000
|
||||
--- a/src/qemu/virtqemud.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,12 +0,0 @@
|
||||
-# Customizations for the virtqemud.service systemd unit
|
||||
-
|
||||
-VIRTQEMUD_ARGS="--timeout 120"
|
||||
-
|
||||
-# Override the QEMU/SDL default audio driver probing when
|
||||
-# starting virtual machines using SDL graphics
|
||||
-#
|
||||
-# NB these have no effect for VMs using VNC, unless vnc_allow_host_audio
|
||||
-# is enabled in /etc/libvirt/qemu.conf
|
||||
-#QEMU_AUDIO_DRV=sdl
|
||||
-#
|
||||
-#SDL_AUDIODRIVER=pulse
|
||||
diff --git a/src/remote/libvirtd.service.in b/src/remote/libvirtd.service.in
|
||||
index cc0d4e3693..5d4d412fcc 100644
|
||||
--- a/src/remote/libvirtd.service.in
|
||||
+++ b/src/remote/libvirtd.service.in
|
||||
@@ -28,6 +28,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=LIBVIRTD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/libvirtd
|
||||
ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/remote/libvirtd.sysconf b/src/remote/libvirtd.sysconf
|
||||
deleted file mode 100644
|
||||
index 18aec1ba67..0000000000
|
||||
--- a/src/remote/libvirtd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,21 +0,0 @@
|
||||
-# Customizations for the libvirtd.service systemd unit
|
||||
-
|
||||
-# Default behaviour is for libvirtd.service to start on boot
|
||||
-# so that VM autostart can be performed. We then want it to
|
||||
-# shutdown again if nothing was started and rely on systemd
|
||||
-# socket activation to start it again when some client app
|
||||
-# connects.
|
||||
-LIBVIRTD_ARGS="--timeout 120"
|
||||
-
|
||||
-# If systemd socket activation is disabled, then the following
|
||||
-# can be used to listen on TCP/TLS sockets
|
||||
-#LIBVIRTD_ARGS="--listen"
|
||||
-
|
||||
-# Override the QEMU/SDL default audio driver probing when
|
||||
-# starting virtual machines using SDL graphics
|
||||
-#
|
||||
-# NB these have no effect for VMs using VNC, unless vnc_allow_host_audio
|
||||
-# is enabled in /etc/libvirt/qemu.conf
|
||||
-#QEMU_AUDIO_DRV=sdl
|
||||
-#
|
||||
-#SDL_AUDIODRIVER=pulse
|
||||
diff --git a/src/remote/meson.build b/src/remote/meson.build
|
||||
index 0a188268b5..fc98d0e5be 100644
|
||||
--- a/src/remote/meson.build
|
||||
+++ b/src/remote/meson.build
|
||||
@@ -204,11 +204,6 @@ if conf.has('WITH_REMOTE')
|
||||
'confd': files('libvirtd.confd'),
|
||||
}
|
||||
|
||||
- sysconf_files += {
|
||||
- 'name': 'libvirtd',
|
||||
- 'file': files('libvirtd.sysconf'),
|
||||
- }
|
||||
-
|
||||
virt_daemons += {
|
||||
'name': 'virtproxyd',
|
||||
'c_args': [
|
||||
@@ -239,11 +234,6 @@ if conf.has('WITH_REMOTE')
|
||||
'confd': files('virtproxyd.confd'),
|
||||
}
|
||||
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtproxyd',
|
||||
- 'file': files('virtproxyd.sysconf'),
|
||||
- }
|
||||
-
|
||||
virt_install_dirs += [
|
||||
localstatedir / 'log' / 'libvirt',
|
||||
]
|
||||
diff --git a/src/remote/virtproxyd.service.in b/src/remote/virtproxyd.service.in
|
||||
index f43ce9ee6e..10e8cf7263 100644
|
||||
--- a/src/remote/virtproxyd.service.in
|
||||
+++ b/src/remote/virtproxyd.service.in
|
||||
@@ -13,6 +13,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTPROXYD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtproxyd
|
||||
ExecStart=@sbindir@/virtproxyd $VIRTPROXYD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/remote/virtproxyd.sysconf b/src/remote/virtproxyd.sysconf
|
||||
deleted file mode 100644
|
||||
index 0fc5c61096..0000000000
|
||||
--- a/src/remote/virtproxyd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtproxyd.service systemd unit
|
||||
-
|
||||
-VIRTPROXYD_ARGS="--timeout 120"
|
||||
diff --git a/src/secret/meson.build b/src/secret/meson.build
|
||||
index a487055cde..efc0ebb1e6 100644
|
||||
--- a/src/secret/meson.build
|
||||
+++ b/src/secret/meson.build
|
||||
@@ -43,9 +43,4 @@ if conf.has('WITH_SECRETS')
|
||||
'name': 'virtsecretd',
|
||||
'in_file': files('virtsecretd.init.in'),
|
||||
}
|
||||
-
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtsecretd',
|
||||
- 'file': files('virtsecretd.sysconf'),
|
||||
- }
|
||||
endif
|
||||
diff --git a/src/secret/virtsecretd.service.in b/src/secret/virtsecretd.service.in
|
||||
index 8444142a3a..cbd63fe0b2 100644
|
||||
--- a/src/secret/virtsecretd.service.in
|
||||
+++ b/src/secret/virtsecretd.service.in
|
||||
@@ -13,6 +13,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTSECRETD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtsecretd
|
||||
ExecStart=@sbindir@/virtsecretd $VIRTSECRETD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/secret/virtsecretd.sysconf b/src/secret/virtsecretd.sysconf
|
||||
deleted file mode 100644
|
||||
index 2247d05964..0000000000
|
||||
--- a/src/secret/virtsecretd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtsecretd.service systemd unit
|
||||
-
|
||||
-VIRTSECRETD_ARGS="--timeout 120"
|
||||
diff --git a/src/storage/meson.build b/src/storage/meson.build
|
||||
index d1aa66b147..c43707461d 100644
|
||||
--- a/src/storage/meson.build
|
||||
+++ b/src/storage/meson.build
|
||||
@@ -125,11 +125,6 @@ if conf.has('WITH_STORAGE')
|
||||
'name': 'virtstoraged',
|
||||
'in_file': files('virtstoraged.init.in'),
|
||||
}
|
||||
-
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtstoraged',
|
||||
- 'file': files('virtstoraged.sysconf'),
|
||||
- }
|
||||
endif
|
||||
|
||||
if conf.has('WITH_STORAGE_DISK')
|
||||
diff --git a/src/storage/virtstoraged.service.in b/src/storage/virtstoraged.service.in
|
||||
index fc3e9a1b69..f72f8426fd 100644
|
||||
--- a/src/storage/virtstoraged.service.in
|
||||
+++ b/src/storage/virtstoraged.service.in
|
||||
@@ -15,6 +15,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTSTORAGED_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtstoraged
|
||||
ExecStart=@sbindir@/virtstoraged $VIRTSTORAGED_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/storage/virtstoraged.sysconf b/src/storage/virtstoraged.sysconf
|
||||
deleted file mode 100644
|
||||
index 122373eb7c..0000000000
|
||||
--- a/src/storage/virtstoraged.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtstoraged.service systemd unit
|
||||
-
|
||||
-VIRTSTORAGED_ARGS="--timeout 120"
|
||||
diff --git a/src/vbox/meson.build b/src/vbox/meson.build
|
||||
index df0cfb40e8..240f2389a9 100644
|
||||
--- a/src/vbox/meson.build
|
||||
+++ b/src/vbox/meson.build
|
||||
@@ -68,9 +68,4 @@ if conf.has('WITH_VBOX')
|
||||
'name': 'virtvboxd',
|
||||
'in_file': files('virtvboxd.init.in'),
|
||||
}
|
||||
-
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtvboxd',
|
||||
- 'file': files('virtvboxd.sysconf'),
|
||||
- }
|
||||
endif
|
||||
diff --git a/src/vbox/virtvboxd.service.in b/src/vbox/virtvboxd.service.in
|
||||
index ebb31dde07..cfdafc39d2 100644
|
||||
--- a/src/vbox/virtvboxd.service.in
|
||||
+++ b/src/vbox/virtvboxd.service.in
|
||||
@@ -14,6 +14,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTVBOXD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtvboxd
|
||||
ExecStart=@sbindir@/virtvboxd $VIRTVBOXD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/vbox/virtvboxd.sysconf b/src/vbox/virtvboxd.sysconf
|
||||
deleted file mode 100644
|
||||
index 37ad353d54..0000000000
|
||||
--- a/src/vbox/virtvboxd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtvboxd.service systemd unit
|
||||
-
|
||||
-VIRTVBOXD_ARGS="--timeout 120"
|
||||
diff --git a/src/vz/meson.build b/src/vz/meson.build
|
||||
index 14f7280f66..d102696943 100644
|
||||
--- a/src/vz/meson.build
|
||||
+++ b/src/vz/meson.build
|
||||
@@ -58,9 +58,4 @@ if conf.has('WITH_VZ')
|
||||
'name': 'virtvzd',
|
||||
'in_file': files('virtvzd.init.in'),
|
||||
}
|
||||
-
|
||||
- sysconf_files += {
|
||||
- 'name': 'virtvzd',
|
||||
- 'file': files('virtvzd.sysconf'),
|
||||
- }
|
||||
endif
|
||||
diff --git a/src/vz/virtvzd.service.in b/src/vz/virtvzd.service.in
|
||||
index f551cb8fbf..7636bf2b9e 100644
|
||||
--- a/src/vz/virtvzd.service.in
|
||||
+++ b/src/vz/virtvzd.service.in
|
||||
@@ -14,6 +14,7 @@ Documentation=https://libvirt.org
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
+Environment=VIRTVZD_ARGS="--timeout 120"
|
||||
EnvironmentFile=-@sysconfdir@/sysconfig/virtvzd
|
||||
ExecStart=@sbindir@/virtvzd $VIRTVZD_ARGS
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
diff --git a/src/vz/virtvzd.sysconf b/src/vz/virtvzd.sysconf
|
||||
deleted file mode 100644
|
||||
index a86b9dfb6c..0000000000
|
||||
--- a/src/vz/virtvzd.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,3 +0,0 @@
|
||||
-# Customizations for the virtvzd.service systemd unit
|
||||
-
|
||||
-VIRTVZD_ARGS="--timeout 120"
|
||||
diff --git a/tools/libvirt-guests.sysconf b/tools/libvirt-guests.sysconf
|
||||
deleted file mode 100644
|
||||
index 4f83edab90..0000000000
|
||||
--- a/tools/libvirt-guests.sysconf
|
||||
+++ /dev/null
|
||||
@@ -1,50 +0,0 @@
|
||||
-# Customizations for the libvirt-guests.service systemd unit
|
||||
-
|
||||
-# URIs to check for running guests
|
||||
-# example: URIS='default xen:///system vbox+tcp://host/system lxc:///system'
|
||||
-#URIS=default
|
||||
-
|
||||
-# action taken on host boot
|
||||
-# - start all guests which were running on shutdown are started on boot
|
||||
-# regardless on their autostart settings
|
||||
-# - ignore libvirt-guests init script won't start any guest on boot, however,
|
||||
-# guests marked as autostart will still be automatically started by
|
||||
-# libvirtd
|
||||
-#ON_BOOT=start
|
||||
-
|
||||
-# Number of seconds to wait between each guest start. Set to 0 to allow
|
||||
-# parallel startup.
|
||||
-#START_DELAY=0
|
||||
-
|
||||
-# action taken on host shutdown
|
||||
-# - suspend all running guests are suspended using virsh managedsave
|
||||
-# - shutdown all running guests are asked to shutdown. Please be careful with
|
||||
-# this settings since there is no way to distinguish between a
|
||||
-# guest which is stuck or ignores shutdown requests and a guest
|
||||
-# which just needs a long time to shutdown. When setting
|
||||
-# ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a
|
||||
-# value suitable for your guests.
|
||||
-#ON_SHUTDOWN=suspend
|
||||
-
|
||||
-# Number of guests will be shutdown concurrently, taking effect when
|
||||
-# "ON_SHUTDOWN" is set to "shutdown". If Set to 0, guests will be shutdown one
|
||||
-# after another. Number of guests on shutdown at any time will not exceed number
|
||||
-# set in this variable.
|
||||
-#PARALLEL_SHUTDOWN=0
|
||||
-
|
||||
-# Number of seconds we're willing to wait for a guest to shut down. If parallel
|
||||
-# shutdown is enabled, this timeout applies as a timeout for shutting down all
|
||||
-# guests on a single URI defined in the variable URIS. If this is 0, then there
|
||||
-# is no time out (use with caution, as guests might not respond to a shutdown
|
||||
-# request). The default value is 300 seconds (5 minutes).
|
||||
-#SHUTDOWN_TIMEOUT=300
|
||||
-
|
||||
-# If non-zero, try to bypass the file system cache when saving and
|
||||
-# restoring guests, even though this may give slower operation for
|
||||
-# some file systems.
|
||||
-#BYPASS_CACHE=0
|
||||
-
|
||||
-# If non-zero, try to sync guest time on domain resume. Be aware, that
|
||||
-# this requires guest agent with support for time synchronization
|
||||
-# running in the guest. By default, this functionality is turned off.
|
||||
-#SYNC_TIME=1
|
||||
diff --git a/tools/meson.build b/tools/meson.build
|
||||
index 2d0aecb90b..f4b4a16c29 100644
|
||||
--- a/tools/meson.build
|
||||
+++ b/tools/meson.build
|
||||
@@ -308,12 +308,6 @@ if conf.has('WITH_LIBVIRTD')
|
||||
)
|
||||
|
||||
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@',
|
||||
--
|
||||
2.35.0
|
||||
|
@ -0,0 +1,82 @@
|
||||
From c6ea67c481a2f447951449bd9b2746cfaaf385fd Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <c6ea67c481a2f447951449bd9b2746cfaaf385fd@dist-git>
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 25 Jul 2022 14:09:39 +0100
|
||||
Subject: [PATCH] rpc: Pass OPENSSL_CONF through to ssh invocations
|
||||
|
||||
It's no longer possible for libvirt to connect over the ssh transport
|
||||
from RHEL 9 to RHEL 5. This is because SHA1 signatures have been
|
||||
effectively banned in RHEL 9 at the openssl level. They are required
|
||||
to check the RHEL 5 host key. Note this is a separate issue from
|
||||
openssh requiring additional configuration in order to connect to
|
||||
older servers.
|
||||
|
||||
Connecting from a RHEL 9 client to RHEL 5 server:
|
||||
|
||||
$ cat ~/.ssh/config
|
||||
Host 192.168.0.91
|
||||
KexAlgorithms +diffie-hellman-group14-sha1
|
||||
MACs +hmac-sha1
|
||||
HostKeyAlgorithms +ssh-rsa
|
||||
PubkeyAcceptedKeyTypes +ssh-rsa
|
||||
PubkeyAcceptedAlgorithms +ssh-rsa
|
||||
|
||||
$ virsh -c 'qemu+ssh://root@192.168.0.91/system' list
|
||||
error: failed to connect to the hypervisor
|
||||
error: Cannot recv data: ssh_dispatch_run_fatal: Connection to 192.168.0.91 port 22: error in libcrypto: Connection reset by peer
|
||||
|
||||
"error in libcrypto: Connection reset by peer" is the characteristic
|
||||
error of openssl having been modified to disable SHA1 by default.
|
||||
(You will not see this on non-RHEL-derived distros.)
|
||||
|
||||
You could enable the legacy crypto policy which downgrades security on
|
||||
the entire host, but a more fine-grained way to do this is to create
|
||||
an alternate openssl configuration file that enables the "forbidden"
|
||||
signatures. However this requires passing the OPENSSL_CONF
|
||||
environment variable through to ssh to specify the alternate
|
||||
configuration. Libvirt filters out this environment variable, but
|
||||
this commit allows it through. With this commit:
|
||||
|
||||
$ cat /var/tmp/openssl.cnf
|
||||
.include /etc/ssl/openssl.cnf
|
||||
[openssl_init]
|
||||
alg_section = evp_properties
|
||||
[evp_properties]
|
||||
rh-allow-sha1-signatures = yes
|
||||
|
||||
$ OPENSSL_CONF=/var/tmp/openssl.cnf ./run virsh -c 'qemu+ssh://root@192.168.0.91/system' list
|
||||
root@192.168.0.91's password:
|
||||
Id Name State
|
||||
--------------------
|
||||
|
||||
Essentially my argument here is that OPENSSL_CONF is sufficiently
|
||||
similar in nature to KRB5CCNAME, SSH* and XAUTHORITY that we should
|
||||
permit it to be passed through.
|
||||
|
||||
virt-v2v bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2062360
|
||||
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
|
||||
Acked-by: Laszlo Ersek <lersek@redhat.com>
|
||||
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
|
||||
(cherry picked from commit 45912ac399abd9d4eba21fa3f15cb7587351f959)
|
||||
Libvirt BZ: https://bugzilla.redhat.com/show_bug.cgi?id=2112348
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/rpc/virnetsocket.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
|
||||
index 32f506d2d4..8280bda007 100644
|
||||
--- a/src/rpc/virnetsocket.c
|
||||
+++ b/src/rpc/virnetsocket.c
|
||||
@@ -855,6 +855,7 @@ int virNetSocketNewConnectSSH(const char *nodename,
|
||||
virCommandAddEnvPass(cmd, "KRB5CCNAME");
|
||||
virCommandAddEnvPass(cmd, "SSH_AUTH_SOCK");
|
||||
virCommandAddEnvPass(cmd, "SSH_ASKPASS");
|
||||
+ virCommandAddEnvPass(cmd, "OPENSSL_CONF");
|
||||
virCommandAddEnvPass(cmd, "DISPLAY");
|
||||
virCommandAddEnvPass(cmd, "XAUTHORITY");
|
||||
virCommandClearCaps(cmd);
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,71 +0,0 @@
|
||||
From f38b129e38b73cb20a2d858de7b593d09380e548 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <f38b129e38b73cb20a2d858de7b593d09380e548@dist-git>
|
||||
From: Martin Kletzander <mkletzan@redhat.com>
|
||||
Date: Wed, 23 Feb 2022 10:45:28 +0100
|
||||
Subject: [PATCH] util: Fix machined servicename
|
||||
|
||||
Commit 4e42686adef8 wrongly assumed how g_variant_new_parsed() works and broke
|
||||
starting of domains on systems with systemd (machined).
|
||||
|
||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit a64e666a112d4d6299d1b73704d176283bc42b19)
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1868537
|
||||
|
||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||
---
|
||||
src/util/virsystemd.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c
|
||||
index f156c2f39a..a8af80c495 100644
|
||||
--- a/src/util/virsystemd.c
|
||||
+++ b/src/util/virsystemd.c
|
||||
@@ -360,6 +360,7 @@ int virSystemdCreateMachine(const char *name,
|
||||
g_autofree char *creatorname = NULL;
|
||||
g_autofree char *slicename = NULL;
|
||||
g_autofree char *scopename = NULL;
|
||||
+ g_autofree char *servicename = NULL;
|
||||
static int hasCreateWithNetwork = 1;
|
||||
|
||||
if ((rc = virSystemdHasMachined()) < 0)
|
||||
@@ -369,6 +370,7 @@ int virSystemdCreateMachine(const char *name,
|
||||
return -1;
|
||||
|
||||
creatorname = g_strdup_printf("libvirt-%s", drivername);
|
||||
+ servicename = g_strdup_printf("virt%sd.service", drivername);
|
||||
|
||||
if (partition) {
|
||||
if (!(slicename = virSystemdMakeSliceName(partition)))
|
||||
@@ -440,11 +442,10 @@ int virSystemdCreateMachine(const char *name,
|
||||
gnicindexes = g_variant_new_fixed_array(G_VARIANT_TYPE("i"),
|
||||
nicindexes, nnicindexes, sizeof(int));
|
||||
gprops = g_variant_new_parsed("[('Slice', <%s>),"
|
||||
- " ('After', <['libvirtd.service']>),"
|
||||
- " ('After', <['virt%sd.service']>),"
|
||||
+ " ('After', <['libvirtd.service', %s]>),"
|
||||
" ('Before', <['virt-guest-shutdown.target']>)]",
|
||||
slicename,
|
||||
- drivername);
|
||||
+ servicename);
|
||||
message = g_variant_new("(s@ayssus@ai@a(sv))",
|
||||
name,
|
||||
guuid,
|
||||
@@ -490,11 +491,10 @@ int virSystemdCreateMachine(const char *name,
|
||||
guuid = g_variant_new_fixed_array(G_VARIANT_TYPE("y"),
|
||||
uuid, 16, sizeof(unsigned char));
|
||||
gprops = g_variant_new_parsed("[('Slice', <%s>),"
|
||||
- " ('After', <['libvirtd.service']>),"
|
||||
- " ('After', <['virt%sd.service']>),"
|
||||
+ " ('After', <['libvirtd.service', %s]>),"
|
||||
" ('Before', <['virt-guest-shutdown.target']>)]",
|
||||
slicename,
|
||||
- drivername);
|
||||
+ servicename);
|
||||
message = g_variant_new("(s@ayssus@a(sv))",
|
||||
name,
|
||||
guuid,
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,64 @@
|
||||
From e13ab5c97f266eb688bc22e1124291563770370d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <e13ab5c97f266eb688bc22e1124291563770370d@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 8 Jul 2022 14:29:32 +0200
|
||||
Subject: [PATCH] vircpi: Add PCIe 5.0 and 6.0 link speeds
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The PCIe 5.0 and PCIe 6.0 standards define new link speeds:
|
||||
32GT/s and 64GT/s, respectively. Update our internal enum to
|
||||
include these new speeds. Otherwise we format incorrect XML:
|
||||
|
||||
<pci-express>
|
||||
<link validity='cap' port='0' speed='(null)' width='16'/>
|
||||
<link validity='sta' speed='16' width='16'/>
|
||||
</pci-express>
|
||||
|
||||
Like all "good" specifications, these are also locked behind a
|
||||
login portal. But we can look at pciutils' source code: [1] and
|
||||
[2].
|
||||
|
||||
1: https://git.kernel.org/pub/scm/utils/pciutils/pciutils.git/commit/ls-caps.c?id=caca31a0eea41c7b051705704c1158fddc02fbd2
|
||||
2: https://git.kernel.org/pub/scm/utils/pciutils/pciutils.git/commit/ls-caps.c?id=5bdf63b6b1bc35b59c4b3f47f7ca83ca1868155b
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2105231
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit d33c2a9e2f933b31f8e96e9938c237bdffe27f84)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/util/virpci.c | 2 +-
|
||||
src/util/virpci.h | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/util/virpci.c b/src/util/virpci.c
|
||||
index 03d1d7b074..7800966963 100644
|
||||
--- a/src/util/virpci.c
|
||||
+++ b/src/util/virpci.c
|
||||
@@ -45,7 +45,7 @@ VIR_LOG_INIT("util.pci");
|
||||
|
||||
VIR_ENUM_IMPL(virPCIELinkSpeed,
|
||||
VIR_PCIE_LINK_SPEED_LAST,
|
||||
- "", "2.5", "5", "8", "16",
|
||||
+ "", "2.5", "5", "8", "16", "32", "64"
|
||||
);
|
||||
|
||||
VIR_ENUM_IMPL(virPCIStubDriver,
|
||||
diff --git a/src/util/virpci.h b/src/util/virpci.h
|
||||
index b9b9cd7b34..4d9193f24e 100644
|
||||
--- a/src/util/virpci.h
|
||||
+++ b/src/util/virpci.h
|
||||
@@ -83,6 +83,8 @@ typedef enum {
|
||||
VIR_PCIE_LINK_SPEED_5,
|
||||
VIR_PCIE_LINK_SPEED_8,
|
||||
VIR_PCIE_LINK_SPEED_16,
|
||||
+ VIR_PCIE_LINK_SPEED_32,
|
||||
+ VIR_PCIE_LINK_SPEED_64,
|
||||
VIR_PCIE_LINK_SPEED_LAST
|
||||
} virPCIELinkSpeed;
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
62
SOURCES/libvirt-virsh-Implement-config-for-iothreadset.patch
Normal file
62
SOURCES/libvirt-virsh-Implement-config-for-iothreadset.patch
Normal file
@ -0,0 +1,62 @@
|
||||
From 02ebd15a48da7a53560bbea5e530a5b9c929daee Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <02ebd15a48da7a53560bbea5e530a5b9c929daee@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Thu, 7 Jul 2022 17:44:32 +0200
|
||||
Subject: [PATCH] virsh: Implement --config for iothreadset
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Our man page already documents that iothreadset has --config
|
||||
argument. Well, it doesn't really. Normally, I'd just fix the man
|
||||
page, but with recent work on the API it's possible to tweak
|
||||
values for inactive XML too. Therefore, implement the --config
|
||||
argument for the command.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||
(cherry picked from commit 3ff558c1c171f66da84b10c81937c1a6895ec6fb)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2059511
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
tools/virsh-domain.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
|
||||
index 43034f2f81..da63cc95ff 100644
|
||||
--- a/tools/virsh-domain.c
|
||||
+++ b/tools/virsh-domain.c
|
||||
@@ -7831,6 +7831,7 @@ static const vshCmdOptDef opts_iothreadset[] = {
|
||||
.type = VSH_OT_INT,
|
||||
.help = N_("upper boundary for worker thread pool")
|
||||
},
|
||||
+ VIRSH_COMMON_OPT_DOMAIN_CONFIG,
|
||||
VIRSH_COMMON_OPT_DOMAIN_LIVE,
|
||||
VIRSH_COMMON_OPT_DOMAIN_CURRENT,
|
||||
{.name = NULL}
|
||||
@@ -7842,6 +7843,8 @@ cmdIOThreadSet(vshControl *ctl, const vshCmd *cmd)
|
||||
g_autoptr(virshDomain) dom = NULL;
|
||||
int id = 0;
|
||||
bool ret = false;
|
||||
+ bool current = vshCommandOptBool(cmd, "current");
|
||||
+ bool config = vshCommandOptBool(cmd, "config");
|
||||
bool live = vshCommandOptBool(cmd, "live");
|
||||
unsigned int flags = VIR_DOMAIN_AFFECT_CURRENT;
|
||||
virTypedParameterPtr params = NULL;
|
||||
@@ -7852,8 +7855,13 @@ cmdIOThreadSet(vshControl *ctl, const vshCmd *cmd)
|
||||
int thread_val;
|
||||
int rc;
|
||||
|
||||
+ VSH_EXCLUSIVE_OPTIONS_VAR(current, live);
|
||||
+ VSH_EXCLUSIVE_OPTIONS_VAR(current, config);
|
||||
+
|
||||
if (live)
|
||||
flags |= VIR_DOMAIN_AFFECT_LIVE;
|
||||
+ if (config)
|
||||
+ flags |= VIR_DOMAIN_AFFECT_CONFIG;
|
||||
|
||||
if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
|
||||
return false;
|
||||
--
|
||||
2.35.1
|
||||
|
215
SOURCES/libvirt-virsh-Require-xpath-for-dumpxml.patch
Normal file
215
SOURCES/libvirt-virsh-Require-xpath-for-dumpxml.patch
Normal file
@ -0,0 +1,215 @@
|
||||
From 045c3fbdc6f4a5b98013a00fcaefcd3481c1df39 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <045c3fbdc6f4a5b98013a00fcaefcd3481c1df39@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Fri, 8 Jul 2022 12:45:42 +0200
|
||||
Subject: [PATCH] virsh: Require --xpath for *dumpxml
|
||||
|
||||
Historically, the dumpxml command reject any unknown arguments,
|
||||
for instance:
|
||||
|
||||
virsh dumpxml fedora xxx
|
||||
|
||||
However, after v8.5.0-rc1~31 the second argument ('xxx') is
|
||||
treated as an XPath, but it's not that clearly visible.
|
||||
Therefore, require the --xpath switch, like this:
|
||||
|
||||
virsh dumpxml fedora --xpath xxx
|
||||
|
||||
Yes, this breaks already released virsh, but I think we can argue
|
||||
that the pool of users of this particular function is very small.
|
||||
We also document the argument being mandatory:
|
||||
|
||||
dumpxml [--inactive] [--security-info] [--update-cpu] [--migratable]
|
||||
[--xpath EXPRESSION] [--wrap] domain
|
||||
|
||||
The sooner we do this change, the better.
|
||||
|
||||
The same applies for other *dumpxml functions (net-dumpxml,
|
||||
pool-dumpxml, vol-dumpxl to name a few).
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103524
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit e90d48ae6e22eaf1650f920abc0a6b87d2daa82b)
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
tools/virsh-backup.c | 1 +
|
||||
tools/virsh-checkpoint.c | 1 +
|
||||
tools/virsh-domain.c | 3 +++
|
||||
tools/virsh-interface.c | 1 +
|
||||
tools/virsh-network.c | 2 ++
|
||||
tools/virsh-nodedev.c | 1 +
|
||||
tools/virsh-nwfilter.c | 2 ++
|
||||
tools/virsh-pool.c | 1 +
|
||||
tools/virsh-secret.c | 1 +
|
||||
tools/virsh-snapshot.c | 1 +
|
||||
tools/virsh-volume.c | 1 +
|
||||
11 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/tools/virsh-backup.c b/tools/virsh-backup.c
|
||||
index db122abc09..1bb2c63113 100644
|
||||
--- a/tools/virsh-backup.c
|
||||
+++ b/tools/virsh-backup.c
|
||||
@@ -117,6 +117,7 @@ static const vshCmdOptDef opts_backup_dumpxml[] = {
|
||||
VIRSH_COMMON_OPT_DOMAIN_FULL(VIR_CONNECT_LIST_DOMAINS_ACTIVE),
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-checkpoint.c b/tools/virsh-checkpoint.c
|
||||
index a7ef39849d..9605c893af 100644
|
||||
--- a/tools/virsh-checkpoint.c
|
||||
+++ b/tools/virsh-checkpoint.c
|
||||
@@ -854,6 +854,7 @@ static const vshCmdOptDef opts_checkpoint_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
|
||||
index da63cc95ff..76d12d2b70 100644
|
||||
--- a/tools/virsh-domain.c
|
||||
+++ b/tools/virsh-domain.c
|
||||
@@ -4529,6 +4529,7 @@ static const vshCmdOptDef opts_save_image_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
@@ -4961,6 +4962,7 @@ static const vshCmdOptDef opts_managed_save_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
@@ -10469,6 +10471,7 @@ static const vshCmdOptDef opts_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-interface.c b/tools/virsh-interface.c
|
||||
index b29ffc9bef..39ea53ec9d 100644
|
||||
--- a/tools/virsh-interface.c
|
||||
+++ b/tools/virsh-interface.c
|
||||
@@ -472,6 +472,7 @@ static const vshCmdOptDef opts_interface_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-network.c b/tools/virsh-network.c
|
||||
index 99ced6ccc6..004719dad6 100644
|
||||
--- a/tools/virsh-network.c
|
||||
+++ b/tools/virsh-network.c
|
||||
@@ -351,6 +351,7 @@ static const vshCmdOptDef opts_network_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
@@ -1556,6 +1557,7 @@ static const vshCmdOptDef opts_network_port_dumpxml[] = {
|
||||
VIRSH_COMMON_OPT_NETWORK_PORT(0),
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c
|
||||
index 37e361c701..2adcad9c10 100644
|
||||
--- a/tools/virsh-nodedev.c
|
||||
+++ b/tools/virsh-nodedev.c
|
||||
@@ -567,6 +567,7 @@ static const vshCmdOptDef opts_node_device_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-nwfilter.c b/tools/virsh-nwfilter.c
|
||||
index ff7f6f4026..d4112c8620 100644
|
||||
--- a/tools/virsh-nwfilter.c
|
||||
+++ b/tools/virsh-nwfilter.c
|
||||
@@ -188,6 +188,7 @@ static const vshCmdOptDef opts_nwfilter_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
@@ -610,6 +611,7 @@ static const vshCmdOptDef opts_nwfilter_binding_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c
|
||||
index 820a61f889..8a98c6ae40 100644
|
||||
--- a/tools/virsh-pool.c
|
||||
+++ b/tools/virsh-pool.c
|
||||
@@ -777,6 +777,7 @@ static const vshCmdOptDef opts_pool_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-secret.c b/tools/virsh-secret.c
|
||||
index 79fa3faf5a..17d2bbd88d 100644
|
||||
--- a/tools/virsh-secret.c
|
||||
+++ b/tools/virsh-secret.c
|
||||
@@ -140,6 +140,7 @@ static const vshCmdOptDef opts_secret_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c
|
||||
index 83fdfb9616..8fa64ba903 100644
|
||||
--- a/tools/virsh-snapshot.c
|
||||
+++ b/tools/virsh-snapshot.c
|
||||
@@ -1609,6 +1609,7 @@ static const vshCmdOptDef opts_snapshot_dumpxml[] = {
|
||||
},
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
|
||||
index bf72d8135f..300a0aa8e5 100644
|
||||
--- a/tools/virsh-volume.c
|
||||
+++ b/tools/virsh-volume.c
|
||||
@@ -1161,6 +1161,7 @@ static const vshCmdOptDef opts_vol_dumpxml[] = {
|
||||
VIRSH_COMMON_OPT_POOL_OPTIONAL,
|
||||
{.name = "xpath",
|
||||
.type = VSH_OT_STRING,
|
||||
+ .flags = VSH_OFLAG_REQ_OPT,
|
||||
.completer = virshCompleteEmpty,
|
||||
.help = N_("xpath expression to filter the XML document")
|
||||
},
|
||||
--
|
||||
2.35.1
|
||||
|
@ -0,0 +1,48 @@
|
||||
From 6d21624edd73edb9b59e5dac0d98d0812e9bf0ad Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <6d21624edd73edb9b59e5dac0d98d0812e9bf0ad@dist-git>
|
||||
From: Michal Privoznik <mprivozn@redhat.com>
|
||||
Date: Tue, 12 Jul 2022 15:46:50 +0200
|
||||
Subject: [PATCH] virtpm: Introduce TPM-1.2 and TPM-2.0 capabilieis
|
||||
|
||||
These new capabilities will be used only to track whether
|
||||
swtpm_setup is capable of TPM-1.2 and/or TPM-2.0.
|
||||
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||
(cherry picked from commit 7b37763278c44887789e80a6058ee27953c0e5e6)
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103119
|
||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||
---
|
||||
src/util/virtpm.c | 2 ++
|
||||
src/util/virtpm.h | 2 ++
|
||||
2 files changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/util/virtpm.c b/src/util/virtpm.c
|
||||
index b898f3a6db..3c961c11cb 100644
|
||||
--- a/src/util/virtpm.c
|
||||
+++ b/src/util/virtpm.c
|
||||
@@ -47,6 +47,8 @@ VIR_ENUM_IMPL(virTPMSwtpmSetupFeature,
|
||||
"cmdarg-create-config-files",
|
||||
"tpm12-not-need-root",
|
||||
"cmdarg-reconfigure-pcr-banks",
|
||||
+ "tpm-1.2",
|
||||
+ "tpm-2.0",
|
||||
);
|
||||
|
||||
/**
|
||||
diff --git a/src/util/virtpm.h b/src/util/virtpm.h
|
||||
index 0a82a03b69..bbf379a54a 100644
|
||||
--- a/src/util/virtpm.h
|
||||
+++ b/src/util/virtpm.h
|
||||
@@ -42,6 +42,8 @@ typedef enum {
|
||||
VIR_TPM_SWTPM_SETUP_FEATURE_CMDARG_CREATE_CONFIG_FILES,
|
||||
VIR_TPM_SWTPM_SETUP_FEATURE_TPM12_NOT_NEED_ROOT,
|
||||
VIR_TPM_SWTPM_SETUP_FEATURE_CMDARG_RECONFIGURE_PCR_BANKS,
|
||||
+ VIR_TPM_SWTPM_SETUP_FEATURE_TPM_1_2,
|
||||
+ VIR_TPM_SWTPM_SETUP_FEATURE_TPM_2_0,
|
||||
|
||||
VIR_TPM_SWTPM_SETUP_FEATURE_LAST
|
||||
} virTPMSwtpmSetupFeature;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -5,10 +5,12 @@ tests/networkxml2xmlin/leasetime-hours.xml ../networkxml2confdata/leasetime-hour
|
||||
tests/networkxml2xmlin/leasetime-infinite.xml ../networkxml2confdata/leasetime-infinite.xml
|
||||
tests/networkxml2xmlin/leasetime-minutes.xml ../networkxml2confdata/leasetime-minutes.xml
|
||||
tests/networkxml2xmlin/leasetime-seconds.xml ../networkxml2confdata/leasetime-seconds.xml
|
||||
tests/networkxml2xmlin/netboot-tftp.xml ../networkxml2confdata/netboot-tftp.xml
|
||||
tests/networkxml2xmlout/leasetime-hours.xml ../networkxml2xmlin/leasetime-hours.xml
|
||||
tests/networkxml2xmlout/leasetime-infinite.xml ../networkxml2xmlin/leasetime-infinite.xml
|
||||
tests/networkxml2xmlout/leasetime-minutes.xml ../networkxml2xmlin/leasetime-minutes.xml
|
||||
tests/networkxml2xmlout/leasetime-seconds.xml ../networkxml2xmlin/leasetime-seconds.xml
|
||||
tests/networkxml2xmlout/netboot-tftp.xml ../networkxml2confdata/netboot-tftp.xml
|
||||
tests/nodedevxml2xmlout/DVD_GCC_4247N.xml ../nodedevschemadata/DVD_GCC_4247N.xml
|
||||
tests/nodedevxml2xmlout/DVD_with_media.xml ../nodedevschemadata/DVD_with_media.xml
|
||||
tests/nodedevxml2xmlout/ap_07_0038.xml ../nodedevschemadata/ap_07_0038.xml
|
||||
@ -18,7 +20,9 @@ tests/nodedevxml2xmlout/ap_matrix_mdev_types.xml ../nodedevschemadata/ap_matrix_
|
||||
tests/nodedevxml2xmlout/ccw_0_0_ffff.xml ../nodedevschemadata/ccw_0_0_ffff.xml
|
||||
tests/nodedevxml2xmlout/computer.xml ../nodedevschemadata/computer.xml
|
||||
tests/nodedevxml2xmlout/css_0_0_fffe_mdev_types.xml ../nodedevschemadata/css_0_0_fffe_mdev_types.xml
|
||||
tests/nodedevxml2xmlout/css_0_0_fffe_mdev_types_channel_dev_addr.xml ../nodedevschemadata/css_0_0_fffe_mdev_types_channel_dev_addr.xml
|
||||
tests/nodedevxml2xmlout/css_0_0_ffff.xml ../nodedevschemadata/css_0_0_ffff.xml
|
||||
tests/nodedevxml2xmlout/css_0_0_ffff_channel_dev_addr.xml ../nodedevschemadata/css_0_0_ffff_channel_dev_addr.xml
|
||||
tests/nodedevxml2xmlout/drm_renderD129.xml ../nodedevschemadata/drm_renderD129.xml
|
||||
tests/nodedevxml2xmlout/mdev_3627463d_b7f0_4fea_b468_f1da537d301b.xml ../nodedevschemadata/mdev_3627463d_b7f0_4fea_b468_f1da537d301b.xml
|
||||
tests/nodedevxml2xmlout/mdev_ee0b88c4_f554_4dc1_809d_b2a01e8e48ad.xml ../nodedevschemadata/mdev_ee0b88c4_f554_4dc1_809d_b2a01e8e48ad.xml
|
||||
@ -86,8 +90,8 @@ tests/qemuxml2argvdata/aarch64-gic-none.args aarch64-gic-v2.args
|
||||
tests/qemuxml2argvdata/cpu-check-full.args cpu-check-none.args
|
||||
tests/qemuxml2argvdata/cpu-check-partial.args cpu-check-none.args
|
||||
tests/qemuxml2argvdata/cpu-numa-memshared-1.xml cpu-numa-memshared.xml
|
||||
tests/qemuxml2argvdata/disk-backing-chains-index.x86_64-2.12.0.args disk-backing-chains-noindex.x86_64-2.12.0.args
|
||||
tests/qemuxml2argvdata/disk-backing-chains-index.x86_64-latest.args disk-backing-chains-noindex.x86_64-latest.args
|
||||
tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-4.1.0.args disk-backing-chains-index.x86_64-4.1.0.args
|
||||
tests/qemuxml2argvdata/mach-virt-console-native.args mach-virt-serial-native.args
|
||||
tests/qemuxml2argvdata/mach-virt-serial+console-native.args mach-virt-serial-native.args
|
||||
tests/qemuxml2argvdata/mach-virt-serial-compat.args mach-virt-serial-native.args
|
||||
@ -165,6 +169,11 @@ tests/qemuxml2xmloutdata/fd-memory-numa-topology.xml ../qemuxml2argvdata/fd-memo
|
||||
tests/qemuxml2xmloutdata/fd-memory-numa-topology2.xml ../qemuxml2argvdata/fd-memory-numa-topology2.xml
|
||||
tests/qemuxml2xmloutdata/fd-memory-numa-topology3.xml ../qemuxml2argvdata/fd-memory-numa-topology3.xml
|
||||
tests/qemuxml2xmloutdata/fd-memory-numa-topology4.x86_64-latest.xml ../qemuxml2argvdata/fd-memory-numa-topology4.xml
|
||||
tests/qemuxml2xmloutdata/graphics-dbus-address.xml ../qemuxml2argvdata/graphics-dbus-address.xml
|
||||
tests/qemuxml2xmloutdata/graphics-dbus-audio.xml ../qemuxml2argvdata/graphics-dbus-audio.xml
|
||||
tests/qemuxml2xmloutdata/graphics-dbus-chardev.xml ../qemuxml2argvdata/graphics-dbus-chardev.xml
|
||||
tests/qemuxml2xmloutdata/graphics-dbus-p2p.xml ../qemuxml2argvdata/graphics-dbus-p2p.xml
|
||||
tests/qemuxml2xmloutdata/graphics-dbus.xml ../qemuxml2argvdata/graphics-dbus.xml
|
||||
tests/qemuxml2xmloutdata/hugepages-default-2M.xml ../qemuxml2argvdata/hugepages-default-2M.xml
|
||||
tests/qemuxml2xmloutdata/hugepages-default-system-size.xml ../qemuxml2argvdata/hugepages-default-system-size.xml
|
||||
tests/qemuxml2xmloutdata/hugepages-memaccess.xml ../qemuxml2argvdata/hugepages-memaccess.xml
|
||||
@ -177,6 +186,7 @@ tests/qemuxml2xmloutdata/intel-iommu-caching-mode.x86_64-latest.xml ../qemuxml2a
|
||||
tests/qemuxml2xmloutdata/intel-iommu-device-iotlb.x86_64-latest.xml ../qemuxml2argvdata/intel-iommu-device-iotlb.xml
|
||||
tests/qemuxml2xmloutdata/intel-iommu-eim.x86_64-latest.xml ../qemuxml2argvdata/intel-iommu-eim.xml
|
||||
tests/qemuxml2xmloutdata/intel-iommu.x86_64-latest.xml ../qemuxml2argvdata/intel-iommu.xml
|
||||
tests/qemuxml2xmloutdata/iothreads-ids-pool-sizes.x86_64-latest.xml ../qemuxml2argvdata/iothreads-ids-pool-sizes.xml
|
||||
tests/qemuxml2xmloutdata/kvm-features-off.xml ../qemuxml2argvdata/kvm-features-off.xml
|
||||
tests/qemuxml2xmloutdata/kvm-features.xml ../qemuxml2argvdata/kvm-features.xml
|
||||
tests/qemuxml2xmloutdata/luks-disks.x86_64-latest.xml ../qemuxml2argvdata/luks-disks.xml
|
||||
@ -195,6 +205,7 @@ tests/qemuxml2xmloutdata/memory-hotplug-ppc64-nonuma.xml ../qemuxml2argvdata/mem
|
||||
tests/qemuxml2xmloutdata/memory-hotplug-virtio-mem.x86_64-latest.xml ../qemuxml2argvdata/memory-hotplug-virtio-mem.xml
|
||||
tests/qemuxml2xmloutdata/memory-hotplug-virtio-pmem.x86_64-latest.xml ../qemuxml2argvdata/memory-hotplug-virtio-pmem.xml
|
||||
tests/qemuxml2xmloutdata/net-user-addr.xml ../qemuxml2argvdata/net-user-addr.xml
|
||||
tests/qemuxml2xmloutdata/net-virtio-rss.x86_64-latest.xml ../qemuxml2argvdata/net-virtio-rss.xml
|
||||
tests/qemuxml2xmloutdata/net-virtio-teaming-hostdev.xml ../qemuxml2argvdata/net-virtio-teaming-hostdev.xml
|
||||
tests/qemuxml2xmloutdata/numatune-hmat.xml ../qemuxml2argvdata/numatune-hmat.xml
|
||||
tests/qemuxml2xmloutdata/numatune-memnode-restrictive-mode.x86_64-latest.xml ../qemuxml2argvdata/numatune-memnode-restrictive-mode.xml
|
||||
@ -205,9 +216,9 @@ tests/qemuxml2xmloutdata/pages-discard-hugepages.xml ../qemuxml2argvdata/pages-d
|
||||
tests/qemuxml2xmloutdata/pages-discard.xml ../qemuxml2argvdata/pages-discard.xml
|
||||
tests/qemuxml2xmloutdata/pc-i440fx-acpi-root-hotplug-disable.x86_64-latest.xml ../qemuxml2argvdata/pc-i440fx-acpi-root-hotplug-disable.xml
|
||||
tests/qemuxml2xmloutdata/pc-i440fx-acpi-root-hotplug-enable.x86_64-latest.xml ../qemuxml2argvdata/pc-i440fx-acpi-root-hotplug-enable.xml
|
||||
tests/qemuxml2xmloutdata/pseries-console-native.xml pseries-serial-native.xml
|
||||
tests/qemuxml2xmloutdata/pseries-serial+console-native.xml pseries-serial-native.xml
|
||||
tests/qemuxml2xmloutdata/pseries-serial-compat.xml pseries-serial-native.xml
|
||||
tests/qemuxml2xmloutdata/pseries-console-native.ppc64-latest.xml pseries-serial-native.ppc64-latest.xml
|
||||
tests/qemuxml2xmloutdata/pseries-serial+console-native.ppc64-latest.xml pseries-serial-native.ppc64-latest.xml
|
||||
tests/qemuxml2xmloutdata/pseries-serial-compat.ppc64-latest.xml pseries-serial-native.ppc64-latest.xml
|
||||
tests/qemuxml2xmloutdata/serial-tcp-tlsx509-chardev-notls.xml ../qemuxml2argvdata/serial-tcp-tlsx509-chardev-notls.xml
|
||||
tests/qemuxml2xmloutdata/smbios-type-fwcfg.xml ../qemuxml2argvdata/smbios-type-fwcfg.xml
|
||||
tests/qemuxml2xmloutdata/tpm-emulator-spapr.ppc64-latest.xml ../qemuxml2argvdata/tpm-emulator-spapr.xml
|
||||
|
@ -21,6 +21,9 @@
|
||||
%define arches_systemtap_64bit %{arches_64bit}
|
||||
%define arches_dmidecode %{arches_x86}
|
||||
%define arches_xen %{arches_x86} aarch64
|
||||
%if 0%{?fedora} >= 36
|
||||
%define arches_xen x86_64 aarch64
|
||||
%endif
|
||||
%define arches_vbox %{arches_x86}
|
||||
%define arches_ceph %{arches_64bit}
|
||||
%define arches_zfs %{arches_x86} %{power64} %{arm}
|
||||
@ -227,8 +230,8 @@
|
||||
|
||||
Summary: Library providing a simple virtualization API
|
||||
Name: libvirt
|
||||
Version: 8.0.0
|
||||
Release: 7%{?dist}%{?extra_release}
|
||||
Version: 8.5.0
|
||||
Release: 5%{?dist}%{?extra_release}
|
||||
License: LGPLv2+
|
||||
URL: https://libvirt.org/
|
||||
|
||||
@ -237,22 +240,39 @@ URL: https://libvirt.org/
|
||||
%endif
|
||||
Source: https://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.xz
|
||||
Source1: symlinks
|
||||
Patch1: libvirt-domain_conf-Format-defaultiothread-more-often.patch
|
||||
Patch2: libvirt-domain_conf-Format-iothread-IDs-more-often.patch
|
||||
Patch3: libvirt-qemu-Make-IOThread-changing-more-robust.patch
|
||||
Patch4: libvirt-qemuDomainSetIOThreadParams-Accept-VIR_DOMAIN_AFFECT_CONFIG-flag.patch
|
||||
Patch5: libvirt-virsh-Implement-config-for-iothreadset.patch
|
||||
Patch6: libvirt-docs-Document-TPM-portion-of-domcaps.patch
|
||||
Patch7: libvirt-virtpm-Introduce-TPM-1.2-and-TPM-2.0-capabilieis.patch
|
||||
Patch8: libvirt-domcaps-Introduce-TPM-backendVersion.patch
|
||||
Patch9: libvirt-qemu-Report-supported-TPM-version-in-domcaps.patch
|
||||
Patch10: libvirt-vircpi-Add-PCIe-5.0-and-6.0-link-speeds.patch
|
||||
Patch11: libvirt-qemu-introduce-capability-QEMU_CAPS_MIGRATION_BLOCKED_REASONS.patch
|
||||
Patch12: libvirt-qemu-new-function-to-retrieve-migration-blocker-reasons-from-QEMU.patch
|
||||
Patch13: libvirt-qemu-query-QEMU-for-migration-blockers-before-our-own-harcoded-checks.patch
|
||||
Patch14: libvirt-qemu-remove-hardcoded-migration-fail-for-vDPA-devices-if-we-can-ask-QEMU.patch
|
||||
Patch15: libvirt-qemu_migration-Use-EnterMonitorAsync-in-qemuDomainGetMigrationBlockers.patch
|
||||
Patch16: libvirt-qemu-don-t-try-to-query-QEMU-about-migration-blockers-during-offline-migration.patch
|
||||
Patch17: libvirt-qemu_migration-Acquire-correct-job-in-qemuMigrationSrcIsAllowed.patch
|
||||
Patch18: libvirt-virsh-Require-xpath-for-dumpxml.patch
|
||||
Patch19: libvirt-qemu-skip-hardcoded-hostdev-migration-check-if-QEMU-can-do-it-for-us.patch
|
||||
Patch20: libvirt-qemu-Pass-migration-flags-to-qemuMigrationParamsApply.patch
|
||||
Patch21: libvirt-qemu_migration_params-Replace-qemuMigrationParamTypes-array.patch
|
||||
Patch22: libvirt-qemu_migration-Pass-migParams-to-qemuMigrationSrcResume.patch
|
||||
Patch23: libvirt-qemu_migration-Apply-max-postcopy-bandwidth-on-post-copy-resume.patch
|
||||
Patch24: libvirt-qemu-Always-assume-support-for-QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE.patch
|
||||
Patch25: libvirt-qemu_migration-Store-original-migration-params-in-status-XML.patch
|
||||
Patch26: libvirt-qemu_migration_params-Refactor-qemuMigrationParamsApply.patch
|
||||
Patch27: libvirt-qemu_migration_params-Refactor-qemuMigrationParamsReset.patch
|
||||
Patch28: libvirt-qemu_migration_params-Avoid-deadlock-in-qemuMigrationParamsReset.patch
|
||||
Patch29: libvirt-qemu-Restore-original-memory-locking-limit-on-reconnect.patch
|
||||
Patch30: libvirt-qemu-Properly-release-job-in-qemuDomainSaveInternal.patch
|
||||
Patch31: libvirt-qemu-don-t-call-qemuMigrationSrcIsAllowedHostdev-from-qemuMigrationDstPrepareFresh.patch
|
||||
Patch32: libvirt-rpc-Pass-OPENSSL_CONF-through-to-ssh-invocations.patch
|
||||
|
||||
Patch1: libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
|
||||
Patch2: libvirt-build-Only-install-libvirt-guests-when-building-libvirtd.patch
|
||||
Patch3: libvirt-docs-Add-man-page-for-libvirt-guests.patch
|
||||
Patch4: libvirt-remove-sysconfig-files.patch
|
||||
Patch5: libvirt-qemu-fix-inactive-snapshot-revert.patch
|
||||
Patch6: libvirt-Revert-report-error-when-virProcessGetStatInfo-is-unable-to-parse-data.patch
|
||||
Patch7: libvirt-qemuDomainSetupDisk-Initialize-targetPaths.patch
|
||||
Patch8: libvirt-qemu_command-Generate-memory-only-after-controllers.patch
|
||||
Patch9: libvirt-qemu-Validate-domain-definition-even-on-migration.patch
|
||||
Patch10: libvirt-Make-systemd-unit-ordering-more-robust.patch
|
||||
Patch11: libvirt-util-Fix-machined-servicename.patch
|
||||
Patch12: libvirt-qemu-support-firmware-descriptor-flash-mode-for-optional-NVRAM.patch
|
||||
Patch13: libvirt-nwfilter-hold-filter-update-lock-when-creating-deleting-bindings.patch
|
||||
Patch14: libvirt-qemu-lxc-remove-use-to-nwfilter-update-lock.patch
|
||||
Patch15: libvirt-qemu-support-multiqueue-for-vdpa-net-device.patch
|
||||
|
||||
Requires: libvirt-daemon = %{version}-%{release}
|
||||
Requires: libvirt-daemon-config-network = %{version}-%{release}
|
||||
@ -316,7 +336,6 @@ BuildRequires: sanlock-devel >= 2.4
|
||||
BuildRequires: libpcap-devel >= 1.5.0
|
||||
BuildRequires: libnl3-devel
|
||||
BuildRequires: libselinux-devel
|
||||
BuildRequires: dnsmasq >= 2.41
|
||||
BuildRequires: iptables
|
||||
BuildRequires: ebtables
|
||||
BuildRequires: module-init-tools
|
||||
@ -1230,20 +1249,6 @@ export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
|
||||
|
||||
%meson_install
|
||||
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/lock-driver/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/lock-driver/*.a
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/connection-driver/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/connection-driver/*.a
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-backend/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-backend/*.a
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-file/*.la
|
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-file/*.a
|
||||
%if %{with_wireshark}
|
||||
rm -f $RPM_BUILD_ROOT%{wireshark_plugindir}/libvirt.la
|
||||
%endif
|
||||
|
||||
# We don't want to install /etc/libvirt/qemu/networks in the main %%files list
|
||||
# because if the admin wants to delete the default network completely, we don't
|
||||
# want to end up re-incarnating it on every RPM upgrade.
|
||||
@ -1700,8 +1705,6 @@ exit 0
|
||||
|
||||
%files daemon
|
||||
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/
|
||||
|
||||
%{_unitdir}/libvirtd.service
|
||||
%{_unitdir}/libvirtd.socket
|
||||
%{_unitdir}/libvirtd-ro.socket
|
||||
@ -1733,7 +1736,9 @@ exit 0
|
||||
%dir %{_datadir}/libvirt/
|
||||
|
||||
%ghost %dir %{_rundir}/libvirt/
|
||||
%ghost %dir %{_rundir}/libvirt/common/
|
||||
|
||||
%dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/
|
||||
%dir %attr(0711, root, root) %{_localstatedir}/lib/libvirt/images/
|
||||
%dir %attr(0711, root, root) %{_localstatedir}/lib/libvirt/filesystems/
|
||||
%dir %attr(0711, root, root) %{_localstatedir}/lib/libvirt/boot/
|
||||
@ -1782,7 +1787,6 @@ exit 0
|
||||
%{_mandir}/man8/virtlogd.8*
|
||||
%{_mandir}/man8/virtlockd.8*
|
||||
%{_mandir}/man8/virtproxyd.8*
|
||||
%{_mandir}/man7/virkey*.7*
|
||||
|
||||
%{_bindir}/virt-host-validate
|
||||
%{_bindir}/virt-admin
|
||||
@ -1808,6 +1812,7 @@ exit 0
|
||||
%{_unitdir}/virtinterfaced-ro.socket
|
||||
%{_unitdir}/virtinterfaced-admin.socket
|
||||
%attr(0755, root, root) %{_sbindir}/virtinterfaced
|
||||
%ghost %dir %{_rundir}/libvirt/interface/
|
||||
%{_libdir}/%{name}/connection-driver/libvirt_driver_interface.so
|
||||
%{_mandir}/man8/virtinterfaced.8*
|
||||
|
||||
@ -1843,6 +1848,7 @@ exit 0
|
||||
%{_unitdir}/virtnodedevd-ro.socket
|
||||
%{_unitdir}/virtnodedevd-admin.socket
|
||||
%attr(0755, root, root) %{_sbindir}/virtnodedevd
|
||||
%ghost %dir %{_rundir}/libvirt/nodedev/
|
||||
%{_libdir}/%{name}/connection-driver/libvirt_driver_nodedev.so
|
||||
%{_mandir}/man8/virtnodedevd.8*
|
||||
|
||||
@ -1857,6 +1863,8 @@ exit 0
|
||||
%attr(0755, root, root) %{_sbindir}/virtnwfilterd
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/nwfilter/
|
||||
%ghost %dir %{_rundir}/libvirt/network/
|
||||
%ghost %dir %{_rundir}/libvirt/nwfilter-binding/
|
||||
%ghost %dir %{_rundir}/libvirt/nwfilter/
|
||||
%{_libdir}/%{name}/connection-driver/libvirt_driver_nwfilter.so
|
||||
%{_mandir}/man8/virtnwfilterd.8*
|
||||
|
||||
@ -1869,6 +1877,8 @@ exit 0
|
||||
%{_unitdir}/virtsecretd-ro.socket
|
||||
%{_unitdir}/virtsecretd-admin.socket
|
||||
%attr(0755, root, root) %{_sbindir}/virtsecretd
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/secrets/
|
||||
%ghost %dir %{_rundir}/libvirt/secrets/
|
||||
%{_libdir}/%{name}/connection-driver/libvirt_driver_secret.so
|
||||
%{_mandir}/man8/virtsecretd.8*
|
||||
|
||||
@ -1884,6 +1894,9 @@ exit 0
|
||||
%{_unitdir}/virtstoraged-admin.socket
|
||||
%attr(0755, root, root) %{_sbindir}/virtstoraged
|
||||
%attr(0755, root, root) %{_libexecdir}/libvirt_parthelper
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/storage/
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/storage/autostart/
|
||||
%ghost %dir %{_rundir}/libvirt/storage/
|
||||
%{_libdir}/%{name}/connection-driver/libvirt_driver_storage.so
|
||||
%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_fs.so
|
||||
%{_libdir}/%{name}/storage-file/libvirt_storage_file_fs.so
|
||||
@ -1942,12 +1955,24 @@ exit 0
|
||||
%{_unitdir}/virtqemud-admin.socket
|
||||
%attr(0755, root, root) %{_sbindir}/virtqemud
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/autostart/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/qemu.conf
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/qemu-lockd.conf
|
||||
%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.qemu
|
||||
%ghost %dir %{_rundir}/libvirt/qemu/
|
||||
%ghost %dir %{_rundir}/libvirt/qemu/dbus/
|
||||
%ghost %dir %{_rundir}/libvirt/qemu/slirp/
|
||||
%ghost %dir %{_rundir}/libvirt/qemu/swtpm/
|
||||
%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/
|
||||
%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/channel/
|
||||
%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/channel/target/
|
||||
%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/checkpoint/
|
||||
%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/dump/
|
||||
%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/nvram/
|
||||
%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/ram/
|
||||
%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/save/
|
||||
%dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/snapshot/
|
||||
%dir %attr(0750, root, root) %{_localstatedir}/cache/libvirt/qemu/
|
||||
%{_datadir}/augeas/lenses/libvirtd_qemu.aug
|
||||
%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
|
||||
@ -1970,6 +1995,8 @@ exit 0
|
||||
%{_unitdir}/virtlxcd-admin.socket
|
||||
%attr(0755, root, root) %{_sbindir}/virtlxcd
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/lxc/
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/lxc/
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/lxc/autostart/
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/lxc.conf
|
||||
%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.lxc
|
||||
%ghost %dir %{_rundir}/libvirt/lxc/
|
||||
@ -1994,11 +2021,17 @@ exit 0
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/libxl.conf
|
||||
%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.libxl
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/libxl-lockd.conf
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/libxl/
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/libxl/autostart/
|
||||
%{_datadir}/augeas/lenses/libvirtd_libxl.aug
|
||||
%{_datadir}/augeas/lenses/tests/test_libvirtd_libxl.aug
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/libxl/
|
||||
%ghost %dir %{_rundir}/libvirt/libxl/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/channel/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/channel/target/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/dump/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/save/
|
||||
%{_libdir}/%{name}/connection-driver/libvirt_driver_libxl.so
|
||||
%{_mandir}/man8/virtxend.8*
|
||||
%endif
|
||||
@ -2059,6 +2092,7 @@ exit 0
|
||||
%{_mandir}/man1/virt-xml-validate.1*
|
||||
%{_mandir}/man1/virt-pki-query-dn.1*
|
||||
%{_mandir}/man1/virt-pki-validate.1*
|
||||
%{_mandir}/man7/virkey*.7*
|
||||
%{_bindir}/virsh
|
||||
%{_bindir}/virt-xml-validate
|
||||
%{_bindir}/virt-pki-query-dn
|
||||
@ -2068,6 +2102,7 @@ exit 0
|
||||
|
||||
%files libs -f %{name}.lang
|
||||
%license COPYING COPYING.LESSER
|
||||
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/libvirt.conf
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/libvirt-admin.conf
|
||||
%{_libdir}/libvirt.so.*
|
||||
@ -2076,7 +2111,6 @@ exit 0
|
||||
%{_libdir}/libvirt-admin.so.*
|
||||
%dir %{_datadir}/libvirt/
|
||||
%dir %{_datadir}/libvirt/schemas/
|
||||
%dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/
|
||||
|
||||
%{_datadir}/systemtap/tapset/libvirt_probes*.stp
|
||||
%{_datadir}/systemtap/tapset/libvirt_functions.stp
|
||||
@ -2144,13 +2178,80 @@ exit 0
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Mar 18 2022 Jiri Denemark <jdenemar@redhat.com> - 8.0.0-7
|
||||
- nwfilter: hold filter update lock when creating/deleting bindings (rhbz#2044379)
|
||||
- qemu,lxc: remove use to nwfilter update lock (rhbz#2044379)
|
||||
- qemu: support multiqueue for vdpa net device (rhbz#2024406)
|
||||
* Thu Aug 4 2022 Jiri Denemark <jdenemar@redhat.com> - 8.5.0-5
|
||||
- rpc: Pass OPENSSL_CONF through to ssh invocations (rhbz#2112348)
|
||||
|
||||
* Thu Mar 3 2022 Jiri Denemark <jdenemar@redhat.com> - 8.0.0-6
|
||||
- qemu: support firmware descriptor flash 'mode' for optional NVRAM (rhbz#2057769)
|
||||
* Fri Jul 29 2022 Jiri Denemark <jdenemar@redhat.com> - 8.5.0-4
|
||||
- qemu: Pass migration flags to qemuMigrationParamsApply (rhbz#2111070)
|
||||
- qemu_migration_params: Replace qemuMigrationParamTypes array (rhbz#2111070)
|
||||
- qemu_migration: Pass migParams to qemuMigrationSrcResume (rhbz#2111070)
|
||||
- qemu_migration: Apply max-postcopy-bandwidth on post-copy resume (rhbz#2111070)
|
||||
- qemu: Always assume support for QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE (rhbz#2107892)
|
||||
- qemu_migration: Store original migration params in status XML (rhbz#2107892)
|
||||
- qemu_migration_params: Refactor qemuMigrationParamsApply (rhbz#2107892)
|
||||
- qemu_migration_params: Refactor qemuMigrationParamsReset (rhbz#2107892)
|
||||
- qemu_migration_params: Avoid deadlock in qemuMigrationParamsReset (rhbz#2107892)
|
||||
- qemu: Restore original memory locking limit on reconnect (rhbz#2107424)
|
||||
- qemu: Properly release job in qemuDomainSaveInternal (rhbz#1497907)
|
||||
- qemu: don't call qemuMigrationSrcIsAllowedHostdev() from qemuMigrationDstPrepareFresh() (rhbz#1497907)
|
||||
|
||||
* Mon Jul 25 2022 Jiri Denemark <jdenemar@redhat.com> - 8.5.0-3
|
||||
- qemu: introduce capability QEMU_CAPS_MIGRATION_BLOCKED_REASONS (rhbz#2092833)
|
||||
- qemu: new function to retrieve migration blocker reasons from QEMU (rhbz#2092833)
|
||||
- qemu: query QEMU for migration blockers before our own harcoded checks (rhbz#2092833)
|
||||
- qemu: remove hardcoded migration fail for vDPA devices if we can ask QEMU (rhbz#2092833)
|
||||
- qemu_migration: Use EnterMonitorAsync in qemuDomainGetMigrationBlockers (rhbz#2092833)
|
||||
- qemu: don't try to query QEMU about migration blockers during offline migration (rhbz#2092833)
|
||||
- qemu_migration: Acquire correct job in qemuMigrationSrcIsAllowed (rhbz#2092833)
|
||||
- virsh: Require --xpath for *dumpxml (rhbz#2103524)
|
||||
- qemu: skip hardcoded hostdev migration check if QEMU can do it for us (rhbz#1497907)
|
||||
|
||||
* Fri Jul 15 2022 Jiri Denemark <jdenemar@redhat.com> - 8.5.0-2
|
||||
- domain_conf: Format <defaultiothread/> more often (rhbz#2059511)
|
||||
- domain_conf: Format iothread IDs more often (rhbz#2059511)
|
||||
- qemu: Make IOThread changing more robust (rhbz#2059511)
|
||||
- qemuDomainSetIOThreadParams: Accept VIR_DOMAIN_AFFECT_CONFIG flag (rhbz#2059511)
|
||||
- virsh: Implement --config for iothreadset (rhbz#2059511)
|
||||
- docs: Document TPM portion of domcaps (rhbz#2103119)
|
||||
- virtpm: Introduce TPM-1.2 and TPM-2.0 capabilieis (rhbz#2103119)
|
||||
- domcaps: Introduce TPM backendVersion (rhbz#2103119)
|
||||
- qemu: Report supported TPM version in domcaps (rhbz#2103119)
|
||||
- vircpi: Add PCIe 5.0 and 6.0 link speeds (rhbz#2105231)
|
||||
|
||||
* Fri Jul 1 2022 Jiri Denemark <jdenemar@redhat.com> - 8.5.0-1
|
||||
- Rebased to libvirt-8.5.0 (rhbz#2060313)
|
||||
- The rebase also fixes the following bugs:
|
||||
rhbz#1475431, rhbz#2026765, rhbz#2059511, rhbz#2089431, rhbz#2102009
|
||||
|
||||
* Fri Jun 24 2022 Jiri Denemark <jdenemar@redhat.com> - 8.4.0-3
|
||||
- qemu: fd: Fix monitor usage of qemuFDPassDirectGetPath (rhbz#2092856)
|
||||
|
||||
* Tue Jun 14 2022 Jiri Denemark <jdenemar@redhat.com> - 8.4.0-2
|
||||
- Revert "RHEL: Fix virConnectGetMaxVcpus output" (rhbz#2095260)
|
||||
|
||||
* Thu Jun 2 2022 Jiri Denemark <jdenemar@redhat.com> - 8.4.0-1
|
||||
- Rebased to libvirt-8.4.0 (rhbz#2060313)
|
||||
- The rebase also fixes the following bugs:
|
||||
rhbz#2057768, rhbz#2081981, rhbz#2035163, rhbz#2075837, rhbz#2082540
|
||||
rhbz#2075383
|
||||
|
||||
* Fri May 6 2022 Jiri Denemark <jdenemar@redhat.com> - 8.3.0-1
|
||||
- Rebased to libvirt-8.3.0 (rhbz#2060313)
|
||||
- The rebase also fixes the following bugs:
|
||||
rhbz#1653327, rhbz#2075765, rhbz#2075464, rhbz#2078274, rhbz#2070380
|
||||
rhbz#2073887, rhbz#2073867
|
||||
|
||||
* Fri Apr 1 2022 Jiri Denemark <jdenemar@redhat.com> - 8.2.0-1
|
||||
- Rebased to libvirt-8.2.0 (rhbz#2060313)
|
||||
- The rebase also fixes the following bugs:
|
||||
rhbz#1866400, rhbz#2065381, rhbz#2063903, rhbz#1901394, rhbz#2065399
|
||||
|
||||
* Fri Mar 4 2022 Jiri Denemark <jdenemar@redhat.com> - 8.1.0-1
|
||||
- Rebased to libvirt-8.1.0 (rhbz#2060313)
|
||||
- The rebase also fixes the following bugs:
|
||||
rhbz#1643868, rhbz#2045953, rhbz#1910856, rhbz#2051451, rhbz#1745868
|
||||
rhbz#2040548, rhbz#2041665, rhbz#1999372, rhbz#2038045, rhbz#2045959
|
||||
rhbz#2046024, rhbz#2040555, rhbz#2057067, rhbz#2037146, rhbz#2036300
|
||||
|
||||
* Thu Feb 24 2022 Jiri Denemark <jdenemar@redhat.com> - 8.0.0-5
|
||||
- Make systemd unit ordering more robust (rhbz#1868537)
|
||||
|
Loading…
Reference in New Issue
Block a user