SHA256
1
0
forked from pool/libvirt
libvirt/3e428670-post-parse-implicit-video.patch
James Fehlig 24511ba7f9 - Fix default video RAM setting
e4d131b8-mv-virDomainDefPostParseInternal.patch,
  3e428670-post-parse-implicit-video.patch,
  538012c8-default-vram.patch, 96b21fb0-vram-tests.patch,
  400e716d-libxl-noprope-emulator.patch,
  b90c4b5f-tests-use-qemu-xen.patch
  bsc#979397

OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=528
2016-05-13 17:55:57 +00:00

85 lines
3.4 KiB
Diff

commit 3e4286703273b06a21ae07f3e76a66f9661199dc
Author: Ján Tomko <jtomko@redhat.com>
Date: Wed May 11 12:13:51 2016 +0200
Call per-device post-parse callback even on implicit video
Commit 6879be48 moved adding of an implicit video device after XML
parsing. As a result, libxlDomainDeviceDefPostParse() is no longer
called to set the default vram when adding an implicit device.
Commit 6879be48 assumes virDomainVideoDefaultRAM() will set the
default vram, but it returns 0 if the domain virtType is
VIR_DOMAIN_VIRT_XEN. Attempting to start an HVM domain with vram=0
results in
error: unsupported configuration: videoram must be at least 4MB for CIRRUS
The default vram setting for Xen HVM domains depends on the device
model used (qemu-xen vs qemu-traditional), hence setting the
default is deferred to libxlDomainDeviceDefPostParse().
Call the device post-parse callback even for implicit video,
to fill out the default vram even for VIR_DOMAIN_VIRT_XEN.
https://bugzilla.redhat.com/show_bug.cgi?id=1334557
Most-of-commit-message-by: Jim Fehlig <jfehlig@suse.com>
Index: libvirt-1.3.4/src/conf/domain_conf.c
===================================================================
--- libvirt-1.3.4.orig/src/conf/domain_conf.c
+++ libvirt-1.3.4/src/conf/domain_conf.c
@@ -4321,8 +4321,7 @@ virDomainDefPostParseDeviceIterator(virD
static int
virDomainDefPostParseInternal(virDomainDefPtr def,
- virCapsPtr caps ATTRIBUTE_UNUSED,
- unsigned int parseFlags)
+ struct virDomainDefPostParseDeviceIteratorData *data)
{
/* verify init path for container based domains */
if (def->os.type == VIR_DOMAIN_OSTYPE_EXE && !def->os.init) {
@@ -4331,7 +4330,7 @@ virDomainDefPostParseInternal(virDomainD
return -1;
}
- if (virDomainDefPostParseMemory(def, parseFlags) < 0)
+ if (virDomainDefPostParseMemory(def, data->parseFlags) < 0)
return -1;
if (virDomainDefRejectDuplicateControllers(def) < 0)
@@ -4346,11 +4345,22 @@ virDomainDefPostParseInternal(virDomainD
if (virDomainDefAddImplicitDevices(def) < 0)
return -1;
- /* Mark the first video as primary. If the user specified primary="yes",
- * the parser already inserted the device at def->videos[0] */
- if (def->nvideos != 0)
+ if (def->nvideos != 0) {
+ virDomainDeviceDef device = {
+ .type = VIR_DOMAIN_DEVICE_VIDEO,
+ .data.video = def->videos[0],
+ };
+
+ /* Mark the first video as primary. If the user specified primary="yes",
+ * the parser already inserted the device at def->videos[0] */
def->videos[0]->primary = true;
+ /* videos[0] might have been added in AddImplicitDevices, after we've
+ * done the per-device post-parse */
+ if (virDomainDefPostParseDeviceIterator(NULL, &device, NULL, data) < 0)
+ return -1;
+ }
+
/* clean up possibly duplicated metadata entries */
virDomainDefMetadataSanitize(def);
@@ -4388,7 +4398,7 @@ virDomainDefPostParse(virDomainDefPtr de
return ret;
- if ((ret = virDomainDefPostParseInternal(def, caps, parseFlags)) < 0)
+ if ((ret = virDomainDefPostParseInternal(def, &data)) < 0)
return ret;
if (virDomainDefPostParseCheckFeatures(def, xmlopt) < 0)