[PATCH v3] tests/drm_virtgpu: Add functional coverage for core VirtIO-GPU ioctls

Dorinda Bassey dbassey at redhat.com
Tue Jun 10 16:28:11 UTC 2025


Hi Kamil,

Thanks for the review.

Please use checkpatch.pl script from Linux kernel, for usefull
> options see CONTRIBUTING.md
> You could ignore MAINTAINER or CamelCase but please fix others.

For this I believe I already formatted the v3 patch using this checkpatch.pl
script. Is there something I'm missing?

Same here, you could print number of opened devices (with drm_fd >=0)

Ack

Br,
Dorinda.

On Fri, Jun 6, 2025 at 5:56 PM Kamil Konieczny <
kamil.konieczny at linux.intel.com> wrote:

> Hi Dorinda,
> On 2025-05-30 at 11:02:20 +0200, Dorinda Bassey wrote:
> > This test suite adds coverage for multiple DRM ioctls specific
> > to the VirtIO-GPU driver, verifying functionality such as
> > resource creation, memory mapping, 3D transfers, context
> > initialization, and parameter querying.
> > Each test validates a key ioctl to ensure correct behavior from
> > user space and backend implementations. Each subtest is
> > self-contained and can be executed independently.
> >
> > Included subtests:
> >   - drm-virtgpu-map
> >   - drm-virtgpu-execbuffer
> >   - drm-virtgpu-resource-info
> >   - drm-virtgpu-3d-transfer-to-host
> >   - drm-virtgpu-3d-transfer-from-host
> >   - drm-virtgpu-3d-wait
> >   - drm-virtgpu-resource-create-blob
> >   - drm-virtgpu-get-caps
> >   - drm-virtgpu-context-init
> >   - drm-virtgpu-getparam
> >
> > How to Test with QEMU virtio-vga-gl or rustvmm vhost-device-gpu
> >
> > 1. Launch a QEMU guest with virtio-vga-gl
> > ./build/qemu-system-x86_64 \
> >   -enable-kvm \
> >   -cpu host \
> >   -m 4096 \
> >   -machine q35 \
> >   -display gtk,gl=on \
> >   -vga none \
> >   -device virtio-vga-gl \
> >   -drive file=image.qcow2,format=qcow2 \
> >   -netdev user,id=n0,hostfwd=tcp::2222-:22 \
> >   -device virtio-net-pci,netdev=n0
> >
> > ssh into the guest and run the tests.
> >
> > 2. Start the vhost-device-gpu backend and Launch a QEMU
> > guest with vhost-user-gpu-pci or vhost-user-vga, see guide on:
> > https://crates.io/crates/vhost-device-gpu
> >
> > Signed-off-by: Dorinda Bassey <dbassey at redhat.com>
>
> Please use checkpatch.pl script from Linux kernel, for usefull
> options see CONTRIBUTING.md
> You could ignore MAINTAINER or CamelCase but please fix others.
>
> With that fixed
> Acked-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
>
> I will wait with merge for a review from someone in your Cc list.
>
> One more nit below.
>
> > ---
> > v3:
> > Fix resource format and clarify capset IDs
> >
> >  tests/drm_virtgpu.c | 420 ++++++++++++++++++++++++++++++++++++++++++++
> >  tests/meson.build   |   1 +
> >  2 files changed, 421 insertions(+)
> >  create mode 100644 tests/drm_virtgpu.c
> >
> > diff --git a/tests/drm_virtgpu.c b/tests/drm_virtgpu.c
> > new file mode 100644
> > index 000000000..4d7c9e8f5
> > --- /dev/null
> > +++ b/tests/drm_virtgpu.c
> > @@ -0,0 +1,420 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2025 Red Hat Inc.
> > + *
> > + * Authors: Dorinda Bassey <dbassey at redhat.com>
> > + */
> > +
> > +/**
> > + * TEST: drm virtgpu ioctls
> > + * Description: Testing of the virtIO-GPU driver DRM ioctls
> > + * Category: Core
> > + * Mega feature: General Core features
> > + * Sub-category:  virtIO-GPU DRM ioctls
> > + * Functionality: drm_ioctls
> > + * Feature: Virtualization graphics support
> > + * Test category: functionality test
> > + */
> > +
> > +#include <fcntl.h>
> > +#include <errno.h>
> > +#include <string.h>
> > +#include <sys/ioctl.h>
> > +
> > +#include "drm.h"
> > +#include "virtgpu_drm.h"
> > +#include "igt.h"
> > +
> > +/**
> > + * SUBTEST: drm-virtgpu-map
> > + *
> > + * SUBTEST: drm-virtgpu-execbuffer
> > + *
> > + * SUBTEST: drm-virtgpu-resource-info
> > + *
> > + * SUBTEST: drm-virtgpu-3d-transfer-to-host
> > + *
> > + * SUBTEST: drm-virtgpu-3d-transfer-from-host
> > + *
> > + * SUBTEST: drm-virtgpu-3d-wait
> > + *
> > + * SUBTEST: drm-virtgpu-resource-create
> > + *
> > + * SUBTEST: drm-virtgpu-resource-create-blob
> > + *
> > + * SUBTEST: drm-virtgpu-get-caps
> > +
> > + * SUBTEST: drm-virtgpu-context-init
> > + *
> > + * SUBTEST: drm-virtgpu-getparam
> > + */
> > +
> > +IGT_TEST_DESCRIPTION("Testing of the virtIO-GPU driver DRM ioctls");
> > +
> > +#define VIRTGPU_DEVICE "/dev/dri/card0"
> > +
> > +#define CAPS_BUFFER_SIZE 4096
> > +#define MAX_CARDS 16
> > +
> > +int drm_fd;
> > +struct drm_virtgpu_resource_create args;
> > +bool resource_created;
> > +
> > +static int open_virtgpu_device(void)
> > +{
> > +     drmVersionPtr version;
> > +
> > +     for (int i = 0; i < MAX_CARDS; i++) {
> > +             char path[64];
> > +
> > +             snprintf(path, sizeof(path), "/dev/dri/card%d", i);
> > +             drm_fd = open(path, O_RDWR | O_CLOEXEC);
> > +             if (drm_fd < 0)
> > +                     continue;
> > +
> > +             version = drmGetVersion(drm_fd);
> > +             if (version && strcmp(version->name, "virtio_gpu") == 0) {
> > +                     drmFreeVersion(version);
>
> You could print path here (with igt_info or igt_debug).
>
> > +                     return drm_fd;
> > +             }
> > +
> > +             drmFreeVersion(version);
> > +             close(drm_fd);
> > +     }
>
> Same here, you could print number of opened devices (with drm_fd >=0)
>
> Regards,
> Kamil
>
> > +     return -1;
> > +}
> > +
> > +static const struct {
> > +     const char *name;
> > +     uint64_t id;
> > +} params[] = {
> > +     {"3D_FEATURES", VIRTGPU_PARAM_3D_FEATURES},
> > +     {"CAPSET_QUERY_FIX", VIRTGPU_PARAM_CAPSET_QUERY_FIX},
> > +     {"RESOURCE_BLOB", VIRTGPU_PARAM_RESOURCE_BLOB},
> > +     {"HOST_VISIBLE", VIRTGPU_PARAM_HOST_VISIBLE},
> > +     {"CROSS_DEVICE", VIRTGPU_PARAM_CROSS_DEVICE},
> > +     {"CONTEXT_INIT", VIRTGPU_PARAM_CONTEXT_INIT},
> > +     {"SUPPORTED_CAPSET_IDs", VIRTGPU_PARAM_SUPPORTED_CAPSET_IDs},
> > +     {"EXPLICIT_DEBUG_NAME", VIRTGPU_PARAM_EXPLICIT_DEBUG_NAME},
> > +};
> > +
>
> ...cut...
>
> > +}
> > diff --git a/tests/meson.build b/tests/meson.build
> > index 20ddddb89..ac85cac30 100644
> > --- a/tests/meson.build
> > +++ b/tests/meson.build
> > @@ -13,6 +13,7 @@ test_progs = [
> >       'drm_buddy',
> >       'drm_mm',
> >       'drm_read',
> > +     'drm_virtgpu',
> >       'fbdev',
> >       'kms_3d',
> >       'kms_addfb_basic',
> > --
> > 2.48.1
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/igt-dev/attachments/20250610/41f7ecce/attachment-0001.htm>


More information about the igt-dev mailing list