On 12.01.2016 12:59, Pavel Hrdina wrote:
The current code was a little bit odd. At first we've removed
all
possible implicit input devices from domain definition to add them later
back if there was any graphics device defined while parsing XML
description. That's not all, while formating domain definition to XML
description we at first ignore any input devices with bus different to
USB and VIRTIO and few lines later we add implicit input devices to XML.
This seems to me as a lot of code for nothing. This patch may look
to be more complicated than original approach, but this is a preferred
way to modify/add driver specific stuff only in those drivers and not
deal with them in common parsing/formating functions.
The update is to add those implicit input devices into config XML to
follow the real HW configuration visible by guest OS.
There was also inconsistence between our behavior and QEMU's in the way,
that in QEMU there is no way how to disable those implicit input devices
for x86 architecture and they are available always, even without graphics
device. This applies also to XEN hypervisor. VZ driver already does its
part by putting correct implicit devices into live XML.
Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
src/Makefile.am | 4 +--
src/conf/domain_conf.c | 82 +++++-----------------------------------------
src/libxl/libxl_domain.c | 5 +++
src/qemu/qemu_domain.c | 23 +++++++++++++
src/xen/xen_driver.c | 5 +++
src/xenapi/xenapi_driver.c | 5 +++
src/xenconfig/xen_common.c | 22 +++++++++++++
src/xenconfig/xen_common.h | 2 ++
8 files changed, 72 insertions(+), 76 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index aa5ab69..522c56d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1211,7 +1211,7 @@ libvirt_driver_xen_impl_la_CFLAGS = \
-I$(srcdir)/xenconfig \
$(AM_CFLAGS)
libvirt_driver_xen_impl_la_LDFLAGS = $(AM_LDFLAGS)
-libvirt_driver_xen_impl_la_LIBADD = $(XEN_LIBS)
+libvirt_driver_xen_impl_la_LIBADD = $(XEN_LIBS) libvirt_xenconfig.la
libvirt_driver_xen_impl_la_SOURCES = $(XEN_DRIVER_SOURCES)
endif WITH_XEN
@@ -1272,7 +1272,7 @@ if WITH_XENAPI
noinst_LTLIBRARIES += libvirt_driver_xenapi.la
libvirt_la_BUILT_LIBADD += libvirt_driver_xenapi.la
libvirt_driver_xenapi_la_CFLAGS = $(LIBXENSERVER_CFLAGS) $(CURL_CFLAGS) \
- -I$(srcdir)/conf $(AM_CFLAGS)
+ -I$(srcdir)/conf -I$(srcdir)/xenconfig $(AM_CFLAGS)
libvirt_driver_xenapi_la_LDFLAGS = $(AM_LDFLAGS)
libvirt_driver_xenapi_la_LIBADD = $(LIBXENSERVER_LIBS) $(CURL_LIBS)
libvirt_driver_xenapi_la_SOURCES = $(XENAPI_DRIVER_SOURCES)
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index cf5c9f6..ee49ba7 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -35,6 +35,7 @@
#include "virstring.h"
#include "virtime.h"
#include "locking/domain_lock.h"
+#include "xenconfig/xen_common.h"
You don't need to do this crossdir include. -Ixenconfig is already on
the compiler's command line.
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -396,6 +397,10 @@ libxlDomainDefPostParse(virDomainDefPtr def,
def->consoles[0] = chrdef;
}
+ /* add implicit input devices */
+ if (xenDomainDefAddImplicitInputDevice(def) < 0)
+ return -1;
+
/* memory hotplug tunables are not supported by this driver */
if (virDomainDefCheckUnsupportedMemoryHotplug(def) < 0)
return -1;
Michal