[virt-manager PATCH] Fix checking for graphics spice for Xen

Cole Robinson crobinso at redhat.com
Thu Feb 10 15:26:56 UTC 2022


On 2/9/22 4:53 PM, Charles Arnold wrote:
> On 2/9/22 11:32 AM, Charles Arnold wrote:
>> On 2/9/22 10:32 AM, Cole Robinson wrote:
>>> On 2/9/22 9:50 AM, Charles Arnold wrote:
>>>> Advertising graphics support doesn't necessarily mean spice support.
>>>> self.devices.graphics.supported seems to not be spice specific
>>>> but rather more generic in indicating whether graphics are supported.
>>>> For Xen, spice is not supported so fallback to the old logic.
>>>>
>>>> Signed-off-by: Charles Arnold <carnold at suse.com>
>>>>
>>>> diff --git a/virtinst/domcapabilities.py b/virtinst/domcapabilities.py
>>>> index 67bceaa3..ad6e3363 100644
>>>> --- a/virtinst/domcapabilities.py
>>>> +++ b/virtinst/domcapabilities.py
>>>> @@ -382,7 +382,7 @@ class DomainCapabilities(XMLBuilder):
>>>>           return len(models) > 0 and bool("emulator" in backends)
>>>>
>>>>       def supports_graphics_spice(self):
>>>> -        if not self.devices.graphics.supported:
>>>> +        if not self.devices.graphics.supported or self.conn.is_xen():
>>>>               # domcaps is too old, or the driver doesn't advertise
>>>> graphics
>>>>               # support. Use our pre-existing logic
>>>>               if not self.conn.is_qemu() and not self.conn.is_test():
>>>>
>>>>
>>> Hmm but does that mean domcapabilities for xen is reporting that spice
>>> is available? If that's the case, seems like a domcapabilities bug in
>>> libvirt xen driver. Or am I missing something?
>>>
>>> Thanks,
>>> Cole
>>>
>>
>> Booted into Xen, virsh domcapabilities reports,
>>
>> <domainCapabilities>
>>   <path>/usr/bin/qemu-system-x86_64</path>
>>   <domain>xen</domain>
>>   <machine>xenpv</machine>
>>   <arch>x86_64</arch>
>>   <vcpu max='512'/>
>>   <iothreads supported='no'/>
>>   <os supported='yes'>
>>     <loader supported='no'/>
>>   </os>
>>   <cpu>
>>     <mode name='host-passthrough' supported='no'/>
>>     <mode name='maximum' supported='no'/>
>>     <mode name='host-model' supported='no'/>
>>     <mode name='custom' supported='no'/>
>>   </cpu>
>>   <devices>
>>     <disk supported='yes'>
>>       <enum name='diskDevice'>
>>         <value>disk</value>
>>         <value>cdrom</value>
>>       </enum>
>>       <enum name='bus'>
>>         <value>ide</value>
>>         <value>scsi</value>
>>         <value>xen</value>
>>       </enum>
>>       <enum name='model'/>
>>     </disk>
>>     <graphics supported='yes'>
>>       <enum name='type'>
>>         <value>sdl</value>
>>         <value>vnc</value>
>>         <value>spice</value>
>>       </enum>
>>     </graphics>
>>     <video supported='yes'>
>>       <enum name='modelType'>
>>         <value>vga</value>
>>         <value>cirrus</value>
>>         <value>xen</value>
>>       </enum>
>>     </video>
>>     <hostdev supported='yes'>
>>       <enum name='mode'>
>>         <value>subsystem</value>
>>       </enum>
>>       <enum name='startupPolicy'>
>>         <value>default</value>
>>         <value>mandatory</value>
>>         <value>requisite</value>
>>         <value>optional</value>
>>       </enum>
>>       <enum name='subsysType'>
>>         <value>usb</value>
>>         <value>pci</value>
>>       </enum>
>>       <enum name='capsType'/>
>>       <enum name='pciBackend'>
>>         <value>xen</value>
>>       </enum>
>>     </hostdev>
>>   </devices>
>>   <features>
>>     <gic supported='no'/>
>>     <vmcoreinfo supported='no'/>
>>     <genid supported='no'/>
>>     <sev supported='no'/>
>>   </features>
>> </domainCapabilities>
>>

Thanks, this could be useful to add to the test suite. Is output the
mostly the same for `virsh domcapabilities --machine xenfv` too?

> 
> The more precise error I'm trying to fix is while attempting to install
> a Xen HVM guest it reports,
> 
> details=Traceback (most recent call last):
>   File "./virtManager/asyncjob.py", line 72, in cb_wrapper
>     callback(asyncjob, *args, **kwargs)
>   File "./virtManager/createvm.py", line 2008, in _do_async_install
>     installer.start_install(guest, meter=meter)
>   File "./virtinst/install/installer.py", line 704, in start_install
>     doboot, transient)
>   File "./virtinst/install/installer.py", line 649, in _create_guest
>     domain = self.conn.createXML(install_xml or final_xml, 0)
>   File "/usr/lib64/python3.6/site-packages/libvirt.py", line 4393, in
> createXML
>     raise libvirtError('virDomainCreateXML() failed')
> libvirt.libvirtError: unsupported configuration: cannot add redirected
> USB device: USB is disabled for this domain
> 
> So in the latest code the VM is marked as supporting spice and later
> wants to add a DeviceRedirdev. The 3.2.0 code always just failed for
> spice if 'is_qemu()' was false.

Okay, interesting. Can you provide the full --debug output? Probably our
code that adds usb2/usb3 support by default is not triggering for xen.
There might be something we need to tweak here. This could be a bug on
its own since it probably means explicit `--graphics spice` on the cli
doesn't work when it should.

Can you also try adding `--redirdev none` on the cli and see if that
fixes it, or hits another error?


But my change wasn't intended to change the default for xen from vnc to
spice. I didn't think xen supported spice so I didn't expect it to be
advertised in domcaps. Rather than hack the domcaps check, I think we
should make this explicit at the source: devices/graphics.py
_default_type function. I've pushed this bit which I think will fix your
case:

diff --git a/virtinst/devices/graphics.py b/virtinst/devices/graphics.py
index a91db289..0c3499ef 100644
--- a/virtinst/devices/graphics.py
+++ b/virtinst/devices/graphics.py
@@ -155,10 +155,16 @@ class DeviceGraphics(Device):
     def _default_type(self, guest):
         gtype = guest.default_graphics_type
         log.debug("Using default_graphics=%s", gtype)
+
+        if self.conn.is_xen():
+            # Xen domcaps can advertise spice support, but we have
historically
+            # not defaulted to it for xen, so force vnc.
+            log.debug("Not defaulting to spice for xen driver. Using vnc.")
+            gtype = "vnc"
+


Thanks,
Cole




More information about the virt-tools-list mailing list