KVM Fails 3D Acceleration on Debian (failed to validate against schema)

Full VM xml: ``` <domain type='kvm'> <name>Whonix-Gateway</name> <uuid>c011d3d3-8383-47a8-b2cd-d54f883d8af1</uuid> <genid>bc5b233c-46ea-4bfb-ad99-00f1165a09e6</genid> <description>Do not change any settings if you do not understand the consequences! Learn more: https://www.whonix.org/wiki/KVM#XML_Settings</description> <memory dumpCore='off' unit='KiB'>1250000</memory> <currentMemory unit='KiB'>1250000</currentMemory> <blkiotune> <weight>250</weight> </blkiotune> <memoryBacking> <nosharepages/> <allocation mode='ondemand'/> <discard/> </memoryBacking> <vcpu placement='static' cpuset='0'>1</vcpu> <os> <type arch='x86_64' machine='pc-q35-9.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <hap state='on'/> <pvspinlock state='on'/> <pmu state='off'/> <vmport state='off'/> </features> <cpu mode='host-passthrough' check='none' migratable='on'/> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup' track='guest'/> <timer name='kvmclock' present='yes'/> <timer name='pit' present='no'/> <timer name='hpet' present='no'/> <timer name='hypervclock' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/Whonix-Gateway.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </disk> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </controller> <controller type='usb' index='0' model='qemu-xhci'> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </controller> <controller type='sata' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='1' port='0x10'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/> </controller> <controller type='pci' index='2' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='2' port='0x11'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/> </controller> <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='3' port='0x12'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/> </controller> <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='4' port='0x13'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/> </controller> <controller type='pci' index='5' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='5' port='0x14'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/> </controller> <controller type='pci' index='6' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='6' port='0x15'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/> </controller> <controller type='pci' index='7' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='7' port='0x16'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/> </controller> <interface type='network'> <mac address='52:54:00:c1:95:49'/> <source network='Whonix-External'/> <model type='virtio'/> <driver name='qemu'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> <interface type='network'> <mac address='52:54:00:bf:80:2e'/> <source network='Whonix-Internal'/> <model type='virtio'/> <driver name='qemu'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='spice' autoport='yes'> <listen type='address'/> <clipboard copypaste='no'/> <filetransfer enable='no'/> <gl enable='yes'/> </graphics> <audio id='1' type='spice'/> <video> <model type='virtio' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> <acceleration accel3d='yes' accel2d='yes'/> <gl enable='yes'/> </video> <watchdog model='itco' action='reset'/> <memballoon model='none'/> <rng model='virtio'> <rate bytes='1024' period='1000'/> <backend model='random'>/dev/random</backend> <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </rng> </devices> </domain> ``` But it will always show: ``` error: XML document failed to validate against schema: Unable to validate doc against /usr/share/libvirt/schemas/domain.rng Extra element devices in interleave Element domain failed to validate content ``` Any idea how to resolve this?

On Tue, Aug 27, 2024 at 21:36:29 -0000, bo0od--- via Users wrote:
Full VM xml:
```
[...]
<audio id='1' type='spice'/> <video> <model type='virtio' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> <acceleration accel3d='yes' accel2d='yes'/> <gl enable='yes'/> </video> <watchdog model='itco' action='reset'/> <memballoon model='none'/> <rng model='virtio'> <rate bytes='1024' period='1000'/> <backend model='random'>/dev/random</backend> <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </rng> </devices> </domain> ```
But it will always show:
``` error: XML document failed to validate against schema: Unable to validate doc against /usr/share/libvirt/schemas/domain.rng Extra element devices in interleave Element domain failed to validate content ```
Any idea how to resolve this?
Error from a XML validator with more reasonable error reporting is: /tmp/asdfasdf.xml:134:50: error: element "acceleration" not allowed here; expected the element end-tag or element "acpi", "alias" or "driver" /tmp/asdfasdf.xml:135:25: error: element "gl" not allowed here; expected the element end-tag or element "acpi", "alias" or "driver" Per https://www.libvirt.org/formatdomain.html#video-devices The '<acceleration' element is supposed to be a sub-element of 'model': <devices> <video> <model type='vga' vram='16384' heads='1'> <acceleration accel3d='yes' accel2d='yes'/> </model> <driver name='qemu'/> </video> </devices> And '<gl' is supposed to be a child of 'graphics' instead of '<video'. As you have one at '<graphics' just delete it. With '<video>' like this it validates properly: <video> <model type='virtio' heads='1' primary='yes'> <acceleration accel3d='yes' accel2d='yes'/> </model> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> </video> Although I don't know where you got that definition because the qemu driver doesn't support 'accel2d' altogether: $ virsh define /tmp/asdfasdf.xml error: Failed to define domain from /tmp/asdfasdf.xml error: unsupported configuration: qemu does not support the accel2d setting In src/qemu/qemu_validate.c in the function qemuValidateDomainDeviceDefVideo() the check is as follows: if (video->accel && video->accel->accel2d == VIR_TRISTATE_BOOL_YES) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("qemu does not support the accel2d setting")); return -1; } Thus with no exception. Thus the final working 'video' is: <video> <model type='virtio' heads='1' primary='yes'> <acceleration accel3d='yes'/> </model> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> </video> Which is accepted: $ virsh define /tmp/asdfasdf.xml Domain 'Whonix-Gateway' defined from /tmp/asdfasdf.xml

Fixed: https://github.com/Kicksecure/libvirt-dist/blob/master/usr/share/libvirt-dis... ``` <domain type='kvm'> <name>Whonix-Gateway</name> <description>Do not change any settings if you do not understand the consequences! Learn more: https://www.whonix.org/wiki/KVM#XML_Settings</description> <genid/> <memory dumpCore='off' unit='GB'>2</memory> <currentMemory unit='GB'>2</currentMemory> <memoryBacking> <allocation mode='ondemand'/> <discard/> <nosharepages/> </memoryBacking> <blkiotune> <weight>250</weight> </blkiotune> <vcpu placement='static' cpuset='0'>1</vcpu> <cpu mode='host-passthrough'/> <os> <type machine='q35'>hvm</type> <boot dev='hd'/> <bootmenu enable='yes'/> </os> <features> <acpi/> <hap/> <pvspinlock state='on'/> <pmu state='off'/> <vmport state='off'/> </features> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup' track='guest'/> <timer name='kvmclock' present='yes'/> <timer name='pit' present='no'/> <timer name='hpet' present='no'/> <timer name='hypervclock' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/Whonix-Gateway.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <source network='Whonix-External'/> <model type='virtio'/> <driver name='qemu'/> </interface> <interface type='network'> <source network='Whonix-Internal'/> <model type='virtio'/> <driver name='qemu'/> </interface> <controller type='virtio-serial' index='0'/> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <!-- Graphics settings --> <graphics type='spice' autoport='yes'> <listen type='none'/> <clipboard copypaste='yes'/> <filetransfer enable='no'/> <gl enable='no'/> </graphics> <!-- Video settings --> <video> <model type='virtio' heads='1' primary='yes'> <acceleration accel3d='no'/> </model> </video> <sound model='ich9'> <codec type='output'/> </sound> <memballoon model='none'/> <rng model='virtio'> <rate bytes='1024' period='1000'/> <backend model='random'>/dev/random</backend> </rng> </devices> </domain> ```
участники (2)
-
bo0od@whonix.org
-
Peter Krempa