From: Cole Robinson Date: Fri, 29 Jul 2016 13:17:36 -0400 Subject: [PATCH virt-manager] osdict: Fix incorrect usage of virtio input Regression reported with latest libosinfo, when the OS reports virtio-input support: http://www.redhat.com/archives/virt-tools-list/2016-July/msg00109.html Really our code presently only cares about the USB tablet, so adjust our libosinfo lookup to explicitly check for it (cherry picked from commit 1d2cd306773064258f5d02c980b09a683ae77798) --- virtinst/guest.py | 11 +++++------ virtinst/osdict.py | 28 ++++++++++++---------------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/virtinst/guest.py b/virtinst/guest.py index 6a42536..9df4a1c 100644 --- a/virtinst/guest.py +++ b/virtinst/guest.py @@ -1031,15 +1031,14 @@ class Guest(XMLBuilder): return False return all([c.model == "none" for c in controllers]) - input_type = self._os_object.default_inputtype() - input_bus = self._os_object.default_inputbus() + input_type = "mouse" + input_bus = "ps2" if self.os.is_xenpv(): input_type = VirtualInputDevice.TYPE_MOUSE input_bus = VirtualInputDevice.BUS_XEN - elif _usb_disabled() and input_bus == "usb": - input_bus = "ps2" - if input_type == "tablet": - input_type = "mouse" + elif self._os_object.supports_usbtablet() and not _usb_disabled(): + input_type = "tablet" + input_bus = "usb" for inp in self.get_devices("input"): if (inp.type == inp.TYPE_DEFAULT and diff --git a/virtinst/osdict.py b/virtinst/osdict.py index e8c1487..bfc435b 100644 --- a/virtinst/osdict.py +++ b/virtinst/osdict.py @@ -457,23 +457,19 @@ class _OsVariant(object): return devname return None - def default_inputtype(self): - if self._os: - fltr = libosinfo.Filter() - fltr.add_constraint("class", "input") - devs = self._os.get_all_devices(fltr) - if devs.get_length(): - return devs.get_nth(0).get_name() - return "mouse" + def supports_usbtablet(self): + if not self._os: + return False - def default_inputbus(self): - if self._os: - fltr = libosinfo.Filter() - fltr.add_constraint("class", "input") - devs = self._os.get_all_devices(fltr) - if devs.get_length(): - return devs.get_nth(0).get_bus_type() - return "ps2" + fltr = libosinfo.Filter() + fltr.add_constraint("class", "input") + fltr.add_constraint("name", "tablet") + devs = self._os.get_all_devices(fltr) + for idx in range(devs.get_length()): + dev = devs.get_nth(idx) + if devs.get_nth(idx).get_bus_type() == "usb": + return True + return False def supports_virtiodisk(self): if self._os: