On Thu, Feb 10, 2022 at 03:13:26PM -0600, Jonathon Jongsma wrote: > Add the ability to specify the 'blob=on/off' option to qemu for the > virtio-vga/virtio-gpu device. It would be nice to explain what the blob option actually does... > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2032406 This equally fails at providing a useful explanation or justification. > > Signed-off-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> > --- > docs/schemas/domaincommon.rng | 5 +++ And document it in formatdomain.rst > src/conf/domain_conf.c | 6 +++ > src/conf/domain_conf.h | 1 + > src/conf/domain_validate.c | 13 ++++-- > src/qemu/qemu_command.c | 3 ++ > .../video-virtio-blob-absent.args | 34 +++++++++++++++ > .../video-virtio-blob-absent.xml | 33 +++++++++++++++ > .../video-virtio-blob-off.args | 34 +++++++++++++++ > .../video-virtio-blob-off.xml | 33 +++++++++++++++ > .../video-virtio-blob-on.args | 34 +++++++++++++++ > .../qemuxml2argvdata/video-virtio-blob-on.xml | 33 +++++++++++++++ > .../video-virtio-vga-blob-on.args | 34 +++++++++++++++ > .../video-virtio-vga-blob-on.xml | 33 +++++++++++++++ > tests/qemuxml2argvtest.c | 9 ++++ > .../video-virtio-blob-absent.xml | 41 +++++++++++++++++++ > .../video-virtio-blob-off.xml | 41 +++++++++++++++++++ > .../video-virtio-blob-on.xml | 41 +++++++++++++++++++ > .../video-virtio-vga-blob-on.xml | 41 +++++++++++++++++++ > tests/qemuxml2xmltest.c | 9 ++++ > 19 files changed, 475 insertions(+), 3 deletions(-) > create mode 100644 tests/qemuxml2argvdata/video-virtio-blob-absent.args > create mode 100644 tests/qemuxml2argvdata/video-virtio-blob-absent.xml > create mode 100644 tests/qemuxml2argvdata/video-virtio-blob-off.args > create mode 100644 tests/qemuxml2argvdata/video-virtio-blob-off.xml > create mode 100644 tests/qemuxml2argvdata/video-virtio-blob-on.args > create mode 100644 tests/qemuxml2argvdata/video-virtio-blob-on.xml > create mode 100644 tests/qemuxml2argvdata/video-virtio-vga-blob-on.args > create mode 100644 tests/qemuxml2argvdata/video-virtio-vga-blob-on.xml > create mode 100644 tests/qemuxml2xmloutdata/video-virtio-blob-absent.xml > create mode 100644 tests/qemuxml2xmloutdata/video-virtio-blob-off.xml > create mode 100644 tests/qemuxml2xmloutdata/video-virtio-blob-on.xml > create mode 100644 tests/qemuxml2xmloutdata/video-virtio-vga-blob-on.xml > > diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng > index 964b0c9e2f..372376820a 100644 > --- a/docs/schemas/domaincommon.rng > +++ b/docs/schemas/domaincommon.rng > @@ -4191,6 +4191,11 @@ > <ref name="virYesNo"/> > </attribute> > </optional> > + <optional> > + <attribute name="blob"> > + <ref name="virOnOff"/> > + </attribute> > + </optional> > <optional> > <element name="acceleration"> > <optional> > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 3d25d4f184..6a0b7e773b 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -14114,6 +14114,9 @@ virDomainVideoModelDefParseXML(virDomainVideoDef *def, > else if (rc == 0) > def->heads = 1; > > + if (virXMLPropTristateSwitch(node, "blob", VIR_XML_PROP_NONE, &def->blob) < 0) > + return -1; > + > return 0; > } > > @@ -26000,6 +26003,9 @@ virDomainVideoDefFormat(virBuffer *buf, > virBufferAsprintf(buf, " heads='%u'", def->heads); > if (def->primary) > virBufferAddLit(buf, " primary='yes'"); > + if (def->blob != VIR_TRISTATE_SWITCH_ABSENT) > + virBufferAsprintf(buf, " blob='%s'", > + virTristateSwitchTypeToString(def->blob)); > if (def->accel || def->res) { > virBufferAddLit(buf, ">\n"); > virBufferAdjustIndent(buf, 2); > diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h > index 46e5c6b7c7..49bb420882 100644 > --- a/src/conf/domain_conf.h > +++ b/src/conf/domain_conf.h > @@ -1736,6 +1736,7 @@ struct _virDomainVideoDef { > bool primary; > virDomainVideoAccelDef *accel; > virDomainVideoResolutionDef *res; > + virTristateSwitch blob; > virDomainVideoDriverDef *driver; > virDomainDeviceInfo info; > virDomainVirtioOptions *virtio; > diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c > index f0b8aa2655..9384c5afbb 100644 > --- a/src/conf/domain_validate.c > +++ b/src/conf/domain_validate.c > @@ -226,9 +226,16 @@ virDomainVideoDefValidate(const virDomainVideoDef *video, > } > } > > - if (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO && > - (virDomainCheckVirtioOptionsAreAbsent(video->virtio) < 0)) > - return -1; > + if (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO) { > + if (virDomainCheckVirtioOptionsAreAbsent(video->virtio) < 0) > + return -1; > + if (video->blob != VIR_TRISTATE_SWITCH_ABSENT) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("video type '%s' doesn't support blob"), > + virDomainVideoTypeToString(video->type)); > + return -1; > + } > + } > > return 0; > } > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 9713467aa8..a936c3eaae 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -4960,6 +4960,9 @@ qemuBuildDeviceVideoCmd(virCommand *cmd, > "p:vgamem", video->vram * 1024, > NULL) < 0) > return -1; > + } else if (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO) { > + if (virJSONValueObjectAdd(&props, "T:blob", video->blob, NULL) < 0) > + return -1; > } > > if (video->res) { > diff --git a/tests/qemuxml2argvdata/video-virtio-blob-absent.args b/tests/qemuxml2argvdata/video-virtio-blob-absent.args > new file mode 100644 > index 0000000000..36a5b9bba8 > --- /dev/null > +++ b/tests/qemuxml2argvdata/video-virtio-blob-absent.args > @@ -0,0 +1,34 @@ > +LC_ALL=C \ > +PATH=/bin \ > +HOME=/tmp/lib/domain--1-QEMUGuest1 \ > +USER=test \ > +LOGNAME=test \ > +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ > +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ > +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ > +QEMU_AUDIO_DRV=none \ > +/usr/bin/qemu-system-i386 \ > +-name guest=QEMUGuest1,debug-threads=on \ > +-S \ > +-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ > +-machine pc,usb=off,dump-guest-core=off \ > +-accel tcg \ > +-m 1024 \ > +-realtime mlock=off \ > +-smp 1,sockets=1,cores=1,threads=1 \ > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ > +-display none \ > +-no-user-config \ > +-nodefaults \ > +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server=on,wait=off \ > +-mon chardev=charmonitor,id=monitor,mode=control \ > +-rtc base=utc \ > +-no-shutdown \ > +-no-acpi \ > +-boot strict=on \ > +-usb \ > +-drive file=/var/lib/libvirt/images/QEMUGuest1,format=qcow2,if=none,id=drive-ide0-0-0,cache=none \ > +-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ > +-device virtio-gpu-pci,id=video0,max_outputs=1,bus=pci.0,addr=0x2 \ > +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ > +-msg timestamp=on > diff --git a/tests/qemuxml2argvdata/video-virtio-blob-absent.xml b/tests/qemuxml2argvdata/video-virtio-blob-absent.xml > new file mode 100644 > index 0000000000..a9354d77a2 > --- /dev/null > +++ b/tests/qemuxml2argvdata/video-virtio-blob-absent.xml > @@ -0,0 +1,33 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>1048576</memory> > + <currentMemory unit='KiB'>1048576</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu-system-i386</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2' cache='none'/> > + <source file='/var/lib/libvirt/images/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'/> > + <controller type='usb' index='0'/> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <video> > + <model type='virtio' heads='1'/> > + </video> > + <memballoon model='virtio'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2argvdata/video-virtio-blob-off.args b/tests/qemuxml2argvdata/video-virtio-blob-off.args > new file mode 100644 > index 0000000000..eadae278ce > --- /dev/null > +++ b/tests/qemuxml2argvdata/video-virtio-blob-off.args > @@ -0,0 +1,34 @@ > +LC_ALL=C \ > +PATH=/bin \ > +HOME=/tmp/lib/domain--1-QEMUGuest1 \ > +USER=test \ > +LOGNAME=test \ > +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ > +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ > +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ > +QEMU_AUDIO_DRV=none \ > +/usr/bin/qemu-system-i386 \ > +-name guest=QEMUGuest1,debug-threads=on \ > +-S \ > +-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ > +-machine pc,usb=off,dump-guest-core=off \ > +-accel tcg \ > +-m 1024 \ > +-realtime mlock=off \ > +-smp 1,sockets=1,cores=1,threads=1 \ > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ > +-display none \ > +-no-user-config \ > +-nodefaults \ > +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server=on,wait=off \ > +-mon chardev=charmonitor,id=monitor,mode=control \ > +-rtc base=utc \ > +-no-shutdown \ > +-no-acpi \ > +-boot strict=on \ > +-usb \ > +-drive file=/var/lib/libvirt/images/QEMUGuest1,format=qcow2,if=none,id=drive-ide0-0-0,cache=none \ > +-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ > +-device virtio-gpu-pci,id=video0,max_outputs=1,blob=off,bus=pci.0,addr=0x2 \ > +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ > +-msg timestamp=on > diff --git a/tests/qemuxml2argvdata/video-virtio-blob-off.xml b/tests/qemuxml2argvdata/video-virtio-blob-off.xml > new file mode 100644 > index 0000000000..7b51762e9a > --- /dev/null > +++ b/tests/qemuxml2argvdata/video-virtio-blob-off.xml > @@ -0,0 +1,33 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>1048576</memory> > + <currentMemory unit='KiB'>1048576</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu-system-i386</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2' cache='none'/> > + <source file='/var/lib/libvirt/images/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'/> > + <controller type='usb' index='0'/> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <video> > + <model type='virtio' heads='1' blob='off'/> > + </video> > + <memballoon model='virtio'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2argvdata/video-virtio-blob-on.args b/tests/qemuxml2argvdata/video-virtio-blob-on.args > new file mode 100644 > index 0000000000..6fbb0d5bb2 > --- /dev/null > +++ b/tests/qemuxml2argvdata/video-virtio-blob-on.args > @@ -0,0 +1,34 @@ > +LC_ALL=C \ > +PATH=/bin \ > +HOME=/tmp/lib/domain--1-QEMUGuest1 \ > +USER=test \ > +LOGNAME=test \ > +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ > +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ > +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ > +QEMU_AUDIO_DRV=none \ > +/usr/bin/qemu-system-i386 \ > +-name guest=QEMUGuest1,debug-threads=on \ > +-S \ > +-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ > +-machine pc,usb=off,dump-guest-core=off \ > +-accel tcg \ > +-m 1024 \ > +-realtime mlock=off \ > +-smp 1,sockets=1,cores=1,threads=1 \ > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ > +-display none \ > +-no-user-config \ > +-nodefaults \ > +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server=on,wait=off \ > +-mon chardev=charmonitor,id=monitor,mode=control \ > +-rtc base=utc \ > +-no-shutdown \ > +-no-acpi \ > +-boot strict=on \ > +-usb \ > +-drive file=/var/lib/libvirt/images/QEMUGuest1,format=qcow2,if=none,id=drive-ide0-0-0,cache=none \ > +-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ > +-device virtio-gpu-pci,id=video0,max_outputs=1,blob=on,bus=pci.0,addr=0x2 \ > +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ > +-msg timestamp=on > diff --git a/tests/qemuxml2argvdata/video-virtio-blob-on.xml b/tests/qemuxml2argvdata/video-virtio-blob-on.xml > new file mode 100644 > index 0000000000..187347fac0 > --- /dev/null > +++ b/tests/qemuxml2argvdata/video-virtio-blob-on.xml > @@ -0,0 +1,33 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>1048576</memory> > + <currentMemory unit='KiB'>1048576</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu-system-i386</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2' cache='none'/> > + <source file='/var/lib/libvirt/images/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'/> > + <controller type='usb' index='0'/> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <video> > + <model type='virtio' heads='1' blob="on"/> > + </video> > + <memballoon model='virtio'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2argvdata/video-virtio-vga-blob-on.args b/tests/qemuxml2argvdata/video-virtio-vga-blob-on.args > new file mode 100644 > index 0000000000..8b7085e1a3 > --- /dev/null > +++ b/tests/qemuxml2argvdata/video-virtio-vga-blob-on.args > @@ -0,0 +1,34 @@ > +LC_ALL=C \ > +PATH=/bin \ > +HOME=/tmp/lib/domain--1-QEMUGuest1 \ > +USER=test \ > +LOGNAME=test \ > +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ > +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ > +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ > +QEMU_AUDIO_DRV=none \ > +/usr/bin/qemu-system-i386 \ > +-name guest=QEMUGuest1,debug-threads=on \ > +-S \ > +-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ > +-machine pc,usb=off,dump-guest-core=off \ > +-accel tcg \ > +-m 1024 \ > +-realtime mlock=off \ > +-smp 1,sockets=1,cores=1,threads=1 \ > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ > +-display none \ > +-no-user-config \ > +-nodefaults \ > +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server=on,wait=off \ > +-mon chardev=charmonitor,id=monitor,mode=control \ > +-rtc base=utc \ > +-no-shutdown \ > +-no-acpi \ > +-boot strict=on \ > +-usb \ > +-drive file=/var/lib/libvirt/images/QEMUGuest1,format=qcow2,if=none,id=drive-ide0-0-0,cache=none \ > +-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ > +-device virtio-vga,id=video0,max_outputs=1,blob=on,bus=pci.0,addr=0x2 \ > +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ > +-msg timestamp=on > diff --git a/tests/qemuxml2argvdata/video-virtio-vga-blob-on.xml b/tests/qemuxml2argvdata/video-virtio-vga-blob-on.xml > new file mode 100644 > index 0000000000..00aed31d28 > --- /dev/null > +++ b/tests/qemuxml2argvdata/video-virtio-vga-blob-on.xml > @@ -0,0 +1,33 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>1048576</memory> > + <currentMemory unit='KiB'>1048576</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu-system-i386</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2' cache='none'/> > + <source file='/var/lib/libvirt/images/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'/> > + <controller type='usb' index='0'/> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <video> > + <model type='virtio' primary="yes" heads='1' blob="on"/> > + </video> > + <memballoon model='virtio'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c > index 6cf35a0ebf..7c0ba970af 100644 > --- a/tests/qemuxml2argvtest.c > +++ b/tests/qemuxml2argvtest.c > @@ -2532,6 +2532,15 @@ mymain(void) > DO_TEST("video-virtio-vga", > QEMU_CAPS_DEVICE_VIRTIO_GPU, > QEMU_CAPS_DEVICE_VIRTIO_VGA); > + DO_TEST("video-virtio-blob-on", > + QEMU_CAPS_DEVICE_VIRTIO_GPU); > + DO_TEST("video-virtio-vga-blob-on", > + QEMU_CAPS_DEVICE_VIRTIO_GPU, > + QEMU_CAPS_DEVICE_VIRTIO_VGA); > + DO_TEST("video-virtio-blob-off", > + QEMU_CAPS_DEVICE_VIRTIO_GPU); > + DO_TEST("video-virtio-blob-absent", > + QEMU_CAPS_DEVICE_VIRTIO_GPU); > DO_TEST_CAPS_LATEST("video-virtio-vga-gpu-gl"); > DO_TEST_CAPS_LATEST("video-bochs-display-device"); > DO_TEST_CAPS_LATEST("video-ramfb-display-device"); > diff --git a/tests/qemuxml2xmloutdata/video-virtio-blob-absent.xml b/tests/qemuxml2xmloutdata/video-virtio-blob-absent.xml > new file mode 100644 > index 0000000000..827ed19153 > --- /dev/null > +++ b/tests/qemuxml2xmloutdata/video-virtio-blob-absent.xml > @@ -0,0 +1,41 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>1048576</memory> > + <currentMemory unit='KiB'>1048576</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu-system-i386</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2' cache='none'/> > + <source file='/var/lib/libvirt/images/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> > + </controller> > + <controller type='usb' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> > + </controller> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <audio id='1' type='none'/> > + <video> > + <model type='virtio' heads='1' primary='yes'/> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> > + </video> > + <memballoon model='virtio'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> > + </memballoon> > + </devices> > +</domain> > diff --git a/tests/qemuxml2xmloutdata/video-virtio-blob-off.xml b/tests/qemuxml2xmloutdata/video-virtio-blob-off.xml > new file mode 100644 > index 0000000000..5742687d6a > --- /dev/null > +++ b/tests/qemuxml2xmloutdata/video-virtio-blob-off.xml > @@ -0,0 +1,41 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>1048576</memory> > + <currentMemory unit='KiB'>1048576</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu-system-i386</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2' cache='none'/> > + <source file='/var/lib/libvirt/images/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> > + </controller> > + <controller type='usb' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> > + </controller> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <audio id='1' type='none'/> > + <video> > + <model type='virtio' heads='1' primary='yes' blob='off'/> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> > + </video> > + <memballoon model='virtio'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> > + </memballoon> > + </devices> > +</domain> > diff --git a/tests/qemuxml2xmloutdata/video-virtio-blob-on.xml b/tests/qemuxml2xmloutdata/video-virtio-blob-on.xml > new file mode 100644 > index 0000000000..649c4e5e4c > --- /dev/null > +++ b/tests/qemuxml2xmloutdata/video-virtio-blob-on.xml > @@ -0,0 +1,41 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>1048576</memory> > + <currentMemory unit='KiB'>1048576</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu-system-i386</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2' cache='none'/> > + <source file='/var/lib/libvirt/images/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> > + </controller> > + <controller type='usb' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> > + </controller> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <audio id='1' type='none'/> > + <video> > + <model type='virtio' heads='1' primary='yes' blob='on'/> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> > + </video> > + <memballoon model='virtio'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> > + </memballoon> > + </devices> > +</domain> > diff --git a/tests/qemuxml2xmloutdata/video-virtio-vga-blob-on.xml b/tests/qemuxml2xmloutdata/video-virtio-vga-blob-on.xml > new file mode 100644 > index 0000000000..649c4e5e4c > --- /dev/null > +++ b/tests/qemuxml2xmloutdata/video-virtio-vga-blob-on.xml > @@ -0,0 +1,41 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory unit='KiB'>1048576</memory> > + <currentMemory unit='KiB'>1048576</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu-system-i386</emulator> > + <disk type='file' device='disk'> > + <driver name='qemu' type='qcow2' cache='none'/> > + <source file='/var/lib/libvirt/images/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> > + </controller> > + <controller type='usb' index='0'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> > + </controller> > + <controller type='pci' index='0' model='pci-root'/> > + <input type='mouse' bus='ps2'/> > + <input type='keyboard' bus='ps2'/> > + <audio id='1' type='none'/> > + <video> > + <model type='virtio' heads='1' primary='yes' blob='on'/> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> > + </video> > + <memballoon model='virtio'> > + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> > + </memballoon> > + </devices> > +</domain> > diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c > index 007c9edacd..e002093bda 100644 > --- a/tests/qemuxml2xmltest.c > +++ b/tests/qemuxml2xmltest.c > @@ -1276,6 +1276,15 @@ mymain(void) > QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW); > DO_TEST("video-none-device", QEMU_CAPS_VNC); > DO_TEST_CAPS_LATEST("video-virtio-vga-gpu-gl"); > + DO_TEST("video-virtio-blob-on", > + QEMU_CAPS_DEVICE_VIRTIO_GPU); > + DO_TEST("video-virtio-vga-blob-on", > + QEMU_CAPS_DEVICE_VIRTIO_GPU, > + QEMU_CAPS_DEVICE_VIRTIO_VGA); > + DO_TEST("video-virtio-blob-off", > + QEMU_CAPS_DEVICE_VIRTIO_GPU); > + DO_TEST("video-virtio-blob-absent", > + QEMU_CAPS_DEVICE_VIRTIO_GPU); > > DO_TEST_CAPS_LATEST("intel-iommu"); > DO_TEST_CAPS_LATEST("intel-iommu-caching-mode"); > -- > 2.34.1 > Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|