!34 bugfix: cherry-pick some bugfix patches from openEuler-20.09 branch
From: @zhendongchen Reviewed-by: @xydong Signed-off-by: @xydong
This commit is contained in:
commit
5d4c07442c
@ -0,0 +1,42 @@
|
|||||||
|
From 19845de491a3102df4256a3457c7d5669bccda63 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Mon, 18 May 2020 10:07:30 +0200
|
||||||
|
Subject: [PATCH] Don't require secdrivers to implement
|
||||||
|
.domainMoveImageMetadata
|
||||||
|
|
||||||
|
The AppArmor secdriver does not use labels to grant access to
|
||||||
|
resources. Therefore, it doesn't use XATTRs and hence it lacks
|
||||||
|
implementation of .domainMoveImageMetadata callback. This leads
|
||||||
|
to a harmless but needless error message appearing in the logs:
|
||||||
|
|
||||||
|
virSecurityManagerMoveImageMetadata:476 : this function is not
|
||||||
|
supported by the connection driver: virSecurityManagerMoveImageMetadata
|
||||||
|
|
||||||
|
Closes: https://gitlab.com/libvirt/libvirt/-/issues/25
|
||||||
|
|
||||||
|
cherry-pick from commit: cc8c297e473afd55e5d8e35e18345d8df176059d
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/security/security_manager.c | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/security/security_manager.c b/src/security/security_manager.c
|
||||||
|
index fe03274..1445291 100644
|
||||||
|
--- a/src/security/security_manager.c
|
||||||
|
+++ b/src/security/security_manager.c
|
||||||
|
@@ -473,8 +473,7 @@ virSecurityManagerMoveImageMetadata(virSecurityManagerPtr mgr,
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
- virReportUnsupportedError();
|
||||||
|
- return -1;
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
56
libvirt-Fix-some-wrong-usage-of-ATTRIBUTE_NONNULL.patch
Normal file
56
libvirt-Fix-some-wrong-usage-of-ATTRIBUTE_NONNULL.patch
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
From 42e4b74e1bbd08aad3afa46d741e46c40a8af73d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Bihong Yu <yubihong@huawei.com>
|
||||||
|
Date: Sat, 6 Jun 2020 18:52:35 +0800
|
||||||
|
Subject: [PATCH] Fix some wrong usage of ATTRIBUTE_NONNULL()
|
||||||
|
|
||||||
|
The virStateInitialize() function has ATTRIBUTE_NONNULL()
|
||||||
|
referring to @root argument (incorrectly anyway) but in
|
||||||
|
daemonRunStateInit() NULL is passed in anyway.
|
||||||
|
|
||||||
|
Then there is virCommandAddArgPair() which also has
|
||||||
|
ATTRIBUTE_NONNULL() for one of its arguments and then checks the
|
||||||
|
argument for being NULL anyways.
|
||||||
|
|
||||||
|
cherry-pick from commit: 2a372a5ad5fab3bf26fb9bea019d38fa04ba8b34
|
||||||
|
|
||||||
|
Signed-off-by:Bihong Yu <yubihong@huawei.com>
|
||||||
|
Reviewed-by:Chuan Zheng <zhengchuan@huawei.com>
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/libvirt_internal.h | 3 +--
|
||||||
|
src/util/vircommand.h | 3 +--
|
||||||
|
2 files changed, 2 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h
|
||||||
|
index 00ef7aa..72c6127 100644
|
||||||
|
--- a/src/libvirt_internal.h
|
||||||
|
+++ b/src/libvirt_internal.h
|
||||||
|
@@ -33,8 +33,7 @@ int virStateInitialize(bool privileged,
|
||||||
|
bool mandatory,
|
||||||
|
const char *root,
|
||||||
|
virStateInhibitCallback inhibit,
|
||||||
|
- void *opaque)
|
||||||
|
- ATTRIBUTE_NONNULL(2);
|
||||||
|
+ void *opaque);
|
||||||
|
int virStateCleanup(void);
|
||||||
|
int virStateReload(void);
|
||||||
|
int virStateStop(void);
|
||||||
|
diff --git a/src/util/vircommand.h b/src/util/vircommand.h
|
||||||
|
index 9086f9a..4e6cb0a 100644
|
||||||
|
--- a/src/util/vircommand.h
|
||||||
|
+++ b/src/util/vircommand.h
|
||||||
|
@@ -128,8 +128,7 @@ void virCommandAddArgFormat(virCommandPtr cmd,
|
||||||
|
|
||||||
|
void virCommandAddArgPair(virCommandPtr cmd,
|
||||||
|
const char *name,
|
||||||
|
- const char *val)
|
||||||
|
- ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
|
||||||
|
+ const char *val);
|
||||||
|
|
||||||
|
void virCommandAddArgSet(virCommandPtr cmd,
|
||||||
|
const char *const*vals) ATTRIBUTE_NONNULL(2);
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
From fc8c41dbb52eb9ce3ee36680ecb53a41f4146610 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jiri Denemark <jdenemar@redhat.com>
|
||||||
|
Date: Thu, 11 Jun 2020 13:53:27 +0200
|
||||||
|
Subject: [PATCH] conf: Increase cpuset length limit for CPU pinning
|
||||||
|
|
||||||
|
Domains are now allowed to be pinned to host CPUs with IDs up to 16383.
|
||||||
|
The new limit is as arbitrary as the old one. It's just bigger.
|
||||||
|
|
||||||
|
cherry-pick from commit: e728ffba5119cfb1488aa7363fef596940449f50
|
||||||
|
|
||||||
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/conf/domain_conf.h | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||||
|
index a40773a..16e6253 100644
|
||||||
|
--- a/src/conf/domain_conf.h
|
||||||
|
+++ b/src/conf/domain_conf.h
|
||||||
|
@@ -2241,7 +2241,7 @@ struct _virDomainHugePage {
|
||||||
|
unsigned long long size; /* hugepage size in KiB */
|
||||||
|
};
|
||||||
|
|
||||||
|
-#define VIR_DOMAIN_CPUMASK_LEN 1024
|
||||||
|
+#define VIR_DOMAIN_CPUMASK_LEN 16384
|
||||||
|
|
||||||
|
struct _virDomainIOThreadIDDef {
|
||||||
|
bool autofill;
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
From 657c7f5d79fe43823ffb4d46e244bea15a65baf6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laine Stump <laine@redhat.com>
|
||||||
|
Date: Thu, 18 Jun 2020 12:49:09 -0400
|
||||||
|
Subject: [PATCH 1/6] conf, vmx: check for OOM after calling xmlBufferCreate()
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Although libvirt itself uses g_malloc0() and friends, which exit when
|
||||||
|
there isn't enouogh memory, libxml2 uses standard malloc(), which just
|
||||||
|
returns NULL on OOM - this means we must check for NULL on return from
|
||||||
|
any libxml2 functions that allocate memory.
|
||||||
|
|
||||||
|
xmlBufferCreate(), for example, might return NULL, and we don't always
|
||||||
|
check for it. This patch adds checks where it isn't already done.
|
||||||
|
|
||||||
|
(NB: Although libxml2 has a provision for changing behavior on OOM (by
|
||||||
|
calling xmlMemSetup() to change what functions are used to
|
||||||
|
allocating/freeing memory), we can't use that, since parts of libvirt
|
||||||
|
code end up in libvirt.so, which is linked and called directly by
|
||||||
|
applications that may themselves use libxml2 (and may have already set
|
||||||
|
their own alternate malloc()), e.g. drivers like esx which live totally
|
||||||
|
in the library rather than a separate process.)
|
||||||
|
|
||||||
|
cherry pick from: b7a92bce070fd57844a59bf8b1c30cb4ef4f3acd
|
||||||
|
|
||||||
|
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
---
|
||||||
|
src/conf/domain_conf.c | 6 +++++-
|
||||||
|
src/conf/network_conf.c | 6 +++++-
|
||||||
|
src/vmx/vmx.c | 11 +++++++----
|
||||||
|
3 files changed, 17 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||||
|
index 914e03c..37c785a 100644
|
||||||
|
--- a/src/conf/domain_conf.c
|
||||||
|
+++ b/src/conf/domain_conf.c
|
||||||
|
@@ -29022,7 +29022,11 @@ virDomainDefFormatInternalSetRootName(virDomainDefPtr def,
|
||||||
|
* Thankfully, libxml maps what looks like globals into
|
||||||
|
* thread-local uses, so we are thread-safe. */
|
||||||
|
xmlIndentTreeOutput = 1;
|
||||||
|
- xmlbuf = xmlBufferCreate();
|
||||||
|
+ if (!(xmlbuf = xmlBufferCreate())) {
|
||||||
|
+ virReportOOMError();
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (xmlNodeDump(xmlbuf, def->metadata->doc, def->metadata,
|
||||||
|
virBufferGetIndent(buf) / 2, 1) < 0) {
|
||||||
|
xmlBufferFree(xmlbuf);
|
||||||
|
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
|
||||||
|
index 819b645..c379042 100644
|
||||||
|
--- a/src/conf/network_conf.c
|
||||||
|
+++ b/src/conf/network_conf.c
|
||||||
|
@@ -2478,7 +2478,11 @@ virNetworkDefFormatBuf(virBufferPtr buf,
|
||||||
|
* Thankfully, libxml maps what looks like globals into
|
||||||
|
* thread-local uses, so we are thread-safe. */
|
||||||
|
xmlIndentTreeOutput = 1;
|
||||||
|
- xmlbuf = xmlBufferCreate();
|
||||||
|
+ if (!(xmlbuf = xmlBufferCreate())) {
|
||||||
|
+ virReportOOMError();
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (xmlNodeDump(xmlbuf, def->metadata->doc, def->metadata,
|
||||||
|
virBufferGetIndent(buf) / 2, 1) < 0) {
|
||||||
|
xmlBufferFree(xmlbuf);
|
||||||
|
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
|
||||||
|
index b1fd118..fbc8366 100644
|
||||||
|
--- a/src/vmx/vmx.c
|
||||||
|
+++ b/src/vmx/vmx.c
|
||||||
|
@@ -697,8 +697,8 @@ virVMXConvertToUTF8(const char *encoding, const char *string)
|
||||||
|
{
|
||||||
|
char *result = NULL;
|
||||||
|
xmlCharEncodingHandlerPtr handler;
|
||||||
|
- xmlBufferPtr input;
|
||||||
|
- xmlBufferPtr utf8;
|
||||||
|
+ xmlBufferPtr input = NULL;
|
||||||
|
+ xmlBufferPtr utf8 = NULL;
|
||||||
|
|
||||||
|
handler = xmlFindCharEncodingHandler(encoding);
|
||||||
|
|
||||||
|
@@ -708,8 +708,11 @@ virVMXConvertToUTF8(const char *encoding, const char *string)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- input = xmlBufferCreateStatic((char *)string, strlen(string));
|
||||||
|
- utf8 = xmlBufferCreate();
|
||||||
|
+ if (!(input = xmlBufferCreateStatic((char *)string, strlen(string))) ||
|
||||||
|
+ !(utf8 = xmlBufferCreate())) {
|
||||||
|
+ virReportOOMError();
|
||||||
|
+ goto cleanup;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (xmlCharEncInFunc(handler, utf8, input) < 0) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
66
libvirt-leaseshelper-Report-more-errors.patch
Normal file
66
libvirt-leaseshelper-Report-more-errors.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
From cc842aa3030697b1a454e15ccfb2a201e57d5602 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Mon, 15 Jun 2020 12:53:48 +0200
|
||||||
|
Subject: [PATCH 3/6] leaseshelper: Report more errors
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Some functions or code paths that may fail don't report error
|
||||||
|
(e.g. when acquiring PID file fails) leading to a silent quit
|
||||||
|
of the leaseshelper. This makes it super hard for us and users
|
||||||
|
to debug what is happening. Fortunately, dnsmasq captures both
|
||||||
|
stdout and stderr so we can write an error message there.
|
||||||
|
|
||||||
|
cherry pick from: 9ed345ac1a035c8cf1de37431de638f4bac41de3
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
---
|
||||||
|
src/network/leaseshelper.c | 18 ++++++++++++++----
|
||||||
|
1 file changed, 14 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c
|
||||||
|
index 86c847d..2b5fc0f 100644
|
||||||
|
--- a/src/network/leaseshelper.c
|
||||||
|
+++ b/src/network/leaseshelper.c
|
||||||
|
@@ -131,8 +131,10 @@ main(int argc, char **argv)
|
||||||
|
* events for expired leases. So, libvirtd sets another env var for this
|
||||||
|
* purpose */
|
||||||
|
if (!interface &&
|
||||||
|
- !(interface = getenv("VIR_BRIDGE_NAME")))
|
||||||
|
- goto cleanup;
|
||||||
|
+ !(interface = getenv("VIR_BRIDGE_NAME"))) {
|
||||||
|
+ fprintf(stderr, _("interface not set\n"));
|
||||||
|
+ exit(EXIT_FAILURE);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
ip = argv[3];
|
||||||
|
mac = argv[2];
|
||||||
|
@@ -160,13 +162,21 @@ main(int argc, char **argv)
|
||||||
|
pid_file = g_strdup(RUNSTATEDIR "/leaseshelper.pid");
|
||||||
|
|
||||||
|
/* Try to claim the pidfile, exiting if we can't */
|
||||||
|
- if ((pid_file_fd = virPidFileAcquirePath(pid_file, true, getpid())) < 0)
|
||||||
|
+ if ((pid_file_fd = virPidFileAcquirePath(pid_file, true, getpid())) < 0) {
|
||||||
|
+ fprintf(stderr,
|
||||||
|
+ _("Unable to acquire PID file: %s\n errno=%d"),
|
||||||
|
+ pid_file, errno);
|
||||||
|
goto cleanup;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* Since interfaces can be hot plugged, we need to make sure that the
|
||||||
|
* corresponding custom lease file exists. If not, 'touch' it */
|
||||||
|
- if (virFileTouch(custom_lease_file, 0644) < 0)
|
||||||
|
+ if (virFileTouch(custom_lease_file, 0644) < 0) {
|
||||||
|
+ fprintf(stderr,
|
||||||
|
+ _("Unable to create: %s\n errno=%d"),
|
||||||
|
+ custom_lease_file, errno);
|
||||||
|
goto cleanup;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
switch ((enum virLeaseActionFlags) action) {
|
||||||
|
case VIR_LEASE_ACTION_ADD:
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
45
libvirt-leaseshelper-Wait-to-acquire-PID-file.patch
Normal file
45
libvirt-leaseshelper-Wait-to-acquire-PID-file.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
From 173b80e8f8103f26438d344e9b97335d4e5036b4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Thu, 11 Jun 2020 16:43:22 +0200
|
||||||
|
Subject: [PATCH 2/6] leaseshelper: Wait to acquire PID file
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
On a DHCP transaction, dnsmasq runs our leases helper which
|
||||||
|
updates corresponding JSON files. While one dnsmasq won't run the
|
||||||
|
leaseshelper in parallel, two dnsmasqs (from two distinct
|
||||||
|
networks) might. To avoid corrupting JSON file, the leaseshelper
|
||||||
|
acquires PID file first. Well, the way it's acquiring it is not
|
||||||
|
ideal - it calls virPidFileAcquirePath(wait = false); which
|
||||||
|
means, that either it acquires the PID file instantly or returns
|
||||||
|
an error and does not touch the JSON at all. This in turn means
|
||||||
|
that there might be a leases record missing. With wait = true,
|
||||||
|
this won't happen.
|
||||||
|
|
||||||
|
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1840307
|
||||||
|
|
||||||
|
cherry pick from: 876211ef4a192df1603b45715044ec14567d7e9f
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
---
|
||||||
|
src/network/leaseshelper.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c
|
||||||
|
index a1780ca..86c847d 100644
|
||||||
|
--- a/src/network/leaseshelper.c
|
||||||
|
+++ b/src/network/leaseshelper.c
|
||||||
|
@@ -160,7 +160,7 @@ main(int argc, char **argv)
|
||||||
|
pid_file = g_strdup(RUNSTATEDIR "/leaseshelper.pid");
|
||||||
|
|
||||||
|
/* Try to claim the pidfile, exiting if we can't */
|
||||||
|
- if ((pid_file_fd = virPidFileAcquirePath(pid_file, false, getpid())) < 0)
|
||||||
|
+ if ((pid_file_fd = virPidFileAcquirePath(pid_file, true, getpid())) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
/* Since interfaces can be hot plugged, we need to make sure that the
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
48
libvirt-libxl-fix-crash-when-initializing-driver.patch
Normal file
48
libvirt-libxl-fix-crash-when-initializing-driver.patch
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
From 0e95f7b912055cf254b71b0b02dcb0acf7da3870 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Date: Fri, 3 Apr 2020 15:51:48 -0600
|
||||||
|
Subject: [PATCH 1/8] libxl: fix crash when initializing driver
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Commit 54a401af478 split out DriverConfigInit from DriverConfigNew, but
|
||||||
|
then called it a bit late from libxlStateInitialize. The cfg is used in
|
||||||
|
libxlDriverConfigLoadFile and when uninitialized results in a crash.
|
||||||
|
Calling DriverConfigInit immediately after DriverConfigNew fixes the
|
||||||
|
crash.
|
||||||
|
|
||||||
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
(cherry-picked from commit 88011ed2)
|
||||||
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
||||||
|
---
|
||||||
|
src/libxl/libxl_driver.c | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
|
||||||
|
index 7ec4fcc3d1..980984b199 100644
|
||||||
|
--- a/src/libxl/libxl_driver.c
|
||||||
|
+++ b/src/libxl/libxl_driver.c
|
||||||
|
@@ -702,14 +702,14 @@ libxlStateInitialize(bool privileged,
|
||||||
|
if (!(cfg = libxlDriverConfigNew()))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
+ if (libxlDriverConfigInit(cfg) < 0)
|
||||||
|
+ goto error;
|
||||||
|
+
|
||||||
|
driverConf = g_strdup_printf("%s/libxl.conf", cfg->configBaseDir);
|
||||||
|
|
||||||
|
if (libxlDriverConfigLoadFile(cfg, driverConf) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
- if (libxlDriverConfigInit(cfg) < 0)
|
||||||
|
- goto error;
|
||||||
|
-
|
||||||
|
/* Register the callbacks providing access to libvirt's event loop */
|
||||||
|
libxl_osevent_register_hooks(cfg->ctx, &libxl_osevent_callbacks, cfg->ctx);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
From 19d06bcb3c64662d5c131a035146d2caa8c5a437 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Tue, 14 Apr 2020 11:18:02 +0200
|
||||||
|
Subject: [PATCH 4/8] qemu: Revoke access to mirror on failed blockcopy
|
||||||
|
|
||||||
|
When preparing to do a blockcopy, the mirror image is modified so
|
||||||
|
that QEMU can access it. For instance, the mirror has seclabels
|
||||||
|
set, if it is a NVMe disk it is detached from the host and so on.
|
||||||
|
And usually, the restore is done upon successful finish of the
|
||||||
|
blockcopy operation. But, if something fails then we need to
|
||||||
|
explicitly revoke the access to the mirror image (and thus
|
||||||
|
reattach NVMe disk back to the host).
|
||||||
|
|
||||||
|
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1822538
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Pavel Mores <pmores@redhat.com>
|
||||||
|
(cherry-picked from commit 67e19fc9)
|
||||||
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_driver.c | 21 +++++++++++++--------
|
||||||
|
1 file changed, 13 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||||
|
index 8bc5368b2f..7162875492 100644
|
||||||
|
--- a/src/qemu/qemu_driver.c
|
||||||
|
+++ b/src/qemu/qemu_driver.c
|
||||||
|
@@ -17972,6 +17972,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
|
||||||
|
virDomainDiskDefPtr disk = NULL;
|
||||||
|
int ret = -1;
|
||||||
|
bool need_unlink = false;
|
||||||
|
+ bool need_revoke = false;
|
||||||
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
|
const char *format = NULL;
|
||||||
|
bool mirror_reuse = !!(flags & VIR_DOMAIN_BLOCK_COPY_REUSE_EXT);
|
||||||
|
@@ -18146,6 +18147,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
|
||||||
|
|
||||||
|
if (qemuDomainStorageSourceChainAccessAllow(driver, vm, mirror) < 0)
|
||||||
|
goto endjob;
|
||||||
|
+ need_revoke = true;
|
||||||
|
|
||||||
|
if (blockdev) {
|
||||||
|
if (mirror_reuse) {
|
||||||
|
@@ -18254,14 +18256,17 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
|
||||||
|
|
||||||
|
endjob:
|
||||||
|
if (ret < 0 &&
|
||||||
|
- virDomainObjIsActive(vm) &&
|
||||||
|
- (data || crdata)) {
|
||||||
|
- qemuDomainObjEnterMonitor(driver, vm);
|
||||||
|
- if (data)
|
||||||
|
- qemuBlockStorageSourceChainDetach(priv->mon, data);
|
||||||
|
- if (crdata)
|
||||||
|
- qemuBlockStorageSourceAttachRollback(priv->mon, crdata->srcdata[0]);
|
||||||
|
- ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||||
|
+ virDomainObjIsActive(vm)) {
|
||||||
|
+ if (data || crdata) {
|
||||||
|
+ qemuDomainObjEnterMonitor(driver, vm);
|
||||||
|
+ if (data)
|
||||||
|
+ qemuBlockStorageSourceChainDetach(priv->mon, data);
|
||||||
|
+ if (crdata)
|
||||||
|
+ qemuBlockStorageSourceAttachRollback(priv->mon, crdata->srcdata[0]);
|
||||||
|
+ ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||||
|
+ }
|
||||||
|
+ if (need_revoke)
|
||||||
|
+ qemuDomainStorageSourceChainAccessRevoke(driver, vm, mirror);
|
||||||
|
}
|
||||||
|
if (need_unlink && virStorageFileUnlink(mirror) < 0)
|
||||||
|
VIR_WARN("%s", _("unable to remove just-created copy target"));
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
53
libvirt-qemu-Skip-pre-creation-of-NVMe-disks.patch
Normal file
53
libvirt-qemu-Skip-pre-creation-of-NVMe-disks.patch
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
From a7f7d8f7513af2b98d01259480f63167cf44cced Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Tue, 26 May 2020 16:26:25 +0200
|
||||||
|
Subject: [PATCH] qemu: Skip pre-creation of NVMe disks
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Upon migration with disks, libvirt determines if each disk exists
|
||||||
|
on the destination and tries to pre-create missing ones. Well,
|
||||||
|
NVMe disks can't be pre-created, but they can be checked for
|
||||||
|
presence.
|
||||||
|
|
||||||
|
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1823639
|
||||||
|
|
||||||
|
cherry-pick from commit: a5a297f387fee9e9aa4cbc2df6788c330fd33ad1
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_migration.c | 8 +++++++-
|
||||||
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
||||||
|
index 65b47ec..3f4627b 100644
|
||||||
|
--- a/src/qemu/qemu_migration.c
|
||||||
|
+++ b/src/qemu/qemu_migration.c
|
||||||
|
@@ -315,6 +315,7 @@ qemuMigrationDstPrecreateStorage(virDomainObjPtr vm,
|
||||||
|
for (i = 0; i < nbd->ndisks; i++) {
|
||||||
|
virDomainDiskDefPtr disk;
|
||||||
|
const char *diskSrcPath;
|
||||||
|
+ g_autofree char *nvmePath = NULL;
|
||||||
|
|
||||||
|
VIR_DEBUG("Looking up disk target '%s' (capacity=%llu)",
|
||||||
|
nbd->disks[i].target, nbd->disks[i].capacity);
|
||||||
|
@@ -326,7 +327,12 @@ qemuMigrationDstPrecreateStorage(virDomainObjPtr vm,
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
- diskSrcPath = virDomainDiskGetSource(disk);
|
||||||
|
+ if (disk->src->type == VIR_STORAGE_TYPE_NVME) {
|
||||||
|
+ virPCIDeviceAddressGetSysfsFile(&disk->src->nvme->pciAddr, &nvmePath);
|
||||||
|
+ diskSrcPath = nvmePath;
|
||||||
|
+ } else {
|
||||||
|
+ diskSrcPath = virDomainDiskGetSource(disk);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* Skip disks we don't want to migrate and already existing disks. */
|
||||||
|
if (!qemuMigrationAnyCopyDisk(disk, nmigrate_disks, migrate_disks) ||
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
From c8a043dcdf4f04288bcfc34c25054dcef571a6a7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
|
||||||
|
Date: Tue, 16 Jun 2020 16:32:10 +0200
|
||||||
|
Subject: [PATCH] qemu: do not add model when actual iface type is hostdev
|
||||||
|
|
||||||
|
No default model should be added to the interface
|
||||||
|
entry at post parse when its actual network type is hostdev
|
||||||
|
as doing so might cause a mismatch between the interface
|
||||||
|
definition and its actual device type.
|
||||||
|
|
||||||
|
cherry-pick from commit: bdb8f2e41867ae5dbcc040909b1b8c20fd864a40
|
||||||
|
|
||||||
|
Signed-off-by: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
|
||||||
|
Reviewed-by: Laine Stump <laine@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_domain.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||||
|
index 91c1a49..cfada81 100644
|
||||||
|
--- a/src/qemu/qemu_domain.c
|
||||||
|
+++ b/src/qemu/qemu_domain.c
|
||||||
|
@@ -9334,6 +9334,7 @@ qemuDomainDeviceNetDefPostParse(virDomainNetDefPtr net,
|
||||||
|
virQEMUCapsPtr qemuCaps)
|
||||||
|
{
|
||||||
|
if (net->type != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
|
||||||
|
+ virDomainNetResolveActualType(net) != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
|
||||||
|
!virDomainNetGetModelString(net))
|
||||||
|
net->model = qemuDomainDefaultNetModel(def, qemuCaps);
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
From f15935ea3b510bf0633dc2219a132412a7a8e96c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lin Ma <lma@suse.com>
|
||||||
|
Date: Thu, 16 Apr 2020 12:44:51 +0800
|
||||||
|
Subject: [PATCH 3/8] qemu: fix hang in p2p + xbzrle compression + parallel
|
||||||
|
migration
|
||||||
|
|
||||||
|
When we do parallel migration, The multifd-channels migration parameter
|
||||||
|
needs to be set on the destination side as well before incoming migration
|
||||||
|
URI, unless we accept the default number of connections(2).
|
||||||
|
|
||||||
|
Usually, This can be correctly handled by libvirtd. But in this case if
|
||||||
|
we use p2p + xbzrle compression without parameter '--comp-xbzrle-cache',
|
||||||
|
qemuMigrationParamsDump returns too early, The corresponding migration
|
||||||
|
parameter will not be set on the destination side, It results QEMU hangs.
|
||||||
|
|
||||||
|
Reproducer:
|
||||||
|
virsh migrate --live --p2p --comp-methods xbzrle \
|
||||||
|
--parallel --parallel-connections 3 GUEST qemu+ssh://dsthost/system
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
virsh migrate --live --p2p --compressed \
|
||||||
|
--parallel --parallel-connections 3 GUEST qemu+ssh://dsthost/system
|
||||||
|
|
||||||
|
Signed-off-by: Lin Ma <lma@suse.com>
|
||||||
|
Message-Id: <20200416044451.21134-1-lma@suse.com>
|
||||||
|
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
||||||
|
(cherry-picked from commit 93b15ba0)
|
||||||
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_migration_params.c | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
|
||||||
|
index dd5e2ce1b6..810199370f 100644
|
||||||
|
--- a/src/qemu/qemu_migration_params.c
|
||||||
|
+++ b/src/qemu/qemu_migration_params.c
|
||||||
|
@@ -630,7 +630,6 @@ qemuMigrationParamsDump(qemuMigrationParamsPtr migParams,
|
||||||
|
if (migParams->compMethods == 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE &&
|
||||||
|
!migParams->params[QEMU_MIGRATION_PARAM_XBZRLE_CACHE_SIZE].set) {
|
||||||
|
*flags |= VIR_MIGRATE_COMPRESSED;
|
||||||
|
- return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < QEMU_MIGRATION_COMPRESS_LAST; ++i) {
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
107
libvirt-qemu-format-ramfb-attribute-for-mediated-devices.patch
Normal file
107
libvirt-qemu-format-ramfb-attribute-for-mediated-devices.patch
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
From e017f95c7d833c0e9a463a1613d01fe93020606b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jonathon Jongsma <jjongsma@redhat.com>
|
||||||
|
Date: Tue, 23 Jun 2020 13:29:56 -0500
|
||||||
|
Subject: [PATCH 5/6] qemu: format 'ramfb' attribute for mediated devices
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
It's possible to use ramfb as the boot display of an assigned vgpu
|
||||||
|
device. This was introduced in 4b95738c, but unfortunately the attribute
|
||||||
|
was not formatted into the xml output for such a device. This patch
|
||||||
|
fixes that oversight and adds a xml2xml test to verify proper behavior.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1847791
|
||||||
|
|
||||||
|
cherry pick from: c5815b31976f3982d18c7f6c1367ab6e403eb7eb
|
||||||
|
|
||||||
|
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
||||||
|
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||||
|
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
---
|
||||||
|
src/conf/domain_conf.c | 3 ++
|
||||||
|
.../hostdev-mdev-display-ramfb.x86_64-latest.xml | 44 ++++++++++++++++++++++
|
||||||
|
tests/qemuxml2xmltest.c | 1 +
|
||||||
|
3 files changed, 48 insertions(+)
|
||||||
|
create mode 100644 tests/qemuxml2xmloutdata/hostdev-mdev-display-ramfb.x86_64-latest.xml
|
||||||
|
|
||||||
|
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||||
|
index 37c785a..93e78a0 100644
|
||||||
|
--- a/src/conf/domain_conf.c
|
||||||
|
+++ b/src/conf/domain_conf.c
|
||||||
|
@@ -27849,6 +27849,9 @@ virDomainHostdevDefFormat(virBufferPtr buf,
|
||||||
|
if (mdevsrc->display != VIR_TRISTATE_SWITCH_ABSENT)
|
||||||
|
virBufferAsprintf(buf, " display='%s'",
|
||||||
|
virTristateSwitchTypeToString(mdevsrc->display));
|
||||||
|
+ if (mdevsrc->ramfb != VIR_TRISTATE_SWITCH_ABSENT)
|
||||||
|
+ virBufferAsprintf(buf, " ramfb='%s'",
|
||||||
|
+ virTristateSwitchTypeToString(mdevsrc->ramfb));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
diff --git a/tests/qemuxml2xmloutdata/hostdev-mdev-display-ramfb.x86_64-latest.xml b/tests/qemuxml2xmloutdata/hostdev-mdev-display-ramfb.x86_64-latest.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..c134400
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tests/qemuxml2xmloutdata/hostdev-mdev-display-ramfb.x86_64-latest.xml
|
||||||
|
@@ -0,0 +1,44 @@
|
||||||
|
+<domain type='qemu'>
|
||||||
|
+ <name>QEMUGuest2</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='i686' machine='pc'>hvm</type>
|
||||||
|
+ <boot dev='hd'/>
|
||||||
|
+ </os>
|
||||||
|
+ <cpu mode='custom' match='exact' check='none'>
|
||||||
|
+ <model fallback='forbid'>qemu64</model>
|
||||||
|
+ </cpu>
|
||||||
|
+ <clock offset='utc'/>
|
||||||
|
+ <on_poweroff>destroy</on_poweroff>
|
||||||
|
+ <on_reboot>restart</on_reboot>
|
||||||
|
+ <on_crash>destroy</on_crash>
|
||||||
|
+ <devices>
|
||||||
|
+ <emulator>/usr/bin/qemu-system-i386</emulator>
|
||||||
|
+ <controller type='usb' index='0' model='piix3-uhci'>
|
||||||
|
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||||
|
+ </controller>
|
||||||
|
+ <controller type='pci' index='0' model='pci-root'/>
|
||||||
|
+ <controller type='ide' index='0'>
|
||||||
|
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||||
|
+ </controller>
|
||||||
|
+ <input type='mouse' bus='ps2'/>
|
||||||
|
+ <input type='keyboard' bus='ps2'/>
|
||||||
|
+ <graphics type='vnc' port='-1' autoport='yes'>
|
||||||
|
+ <listen type='address'/>
|
||||||
|
+ </graphics>
|
||||||
|
+ <video>
|
||||||
|
+ <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
|
||||||
|
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||||
|
+ </video>
|
||||||
|
+ <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on' ramfb='on'>
|
||||||
|
+ <source>
|
||||||
|
+ <address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dc'/>
|
||||||
|
+ </source>
|
||||||
|
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||||
|
+ </hostdev>
|
||||||
|
+ <memballoon model='none'/>
|
||||||
|
+ </devices>
|
||||||
|
+</domain>
|
||||||
|
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||||
|
index a0d27fd..3a25395 100644
|
||||||
|
--- a/tests/qemuxml2xmltest.c
|
||||||
|
+++ b/tests/qemuxml2xmltest.c
|
||||||
|
@@ -529,6 +529,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_VFIO_PCI_DISPLAY,
|
||||||
|
QEMU_CAPS_DEVICE_VFIO_PCI,
|
||||||
|
QEMU_CAPS_VNC);
|
||||||
|
+ DO_TEST_CAPS_LATEST("hostdev-mdev-display-ramfb");
|
||||||
|
DO_TEST("pci-rom", NONE);
|
||||||
|
DO_TEST("pci-rom-disabled", NONE);
|
||||||
|
DO_TEST("pci-rom-disabled-invalid", NONE);
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
From 7dd15a340179598dece5546c9e4fec9b8e47aca7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ján Tomko <jtomko@redhat.com>
|
||||||
|
Date: Tue, 12 May 2020 12:59:07 +0200
|
||||||
|
Subject: [PATCH] qemu: only stop external devices after the domain
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
A failure in qemuProcessLaunch would lead to qemuExtDevicesStop
|
||||||
|
being called twice - once in the cleanup section and then again
|
||||||
|
in qemuProcessStop.
|
||||||
|
|
||||||
|
However, the first one is called while the QEMU process is
|
||||||
|
still running, which is too soon for the swtpm process, because
|
||||||
|
the swtmp_ioctl command can lock up:
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1822523
|
||||||
|
|
||||||
|
Remove the first call and only leave the one in qemuProcessStop,
|
||||||
|
which is called after the QEMU process is killed.
|
||||||
|
|
||||||
|
cherry-pick from commit: 006782a8bc5a27125211946fcb12a40f7d4ed12a
|
||||||
|
|
||||||
|
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||||
|
Reviewed-by: Erik Skultety <eskultet@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_process.c | 2 --
|
||||||
|
1 file changed, 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||||
|
index 6b9f6fb..6fbe0c1 100644
|
||||||
|
--- a/src/qemu/qemu_process.c
|
||||||
|
+++ b/src/qemu/qemu_process.c
|
||||||
|
@@ -6998,8 +6998,6 @@ qemuProcessLaunch(virConnectPtr conn,
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
- if (ret < 0)
|
||||||
|
- qemuExtDevicesStop(driver, vm);
|
||||||
|
qemuDomainSecretDestroy(vm);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
From 3ee423c363b69588e82e522ad1634193284c09a7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Bihong Yu <yubihong@huawei.com>
|
||||||
|
Date: Tue, 14 Jul 2020 15:44:05 +0800
|
||||||
|
Subject: [PATCH] qemu: pre-create the dbus directory in qemuStateInitialize
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
There are races condiction to make '/run/libvirt/qemu/dbus' directory in
|
||||||
|
virDirCreateNoFork() while concurrent start VMs, and get "failed to create
|
||||||
|
directory '/run/libvirt/qemu/dbus': File exists" error message. pre-create the
|
||||||
|
dbus directory in qemuStateInitialize.
|
||||||
|
|
||||||
|
Signed-off-by: Bihong Yu <yubihong@huawei.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_dbus.c | 10 ----------
|
||||||
|
src/qemu/qemu_dbus.h | 2 --
|
||||||
|
src/qemu/qemu_driver.c | 7 +++++++
|
||||||
|
src/qemu/qemu_process.c | 3 ---
|
||||||
|
4 files changed, 7 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_dbus.c b/src/qemu/qemu_dbus.c
|
||||||
|
index 51f6c94e3e..81042876fe 100644
|
||||||
|
--- a/src/qemu/qemu_dbus.c
|
||||||
|
+++ b/src/qemu/qemu_dbus.c
|
||||||
|
@@ -33,16 +33,6 @@
|
||||||
|
VIR_LOG_INIT("qemu.dbus");
|
||||||
|
|
||||||
|
|
||||||
|
-int
|
||||||
|
-qemuDBusPrepareHost(virQEMUDriverPtr driver)
|
||||||
|
-{
|
||||||
|
- g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
|
-
|
||||||
|
- return virDirCreate(cfg->dbusStateDir, 0770, cfg->user, cfg->group,
|
||||||
|
- VIR_DIR_CREATE_ALLOW_EXIST);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
static char *
|
||||||
|
qemuDBusCreatePidFilename(virQEMUDriverConfigPtr cfg,
|
||||||
|
const char *shortName)
|
||||||
|
diff --git a/src/qemu/qemu_dbus.h b/src/qemu/qemu_dbus.h
|
||||||
|
index 474eb1058b..3c2145a223 100644
|
||||||
|
--- a/src/qemu/qemu_dbus.h
|
||||||
|
+++ b/src/qemu/qemu_dbus.h
|
||||||
|
@@ -21,8 +21,6 @@
|
||||||
|
#include "qemu_conf.h"
|
||||||
|
#include "qemu_domain.h"
|
||||||
|
|
||||||
|
-int qemuDBusPrepareHost(virQEMUDriverPtr driver);
|
||||||
|
-
|
||||||
|
char *qemuDBusGetAddress(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm);
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||||
|
index 8e81c30a93..53980d4d78 100644
|
||||||
|
--- a/src/qemu/qemu_driver.c
|
||||||
|
+++ b/src/qemu/qemu_driver.c
|
||||||
|
@@ -743,6 +743,13 @@ qemuStateInitialize(bool privileged,
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (virDirCreate(cfg->dbusStateDir, 0770, cfg->user, cfg->group,
|
||||||
|
+ VIR_DIR_CREATE_ALLOW_EXIST) < 0) {
|
||||||
|
+ virReportSystemError(errno, _("Failed to create dbus state dir %s"),
|
||||||
|
+ cfg->dbusStateDir);
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if ((qemu_driver->lockFD =
|
||||||
|
virPidFileAcquire(cfg->stateDir, "driver", false, getpid())) < 0)
|
||||||
|
goto error;
|
||||||
|
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||||
|
index e8b15ee3ca..1006f41614 100644
|
||||||
|
--- a/src/qemu/qemu_process.c
|
||||||
|
+++ b/src/qemu/qemu_process.c
|
||||||
|
@@ -6466,9 +6466,6 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver,
|
||||||
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
|
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
|
||||||
|
|
||||||
|
- if (qemuDBusPrepareHost(driver) < 0)
|
||||||
|
- return -1;
|
||||||
|
-
|
||||||
|
if (qemuPrepareNVRAM(cfg, vm) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.25.0.windows.1
|
||||||
|
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
From f63d6889b34af9b0b7808566945d6e1720d7c1fd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Date: Wed, 8 Jul 2020 09:13:42 +0200
|
||||||
|
Subject: [PATCH 4/6] qemuBuildMemoryBackendProps: Use boolean type for 'pmem'
|
||||||
|
property
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Commit 82576d8f35e used a string "on" to enable the 'pmem' property.
|
||||||
|
This is okay for the command line visitor, but the property is declared
|
||||||
|
as boolean in qemu and thus it will not work when using QMP.
|
||||||
|
|
||||||
|
Modify the type to boolean. This changes the command line, but
|
||||||
|
fortunately the command line visitor in qemu parses both 'yes' and 'on'
|
||||||
|
as true for the property.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1854684
|
||||||
|
|
||||||
|
cherry pick from: e95da4e5bf53ff977f440903df9f7343f2fb6f0e
|
||||||
|
|
||||||
|
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_command.c | 2 +-
|
||||||
|
tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args | 2 +-
|
||||||
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||||
|
index 2f0e919..014a0e4 100644
|
||||||
|
--- a/src/qemu/qemu_command.c
|
||||||
|
+++ b/src/qemu/qemu_command.c
|
||||||
|
@@ -3523,7 +3523,7 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps,
|
||||||
|
"with this QEMU binary"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
- if (virJSONValueObjectAdd(props, "s:pmem", "on", NULL) < 0)
|
||||||
|
+ if (virJSONValueObjectAdd(props, "b:pmem", true, NULL) < 0)
|
||||||
|
return -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 5dfba9b..00a78ba 100644
|
||||||
|
--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
|
||||||
|
+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
|
||||||
|
@@ -19,7 +19,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||||
|
-smp 2,sockets=2,dies=1,cores=1,threads=1 \
|
||||||
|
-numa node,nodeid=0,cpus=0-1,mem=214 \
|
||||||
|
-object memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/tmp/nvdimm,\
|
||||||
|
-share=no,size=536870912,pmem=on \
|
||||||
|
+share=no,size=536870912,pmem=yes \
|
||||||
|
-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
|
||||||
|
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||||
|
-display none \
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
From 517d69d6c3935adf59fcf9ed11cb05e1dfa8a6f3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Tue, 5 May 2020 13:45:44 +0200
|
||||||
|
Subject: [PATCH] qemuDomainCleanupRun: Actually run cleanup callbacks in
|
||||||
|
reverse order
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
We have a framework to register cleanup callbacks that are run
|
||||||
|
when a domain is shut down. The idea is to run callbacks in
|
||||||
|
reverse order than they were registered. However, looking at the
|
||||||
|
code this is not the case. Fortunately, this framework is used to
|
||||||
|
register a single callback and a single callback only -
|
||||||
|
qemuMigrationDstPrepareCleanup() - therefore there was no problem
|
||||||
|
just yet.
|
||||||
|
|
||||||
|
cherry-pick from commit: 06fc99b6ceb846b07e1cae3d82916ef50ca5f60e
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_domain.c | 8 ++------
|
||||||
|
1 file changed, 2 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||||
|
index b1a4647..36bef67 100644
|
||||||
|
--- a/src/qemu/qemu_domain.c
|
||||||
|
+++ b/src/qemu/qemu_domain.c
|
||||||
|
@@ -11561,18 +11561,14 @@ qemuDomainCleanupRun(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm)
|
||||||
|
{
|
||||||
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
|
- size_t i;
|
||||||
|
|
||||||
|
VIR_DEBUG("driver=%p, vm=%s", driver, vm->def->name);
|
||||||
|
|
||||||
|
/* run cleanup callbacks in reverse order */
|
||||||
|
- for (i = 0; i < priv->ncleanupCallbacks; i++) {
|
||||||
|
- if (priv->cleanupCallbacks[priv->ncleanupCallbacks - (i + 1)])
|
||||||
|
- priv->cleanupCallbacks[i](driver, vm);
|
||||||
|
- }
|
||||||
|
+ while (priv->ncleanupCallbacks)
|
||||||
|
+ priv->cleanupCallbacks[--priv->ncleanupCallbacks](driver, vm);
|
||||||
|
|
||||||
|
VIR_FREE(priv->cleanupCallbacks);
|
||||||
|
- priv->ncleanupCallbacks = 0;
|
||||||
|
priv->ncleanupCallbacks_max = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
From d9190851ed9a28e86d5baa3a9872eb6246270cd1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Thu, 16 Apr 2020 14:18:28 +0200
|
||||||
|
Subject: [PATCH 5/8] qemuDomainDefPostParse: Fail if unable to fill machine
|
||||||
|
type
|
||||||
|
|
||||||
|
Previously, we used virCapabilitiesDomainDataLookup() to fill
|
||||||
|
machine type in post parse callback if none was provided in the
|
||||||
|
domain XML. If machine type couldn't be filled in an error was
|
||||||
|
reported. After 4a4132b4625 we've changed it to
|
||||||
|
virQEMUCapsGetPreferredMachine() which returns NULL, but we no
|
||||||
|
longer report an error and proceed with the post parse callbacks
|
||||||
|
processing. This may lead to a crash because the code later on
|
||||||
|
assumes def->os.machine is not NULL.
|
||||||
|
|
||||||
|
Fixes: 4a4132b4625
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Pavel Mores <pmores@redhat.com>
|
||||||
|
(cherry-picked from commit 67b973b5)
|
||||||
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_domain.c | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||||
|
index b1a46478ed..36e6343995 100644
|
||||||
|
--- a/src/qemu/qemu_domain.c
|
||||||
|
+++ b/src/qemu/qemu_domain.c
|
||||||
|
@@ -4971,6 +4971,14 @@ qemuDomainDefPostParse(virDomainDefPtr def,
|
||||||
|
if (!def->os.machine) {
|
||||||
|
const char *machine = virQEMUCapsGetPreferredMachine(qemuCaps,
|
||||||
|
def->virtType);
|
||||||
|
+ if (!machine) {
|
||||||
|
+ virReportError(VIR_ERR_INVALID_ARG,
|
||||||
|
+ _("could not get preferred machine for %s type=%s"),
|
||||||
|
+ def->emulator,
|
||||||
|
+ virDomainVirtTypeToString(def->virtType));
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
def->os.machine = g_strdup(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
From 9494102bc1560c1870c8ba603e936fa81beaa28c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Date: Thu, 23 Apr 2020 10:30:13 +0200
|
||||||
|
Subject: [PATCH 8/8] qemuDomainGetUnplugTimeout: Add G_GNUC_NO_INLINE
|
||||||
|
|
||||||
|
The function is mocked in qemuhotplugmock.so. Recent clang versions
|
||||||
|
decided to inline it so the mock stopped working resulting in
|
||||||
|
qemuhotplugtest wasting 15 seconds waiting for timeouts.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
(cherry-picked from commit 2ab8dba5)
|
||||||
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_hotplug.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
|
||||||
|
index 14654a17d7..60d0729f1e 100644
|
||||||
|
--- a/src/qemu/qemu_hotplug.c
|
||||||
|
+++ b/src/qemu/qemu_hotplug.c
|
||||||
|
@@ -5122,7 +5122,7 @@ qemuDomainResetDeviceRemoval(virDomainObjPtr vm)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-unsigned long long
|
||||||
|
+unsigned long long G_GNUC_NO_INLINE
|
||||||
|
qemuDomainGetUnplugTimeout(virDomainObjPtr vm)
|
||||||
|
{
|
||||||
|
if (qemuDomainIsPSeries(vm->def))
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
From 222d16af976dc08ee3ea2008d1dc68b00a1ccc9f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||||
|
Date: Thu, 11 Jun 2020 15:54:57 -0300
|
||||||
|
Subject: [PATCH] qemuDomainSetNumaParamsLive: set nodeset for root cgroup
|
||||||
|
|
||||||
|
This function handles the change of NUMA nodeset for a given
|
||||||
|
guest, setting CpusetMems for the emulator, vcpus and IOThread
|
||||||
|
sub-groups. It doesn't set the same nodeset to the root cgroup
|
||||||
|
though. This means that cpuset.mems of the root cgroup ends up
|
||||||
|
holding the new nodeset and the old nodeset as well. For
|
||||||
|
a guest with placement=strict, nodeset='0', doing
|
||||||
|
|
||||||
|
virsh numatune <vm> 0 8 --live
|
||||||
|
|
||||||
|
Will make cpuset.mems of emulator, vcpus and iothread to be
|
||||||
|
"8", but cpuset.mems of the root cgroup will be "0,8".
|
||||||
|
|
||||||
|
This means that any new tasks that ends up landing in the
|
||||||
|
root cgroup, aside from the emulator/vcpus/iothread sub-groups,
|
||||||
|
will be split between the old nodeset and the new nodeset,
|
||||||
|
which is not what we want.
|
||||||
|
|
||||||
|
cherry-pick from commit: 1b22dd6dd44202094e0f78f887cbe790c00e9ebc
|
||||||
|
|
||||||
|
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_driver.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||||
|
index 8bc5368..cb049fe 100644
|
||||||
|
--- a/src/qemu/qemu_driver.c
|
||||||
|
+++ b/src/qemu/qemu_driver.c
|
||||||
|
@@ -9728,6 +9728,10 @@ qemuDomainSetNumaParamsLive(virDomainObjPtr vm,
|
||||||
|
virCgroupFree(&cgroup_temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* set nodeset for root cgroup */
|
||||||
|
+ if (virCgroupSetCpusetMems(priv->cgroup, nodeset_str) < 0)
|
||||||
|
+ goto cleanup;
|
||||||
|
+
|
||||||
|
ret = 0;
|
||||||
|
cleanup:
|
||||||
|
virCgroupFree(&cgroup_temp);
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
From 8263665d2003446a9b08181fdcc13b89397aae7d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Thu, 14 May 2020 10:47:42 +0200
|
||||||
|
Subject: [PATCH] qemuDomainStorageSourcePrivateDispose: Free httpcookie
|
||||||
|
|
||||||
|
==156803== 58 (40 direct, 18 indirect) bytes in 1 blocks are definitely lost in loss record 306 of 463
|
||||||
|
==156803== at 0x4839EC6: calloc (vg_replace_malloc.c:762)
|
||||||
|
==156803== by 0x5791AC0: g_malloc0 (in /usr/lib64/libglib-2.0.so.0.6400.1)
|
||||||
|
==156803== by 0x48F60DC: virAlloc (viralloc.c:48)
|
||||||
|
==156803== by 0x18DD74: qemuStorageSourcePrivateDataAssignSecinfo (qemu_domain.c:2384)
|
||||||
|
==156803== by 0x18DFD5: qemuStorageSourcePrivateDataParse (qemu_domain.c:2433)
|
||||||
|
==156803== by 0x49EC884: virDomainStorageSourceParse (domain_conf.c:9857)
|
||||||
|
==156803== by 0x49ECBA3: virDomainDiskBackingStoreParse (domain_conf.c:9909)
|
||||||
|
==156803== by 0x49F129D: virDomainDiskDefParseXML (domain_conf.c:10785)
|
||||||
|
==156803== by 0x4A1804E: virDomainDefParseXML (domain_conf.c:21543)
|
||||||
|
==156803== by 0x4A1B60C: virDomainObjParseXML (domain_conf.c:22254)
|
||||||
|
==156803== by 0x4A1BFE9: virDomainObjParseNode (domain_conf.c:22429)
|
||||||
|
==156803== by 0x4A1C0B4: virDomainObjParseFile (domain_conf.c:22443
|
||||||
|
|
||||||
|
cherry-pick from commit: 42a415d5a548d828c4b6bd42ad59dfc44b113fa9
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_domain.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||||||
|
index 36bef67..91c1a49 100644
|
||||||
|
--- a/src/qemu/qemu_domain.c
|
||||||
|
+++ b/src/qemu/qemu_domain.c
|
||||||
|
@@ -1203,6 +1203,7 @@ qemuDomainStorageSourcePrivateDispose(void *obj)
|
||||||
|
|
||||||
|
g_clear_pointer(&priv->secinfo, qemuDomainSecretInfoFree);
|
||||||
|
g_clear_pointer(&priv->encinfo, qemuDomainSecretInfoFree);
|
||||||
|
+ g_clear_pointer(&priv->httpcookie, qemuDomainSecretInfoFree);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
From 2358e2dd4971793f4c8cc530251ed0b01536e603 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Mon, 18 May 2020 15:11:49 +0200
|
||||||
|
Subject: [PATCH] qemuProcessStop: Reattach NVMe disks a domain is mirroring
|
||||||
|
into
|
||||||
|
|
||||||
|
If the mirror destination is not a file but a NVMe disk, then
|
||||||
|
call qemuHostdevReAttachOneNVMeDisk() to reattach the NVMe back
|
||||||
|
to the host.
|
||||||
|
|
||||||
|
This would be done by blockjob code when the job finishes, but in
|
||||||
|
this case the job won't finish - QEMU is killed meanwhile.
|
||||||
|
|
||||||
|
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1825785
|
||||||
|
|
||||||
|
cherry-pick from commit: 8fd2749b2df99f3ac27215e9e4ab8be191c39460
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_process.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||||
|
index 9285ace..280fed9 100644
|
||||||
|
--- a/src/qemu/qemu_process.c
|
||||||
|
+++ b/src/qemu/qemu_process.c
|
||||||
|
@@ -7606,6 +7606,9 @@ void qemuProcessStop(virQEMUDriverPtr driver,
|
||||||
|
if (disk->mirror) {
|
||||||
|
if (qemuSecurityRestoreImageLabel(driver, vm, disk->mirror, false) < 0)
|
||||||
|
VIR_WARN("Unable to restore security label on %s", disk->dst);
|
||||||
|
+
|
||||||
|
+ if (virStorageSourceChainHasNVMe(disk->mirror))
|
||||||
|
+ qemuHostdevReAttachOneNVMeDisk(driver, vm->def->name, disk->mirror);
|
||||||
|
}
|
||||||
|
|
||||||
|
qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->src);
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
From 63846560cf12789ff592374dfc6211d83e693e9d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Mon, 18 May 2020 15:07:46 +0200
|
||||||
|
Subject: [PATCH] qemuProcessStop: Use XATTRs to restore seclabels on disks a
|
||||||
|
domain is mirroring into
|
||||||
|
|
||||||
|
In v5.10.0-rc1~42 (which was later fixed in v6.0.0-rc1~487) I am
|
||||||
|
removing XATTRs for a file that QEMU is mirroring a disk into but
|
||||||
|
it is killed meanwhile. Well, we can call
|
||||||
|
qemuSecurityRestoreImageLabel() which will not only remove XATTRs
|
||||||
|
but also use them to restore the original owner of the file.
|
||||||
|
|
||||||
|
This would be done by blockjob code when the job finishes, but in
|
||||||
|
this case the job won't finish - QEMU is killed meanwhile
|
||||||
|
|
||||||
|
cherry-pick from commit: 0230e3838402624756d6cd913b7d92639fafc7d0
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_process.c | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
|
||||||
|
index 6fbe0c1..9285ace 100644
|
||||||
|
--- a/src/qemu/qemu_process.c
|
||||||
|
+++ b/src/qemu/qemu_process.c
|
||||||
|
@@ -7603,8 +7603,10 @@ void qemuProcessStop(virQEMUDriverPtr driver,
|
||||||
|
for (i = 0; i < def->ndisks; i++) {
|
||||||
|
virDomainDiskDefPtr disk = def->disks[i];
|
||||||
|
|
||||||
|
- if (disk->mirror)
|
||||||
|
- qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->mirror);
|
||||||
|
+ if (disk->mirror) {
|
||||||
|
+ if (qemuSecurityRestoreImageLabel(driver, vm, disk->mirror, false) < 0)
|
||||||
|
+ VIR_WARN("Unable to restore security label on %s", disk->dst);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
qemuBlockRemoveImageMetadata(driver, vm, disk->dst, disk->src);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
38
libvirt-remote-fix-driver-name-check-for-libxl-driver.patch
Normal file
38
libvirt-remote-fix-driver-name-check-for-libxl-driver.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
From 1285a266c106ebac3fc6d1a7d5bf839a7623a5a0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
Date: Mon, 4 May 2020 17:41:46 +0100
|
||||||
|
Subject: [PATCH] remote: fix driver name check for libxl driver
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
The virConnectGetType() returns "Xen" for libxl, not "LIBXL".
|
||||||
|
|
||||||
|
This prevents users opening a connection to the libxl driver when using
|
||||||
|
the modular daemons.
|
||||||
|
|
||||||
|
cherry-pick from commit: d677de9d567e3e87be295b91723457b461345caa
|
||||||
|
|
||||||
|
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
|
||||||
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/remote/remote_daemon_dispatch.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c
|
||||||
|
index c5506c2..d2652e3 100644
|
||||||
|
--- a/src/remote/remote_daemon_dispatch.c
|
||||||
|
+++ b/src/remote/remote_daemon_dispatch.c
|
||||||
|
@@ -2111,7 +2111,7 @@ remoteDispatchConnectOpen(virNetServerPtr server G_GNUC_UNUSED,
|
||||||
|
|
||||||
|
VIR_DEBUG("Primary driver type is '%s'", type);
|
||||||
|
if (STREQ(type, "QEMU") ||
|
||||||
|
- STREQ(type, "LIBXL") ||
|
||||||
|
+ STREQ(type, "Xen") ||
|
||||||
|
STREQ(type, "LXC") ||
|
||||||
|
STREQ(type, "VBOX") ||
|
||||||
|
STREQ(type, "bhyve") ||
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
40
libvirt-resctrl-Do-not-open-directory-for-writing.patch
Normal file
40
libvirt-resctrl-Do-not-open-directory-for-writing.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
From 6c4265c15abd446e050f955cccb41d22f8456969 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Martin Kletzander <mkletzan@redhat.com>
|
||||||
|
Date: Thu, 9 Jul 2020 09:27:41 +0200
|
||||||
|
Subject: [PATCH 6/6] resctrl: Do not open directory for writing
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
When preparing for the removal of GNULIB commit 18dca21a32e9 removed the
|
||||||
|
unneeded O_DIRECTORY, but unfortunately started opening the directory for
|
||||||
|
writing which fails every time for a directory. There is also no need for that
|
||||||
|
as flock() works on O_RDONLY file descriptor as well, even for LOCK_EX.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/1852741
|
||||||
|
|
||||||
|
cherry pick from: 9d832813820b948eb508508fb3cbd86c90698119
|
||||||
|
|
||||||
|
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||||
|
---
|
||||||
|
src/util/virresctrl.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/util/virresctrl.c b/src/util/virresctrl.c
|
||||||
|
index c537d60..937a053 100644
|
||||||
|
--- a/src/util/virresctrl.c
|
||||||
|
+++ b/src/util/virresctrl.c
|
||||||
|
@@ -456,7 +456,7 @@ VIR_ONCE_GLOBAL_INIT(virResctrl);
|
||||||
|
static int
|
||||||
|
virResctrlLockWrite(void)
|
||||||
|
{
|
||||||
|
- int fd = open(SYSFS_RESCTRL_PATH, O_RDWR | O_CLOEXEC);
|
||||||
|
+ int fd = open(SYSFS_RESCTRL_PATH, O_RDONLY | O_CLOEXEC);
|
||||||
|
|
||||||
|
if (fd < 0) {
|
||||||
|
virReportSystemError(errno, "%s", _("Cannot open resctrl"));
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
From ba950b814f7a2037829d54e3d1e0522c42c104a4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||||
|
Date: Tue, 26 May 2020 09:33:38 +0200
|
||||||
|
Subject: [PATCH] security: don't fail if built without attr support
|
||||||
|
|
||||||
|
If built without attr support removing any image will trigger
|
||||||
|
qemuBlockRemoveImageMetadata (the one that emits the warning)
|
||||||
|
-> qemuSecurityMoveImageMetadata
|
||||||
|
-> virSecurityManagerMoveImageMetadata
|
||||||
|
-> virSecurityDACMoveImageMetadata
|
||||||
|
-> virSecurityDACMoveImageMetadataHelper
|
||||||
|
-> virProcessRunInFork (spawns subprocess)
|
||||||
|
-> virSecurityMoveRememberedLabel
|
||||||
|
|
||||||
|
In there due to !HAVE_LIBATTR virFileGetXAttrQuiet will return
|
||||||
|
ENOSYS and from there the chain will error out.
|
||||||
|
|
||||||
|
That is wrong and looks like:
|
||||||
|
libvirtd[6320]: internal error: child reported (status=125):
|
||||||
|
libvirtd[6320]: Unable to remove disk metadata on vm testguest from
|
||||||
|
/var/lib/uvtool/libvirt/images/testguest.qcow (disk target vda)
|
||||||
|
|
||||||
|
This change makes virSecurityDACMoveImageMetadataHelper and
|
||||||
|
virSecuritySELinuxMoveImageMetadataHelper accept that
|
||||||
|
error code gracefully and in that sense it is an extension of:
|
||||||
|
5214b2f1a3f "security: Don't skip label restore on file systems lacking XATTRs"
|
||||||
|
which does the same for other call chains into the virFile*XAttr functions.
|
||||||
|
|
||||||
|
cherry-pick from commit: 55029d93150e33d70b02b6de2b899c05054c5d3a
|
||||||
|
|
||||||
|
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/security/security_dac.c | 6 ++++++
|
||||||
|
src/security/security_selinux.c | 6 ++++++
|
||||||
|
2 files changed, 12 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/security/security_dac.c b/src/security/security_dac.c
|
||||||
|
index 11fff63..51cabf1 100644
|
||||||
|
--- a/src/security/security_dac.c
|
||||||
|
+++ b/src/security/security_dac.c
|
||||||
|
@@ -1132,6 +1132,12 @@ virSecurityDACMoveImageMetadataHelper(pid_t pid G_GNUC_UNUSED,
|
||||||
|
|
||||||
|
ret = virSecurityMoveRememberedLabel(SECURITY_DAC_NAME, data->src, data->dst);
|
||||||
|
virSecurityManagerMetadataUnlock(data->mgr, &state);
|
||||||
|
+
|
||||||
|
+ if (ret == -2) {
|
||||||
|
+ /* Libvirt built without XATTRS */
|
||||||
|
+ ret = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
|
||||||
|
index 72d1658..78ea618 100644
|
||||||
|
--- a/src/security/security_selinux.c
|
||||||
|
+++ b/src/security/security_selinux.c
|
||||||
|
@@ -1990,6 +1990,12 @@ virSecuritySELinuxMoveImageMetadataHelper(pid_t pid G_GNUC_UNUSED,
|
||||||
|
|
||||||
|
ret = virSecurityMoveRememberedLabel(SECURITY_SELINUX_NAME, data->src, data->dst);
|
||||||
|
virSecurityManagerMetadataUnlock(data->mgr, &state);
|
||||||
|
+
|
||||||
|
+ if (ret == -2) {
|
||||||
|
+ /* Libvirt built without XATTRS */
|
||||||
|
+ ret = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,106 @@
|
|||||||
|
From 1ed313f35a4ac27ed29395ed30ec6e7966b798fd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Laine Stump <laine@redhat.com>
|
||||||
|
Date: Fri, 1 May 2020 00:05:50 -0400
|
||||||
|
Subject: [PATCH] systemd: start libvirtd after firewalld/iptables services
|
||||||
|
|
||||||
|
When a system has enabled the iptables/ip6tables services rather than
|
||||||
|
firewalld, there is no explicit ordering of the start of those
|
||||||
|
services vs. libvirtd. This creates a problem when libvirtd.service is
|
||||||
|
started before ip[6]tables, as the latter, when it finally is started,
|
||||||
|
will remove all of the iptables rules that had previously been added
|
||||||
|
by libvirt, including the custom chains where libvirt's rules are
|
||||||
|
kept. This results in an error message similar to the following when a
|
||||||
|
user subsequently tries to start a new libvirt network:
|
||||||
|
|
||||||
|
"Error while activating network: Call to virNetworkCreate failed:
|
||||||
|
internal error: Failed to apply firewall rules
|
||||||
|
/usr/sbin/ip6tables -w --table filter --insert LIBVIRT_FWO \
|
||||||
|
--in-interface virbr2 --jump REJECT:
|
||||||
|
ip6tables: No chain/target/match by that name."
|
||||||
|
|
||||||
|
(Prior to logging this error, it also would have caused failure to
|
||||||
|
forward (or block) traffic in some cases, e.g. for guests on a NATed
|
||||||
|
network, since libvirt's rules to forward/block had all been deleted
|
||||||
|
and libvirt didn't know about it, so it couldn't fix the problem)
|
||||||
|
|
||||||
|
When this happens, the problem can be remedied by simply restarting
|
||||||
|
libvirtd.service (which has the side-effect of reloading all
|
||||||
|
libvirt-generated firewall rules)
|
||||||
|
|
||||||
|
Instead, we can just explicitly stating in the libvirtd.service file
|
||||||
|
that libvirtd.service should start after ip6tables.service and
|
||||||
|
ip6tables.service, eliminating the race condition that leads to the
|
||||||
|
error.
|
||||||
|
|
||||||
|
There is also nothing (that I can see) in the systemd .service files
|
||||||
|
to guarantee that firewalld.service will be started (if enabled) prior
|
||||||
|
to libvirtd.service. The same error scenario given above would occur
|
||||||
|
if libvirtd.service started before firewalld.service. Even before
|
||||||
|
that, though libvirtd would have detected that firewalld.service was
|
||||||
|
disabled, and then turn off all firewalld support. So, for example,
|
||||||
|
firewalld's libvirt zone wouldn't be used, and most likely traffic
|
||||||
|
from guests would therefore be blocked (all with no external
|
||||||
|
indication of the source of the problem other than a debug-level log
|
||||||
|
when libvirtd was started saying that firewalld wasn't in use); also
|
||||||
|
libvirtd wouldn't notice when firewalld reloaded its rules (which also
|
||||||
|
simultaneously deletes all of libvirt's rules).
|
||||||
|
|
||||||
|
I'm not aware of any reports that have been traced back to
|
||||||
|
libvirtd.service starting before firewalld.service, but have seen that
|
||||||
|
error reported multiple times, and also don't see an existing
|
||||||
|
dependency that would guarantee firewalld.service starts before
|
||||||
|
libvirtd.service, so it's possible it's been happening and we just
|
||||||
|
haven't gotten to the bottom of it.
|
||||||
|
|
||||||
|
This patch adds an After= line to the libvirtd.service file for each
|
||||||
|
of iptables.service, ip6tables.service, and firewalld.servicee, which
|
||||||
|
should guarantee that libvirtd.service isn't started until systemd has
|
||||||
|
started whichever of the others is enabled.
|
||||||
|
|
||||||
|
This race was diagnosed, and patch proposed, by Jason Montleon in
|
||||||
|
https://bugzilla.redhat.com/1723698 . At the time (April 2019) danpb
|
||||||
|
agreed with him that this change to libvirtd.service was a reasonable
|
||||||
|
thing to do, but I guess everyone thought someone else was going to
|
||||||
|
post a patch, so in the end nobody did.
|
||||||
|
|
||||||
|
cherry-pick from commit: 0756415f147dda15a417bd79eef9a62027d176e6
|
||||||
|
|
||||||
|
Signed-off-by: Laine Stump <laine@redhat.com>
|
||||||
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/network/virtnetworkd.service.in | 3 +++
|
||||||
|
src/remote/libvirtd.service.in | 3 +++
|
||||||
|
2 files changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/network/virtnetworkd.service.in b/src/network/virtnetworkd.service.in
|
||||||
|
index 656e8b4..56182e1 100644
|
||||||
|
--- a/src/network/virtnetworkd.service.in
|
||||||
|
+++ b/src/network/virtnetworkd.service.in
|
||||||
|
@@ -5,6 +5,9 @@ Requires=virtnetworkd.socket
|
||||||
|
Requires=virtnetworkd-ro.socket
|
||||||
|
Requires=virtnetworkd-admin.socket
|
||||||
|
After=network.target
|
||||||
|
+After=firewalld.service
|
||||||
|
+After=iptables.service
|
||||||
|
+After=ip6tables.service
|
||||||
|
After=dbus.service
|
||||||
|
After=apparmor.service
|
||||||
|
After=local-fs.target
|
||||||
|
diff --git a/src/remote/libvirtd.service.in b/src/remote/libvirtd.service.in
|
||||||
|
index 90b2cad..cc0d4e3 100644
|
||||||
|
--- a/src/remote/libvirtd.service.in
|
||||||
|
+++ b/src/remote/libvirtd.service.in
|
||||||
|
@@ -11,6 +11,9 @@ Wants=libvirtd-admin.socket
|
||||||
|
Wants=systemd-machined.service
|
||||||
|
Before=libvirt-guests.service
|
||||||
|
After=network.target
|
||||||
|
+After=firewalld.service
|
||||||
|
+After=iptables.service
|
||||||
|
+After=ip6tables.service
|
||||||
|
After=dbus.service
|
||||||
|
After=iscsid.service
|
||||||
|
After=apparmor.service
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
From df5d95b8db5ec8a79dee223338a72a9f8897a538 Mon Sep 17 00:00:00 2001
|
||||||
|
From: AlexChen <alex.chen@huawei.com>
|
||||||
|
Date: Wed, 16 Sep 2020 15:53:57 +0800
|
||||||
|
Subject: [PATCH] tests/commandtest: skip the test4 if the testcase is run in
|
||||||
|
the container env
|
||||||
|
|
||||||
|
In a container environment without an init thread, the daemoned
|
||||||
|
process is not reclaimed, and Test4 loops forever, causing
|
||||||
|
the compilation to hung. So, skip it.
|
||||||
|
|
||||||
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
||||||
|
---
|
||||||
|
tests/commandtest.c | 23 ++++++++++++++++++-----
|
||||||
|
1 file changed, 18 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/commandtest.c b/tests/commandtest.c
|
||||||
|
index d5092b7dd0..2cc27c64a1 100644
|
||||||
|
--- a/tests/commandtest.c
|
||||||
|
+++ b/tests/commandtest.c
|
||||||
|
@@ -259,6 +259,7 @@ static int test4(const void *unused G_GNUC_UNUSED)
|
||||||
|
char *pidfile = virPidFileBuildPath(abs_builddir, "commandhelper");
|
||||||
|
pid_t pid;
|
||||||
|
int ret = -1;
|
||||||
|
+ int count = 0;
|
||||||
|
|
||||||
|
if (!pidfile)
|
||||||
|
goto cleanup;
|
||||||
|
@@ -275,9 +276,14 @@ static int test4(const void *unused G_GNUC_UNUSED)
|
||||||
|
printf("cannot read pidfile\n");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
- while (kill(pid, 0) != -1)
|
||||||
|
- g_usleep(100*1000);
|
||||||
|
-
|
||||||
|
+ while (kill(pid, 0) != -1) {
|
||||||
|
+ if (count++ >= 600) {
|
||||||
|
+ printf("check time exceeds 60s, it may be in container env, "
|
||||||
|
+ "skip this testcase!!!\n");
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ g_usleep(100*1000); /* 100ms */
|
||||||
|
+ }
|
||||||
|
ret = checkoutput("test4", NULL);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
@@ -734,6 +740,7 @@ static int test18(const void *unused G_GNUC_UNUSED)
|
||||||
|
char *pidfile = virPidFileBuildPath(abs_builddir, "commandhelper");
|
||||||
|
pid_t pid;
|
||||||
|
int ret = -1;
|
||||||
|
+ int count = 0;
|
||||||
|
|
||||||
|
if (!pidfile)
|
||||||
|
goto cleanup;
|
||||||
|
@@ -760,8 +767,14 @@ static int test18(const void *unused G_GNUC_UNUSED)
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
- while (kill(pid, SIGINT) != -1)
|
||||||
|
- g_usleep(100*1000);
|
||||||
|
+ while (kill(pid, SIGINT) != -1) {
|
||||||
|
+ if (count++ >= 600) {
|
||||||
|
+ printf("check time exceeds 60s, it may be in container env, "
|
||||||
|
+ "skip this testcase!!!\n");
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ g_usleep(100*1000); /* 100ms */
|
||||||
|
+ }
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
From 9056229f9dff923406d97f0ac295bd502eaa5265 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
|
||||||
|
Date: Mon, 13 Apr 2020 16:48:43 +0300
|
||||||
|
Subject: [PATCH 2/8] util: fix iteration in virSocketAddrResolveService
|
||||||
|
|
||||||
|
getaddrinfo returns linked list. Fix iteration accordingly.
|
||||||
|
|
||||||
|
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
|
||||||
|
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
|
||||||
|
(cherry-picked from commit a13ac587)
|
||||||
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
||||||
|
---
|
||||||
|
src/util/virsocketaddr.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/util/virsocketaddr.c b/src/util/virsocketaddr.c
|
||||||
|
index 4cad329d15..4c9f124e88 100644
|
||||||
|
--- a/src/util/virsocketaddr.c
|
||||||
|
+++ b/src/util/virsocketaddr.c
|
||||||
|
@@ -271,7 +271,7 @@ int virSocketAddrResolveService(const char *service)
|
||||||
|
port = ntohs(in.sin6_port);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
- tmp++;
|
||||||
|
+ tmp = tmp->ai_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
virReportError(VIR_ERR_SYSTEM_ERROR,
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
From c279162d6d335d4302a74c1e19dbce8eaff75679 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Fri, 24 Apr 2020 13:17:51 +0200
|
||||||
|
Subject: [PATCH] virDevMapperGetTargetsImpl: quit early if device is not a
|
||||||
|
devmapper target
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
As suggested in the linked bug, libvirt should firstly check
|
||||||
|
whether the major number of the device is device mapper major.
|
||||||
|
Because if it isn't subsequent DM_DEVICE_DEPS task may not only
|
||||||
|
fail, but also yield different results. In the bugzilla this is
|
||||||
|
demonstrated by creating a devmapper target named 'loop0' and
|
||||||
|
then creating loop target /dev/loop0. When the latter is then
|
||||||
|
passed to a domain, our virDevMapperGetTargetsImpl() function
|
||||||
|
blindly asks devmapper to provide target dependencies for
|
||||||
|
/dev/loop0 and because of the way devmapper APIs work, it will
|
||||||
|
'sanitize' the input by using the last component only which is
|
||||||
|
'loop0' and thus return different results than expected.
|
||||||
|
|
||||||
|
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1823976
|
||||||
|
|
||||||
|
cherry-pick from commit: 01626c668ecfbe465d18799ac4628e6127ea1d47
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/util/virdevmapper.c | 10 ++++++++++
|
||||||
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
|
||||||
|
index feb5982..79dbc3d 100644
|
||||||
|
--- a/src/util/virdevmapper.c
|
||||||
|
+++ b/src/util/virdevmapper.c
|
||||||
|
@@ -64,6 +64,7 @@ virDevMapperGetTargetsImpl(const char *path,
|
||||||
|
char ***devPaths_ret,
|
||||||
|
unsigned int ttl)
|
||||||
|
{
|
||||||
|
+ struct stat sb;
|
||||||
|
struct dm_task *dmt = NULL;
|
||||||
|
struct dm_deps *deps;
|
||||||
|
struct dm_info info;
|
||||||
|
@@ -82,6 +83,15 @@ virDevMapperGetTargetsImpl(const char *path,
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (stat(path, &sb) < 0) {
|
||||||
|
+ if (errno == ENOENT)
|
||||||
|
+ return 0;
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!dm_is_dm_major(major(sb.st_dev)))
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
if (!(dmt = dm_task_create(DM_DEVICE_DEPS))) {
|
||||||
|
if (errno == ENOENT || errno == ENODEV) {
|
||||||
|
/* It's okay. Kernel is probably built without
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
91
libvirt-virNetDevGetFamilyId-Change-signature.patch
Normal file
91
libvirt-virNetDevGetFamilyId-Change-signature.patch
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
From 56635fe00f44f8c83ba059432d42c093be4e9ed8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Sun, 19 Apr 2020 08:26:04 +0200
|
||||||
|
Subject: [PATCH 6/8] virNetDevGetFamilyId: Change signature
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Introduced in v3.8.0-rc1~96, the virNetDevGetFamilyId() gets
|
||||||
|
netlink family ID for passed family name (even though it's used
|
||||||
|
only for getting "devlink" ID). Nevertheless, the function
|
||||||
|
returns 0 on an error or if no family ID was found. This makes it
|
||||||
|
harder for a caller to distinguish these two. Change the retval
|
||||||
|
so that a negative value is returned upon error, zero is no ID
|
||||||
|
found (but no error encountered) and a positive value is returned
|
||||||
|
on successful translation.
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
(cherry-picked from commit ca616274)
|
||||||
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
||||||
|
---
|
||||||
|
src/util/virnetdev.c | 23 +++++++++++++++--------
|
||||||
|
1 file changed, 15 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
|
||||||
|
index b465bdac2e..3431aaf6a9 100644
|
||||||
|
--- a/src/util/virnetdev.c
|
||||||
|
+++ b/src/util/virnetdev.c
|
||||||
|
@@ -3057,11 +3057,15 @@ virNetDevGetEthtoolFeatures(virBitmapPtr bitmap,
|
||||||
|
* This function supplies the devlink family id
|
||||||
|
*
|
||||||
|
* @family_name: the name of the family to query
|
||||||
|
+ * @family_id: family ID
|
||||||
|
*
|
||||||
|
- * Returns family id or 0 on failure.
|
||||||
|
+ * Returns: 0 if no family was found,
|
||||||
|
+ * 1 if family was found (@family_id is set),
|
||||||
|
+ * -1 otherwise
|
||||||
|
*/
|
||||||
|
-static uint32_t
|
||||||
|
-virNetDevGetFamilyId(const char *family_name)
|
||||||
|
+static int
|
||||||
|
+virNetDevGetFamilyId(const char *family_name,
|
||||||
|
+ uint32_t *family_id)
|
||||||
|
{
|
||||||
|
struct nl_msg *nl_msg = NULL;
|
||||||
|
struct nlmsghdr *resp = NULL;
|
||||||
|
@@ -3072,7 +3076,7 @@ virNetDevGetFamilyId(const char *family_name)
|
||||||
|
};
|
||||||
|
struct nlattr *tb[CTRL_ATTR_MAX + 1] = {NULL, };
|
||||||
|
unsigned int recvbuflen;
|
||||||
|
- uint32_t family_id = 0;
|
||||||
|
+ int ret = -1;
|
||||||
|
|
||||||
|
if (!(nl_msg = nlmsg_alloc_simple(GENL_ID_CTRL,
|
||||||
|
NLM_F_REQUEST | NLM_F_ACK))) {
|
||||||
|
@@ -3098,15 +3102,18 @@ virNetDevGetFamilyId(const char *family_name)
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (tb[CTRL_ATTR_FAMILY_ID] == NULL)
|
||||||
|
+ if (tb[CTRL_ATTR_FAMILY_ID] == NULL) {
|
||||||
|
+ ret = 0;
|
||||||
|
goto cleanup;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- family_id = *(uint32_t *)RTA_DATA(tb[CTRL_ATTR_FAMILY_ID]);
|
||||||
|
+ *family_id = *(uint32_t *)RTA_DATA(tb[CTRL_ATTR_FAMILY_ID]);
|
||||||
|
+ ret = 1;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
nlmsg_free(nl_msg);
|
||||||
|
VIR_FREE(resp);
|
||||||
|
- return family_id;
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -3140,7 +3147,7 @@ virNetDevSwitchdevFeature(const char *ifname,
|
||||||
|
int ret = -1;
|
||||||
|
uint32_t family_id;
|
||||||
|
|
||||||
|
- if ((family_id = virNetDevGetFamilyId(DEVLINK_GENL_NAME)) <= 0)
|
||||||
|
+ if (virNetDevGetFamilyId(DEVLINK_GENL_NAME, &family_id) <= 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if ((is_vf = virNetDevIsVirtualFunction(ifname)) < 0)
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
From 7581a0bbd552d63d654a88f0ad2a68e99fa8b54a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Date: Sun, 19 Apr 2020 07:25:34 +0200
|
||||||
|
Subject: [PATCH 7/8] virNetDevSwitchdevFeature: Make failure to get
|
||||||
|
'family_id' non-fatal
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
I've just got a new machine and I'm still converging on the
|
||||||
|
kernel config. Anyway, since I don't have enabled any of SRIO-V
|
||||||
|
drivers, my kernel doesn't have NET_DEVLINK enabled (i.e.
|
||||||
|
virNetDevGetFamilyId() returns 0). But this makes nodedev driver
|
||||||
|
ignore all interfaces, because when enumerating all devices via
|
||||||
|
udev, the control reaches virNetDevSwitchdevFeature() eventually
|
||||||
|
and subsequently virNetDevGetFamilyId() which 'fails'. Well, it's
|
||||||
|
not really a failure - the virNetDevSwitchdevFeature() stub
|
||||||
|
simply returns 0.
|
||||||
|
|
||||||
|
Also, move the call a few lines below, just around the place
|
||||||
|
where it's needed.
|
||||||
|
|
||||||
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||||||
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||||||
|
(cherry-picked from commit 423664a6)
|
||||||
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
||||||
|
---
|
||||||
|
src/util/virnetdev.c | 7 ++++---
|
||||||
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
|
||||||
|
index 3431aaf6a9..ff86aa1fc9 100644
|
||||||
|
--- a/src/util/virnetdev.c
|
||||||
|
+++ b/src/util/virnetdev.c
|
||||||
|
@@ -3146,9 +3146,7 @@ virNetDevSwitchdevFeature(const char *ifname,
|
||||||
|
int is_vf = -1;
|
||||||
|
int ret = -1;
|
||||||
|
uint32_t family_id;
|
||||||
|
-
|
||||||
|
- if (virNetDevGetFamilyId(DEVLINK_GENL_NAME, &family_id) <= 0)
|
||||||
|
- return ret;
|
||||||
|
+ int rv;
|
||||||
|
|
||||||
|
if ((is_vf = virNetDevIsVirtualFunction(ifname)) < 0)
|
||||||
|
return ret;
|
||||||
|
@@ -3168,6 +3166,9 @@ virNetDevSwitchdevFeature(const char *ifname,
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if ((rv = virNetDevGetFamilyId(DEVLINK_GENL_NAME, &family_id)) <= 0)
|
||||||
|
+ return rv;
|
||||||
|
+
|
||||||
|
if (!(nl_msg = nlmsg_alloc_simple(family_id,
|
||||||
|
NLM_F_REQUEST | NLM_F_ACK))) {
|
||||||
|
virReportOOMError();
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
From a34f1d6623f3fb1ec03982ef776e31a4b450158d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Date: Tue, 16 Jun 2020 12:36:55 +0200
|
||||||
|
Subject: [PATCH] virQEMUDriverConfigNew: Add slash to
|
||||||
|
cfg->defaultTLSx509certdir for non-embedded driver
|
||||||
|
|
||||||
|
Commit 068efae5b1a9ef accidentally removed the slash.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1847234
|
||||||
|
|
||||||
|
cherry-pick from commit: 8f58a4003532d5fffdadf2adc659c94eba3fa21a
|
||||||
|
|
||||||
|
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
|
||||||
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_conf.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||||
|
index 15837ce..809e8fe 100644
|
||||||
|
--- a/src/qemu/qemu_conf.c
|
||||||
|
+++ b/src/qemu/qemu_conf.c
|
||||||
|
@@ -234,7 +234,7 @@ virQEMUDriverConfigPtr virQEMUDriverConfigNew(bool privileged,
|
||||||
|
* directory doesn't exist (although we don't check if this exists).
|
||||||
|
*/
|
||||||
|
if (root == NULL) {
|
||||||
|
- cfg->defaultTLSx509certdir = g_strdup(SYSCONFDIR "pki/qemu");
|
||||||
|
+ cfg->defaultTLSx509certdir = g_strdup(SYSCONFDIR "/pki/qemu");
|
||||||
|
} else {
|
||||||
|
cfg->defaultTLSx509certdir = g_strdup_printf("%s/etc/pki/qemu", root);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
44
libvirt.spec
44
libvirt.spec
@ -99,7 +99,7 @@
|
|||||||
Summary: Library providing a simple virtualization API
|
Summary: Library providing a simple virtualization API
|
||||||
Name: libvirt
|
Name: libvirt
|
||||||
Version: 6.2.0
|
Version: 6.2.0
|
||||||
Release: 8
|
Release: 13
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
URL: https://libvirt.org/
|
URL: https://libvirt.org/
|
||||||
|
|
||||||
@ -132,6 +132,38 @@ Patch0021: libvirt-Substitute-security_context_t-with-char.patch
|
|||||||
Patch0022: libvirt-conf-Don-t-format-http-cookies-unless-VIR_DOMAIN_DEF.patch
|
Patch0022: libvirt-conf-Don-t-format-http-cookies-unless-VIR_DOMAIN_DEF.patch
|
||||||
Patch0023: libvirt-virstoragetest-testBackingParse-Use-VIR_DOMAIN_DEF_F.patch
|
Patch0023: libvirt-virstoragetest-testBackingParse-Use-VIR_DOMAIN_DEF_F.patch
|
||||||
Patch0024: libvirt-support-aarch64-vtpm-with-parameter-tpm-tis-.patch
|
Patch0024: libvirt-support-aarch64-vtpm-with-parameter-tpm-tis-.patch
|
||||||
|
Patch0025: libvirt-tests-commandtest-skip-the-test4-if-the-testcase-is-.patch
|
||||||
|
Patch0026: libvirt-remote-fix-driver-name-check-for-libxl-driver.patch
|
||||||
|
Patch0027: libvirt-systemd-start-libvirtd-after-firewalld-iptables-serv.patch
|
||||||
|
Patch0028: libvirt-qemuDomainCleanupRun-Actually-run-cleanup-callbacks-.patch
|
||||||
|
Patch0029: libvirt-virDevMapperGetTargetsImpl-quit-early-if-device-is-n.patch
|
||||||
|
Patch0030: libvirt-qemu-only-stop-external-devices-after-the-domain.patch
|
||||||
|
Patch0031: libvirt-qemuDomainStorageSourcePrivateDispose-Free-httpcooki.patch
|
||||||
|
Patch0032: libvirt-Don-t-require-secdrivers-to-implement-.domainMoveIma.patch
|
||||||
|
Patch0033: libvirt-qemuProcessStop-Use-XATTRs-to-restore-seclabels-on-d.patch
|
||||||
|
Patch0034: libvirt-qemuProcessStop-Reattach-NVMe-disks-a-domain-is-mirr.patch
|
||||||
|
Patch0035: libvirt-security-don-t-fail-if-built-without-attr-support.patch
|
||||||
|
Patch0036: libvirt-qemu-Skip-pre-creation-of-NVMe-disks.patch
|
||||||
|
Patch0037: libvirt-Fix-some-wrong-usage-of-ATTRIBUTE_NONNULL.patch
|
||||||
|
Patch0038: libvirt-conf-Increase-cpuset-length-limit-for-CPU-pinning.patch
|
||||||
|
Patch0039: libvirt-virQEMUDriverConfigNew-Add-slash-to-cfg-defaultTLSx5.patch
|
||||||
|
Patch0040: libvirt-qemuDomainSetNumaParamsLive-set-nodeset-for-root-cgr.patch
|
||||||
|
Patch0041: libvirt-qemu-do-not-add-model-when-actual-iface-type-is-host.patch
|
||||||
|
Patch0042: libvirt-qemu-pre-create-the-dbus-directory-in-qemuStateIniti.patch
|
||||||
|
Patch0043: libvirt-conf-vmx-check-for-OOM-after-calling-xmlBufferCreate.patch
|
||||||
|
Patch0044: libvirt-leaseshelper-Wait-to-acquire-PID-file.patch
|
||||||
|
Patch0045: libvirt-leaseshelper-Report-more-errors.patch
|
||||||
|
Patch0046: libvirt-qemuBuildMemoryBackendProps-Use-boolean-type-for-pme.patch
|
||||||
|
Patch0047: libvirt-qemu-format-ramfb-attribute-for-mediated-devices.patch
|
||||||
|
Patch0048: libvirt-resctrl-Do-not-open-directory-for-writing.patch
|
||||||
|
Patch0049: libvirt-libxl-fix-crash-when-initializing-driver.patch
|
||||||
|
Patch0050: libvirt-util-fix-iteration-in-virSocketAddrResolveService.patch
|
||||||
|
Patch0051: libvirt-qemu-fix-hang-in-p2p-xbzrle-compression-parallel-mig.patch
|
||||||
|
Patch0052: libvirt-qemu-Revoke-access-to-mirror-on-failed-blockcopy.patch
|
||||||
|
Patch0053: libvirt-qemuDomainDefPostParse-Fail-if-unable-to-fill-machin.patch
|
||||||
|
Patch0054: libvirt-virNetDevGetFamilyId-Change-signature.patch
|
||||||
|
Patch0055: libvirt-virNetDevSwitchdevFeature-Make-failure-to-get-family.patch
|
||||||
|
Patch0056: libvirt-qemuDomainGetUnplugTimeout-Add-G_GNUC_NO_INLINE.patch
|
||||||
|
|
||||||
Requires: libvirt-daemon = %{version}-%{release}
|
Requires: libvirt-daemon = %{version}-%{release}
|
||||||
Requires: libvirt-daemon-config-network = %{version}-%{release}
|
Requires: libvirt-daemon-config-network = %{version}-%{release}
|
||||||
@ -1864,6 +1896,16 @@ exit 0
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Sep 22 2020 AlexChen <alex.chen@huawei.com> - 6.2.0-13
|
||||||
|
- bugfix: cherry-pick some bugfix patches from opensource community
|
||||||
|
* Tue Sep 22 2020 Hao Wang <wanghao232@huawei.com> - 6.2.0-12
|
||||||
|
- backport upstream patches
|
||||||
|
* Tue Sep 22 2020 Zeyu Jin <jinzeyu@huawei.com> - 6.2.0-11
|
||||||
|
- bugfix: backport an upstream patch to fix '/run/libvirt/qemu/dbus' racing bug.
|
||||||
|
* Tue Sep 22 2020 Jin Yan <jinyan12@huawei.com> - 6.2.0-10
|
||||||
|
- bugfix: cherry-pick some bugfix patches from opensource community
|
||||||
|
* Wed Aug 5 2020 AlexChen <alex.chen@huawei.com> - 6.2.0-9
|
||||||
|
- tests: skip the test4 if the testcase is run in the container env
|
||||||
* Wed Aug 5 2020 Jiang Fangjie <jiangfangjie@huawei.com> - 6.2.0-8
|
* Wed Aug 5 2020 Jiang Fangjie <jiangfangjie@huawei.com> - 6.2.0-8
|
||||||
- Libvirt supports aarch64 vtpm with parameter tpm-tis-device
|
- Libvirt supports aarch64 vtpm with parameter tpm-tis-device
|
||||||
* Tue Aug 4 2020 Xu Yandong <xuyandong2@huawei.com> - 6.2.0-7
|
* Tue Aug 4 2020 Xu Yandong <xuyandong2@huawei.com> - 6.2.0-7
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user