f27b21f
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
f27b21f
Date: Wed, 11 May 2016 12:39:52 +0200
f27b21f
Subject: [PATCH] Fill out default vram in DeviceDefPostParse
f27b21f
f27b21f
Move filling out the default video (v)ram to DeviceDefPostParse.
f27b21f
f27b21f
This means it can be removed from virDomainVideoDefParseXML
f27b21f
and qemuParseCommandLine. Also, we no longer need to special case
f27b21f
VIR_DOMAIN_VIRT_XEN, since the per-driver callback gets called
f27b21f
before the generic one.
f27b21f
f27b21f
(cherry picked from commit 538012c8a30230065d1bfe09892279dd8b89193f)
f27b21f
---
f27b21f
 src/conf/domain_conf.c        | 15 ++++++---------
f27b21f
 src/qemu/qemu_parse_command.c |  2 --
f27b21f
 2 files changed, 6 insertions(+), 11 deletions(-)
f27b21f
f27b21f
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
f27b21f
index 6b3309b..0c2850e 100644
f27b21f
--- a/src/conf/domain_conf.c
f27b21f
+++ b/src/conf/domain_conf.c
f27b21f
@@ -4149,6 +4149,12 @@ virDomainDeviceDefPostParseInternal(virDomainDeviceDefPtr dev,
f27b21f
 
f27b21f
     if (dev->type == VIR_DOMAIN_DEVICE_VIDEO) {
f27b21f
         virDomainVideoDefPtr video = dev->data.video;
f27b21f
+        /* Fill out (V)RAM if the driver-specific callback did not do so */
f27b21f
+        if (video->ram == 0 && video->type == VIR_DOMAIN_VIDEO_TYPE_QXL)
f27b21f
+            video->ram = virDomainVideoDefaultRAM(def, video->type);
f27b21f
+        if (video->vram == 0)
f27b21f
+            video->vram = virDomainVideoDefaultRAM(def, video->type);
f27b21f
+
f27b21f
         video->ram = VIR_ROUND_UP_POWER_OF_TWO(video->ram);
f27b21f
         video->vram = VIR_ROUND_UP_POWER_OF_TWO(video->vram);
f27b21f
     }
f27b21f
@@ -11948,10 +11954,6 @@ unsigned int
f27b21f
 virDomainVideoDefaultRAM(const virDomainDef *def,
f27b21f
                          const virDomainVideoType type)
f27b21f
 {
f27b21f
-    /* Defer setting default vram to the Xen drivers */
f27b21f
-    if (def->virtType == VIR_DOMAIN_VIRT_XEN)
f27b21f
-        return 0;
f27b21f
-
f27b21f
     switch (type) {
f27b21f
     case VIR_DOMAIN_VIDEO_TYPE_VGA:
f27b21f
     case VIR_DOMAIN_VIDEO_TYPE_CIRRUS:
f27b21f
@@ -12130,8 +12132,6 @@ virDomainVideoDefParseXML(xmlNodePtr node,
f27b21f
                            _("cannot parse video ram '%s'"), ram);
f27b21f
             goto error;
f27b21f
         }
f27b21f
-    } else if (def->type == VIR_DOMAIN_VIDEO_TYPE_QXL) {
f27b21f
-        def->ram = virDomainVideoDefaultRAM(dom, def->type);
f27b21f
     }
f27b21f
 
f27b21f
     if (vram) {
f27b21f
@@ -12140,8 +12140,6 @@ virDomainVideoDefParseXML(xmlNodePtr node,
f27b21f
                            _("cannot parse video vram '%s'"), vram);
f27b21f
             goto error;
f27b21f
         }
f27b21f
-    } else {
f27b21f
-        def->vram = virDomainVideoDefaultRAM(dom, def->type);
f27b21f
     }
f27b21f
 
f27b21f
     if (vram64) {
f27b21f
@@ -18593,7 +18591,6 @@ virDomainDefAddImplicitVideo(virDomainDefPtr def)
f27b21f
                        _("cannot determine default video type"));
f27b21f
         goto cleanup;
f27b21f
     }
f27b21f
-    video->vram = virDomainVideoDefaultRAM(def, video->type);
f27b21f
     video->heads = 1;
f27b21f
     if (VIR_APPEND_ELEMENT(def->videos, def->nvideos, video) < 0)
f27b21f
         goto cleanup;
f27b21f
diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c
f27b21f
index 45b64a6..074a7c4 100644
f27b21f
--- a/src/qemu/qemu_parse_command.c
f27b21f
+++ b/src/qemu/qemu_parse_command.c
f27b21f
@@ -2584,9 +2584,7 @@ qemuParseCommandLine(virCapsPtr caps,
f27b21f
             vid->type = VIR_DOMAIN_VIDEO_TYPE_XEN;
f27b21f
         else
f27b21f
             vid->type = video;
f27b21f
-        vid->vram = virDomainVideoDefaultRAM(def, vid->type);
f27b21f
         if (vid->type == VIR_DOMAIN_VIDEO_TYPE_QXL) {
f27b21f
-            vid->ram = virDomainVideoDefaultRAM(def, vid->type);
f27b21f
             vid->vgamem = QEMU_QXL_VGAMEM_DEFAULT;
f27b21f
         } else {
f27b21f
             vid->ram = 0;