[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