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