[libvirt] [PATCH v4 08/20] qemu: validate virtio-gpu with vhost-user
Cole Robinson
crobinso at redhat.com
Fri Sep 20 20:21:58 UTC 2019
On 9/13/19 8:50 AM, marcandre.lureau at redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau at redhat.com>
>
> Check qemu capability, and accept 3d acceleration. 3d acceleration
> support is checked when looking for a suitable vhost-user helper.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
> ---
> src/qemu/qemu_process.c | 57 +++++++++++++++++++++++-----------------
> tests/qemuxml2argvtest.c | 3 +--
> 2 files changed, 34 insertions(+), 26 deletions(-)
>
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 955ba4de4c..463b783966 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -5266,34 +5266,43 @@ qemuProcessStartValidateVideo(virDomainObjPtr vm,
> for (i = 0; i < vm->def->nvideos; i++) {
> video = vm->def->videos[i];
>
> - if ((video->type == VIR_DOMAIN_VIDEO_TYPE_VGA &&
> - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA)) ||
> - (video->type == VIR_DOMAIN_VIDEO_TYPE_CIRRUS &&
> - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA)) ||
> - (video->type == VIR_DOMAIN_VIDEO_TYPE_VMVGA &&
> - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMWARE_SVGA)) ||
> - (video->type == VIR_DOMAIN_VIDEO_TYPE_QXL &&
> - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) ||
> - (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
> - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)) ||
> - (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
> - video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW &&
> - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW))) {
> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("this QEMU does not support '%s' video device"),
> - virDomainVideoTypeToString(video->type));
> - return -1;
> - }
> -
> - if (video->accel) {
> - if (video->accel->accel3d == VIR_TRISTATE_SWITCH_ON &&
> - (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO ||
> - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_VIRGL))) {
> + if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER) {
> + if (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VHOST_USER_GPU)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> + _("this QEMU does not support 'vhost-user' video device"));
> + return -1;
> + }
> + } else {
> + if ((video->type == VIR_DOMAIN_VIDEO_TYPE_VGA &&
> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA)) ||
> + (video->type == VIR_DOMAIN_VIDEO_TYPE_CIRRUS &&
> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA)) ||
> + (video->type == VIR_DOMAIN_VIDEO_TYPE_VMVGA &&
> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMWARE_SVGA)) ||
> + (video->type == VIR_DOMAIN_VIDEO_TYPE_QXL &&
> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) ||
> + (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)) ||
> + (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
> + video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW &&
> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW))) {
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("%s 3d acceleration is not supported"),
> + _("this QEMU does not support '%s' video device"),
> virDomainVideoTypeToString(video->type));
> return -1;
> }
> +
> + if (video->accel) {
> + if (video->accel->accel3d == VIR_TRISTATE_SWITCH_ON &&
> + (video->type != VIR_DOMAIN_VIDEO_TYPE_VIRTIO ||
> + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_VIRGL))) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("%s 3d acceleration is not supported"),
> + virDomainVideoTypeToString(video->type));
> + return -1;
> + }
> + }
> }
> }
>
The quantity of indented code says to me this function should be split
up, but I think all this should be moved to Validate time anyways, so
it's something for the future
Reviewed-by: Cole Robinson <crobinso at redhat.com>
- Cole
More information about the libvir-list
mailing list