404507
From 0c9561ff6de749954395f562cbb8e3d12954566c Mon Sep 17 00:00:00 2001
404507
Message-Id: <0c9561ff6de749954395f562cbb8e3d12954566c@dist-git>
404507
From: Andrea Bolognani <abologna@redhat.com>
404507
Date: Wed, 29 Nov 2017 16:22:57 +0100
404507
Subject: [PATCH] conf: Run devicePostParse() again for the first serial device
404507
404507
The devicePostParse() callback is invoked for all devices so that
404507
drivers have a chance to set their own specific values; however,
404507
virDomainDefAddImplicitDevices() runs *after* the devicePostParse()
404507
callbacks have been invoked and can add new devices, in which case
404507
the driver wouldn't have a chance to customize them.
404507
404507
Work around the issue by invoking the devicePostParse() callback
404507
after virDomainDefAddImplicitDevices(), only for the first serial
404507
devices, which might have been added by it. The same was already
404507
happening for the first video device for the very same reason.
404507
404507
This will become important later on, when we will change
404507
virDomainDefAddConsoleCompat() not to set a targetType for
404507
automatically added serial devices.
404507
404507
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
404507
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
404507
(cherry picked from commit 2628afc143224d38e6ef8c06a8fbec1d0f69fb86)
404507
404507
https://bugzilla.redhat.com/show_bug.cgi?id=1449265
404507
https://bugzilla.redhat.com/show_bug.cgi?id=1511421
404507
https://bugzilla.redhat.com/show_bug.cgi?id=1512929
404507
https://bugzilla.redhat.com/show_bug.cgi?id=1512934
404507
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
404507
---
404507
 src/conf/domain_conf.c | 12 ++++++++++++
404507
 1 file changed, 12 insertions(+)
404507
404507
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
404507
index 4b5e7c214f..41674a85af 100644
404507
--- a/src/conf/domain_conf.c
404507
+++ b/src/conf/domain_conf.c
404507
@@ -4948,6 +4948,18 @@ virDomainDefPostParseCommon(virDomainDefPtr def,
404507
             return -1;
404507
     }
404507
 
404507
+    if (def->nserials != 0) {
404507
+        virDomainDeviceDef device = {
404507
+            .type = VIR_DOMAIN_DEVICE_CHR,
404507
+            .data.chr = def->serials[0],
404507
+        };
404507
+
404507
+        /* serials[0] might have been added in AddImplicitDevices, after we've
404507
+         * done the per-device post-parse */
404507
+        if (virDomainDefPostParseDeviceIterator(def, &device, NULL, data) < 0)
404507
+            return -1;
404507
+    }
404507
+
404507
     /* clean up possibly duplicated metadata entries */
404507
     virXMLNodeSanitizeNamespaces(def->metadata);
404507
 
404507
-- 
404507
2.15.1
404507