Coverity complains...
On 09/19/2014 03:23 PM, Jim Fehlig wrote:
From: Stefan Bader <stefan.bader(a)canonical.com>
This started as an investigation into an issue where libvirt (using the
libxl driver) and the Xen host, like an old couple, could not agree on
who is responsible for selecting the VNC port to use.
Things usually (and a bit surprisingly) did work because, just like that
old couple, they had the same idea on what to do by default. However it
was possible that this ended up in a big argument.
The problem is that display information exists in two different places:
in the vfbs list and in the build info. And for launching the device model,
only the latter is used. But that never gets initialized from libvirt. So
Xen allows the device model to select a default port while libvirt thinks
it has told Xen that this is done by libvirt (though the vfbs config).
While fixing that, I made a stab at actually evaluating the configuration
of the video device. So that it is now possible to at least decide between
a Cirrus or standard VGA emulation and to modify the VRAM within certain
limits using libvirt.
Signed-off-by: Stefan Bader <stefan.bader(a)canonical.com>
Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
---
src/libxl/libxl_conf.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++
src/libxl/libxl_domain.c | 22 ++++++++++++++
2 files changed, 96 insertions(+)
<...snip...>
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 557fc20..f2cd07b 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -510,6 +510,28 @@ libxlDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
pcisrc->backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN;
}
+ if (dev->type == VIR_DOMAIN_DEVICE_VIDEO && STREQ(def->os.type,
"hvm")) {
+ int dm_type = libxlDomainGetEmulatorType(def);
+
+ switch (dev->data.video->type) {
+ case VIR_DOMAIN_VIDEO_TYPE_VGA:
+ case VIR_DOMAIN_VIDEO_TYPE_XEN:
+ if (dev->data.video->vram == 0) {
+ if (dm_type == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN)
+ dev->data.video->vram = 16 * 1024;
+ else
+ dev->data.video->vram = 8 * 1024;
+ }
There's no break here..
+ case VIR_DOMAIN_VIDEO_TYPE_CIRRUS:
+ if (dev->data.video->vram == 0) {
+ if (dm_type == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN)
+ dev->data.video->vram = 8 * 1024;
+ else
+ dev->data.video->vram = 4 * 1024;
+ }
And of course here - not that it matters yet
+ }
+ }
+
return 0;
}