From: Peter Krempa <[email protected]>

The user configuration of added/removed qemu capabilities via the qemu
namespace element was applied only right before generating a
commandline, but the validation code didn't see these.

Modify the validation entry points so that they apply this optionally.

Signed-off-by: Peter Krempa <[email protected]>
---
 src/qemu/qemu_validate.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 82ef761fb8..7c0ea402c3 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -1295,18 +1295,21 @@ qemuValidateDomainDef(const virDomainDef *def,
                       void *parseOpaque)
 {
     virQEMUDriver *driver = opaque;
+    virQEMUCaps *qemuCapsIn = parseOpaque;
     g_autoptr(virQEMUCaps) qemuCapsLocal = NULL;
-    virQEMUCaps *qemuCaps = parseOpaque;
+    g_autoptr(virQEMUCaps) qemuCaps = NULL;
     size_t i;

-    if (!qemuCaps) {
+    if (!qemuCapsIn) {
         if (!(qemuCapsLocal = virQEMUCapsCacheLookup(driver->qemuCapsCache,
                                                      def->emulator)))
             return -1;
-
-        qemuCaps = qemuCapsLocal;
+        qemuCapsIn = qemuCapsLocal;
     }

+    if (qemuDomainUpdateCustomCapabilities(def, qemuCapsIn, &qemuCaps) < 0)
+        return -1;
+
     if (def->os.type != VIR_DOMAIN_OSTYPE_HVM) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                        _("Emulator '%1$s' does not support os type '%2$s'"),
@@ -6047,17 +6050,20 @@ qemuValidateDomainDeviceDef(const virDomainDeviceDef 
*dev,
                             void *parseOpaque)
 {
     virQEMUDriver *driver = opaque;
+    virQEMUCaps *qemuCapsIn = parseOpaque;
     g_autoptr(virQEMUCaps) qemuCapsLocal = NULL;
-    virQEMUCaps *qemuCaps = parseOpaque;
+    g_autoptr(virQEMUCaps) qemuCaps = NULL;

-    if (!qemuCaps) {
+    if (!qemuCapsIn) {
         if (!(qemuCapsLocal = virQEMUCapsCacheLookup(driver->qemuCapsCache,
                                                      def->emulator)))
             return -1;
-
-        qemuCaps = qemuCapsLocal;
+        qemuCapsIn = qemuCapsLocal;
     }

+    if (qemuDomainUpdateCustomCapabilities(def, qemuCapsIn, &qemuCaps) < 0)
+        return -1;
+
     if (qemuValidateDomainDeviceInfo(dev, def, qemuCaps) < 0)
         return -1;

-- 
2.54.0

Reply via email to