From: "José Expósito" <jose.exposito89@gmail.com>
To: Kamil Konieczny <kamil.konieczny@linux.intel.com>
Cc: igt-dev@lists.freedesktop.org, louis.chauvet@bootlin.com,
zbigniew.kempczynski@intel.com, karthik.b.s@intel.com,
Jim Shargo <jshargo@chromium.org>,
Marius Vlad <marius.vlad@collabora.com>
Subject: Re: [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files
Date: Thu, 14 Aug 2025 12:52:22 +0200 [thread overview]
Message-ID: <aJ2_5pdRf2Ag_Iiw@fedora> (raw)
In-Reply-To: <20250813132826.oogpkwws3524ddx5@kamilkon-DESK.igk.intel.com>
Hi Kamil,
On Wed, Aug 13, 2025 at 03:28:26PM +0200, Kamil Konieczny wrote:
> Hi José,
> On 2025-08-07 at 09:45:11 +0200, José Expósito wrote:
> > Create a library containing helpers for creating VKMS devices and
> > configuring them dynamically using configfs.
> > For the moment, add the minimal number of helpers to be able to start
> > testing VKMS's configfs support: Create device, destroy device and
> > destroy all devices.
> >
> > Also, include the simplest possible test using those helpers (checking
> > the device's default files) and the scaffolding required to generate
> > the documentation.
> >
> > Co-developed-by: Jim Shargo <jshargo@chromium.org>
> > Signed-off-by: Jim Shargo <jshargo@chromium.org>
> > Co-developed-by: Marius Vlad <marius.vlad@collabora.com>
> > Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
> > Signed-off-by: José Expósito <jose.exposito89@gmail.com>
> > ---
> > lib/igt_vkms.c | 206 +++++++++++++++++++++++++++++++++++++
> > lib/igt_vkms.h | 27 +++++
> > lib/meson.build | 1 +
> > meson.build | 8 ++
> > tests/meson.build | 2 +
> > tests/vkms/meson.build | 13 +++
> > tests/vkms/vkms_configfs.c | 131 +++++++++++++++++++++++
>
> I checked changes as they are only minimal, imho you could keep
> Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
>
> Also, you removed changes from testplan and docs building so
> for build/meson changes
> Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>
>
> Btw checkpatch suggests even one more const
> static const char * array should probably be static const char * const
> but you could fix that later.
Thanks a lot for your reviews. Almost all patches are reviewed now.
Let's see if the DRM series get merged soon and we can merge this
one as well :)
About the additional const, I noticed it, but then ARRAY_SIZE() would
trigger a warning about that extra const, so I decided to ignore
checkpatch and avoid unnecessary refactors.
Thanks,
Jose
> Regards,
> Kamil
>
> > 7 files changed, 388 insertions(+)
> > create mode 100644 lib/igt_vkms.c
> > create mode 100644 lib/igt_vkms.h
> > create mode 100644 tests/vkms/meson.build
> > create mode 100644 tests/vkms/vkms_configfs.c
> >
> > diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
> > new file mode 100644
> > index 000000000..03931d2e4
> > --- /dev/null
> > +++ b/lib/igt_vkms.c
> > @@ -0,0 +1,206 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2023 Google LLC.
> > + * Copyright © 2023 Collabora, Ltd.
> > + * Copyright © 2024-2025 Red Hat, Inc.
> > + */
> > +
> > +#include <dirent.h>
> > +#include <errno.h>
> > +#include <ftw.h>
> > +#include <limits.h>
> > +#include <string.h>
> > +#include <sys/stat.h>
> > +
> > +#include "igt.h"
> > +#include "igt_vkms.h"
> > +
> > +#define VKMS_ROOT_DIR_NAME "vkms"
> > +
> > +/**
> > + * SECTION:igt_vkms
> > + * @short_description: Helpers to create and configure VKMS devices
> > + * @title: VKMS
> > + * @include: igt_vkms.h
> > + *
> > + * Helpers for creating VKMS devices and configuring them dynamically.
> > + *
> > + * First, create a VKMS device, next, add pipeline items (planes, CRTCs,
> > + * encoders, CRTCs and connectors) compose the pipeline by attaching each item
> > + * using the _attach_ functions and finally, enable the VKMS device.
> > + */
> > +
> > +static const char *mount_vkms_configfs(void)
> > +{
> > + static char vkms_root_path[PATH_MAX];
> > + const char *configfs_path;
> > + int ret;
> > +
> > + configfs_path = igt_configfs_mount();
> > + igt_assert_f(configfs_path, "Error mounting configfs");
> > +
> > + ret = snprintf(vkms_root_path, sizeof(vkms_root_path), "%s/%s",
> > + configfs_path, VKMS_ROOT_DIR_NAME);
> > + igt_assert(ret >= 0 && ret < sizeof(vkms_root_path));
> > +
> > + return vkms_root_path;
> > +}
> > +
> > +/**
> > + * igt_require_vkms_configfs:
> > + *
> > + * Require that VKMS supports configfs configuration.
> > + */
> > +void igt_require_vkms_configfs(void)
> > +{
> > + const char *vkms_root_path;
> > + DIR *dir;
> > +
> > + vkms_root_path = mount_vkms_configfs();
> > +
> > + dir = opendir(vkms_root_path);
> > + igt_require(dir);
> > + if (dir)
> > + closedir(dir);
> > +}
> > +
> > +/**
> > + * igt_vkms_device_create:
> > + * @name: VKMS device name
> > + *
> > + * Create a directory in the ConfigFS VKMS root directory, where the entire
> > + * pipeline will be configured.
> > + */
> > +igt_vkms_t *igt_vkms_device_create(const char *name)
> > +{
> > + igt_vkms_t *dev;
> > + const char *vkms_root_path;
> > + size_t path_len;
> > + DIR *dir;
> > + int ret;
> > +
> > + dev = calloc(1, sizeof(*dev));
> > +
> > + vkms_root_path = mount_vkms_configfs();
> > +
> > + path_len = strlen(vkms_root_path) + strlen(name) + 2;
> > + dev->path = malloc(path_len);
> > + ret = snprintf(dev->path, path_len, "%s/%s", vkms_root_path, name);
> > + igt_assert(ret >= 0 && ret < path_len);
> > +
> > + dir = opendir(dev->path);
> > + if (dir) {
> > + igt_debug("Device at path %s already exists\n", dev->path);
> > + closedir(dir);
> > + } else {
> > + ret = mkdir(dev->path, 0777);
> > + if (ret != 0) {
> > + free(dev->path);
> > + free(dev);
> > + dev = NULL;
> > + }
> > + }
> > +
> > + return dev;
> > +}
> > +
> > +static int detach_pipeline_items(const char *path, const struct stat *info,
> > + const int typeflag, struct FTW *pathinfo)
> > +{
> > + /*
> > + * Level 4 are the links in the possible_* directories:
> > + * vkms/<dev>/<pipeline items>/<pipeline item>/<possible_*>/<links>
> > + */
> > + if (pathinfo->level == 4 && typeflag == FTW_SL) {
> > + igt_debug("Detaching pipeline item %s\n", path);
> > + return unlink(path);
> > + }
> > +
> > + /* Ignore the other files, they are removed by remove_pipeline_items */
> > + return 0;
> > +}
> > +
> > +static int remove_pipeline_items(const char *path, const struct stat *info,
> > + const int typeflag, struct FTW *pathinfo)
> > +{
> > + /* Level 0 is the device root directory: vkms/<dev> */
> > + if (pathinfo->level == 0) {
> > + igt_debug("Removing pipeline item %s\n", path);
> > + return rmdir(path);
> > + }
> > +
> > + /*
> > + * Level 2 directories are the pipeline items:
> > + * vkms/<dev>/<pipeline items>/<pipeline item>
> > + */
> > + if (pathinfo->level == 2 && typeflag == FTW_DP) {
> > + igt_debug("Removing pipeline item %s\n", path);
> > + return rmdir(path);
> > + }
> > +
> > + /* Ignore the other files, they are removed by VKMS */
> > + return 0;
> > +}
> > +
> > +static int remove_device_dir(igt_vkms_t *dev)
> > +{
> > + int ret;
> > +
> > + ret = nftw(dev->path, detach_pipeline_items, 64, FTW_DEPTH | FTW_PHYS);
> > + if (ret)
> > + return ret;
> > +
> > + ret = nftw(dev->path, remove_pipeline_items, 64, FTW_DEPTH | FTW_PHYS);
> > + return ret;
> > +}
> > +
> > +/**
> > + * igt_vkms_device_destroy:
> > + * @dev: Device to destroy
> > + *
> > + * Remove and free the VKMS device.
> > + */
> > +void igt_vkms_device_destroy(igt_vkms_t *dev)
> > +{
> > + int ret;
> > +
> > + igt_assert(dev);
> > +
> > + ret = remove_device_dir(dev);
> > + igt_assert_f(ret == 0,
> > + "Unable to rmdir device directory '%s'. Got errno=%d (%s)\n",
> > + dev->path, errno, strerror(errno));
> > +
> > + free(dev->path);
> > + free(dev);
> > +}
> > +
> > +/**
> > + * igt_vkms_destroy_all_devices:
> > + *
> > + * Remove all VKMS devices created via configfs.
> > + */
> > +void igt_vkms_destroy_all_devices(void)
> > +{
> > + igt_vkms_t *dev;
> > + const char *vkms_root_path;
> > + DIR *dir;
> > + struct dirent *ent;
> > +
> > + vkms_root_path = mount_vkms_configfs();
> > + dir = opendir(vkms_root_path);
> > + igt_assert_f(dir, "VKMS configfs directory not available at '%s'. "
> > + "Got errno=%d (%s)\n", vkms_root_path, errno,
> > + strerror(errno));
> > +
> > + while ((ent = readdir(dir)) != NULL) {
> > + if (strcmp(ent->d_name, ".") == 0 ||
> > + strcmp(ent->d_name, "..") == 0)
> > + continue;
> > +
> > + dev = igt_vkms_device_create(ent->d_name);
> > + igt_vkms_device_destroy(dev);
> > + }
> > +
> > + closedir(dir);
> > +}
> > diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
> > new file mode 100644
> > index 000000000..95d7a53cd
> > --- /dev/null
> > +++ b/lib/igt_vkms.h
> > @@ -0,0 +1,27 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2023 Google LLC.
> > + * Copyright © 2023 Collabora, Ltd.
> > + * Copyright © 2024-2025 Red Hat, Inc.
> > + */
> > +
> > +#ifndef __IGT_VKMS_H__
> > +#define __IGT_VKMS_H__
> > +
> > +/**
> > + * igt_vkms_t:
> > + * @path: VKMS root directory inside configfs mounted directory
> > + *
> > + * A struct representing a VKMS device.
> > + */
> > +typedef struct igt_vkms {
> > + char *path;
> > +} igt_vkms_t;
> > +
> > +void igt_require_vkms_configfs(void);
> > +
> > +igt_vkms_t *igt_vkms_device_create(const char *name);
> > +void igt_vkms_device_destroy(igt_vkms_t *dev);
> > +void igt_vkms_destroy_all_devices(void);
> > +
> > +#endif /* __IGT_VKMS_H__ */
> > diff --git a/lib/meson.build b/lib/meson.build
> > index 2eaca42a4..62ba7f262 100644
> > --- a/lib/meson.build
> > +++ b/lib/meson.build
> > @@ -50,6 +50,7 @@ lib_sources = [
> > 'igt_types.c',
> > 'igt_vec.c',
> > 'igt_vgem.c',
> > + 'igt_vkms.c',
> > 'igt_x86.c',
> > 'instdone.c',
> > 'intel_allocator.c',
> > diff --git a/meson.build b/meson.build
> > index aeed3b1d2..f7ae427b3 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -290,6 +290,7 @@ msmdir = join_paths(libexecdir, 'msm')
> > panfrostdir = join_paths(libexecdir, 'panfrost')
> > v3ddir = join_paths(libexecdir, 'v3d')
> > vc4dir = join_paths(libexecdir, 'vc4')
> > +vkmsdir = join_paths(libexecdir, 'vkms')
> > vmwgfxdir = join_paths(libexecdir, 'vmwgfx')
> > mandir = get_option('mandir')
> > pkgconfigdir = join_paths(libdir, 'pkgconfig')
> > @@ -352,6 +353,12 @@ if get_option('use_rpath')
> > endforeach
> > vc4_rpathdir = join_paths(vc4_rpathdir, libdir)
> >
> > + vkms_rpathdir = '$ORIGIN'
> > + foreach p : vkmsdir.split('/')
> > + vkms_rpathdir = join_paths(vkms_rpathdir, '..')
> > + endforeach
> > + vkms_rpathdir = join_paths(vkms_rpathdir, libdir)
> > +
> > vmwgfx_rpathdir = '$ORIGIN'
> > foreach p : vmwgfxdir.split('/')
> > vmwgfx_rpathdir = join_paths(vmwgfx_rpathdir, '..')
> > @@ -365,6 +372,7 @@ else
> > panfrost_rpathdir = ''
> > v3d_rpathdir = ''
> > vc4_rpathdir = ''
> > + vkms_rpathdir = ''
> > vmwgfx_rpathdir = ''
> > endif
> >
> > diff --git a/tests/meson.build b/tests/meson.build
> > index 5c01c64e9..a7b9375ed 100644
> > --- a/tests/meson.build
> > +++ b/tests/meson.build
> > @@ -490,6 +490,8 @@ subdir('v3d')
> >
> > subdir('vc4')
> >
> > +subdir('vkms')
> > +
> > subdir('vmwgfx')
> >
> > gen_testlist = find_program('generate_testlist.sh')
> > diff --git a/tests/vkms/meson.build b/tests/vkms/meson.build
> > new file mode 100644
> > index 000000000..e55ba32ba
> > --- /dev/null
> > +++ b/tests/vkms/meson.build
> > @@ -0,0 +1,13 @@
> > +vkms_progs = [
> > + 'vkms_configfs',
> > +]
> > +vkms_deps = test_deps
> > +
> > +foreach prog : vkms_progs
> > + test_executables += executable(prog, prog + '.c',
> > + dependencies : vkms_deps,
> > + install_dir : vkmsdir,
> > + install_rpath : vkms_rpathdir,
> > + install : true)
> > + test_list += join_paths('vkms', prog)
> > +endforeach
> > diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
> > new file mode 100644
> > index 000000000..f659a7a22
> > --- /dev/null
> > +++ b/tests/vkms/vkms_configfs.c
> > @@ -0,0 +1,131 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2023 Google LLC.
> > + * Copyright © 2023 Collabora, Ltd.
> > + * Copyright © 2024-2025 Red Hat, Inc.
> > + */
> > +
> > +/**
> > + * TEST: Tests for VKMS configfs support.
> > + * Category: Display
> > + * Mega feature: General Display Features
> > + * Sub-category: uapi
> > + * Functionality: vkms,configfs
> > + * Test category: functionality test
> > + */
> > +
> > +#include <dirent.h>
> > +#include <limits.h>
> > +#include <string.h>
> > +#include <sys/stat.h>
> > +
> > +#include "drmtest.h"
> > +#include "igt.h"
> > +#include "igt_vkms.h"
> > +
> > +static void assert_default_files(const char *path,
> > + const char **files, size_t n_files,
> > + const char **dirs, size_t n_dirs)
> > +{
> > + DIR *dir;
> > + struct dirent *ent;
> > + int total = 0;
> > + int ret;
> > +
> > + /* Check that the number of files/directories matches the expected */
> > + dir = opendir(path);
> > + igt_assert(dir);
> > + while ((ent = readdir(dir)) != NULL) {
> > + if (strcmp(ent->d_name, ".") == 0 ||
> > + strcmp(ent->d_name, "..") == 0)
> > + continue;
> > +
> > + total++;
> > + }
> > + igt_assert_eq(total, n_dirs + n_files);
> > + closedir(dir);
> > +
> > + /* Check that the files/directories are present */
> > + for (int i = 0; i < n_files; i++) {
> > + char file_path[PATH_MAX];
> > + struct stat buf;
> > +
> > + ret = snprintf(file_path, sizeof(file_path), "%s/%s", path,
> > + files[i]);
> > + igt_assert(ret >= 0 && ret < sizeof(file_path));
> > +
> > + igt_assert_f(stat(file_path, &buf) == 0,
> > + "File %s does not exists\n", file_path);
> > + }
> > +
> > + for (int i = 0; i < n_dirs; i++) {
> > + char dir_path[PATH_MAX];
> > +
> > + ret = snprintf(dir_path, sizeof(dir_path), "%s/%s", path,
> > + dirs[i]);
> > + igt_assert(ret >= 0 && ret < sizeof(dir_path));
> > +
> > + dir = opendir(dir_path);
> > + igt_assert_f(dir, "Directory %s does not exists\n", dir_path);
> > + closedir(dir);
> > + }
> > +}
> > +
> > +/**
> > + * SUBTEST: device-default-files
> > + * Description: Test that creating a VKMS device creates the default files and
> > + * directories.
> > + */
> > +
> > +static void test_device_default_files(void)
> > +{
> > + igt_vkms_t *dev;
> > +
> > + static const char *files[] = {
> > + "enabled",
> > + };
> > +
> > + static const char *dirs[] = {
> > + "planes",
> > + "crtcs",
> > + "encoders",
> > + "connectors",
> > + };
> > +
> > + dev = igt_vkms_device_create(__func__);
> > + igt_assert(dev);
> > +
> > + assert_default_files(dev->path,
> > + files, ARRAY_SIZE(files),
> > + dirs, ARRAY_SIZE(dirs));
> > +
> > + igt_vkms_device_destroy(dev);
> > +}
> > +
> > +igt_main
> > +{
> > + struct {
> > + const char *name;
> > + void (*fn)(void);
> > + } tests[] = {
> > + { "device-default-files", test_device_default_files },
> > + };
> > +
> > + igt_fixture {
> > + drm_load_module(DRIVER_VKMS);
> > + igt_require_vkms();
> > + igt_require_vkms_configfs();
> > + igt_vkms_destroy_all_devices();
> > + }
> > +
> > + for (int i = 0; i < ARRAY_SIZE(tests); i++) {
> > + igt_subtest(tests[i].name)
> > + tests[i].fn();
> > + }
> > +
> > + igt_fixture {
> > + igt_require_vkms();
> > + igt_require_vkms_configfs();
> > + igt_vkms_destroy_all_devices();
> > + }
> > +}
> > --
> > 2.50.1
> >
next prev parent reply other threads:[~2025-08-14 10:52 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-07 7:45 [PATCH i-g-t v4 00/41] VKMS configfs tests José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 01/41] lib/drmtest: Add VKMS as a known driver type José Expósito
2025-08-12 15:33 ` Kamil Konieczny
2025-09-05 20:48 ` Louis Chauvet
2025-08-07 7:45 ` [PATCH i-g-t v4 02/41] lib/vkms: Add minimal VKMS library and test device default files José Expósito
2025-08-13 13:28 ` Kamil Konieczny
2025-08-14 10:52 ` José Expósito [this message]
2025-08-28 10:49 ` Kamil Konieczny
2025-09-05 20:49 ` Louis Chauvet
2025-09-08 11:30 ` Kamil Konieczny
2025-08-07 7:45 ` [PATCH i-g-t v4 03/41] lib/vkms: Allow to enable/disable VKMS devices José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 04/41] tests/vkms_configfs: Test device invalid values José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 05/41] lib/vkms: Test plane default files José Expósito
2025-08-13 13:38 ` Kamil Konieczny
2025-09-05 20:51 ` Louis Chauvet
2025-08-07 7:45 ` [PATCH i-g-t v4 06/41] lib/vkms: Test plane default values José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 07/41] lib/vkms: Test plane invalid values José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 08/41] tests/vkms_configfs: Test plane valid values José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 09/41] lib/vkms: Test CRTC default files José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 10/41] lib/vkms: Test CRTC default values José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 11/41] lib/vkms: Test CRTC invalid values José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 12/41] tests/vkms_configfs: Test CRTC valid values José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 13/41] lib/vkms: Test encoder default files José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 14/41] lib/vkms: Test connector " José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 15/41] lib/vkms: Test connector default values José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 16/41] lib/vkms: Test connector invalid values José Expósito
2025-08-28 10:48 ` Kamil Konieczny
2025-09-05 20:53 ` Louis Chauvet
2025-08-07 7:45 ` [PATCH i-g-t v4 17/41] tests/vkms_configfs: Test connector valid values José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 18/41] lib/vkms: Test attaching planes to CRTCs José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 19/41] lib/vkms: Test attaching encoders " José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 20/41] lib/vkms: Test attaching connectors to encoders José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 21/41] lib/igt_device_scan: Allow to find device by sysname José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 22/41] tests/vkms_configfs: Test enablement without pipeline items José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 23/41] lib/vkms: Create VKMS device from static config José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 24/41] tests/vkms_configfs: Test adding too many planes José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 25/41] tests/vkms_configfs: Test not adding a primary plane José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 26/41] tests/vkms_configfs: Test adding multiple primary planes José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 27/41] tests/vkms_configfs: Test adding multiple cursor planes José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 28/41] tests/vkms_configfs: Test adding a plane without possible CRTCs José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 29/41] tests/vkms_configfs: Test enabling a device without CRTCs José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 30/41] tests/vkms_configfs: Test enabling a device with too many CRTCs José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 31/41] tests/vkms_configfs: Test enabling a device without encoders José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 32/41] tests/vkms_configfs: Test enabling a device with too many encoders José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 33/41] tests/vkms_configfs: Test adding an encoder without possible CRTCs José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 34/41] tests/vkms_configfs: Test adding a CRTC without encoders José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 35/41] tests/vkms_configfs: Test enabling a device without connectors José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 36/41] tests/vkms_configfs: Test enabling a device with too many connectors José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 37/41] lib/vkms: Test changing enabled device planes José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 38/41] lib/vkms: Test changing enabled device CRTCs José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 39/41] lib/vkms: Test changing enabled device encoders José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 40/41] lib/vkms: Test changing enabled device connectors José Expósito
2025-08-07 7:45 ` [PATCH i-g-t v4 41/41] tests/vkms_configfs: Test connector hot-plug José Expósito
2025-08-07 9:02 ` ✓ i915.CI.BAT: success for VKMS configfs tests (rev7) Patchwork
2025-08-07 9:16 ` ✓ Xe.CI.BAT: " Patchwork
2025-08-07 10:16 ` ✗ Xe.CI.Full: failure " Patchwork
2025-08-07 11:08 ` ✗ i915.CI.Full: " Patchwork
2025-09-05 20:55 ` [PATCH i-g-t v4 00/41] VKMS configfs tests Louis Chauvet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aJ2_5pdRf2Ag_Iiw@fedora \
--to=jose.exposito89@gmail.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=jshargo@chromium.org \
--cc=kamil.konieczny@linux.intel.com \
--cc=karthik.b.s@intel.com \
--cc=louis.chauvet@bootlin.com \
--cc=marius.vlad@collabora.com \
--cc=zbigniew.kempczynski@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.