[libvirt] [PATCH 11/11] qemu_command: add support to use virtio as secondary video device
John Ferlan
jferlan at redhat.com
Sat Oct 8 14:02:14 UTC 2016
Nothing else to say?! Is this fixing an existing bug making some other
patch/fix "more correct".
On 09/30/2016 12:02 PM, Pavel Hrdina wrote:
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
> docs/formatdomain.html.in | 3 +-
> src/qemu/qemu_command.c | 32 ++++++++++++-------
> src/qemu/qemu_domain.c | 3 +-
> .../qemuxml2argv-video-virtio-gpu-sec.args | 25 +++++++++++++++
> .../qemuxml2argv-video-virtio-gpu-sec.xml | 36 ++++++++++++++++++++++
> tests/qemuxml2argvtest.c | 3 ++
> 6 files changed, 89 insertions(+), 13 deletions(-)
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-sec.args
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-sec.xml
>
Adding a new .xml without also adding a qemuxml2xmltest for the same xml
file? Note that you can "save" space if you make the xml2xml output
file be the same as the input file and just create a link to it (like a
number of other more recent changes are doing).
Also it seems there are two changes happening here - thus separate patches.
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index 1266e9d..f08cd01 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -5641,7 +5641,8 @@ qemu-kvm -net nic,model=? /dev/null
> video device in domain xml is the primary one, but the optional
> attribute <code>primary</code> (<span class="since">since 1.0.2</span>)
> with value 'yes' can be used to mark the primary in cases of multiple
> - video device. The non-primary must be type of "qxl".
> + video device. The non-primary must be type of "qxl" or
> + "virtio" (<span class="since">since 2.4.0</span>).
> </p>
> </dd>
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index bb8128e..2314b2df 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -114,6 +114,18 @@ VIR_ENUM_IMPL(qemuDeviceVideo, VIR_DOMAIN_VIDEO_TYPE_LAST,
> "", /* don't support parallels */
> "virtio-vga");
>
> +VIR_ENUM_DECL(qemuDeviceVideoSec)
> +
> +VIR_ENUM_IMPL(qemuDeviceVideoSec, VIR_DOMAIN_VIDEO_TYPE_LAST,
> + "", /* no secondary device for VGA*/
> + "", /* no secondary device for cirrus-vga*/
> + "", /* no secondary device for vmware-svga*/
> + "", /* no device for xen */
> + "", /* don't support vbox */
> + "qxl",
> + "", /* don't support parallels */
> + "virtio-gpu-pci");
> +
I know "Sec" is shorthand for secondary, but I've also seen it used for
"second"... being verbose isn't bad especially when you read the code
months later.
> VIR_ENUM_DECL(qemuSoundCodec)
>
> VIR_ENUM_IMPL(qemuSoundCodec, VIR_DOMAIN_SOUND_CODEC_TYPE_LAST,
> @@ -4299,18 +4311,16 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,
> virBuffer buf = VIR_BUFFER_INITIALIZER;
> const char *model;
>
> - if (video->primary) {
> + if (video->primary && qemuDomainSupportVideoVga(video, qemuCaps))
This alters your logic, but the else condition is assuming secondary and
in fact digging into that table... Shouldn't the logic be:
if (video->primary) {
if (qemuDomainSupportVideoVga()
model = qemuDeviceVideoTypeToString(video->type);
else
model = "virtio-gpu-pci";
} else {
model = qemuDeviceVideoSecTypeToString(video->type);
}
> model = qemuDeviceVideoTypeToString(video->type);
> - if (!model || STREQ(model, "")) {
> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("video type %s is not supported with QEMU"),
> - virDomainVideoTypeToString(video->type));
> - goto error;
> - }
> - if (!qemuDomainSupportVideoVga(video, qemuCaps))
> - model = "virtio-gpu-pci";
> - } else {
> - model = "qxl";
> + else
> + model = qemuDeviceVideoSecTypeToString(video->type);
> +
> + if (!model || STREQ(model, "")) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("invalid model for video type '%s'"),
> + virDomainVideoTypeToString(video->type));
> + goto error;
> }
>
> virBufferAsprintf(&buf, "%s,id=%s", model, video->info.alias);
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 79c945a..8218609 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -2404,7 +2404,8 @@ qemuDomainDefValidateVideo(const virDomainDef *def)
> video = def->videos[i];
>
> if (!video->primary &&
> - video->type != VIR_DOMAIN_VIDEO_TYPE_QXL) {
> + video->type != VIR_DOMAIN_VIDEO_TYPE_QXL &&
> + video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO) {
This would seemingly be a different/separate patch wouldn't it?
And I'm not sure which of the remaining checks this belongs with, but
I'm assuming it's this change.
John
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> _("video type '%s' is only valid as primary "
> "video device"),
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-sec.args b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-sec.args
> new file mode 100644
> index 0000000..a87c37b
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-sec.args
> @@ -0,0 +1,25 @@
> +LC_ALL=C \
> +PATH=/bin \
> +HOME=/home/test \
> +USER=test \
> +LOGNAME=test \
> +QEMU_AUDIO_DRV=none \
> +/usr/bin/qemu \
> +-name QEMUGuest1 \
> +-S \
> +-M pc \
> +-m 1024 \
> +-smp 1,sockets=1,cores=1,threads=1 \
> +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
> +-nographic \
> +-nodefaults \
> +-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \
> +-no-acpi \
> +-boot c \
> +-usb \
> +-drive file=/var/lib/libvirt/images/QEMUGuest1,format=qcow2,if=none,\
> +id=drive-ide0-0-0,cache=none \
> +-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
> +-device virtio-gpu-pci,id=video0,bus=pci.0,addr=0x2 \
> +-device virtio-gpu-pci,id=video1,bus=pci.0,addr=0x4 \
> +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-sec.xml b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-sec.xml
> new file mode 100644
> index 0000000..feba717
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-video-virtio-gpu-sec.xml
> @@ -0,0 +1,36 @@
> +<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</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' primary='yes'/>
> + </video>
> + <video>
> + <model type='virtio' heads='1'/>
> + </video>
> + <memballoon model='virtio'/>
> + </devices>
> +</domain>
> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
> index 4cbe57e..d8bcf93 100644
> --- a/tests/qemuxml2argvtest.c
> +++ b/tests/qemuxml2argvtest.c
> @@ -1616,6 +1616,9 @@ mymain(void)
> QEMU_CAPS_SPICE,
> QEMU_CAPS_SPICE_GL,
> QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
> + DO_TEST("video-virtio-gpu-sec",
> + QEMU_CAPS_DEVICE_VIRTIO_GPU,
> + QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
> DO_TEST("video-virtio-vga",
> QEMU_CAPS_DEVICE_VIRTIO_GPU,
> QEMU_CAPS_DEVICE_VIRTIO_VGA,
>
More information about the libvir-list
mailing list