[PATCH] Conf: Move validation of Graphics Transport and StorageNetwork Socket out of parser
by skran
I have implemented your corrections successfully. Thank you.
Signed-off-by: K Shiva <shiva_kr(a)riseup.net>
---
src/conf/domain_conf.c | 42 +++-------------------------
src/conf/domain_validate.c | 56 ++++++++++++++++++++++++++++++++++++++
src/conf/domain_validate.h | 7 +++++
3 files changed, 67 insertions(+), 38 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 70e4d52ee6..1e0ac737bb 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -5836,20 +5836,9 @@ virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
host->socket = virXMLPropString(hostnode, "socket");
- if (host->transport == VIR_STORAGE_NET_HOST_TRANS_UNIX &&
- host->socket == NULL) {
- virReportError(VIR_ERR_XML_ERROR, "%s",
- _("missing socket for unix transport"));
+ // Socket Validation
+ if (virDomainStorageNetHostSocketValidate(host, transport) < 0)
goto cleanup;
- }
-
- if (host->transport != VIR_STORAGE_NET_HOST_TRANS_UNIX &&
- host->socket != NULL) {
- virReportError(VIR_ERR_XML_ERROR,
- _("transport '%1$s' does not support socket attribute"),
- transport);
- goto cleanup;
- }
if (host->transport != VIR_STORAGE_NET_HOST_TRANS_UNIX) {
if (!(host->name = virXMLPropString(hostnode, "name"))) {
@@ -11004,7 +10993,6 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDef *def,
unsigned int flags)
{
int ret = -1;
- const char *graphicsType = virDomainGraphicsTypeToString(graphics->type);
g_autofree char *address = virXMLPropString(node, "address");
g_autofree char *network = virXMLPropString(node, "network");
g_autofree char *socketPath = virXMLPropString(node, "socket");
@@ -11021,30 +11009,8 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDef *def,
VIR_XML_PROP_REQUIRED, &def->type) < 0)
goto error;
- switch (def->type) {
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
- if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
- graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("listen type 'socket' is not available for graphics type '%1$s'"),
- graphicsType);
- goto error;
- }
- break;
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
- if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
- graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("listen type 'none' is not available for graphics type '%1$s'"),
- graphicsType);
- goto error;
- }
- break;
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
- break;
- }
+ if (virDomainGraphicsListenDefValidate(def, graphics) == -1)
+ goto error;
if (def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS) {
if (address && addressCompat && STRNEQ(address, addressCompat)) {
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
index 9265fef4f9..10f8242c84 100644
--- a/src/conf/domain_validate.c
+++ b/src/conf/domain_validate.c
@@ -2669,6 +2669,39 @@ virDomainGraphicsDefValidate(const virDomainDef *def,
return 0;
}
+int
+virDomainGraphicsListenDefValidate(const virDomainGraphicsListenDef *def,
+ const virDomainGraphicsDef *graphics)
+{
+ const char *graphicsType = virDomainGraphicsTypeToString(graphics->type);
+
+ switch (def->type) {
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
+ if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
+ graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("listen type 'socket' is not available for graphics type '%1$s'"),
+ graphicsType);
+ return -1;
+ }
+ break;
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
+ if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
+ graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("listen type 'none' is not available for graphics type '%1$s'"),
+ graphicsType);
+ return -1;
+ }
+ break;
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
+ break;
+ }
+ return 0;
+}
+
static int
virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu)
{
@@ -2898,3 +2931,26 @@ virDomainDeviceDefValidate(const virDomainDeviceDef *dev,
return 0;
}
+
+int
+virDomainStorageNetHostSocketValidate(const virStorageNetHostDef *host,
+ const char* transport)
+{
+ if (host->transport == VIR_STORAGE_NET_HOST_TRANS_UNIX &&
+ host->socket == NULL) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("missing socket for unix transport"));
+ return -1;
+ }
+
+ if (host->transport != VIR_STORAGE_NET_HOST_TRANS_UNIX &&
+ host->socket != NULL) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("transport '%1$s' does not support socket attribute"),
+ transport);
+ return -1;
+ }
+
+
+ return 0;
+}
diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h
index fc441cef5b..baeae4b2a3 100644
--- a/src/conf/domain_validate.h
+++ b/src/conf/domain_validate.h
@@ -47,3 +47,10 @@ int virDomainDiskDefSourceLUNValidate(const virStorageSource *src);
int virDomainDefOSValidate(const virDomainDef *def,
virDomainXMLOption *xmlopt);
+
+int
+virDomainGraphicsListenDefValidate(const virDomainGraphicsListenDef *def,
+ const virDomainGraphicsDef *graphics);
+
+int virDomainStorageNetHostSocketValidate(const virStorageNetHostDef *host,
+ const char *transport);
--
2.40.0
1 year, 8 months
[PATCH] coding style: Follow our own rule on comment style
by Michal Privoznik
In our coding style document we have examples of good and bad
code, which we mark as:
// Good
// Bad
respectively. But in the very same document we advocate for using
C style of comments over C++. Follow our own advice and switch
annotation to:
/* Good */
/* Bad */
And while at it, align these annotations within their blocks for
better readability.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
docs/coding-style.rst | 76 +++++++++++++++++++++----------------------
1 file changed, 38 insertions(+), 38 deletions(-)
diff --git a/docs/coding-style.rst b/docs/coding-style.rst
index 92f6099d82..fe5fe9a906 100644
--- a/docs/coding-style.rst
+++ b/docs/coding-style.rst
@@ -161,24 +161,24 @@ a single space following them before the opening bracket. E.g.
::
- if(foo) // Bad
- if (foo) // Good
+ if(foo) /* Bad */
+ if (foo) /* Good */
Function implementations must **not** have any whitespace between
the function name and the opening bracket. E.g.
::
- int foo (int wizz) // Bad
- int foo(int wizz) // Good
+ int foo (int wizz) /* Bad */
+ int foo(int wizz) /* Good */
Function calls must **not** have any whitespace between the
function name and the opening bracket. E.g.
::
- bar = foo (wizz); // Bad
- bar = foo(wizz); // Good
+ bar = foo (wizz); /* Bad */
+ bar = foo(wizz); /* Good */
Function typedefs must **not** have any whitespace between the
closing bracket of the function name and opening bracket of the
@@ -186,16 +186,16 @@ arg list. E.g.
::
- typedef int (*foo) (int wizz); // Bad
- typedef int (*foo)(int wizz); // Good
+ typedef int (*foo) (int wizz); /* Bad */
+ typedef int (*foo)(int wizz); /* Good */
There must not be any whitespace immediately following any opening
bracket, or immediately prior to any closing bracket. E.g.
::
- int foo( int wizz ); // Bad
- int foo(int wizz); // Good
+ int foo( int wizz ); /* Bad */
+ int foo(int wizz); /* Good */
Commas
------
@@ -206,8 +206,8 @@ syntax-check'.
::
- call(a,b ,c);// Bad
- call(a, b, c); // Good
+ call(a,b ,c); /* Bad */
+ call(a, b, c); /* Good */
When declaring an enum or using a struct initializer that occupies
more than one line, use a trailing comma. That way, future edits
@@ -225,11 +225,11 @@ C99 allows trailing commas, remember that JSON and XDR do not.
enum {
VALUE_ONE,
- VALUE_TWO // Bad
+ VALUE_TWO /* Bad */
};
enum {
VALUE_THREE,
- VALUE_FOUR, // Good
+ VALUE_FOUR, /* Good */
};
Semicolons
@@ -243,10 +243,10 @@ not enforced, loop counters generally use post-increment.
::
- for (i = 0 ;i < limit ; ++i) { // Bad
- for (i = 0; i < limit; i++) { // Good
- for (;;) { // ok
- while (1) { // Better
+ for (i = 0 ;i < limit ; ++i) { /* Bad */
+ for (i = 0; i < limit; i++) { /* Good */
+ for (;;) { /* ok */
+ while (1) { /* Better */
Empty loop bodies are better represented with curly braces and a
comment, although use of a semicolon is not currently rejected.
@@ -254,9 +254,9 @@ comment, although use of a semicolon is not currently rejected.
::
while ((rc = waitpid(pid, &st, 0) == -1) &&
- errno == EINTR); // ok
+ errno == EINTR); /* ok */
while ((rc = waitpid(pid, &st, 0) == -1) &&
- errno == EINTR) { // Better
+ errno == EINTR) { /* Better */
/* nothing */
}
@@ -271,19 +271,19 @@ single-\ *statement* loop: each has only one *line* in its body.
::
- while (expr) // single line body; {} is optional
+ while (expr) /* single line body; {} is optional */
single_line_stmt();
::
while (expr(arg1,
- arg2)) // indentation makes it obvious it is single line,
- single_line_stmt(); // {} is optional (not enforced either way)
+ arg2)) /* indentation makes it obvious it is single line, */
+ single_line_stmt(); /* {} is optional (not enforced either way) */
::
while (expr1 &&
- expr2) { // multi-line, at same indentation, {} required
+ expr2) { /* multi-line, at same indentation, {} required */
single_line_stmt();
}
@@ -295,7 +295,7 @@ braces), thinking it is already a multi-statement loop:
::
- while (true) // BAD! multi-line body with no braces
+ while (true) /* BAD! multi-line body with no braces */
/* comment... */
single_line_stmt();
@@ -303,7 +303,7 @@ Do this instead:
::
- while (true) { // Always put braces around a multi-line body.
+ while (true) { /* Always put braces around a multi-line body. */
/* comment... */
single_line_stmt();
}
@@ -325,8 +325,8 @@ To reiterate, don't do this:
::
- if (expr) // BAD: no braces around...
- while (expr_2) { // ... a multi-line body
+ if (expr) /* BAD: no braces around... */
+ while (expr_2) { /* ... a multi-line body */
...
}
@@ -356,11 +356,11 @@ longer, multi-line block be the ``else`` block.
...
}
else
- x = y; // BAD: braceless "else" with braced "then",
- // and short block last
+ x = y; /* BAD: braceless "else" with braced "then",
+ * and short block last */
if (expr)
- x = y; // BAD: braceless "if" with braced "else"
+ x = y; /* BAD: braceless "if" with braced "else" */
else {
...
...
@@ -375,7 +375,7 @@ rather than after the more involved block:
::
if (!expr) {
- x = y; // putting the smaller block first is more readable
+ x = y; /* putting the smaller block first is more readable */
} else {
...
...
@@ -403,19 +403,19 @@ itself.
void
foo(int a, int b)
- { // correct - function body
+ { /* correct - function body */
int 2d[][] = {
- { // correct - complex initialization
+ { /* correct - complex initialization */
1, 2,
},
};
if (a)
- { // BAD: compound brace on its own line
+ { /* BAD: compound brace on its own line */
do_stuff();
}
- { // correct - nested scope
+ { /* correct - nested scope */
int tmp;
- if (a < b) { // correct - hanging brace
+ if (a < b) { /* correct - hanging brace */
tmp = b;
b = a;
a = tmp;
@@ -601,7 +601,7 @@ calling another function.
x = y + 20;
- char *z = NULL; // <===
+ char *z = NULL; /* <=== */
...
}
--
2.39.2
1 year, 8 months
(GSoC) Contributor Application
by Shiva
Greetings libvirt developers!
My name is Shiva and I am interested in contributing to the project
titled *"Metadata support for all object schemas".
*
My apologies for the delay in contact as this is my first time at GSoC
and I have missed the dates.
Is this the correct mailing list for GSoC Communication? If not please
point me to the right one (libvir-users list?).
As part of the requirements, I have successfully compiled libvirt on my
Arch Linux system and have also created a Merge Request for my first
bytesizedtask in request#245
<https://gitlab.com/libvirt/libvirt/-/merge_requests/245>.
My understanding of the project is as follows:
- Provide support for <metadata>, <title> and <description> tags for all
object schemas including networks, nwfilters, interfaces, storage pools etc.
- Add set and get metadata public API functions that interact with these
tags.
- Add an async event callback for each object that notifies of changes
in these tags.
Please correct me if I have gotten anything wrong.
If there is an interview to be conducted, please provide me a schedule
for it.
I will be happy to provide any additional information.
Thank You.
SIncerely
K Shiva Kiran
GSoC Applicant
1 year, 8 months
[PATCH 1/1] Partial fixes for Issue #7 titled 'Move validation checks out of domain XML parsing'
by skran
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3ab7cd2666..2a94566047 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -5840,14 +5840,14 @@ virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
host->socket = virXMLPropString(hostnode, "socket");
if (host->transport == VIR_STORAGE_NET_HOST_TRANS_UNIX &&
- host->socket == NULL) {
+ virDomainStorageNetHostSocketValidate(host)) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("missing socket for unix transport"));
goto cleanup;
}
if (host->transport != VIR_STORAGE_NET_HOST_TRANS_UNIX &&
- host->socket != NULL) {
+ !virDomainStorageNetHostSocketValidate(host)) {
virReportError(VIR_ERR_XML_ERROR,
_("transport '%1$s' does not support socket attribute"),
transport);
@@ -11024,30 +11024,8 @@ virDomainGraphicsListenDefParseXML(virDomainGraphicsListenDef *def,
VIR_XML_PROP_REQUIRED, &def->type) < 0)
goto error;
- switch (def->type) {
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
- if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
- graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("listen type 'socket' is not available for graphics type '%1$s'"),
- graphicsType);
- goto error;
- }
- break;
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
- if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
- graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("listen type 'none' is not available for graphics type '%1$s'"),
- graphicsType);
- goto error;
- }
- break;
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
- case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
- break;
- }
+ if (virDomainGraphicsListenDefValidate(def, graphics, graphicsType))
+ goto error;
if (def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS) {
if (address && addressCompat && STRNEQ(address, addressCompat)) {
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
index 9265fef4f9..b8b8f941cc 100644
--- a/src/conf/domain_validate.c
+++ b/src/conf/domain_validate.c
@@ -2669,6 +2669,38 @@ virDomainGraphicsDefValidate(const virDomainDef *def,
return 0;
}
+int
+virDomainGraphicsListenDefValidate(const virDomainGraphicsListenDef *def,
+ const virDomainGraphicsDef *graphics,
+ const char *graphicsType)
+{
+ switch (def->type) {
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
+ if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC &&
+ graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("listen type 'socket' is not available for graphics type '%1$s'"),
+ graphicsType);
+ return -1;
+ }
+ break;
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
+ if (graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
+ graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("listen type 'none' is not available for graphics type '%1$s'"),
+ graphicsType);
+ return -1;
+ }
+ break;
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
+ case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
+ break;
+ }
+ return 0;
+}
+
static int
virDomainIOMMUDefValidate(const virDomainIOMMUDef *iommu)
{
@@ -2898,3 +2930,13 @@ virDomainDeviceDefValidate(const virDomainDeviceDef *dev,
return 0;
}
+
+int
+virDomainStorageNetHostSocketValidate(const virStorageNetHostDef *host)
+
+{
+ if (host->socket)
+ return 0;
+ else
+ return -1;
+}
diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h
index fc441cef5b..58ee9b7da5 100644
--- a/src/conf/domain_validate.h
+++ b/src/conf/domain_validate.h
@@ -47,3 +47,10 @@ int virDomainDiskDefSourceLUNValidate(const virStorageSource *src);
int virDomainDefOSValidate(const virDomainDef *def,
virDomainXMLOption *xmlopt);
+
+int virDomainStorageNetHostSocketValidate(const virStorageNetHostDef *host);
+
+int
+virDomainGraphicsListenDefValidate(const virDomainGraphicsListenDef *def,
+ const virDomainGraphicsDef *graphics,
+ const char *graphicsType);
--
2.40.0
1 year, 8 months
[PATCH (pushed)] domaincapstest: Skip unknown variants instead of the default variant
by Peter Krempa
Fix the logic selecting when to run the tests to skip unknown variants
rather than the default variant.
Fixes: 738c5bae888
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
Pushed as trivial. I've messed up when applying review feedback.
tests/domaincapstest.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c
index a02197c4ea..ca4761aad0 100644
--- a/tests/domaincapstest.c
+++ b/tests/domaincapstest.c
@@ -326,7 +326,7 @@ doTestQemu(const char *inputDir G_GNUC_UNUSED,
if (STREQ(variant, "+hvf"))
hvf = true;
- else if (STREQ(variant, ""))
+ else if (STRNEQ(variant, ""))
return 0;
if (STREQ(arch, "x86_64")) {
--
2.39.2
1 year, 8 months
[libvirt PATCH] Remove trailing spaces from translatable strings
by Ján Tomko
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
---
src/rpc/virnetsshsession.c | 2 +-
src/test/test_driver.c | 2 +-
tools/virt-admin.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/rpc/virnetsshsession.c b/src/rpc/virnetsshsession.c
index 7bf27c161a..f84805825b 100644
--- a/src/rpc/virnetsshsession.c
+++ b/src/rpc/virnetsshsession.c
@@ -737,7 +737,7 @@ virNetSSHAuthenticateKeyboardInteractive(virNetSSHSession *sess,
if (!sess->cred || !sess->cred->cb) {
virReportError(VIR_ERR_SSH, "%s",
_("Can't perform keyboard-interactive authentication: "
- "Authentication callback not provided "));
+ "Authentication callback not provided"));
return -1;
}
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 822639e0f3..7b06896d44 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -3979,7 +3979,7 @@ testDomainSetBlockIoTune(virDomainPtr dom,
do { \
if (info.FIELD > info.FIELD_MAX) { \
virReportError(VIR_ERR_INVALID_ARG, \
- _("%1$s cannot be set higher than %2$s "), \
+ _("%1$s cannot be set higher than %2$s"), \
#FIELD, #FIELD_MAX); \
goto cleanup; \
} \
diff --git a/tools/virt-admin.c b/tools/virt-admin.c
index 43c91097a3..db246dc3a6 100644
--- a/tools/virt-admin.c
+++ b/tools/virt-admin.c
@@ -501,7 +501,7 @@ cmdSrvThreadpoolSet(vshControl *ctl, const vshCmd *cmd)
if (!nparams) {
vshError(ctl, "%s",
_("At least one of options --min-workers, --max-workers, "
- "--priority-workers is mandatory "));
+ "--priority-workers is mandatory"));
goto cleanup;
}
--
2.39.2
1 year, 8 months
Release of libvirt-9.2.0
by Jiri Denemark
The 9.2.0 release of both libvirt and libvirt-python is tagged and
signed tarballs and source RPMs are available at
https://libvirt.org/sources/
https://libvirt.org/sources/python/
Thanks everybody who helped with this release by sending patches,
reviewing, testing, or providing feedback. Your work is greatly
appreciated.
* New features
* qemu: Add support for QCOW2 formatted firmware
This type of firmware can be picked up either automatically, if the
corresponding JSON descriptor has the highest priority, or manually by
using ``<loader format='qcow2'/>`` in the domain XML.
* Improvements
* qemu: Make firmware selection persistent
Up until now, firmware autoselection has been performed at domain startup
time: as a result, changes to the JSON firmware descriptors present on the
system could have translated to a different firmware being chosen for
subsequent startups of the same domain, potentially rendering it unbootable
or lowering the security guarantees. Firmware selection now happens once,
when the domain is defined, and its results are stored in the domain XML
to be reused, unchanged, for all subsequent boots.
* qemu: passt now works when SELinux/AppArmor is enabled
In the case of SELinux, this requires passt-specific support code to be
present in the host policy, so it might only work with upcoming operating
systems and not with existing ones.
* xen: Support custom UEFI firmware paths
The Xen libxl driver now supports specifying a custom UEFI firmware path.
Previously the Xen default was used in all cases.
* Bug fixes
* qemu: Fix validation of the HPET timer
Due to a logic bug introduced in libvirt 9.0.0, VM configurations
explicitly enabling the HPET timer were rejected.
* qemu: Fix thread-context .host-nodes generation
With new enough QEMU, libvirt instructs QEMU to set affinity of memory
allocation threads. But this may have resulted in QEMU being unable to do
so, as affinity to NUMA nodes inaccessible to emulator thread might have
been requested.
* rpc: fix typo in admin code generation
Fix the bug in the remote ``virt-admin`` code generator, that resulted
in a crash. Introduced in libvirt 9.1.0.
* qemu: relax shared memory check for vhostuser daemons
Fix hotplug of virtiofs ``filesystem`` after restarting libvirtd.
Before, libvirtd would incorrectly complain about missing shared
memory.
Enjoy.
Jirka
1 year, 8 months