* [igt-dev] [PATCH i-g-t 0/3] Add tests and support for VKMS's new ConfigFS features
@ 2023-06-23 23:09 James Shargo
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 1/3] lib/drmtest: Add VKMS as a known driver type James Shargo
` (5 more replies)
0 siblings, 6 replies; 10+ messages in thread
From: James Shargo @ 2023-06-23 23:09 UTC (permalink / raw)
To: Development mailing list for IGT GPU Tools
From: Jim Shargo <jshargo@chromium.org>
These changes include new library functionality for working with mount
points and the creation of ConfigFS-based devices.
The ConfigFS functionality is currently under review. You can take a
look at the patches here:
https://gitlab.freedesktop.org/jshargo/compositor-kernel-explorations/-/merge_requests/4/commits
Thanks for taking a look! I'm still new to IGT, so please look with
extra care. I am excited to be contributing :).
Jim Shargo (3):
lib/drmtest: Add VKMS as a known driver type
lib/igt_aux: Make "is_mountpoint" public ("igt_is_mountpoint")
tests/vkms: Adds VKMS tests and library functions to support them
lib/drmtest.c | 26 +++
lib/drmtest.h | 7 +-
lib/igt.h | 2 +
lib/igt_aux.c | 25 +++
lib/igt_aux.h | 2 +
lib/igt_configfs.c | 105 +++++++++++
lib/igt_configfs.h | 35 ++++
lib/igt_debugfs.c | 29 +--
lib/igt_vkms.c | 362 +++++++++++++++++++++++++++++++++++++
lib/igt_vkms.h | 58 ++++++
lib/meson.build | 2 +
tests/meson.build | 13 ++
tests/vkms/vkms_configfs.c | 189 +++++++++++++++++++
13 files changed, 827 insertions(+), 28 deletions(-)
create mode 100644 lib/igt_configfs.c
create mode 100644 lib/igt_configfs.h
create mode 100644 lib/igt_vkms.c
create mode 100644 lib/igt_vkms.h
create mode 100644 tests/vkms/vkms_configfs.c
--
2.41.0.162.gfafddb0af9-goog
^ permalink raw reply [flat|nested] 10+ messages in thread
* [igt-dev] [PATCH i-g-t 1/3] lib/drmtest: Add VKMS as a known driver type
2023-06-23 23:09 [igt-dev] [PATCH i-g-t 0/3] Add tests and support for VKMS's new ConfigFS features James Shargo
@ 2023-06-23 23:09 ` James Shargo
2023-06-28 18:50 ` Kamil Konieczny
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_aux: Make "is_mountpoint" public ("igt_is_mountpoint") James Shargo
` (4 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: James Shargo @ 2023-06-23 23:09 UTC (permalink / raw)
To: Development mailing list for IGT GPU Tools
From: Jim Shargo <jshargo@chromium.org>
Signed-off-by: Jim Shargo <jshargo@chromium.org>
---
lib/drmtest.c | 26 ++++++++++++++++++++++++++
lib/drmtest.h | 7 ++++++-
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/lib/drmtest.c b/lib/drmtest.c
index 220cfb64d..ad8cbe302 100644
--- a/lib/drmtest.c
+++ b/lib/drmtest.c
@@ -150,6 +150,16 @@ bool is_intel_device(int fd)
return is_i915_device(fd) || is_xe_device(fd);
}
+bool is_vkms_device(int fd)
+{
+ char name[64] = "";
+
+ if (__get_drm_device_name(fd, name, sizeof(name) - 1))
+ return false;
+
+ return strncmp("vkms", name, strlen("vkms")) == 0;
+}
+
static char _forced_driver[16] = "";
/**
@@ -734,3 +744,19 @@ void igt_require_xe(int fd)
{
igt_require(is_xe_device(fd));
}
+
+void igt_require_vkms(void)
+{
+ // Since VKMS can create and destroy virtual drivers at will,
+ // instead look to make sure the driver is installed.
+ struct stat s = {};
+ int ret;
+ char *vkms_module_dir = "/sys/module/vkms";
+
+ ret = stat(vkms_module_dir, &s);
+
+ igt_require_f(ret == 0, "VKMS stat of %s returned %d (%s)\n",
+ vkms_module_dir, ret, strerror(ret));
+ igt_require_f(S_ISDIR(s.st_mode),
+ "VKMS stat of %s was not a directory\n", vkms_module_dir);
+}
diff --git a/lib/drmtest.h b/lib/drmtest.h
index ae86ee19a..1d418e1f6 100644
--- a/lib/drmtest.h
+++ b/lib/drmtest.h
@@ -53,14 +53,17 @@
#define DRIVER_MSM (1 << 6)
#define DRIVER_XE (1 << 7)
#define DRIVER_VMWGFX (1 << 8)
+#define DRIVER_VKMS (1 << 9)
/*
* Exclude DRVER_VGEM from DRIVER_ANY since if you run on a system
* with vgem as well as a supported driver, you can end up with a
* near-100% skip rate if you don't explicitly specify the device,
* depending on device-load ordering.
+ *
+ * Exclude VKMS to prefer hardware drivers.
*/
-#define DRIVER_ANY ~(DRIVER_VGEM)
+#define DRIVER_ANY ~(DRIVER_VGEM | DRIVER_VKMS)
/*
* Compile friendly enum for i915/xe.
@@ -114,6 +117,7 @@ void igt_require_i915(int fd);
void igt_require_nouveau(int fd);
void igt_require_vc4(int fd);
void igt_require_xe(int fd);
+void igt_require_vkms(void);
bool is_amdgpu_device(int fd);
bool is_i915_device(int fd);
@@ -123,6 +127,7 @@ bool is_nouveau_device(int fd);
bool is_vc4_device(int fd);
bool is_xe_device(int fd);
bool is_intel_device(int fd);
+bool is_vkms_device(int fd);
/**
* do_or_die:
--
2.41.0.162.gfafddb0af9-goog
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [igt-dev] [PATCH i-g-t 2/3] lib/igt_aux: Make "is_mountpoint" public ("igt_is_mountpoint")
2023-06-23 23:09 [igt-dev] [PATCH i-g-t 0/3] Add tests and support for VKMS's new ConfigFS features James Shargo
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 1/3] lib/drmtest: Add VKMS as a known driver type James Shargo
@ 2023-06-23 23:09 ` James Shargo
2023-06-28 18:57 ` Kamil Konieczny
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 3/3] tests/vkms: Adds VKMS tests and library functions to support them James Shargo
` (3 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: James Shargo @ 2023-06-23 23:09 UTC (permalink / raw)
To: Development mailing list for IGT GPU Tools
From: Jim Shargo <jshargo@chromium.org>
This change supports the subsequent testing of ConfigFS-based VKMS
features, which require their own mounting.
Signed-off-by: Jim Shargo <jshargo@chromium.org>
---
lib/igt_aux.c | 25 +++++++++++++++++++++++++
lib/igt_aux.h | 2 ++
lib/igt_debugfs.c | 29 ++---------------------------
3 files changed, 29 insertions(+), 27 deletions(-)
diff --git a/lib/igt_aux.c b/lib/igt_aux.c
index 386e25783..4ec5fc154 100644
--- a/lib/igt_aux.c
+++ b/lib/igt_aux.c
@@ -1970,6 +1970,31 @@ bool igt_allow_unlimited_files(void)
return setrlimit(RLIMIT_NOFILE, &rlim) == 0;
}
+bool igt_is_mountpoint(const char *path)
+{
+ char buf[strlen(path) + 4];
+ struct stat st;
+ dev_t dev;
+
+ igt_assert_lt(snprintf(buf, sizeof(buf), "%s/.", path), sizeof(buf));
+ if (stat(buf, &st))
+ return false;
+
+ if (!S_ISDIR(st.st_mode))
+ return false;
+
+ dev = st.st_dev;
+
+ igt_assert_lt(snprintf(buf, sizeof(buf), "%s/..", path), sizeof(buf));
+ if (stat(buf, &st))
+ return false;
+
+ if (!S_ISDIR(st.st_mode))
+ return false;
+
+ return dev != st.st_dev;
+}
+
/**
* vfs_file_max: report maximum number of files
*
diff --git a/lib/igt_aux.h b/lib/igt_aux.h
index fb76b0313..298c610f2 100644
--- a/lib/igt_aux.h
+++ b/lib/igt_aux.h
@@ -311,6 +311,8 @@ double igt_stop_siglatency(struct igt_mean *result);
bool igt_allow_unlimited_files(void);
+bool igt_is_mountpoint(const char *path);
+
int igt_is_process_running(const char *comm);
int igt_terminate_process(int sig, const char *comm);
void igt_lsof(const char *dpath);
diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c
index a7b54bae5..63fc6b9e7 100644
--- a/lib/igt_debugfs.c
+++ b/lib/igt_debugfs.c
@@ -67,37 +67,12 @@
* General debugfs helpers
*/
-static bool is_mountpoint(const char *path)
-{
- char buf[strlen(path) + 4];
- struct stat st;
- dev_t dev;
-
- igt_assert_lt(snprintf(buf, sizeof(buf), "%s/.", path), sizeof(buf));
- if (stat(buf, &st))
- return false;
-
- if (!S_ISDIR(st.st_mode))
- return false;
-
- dev = st.st_dev;
-
- igt_assert_lt(snprintf(buf, sizeof(buf), "%s/..", path), sizeof(buf));
- if (stat(buf, &st))
- return false;
-
- if (!S_ISDIR(st.st_mode))
- return false;
-
- return dev != st.st_dev;
-}
-
static const char *__igt_debugfs_mount(void)
{
- if (is_mountpoint("/sys/kernel/debug"))
+ if (igt_is_mountpoint("/sys/kernel/debug"))
return "/sys/kernel/debug";
- if (is_mountpoint("/debug"))
+ if (igt_is_mountpoint("/debug"))
return "/debug";
if (mount("debug", "/sys/kernel/debug", "debugfs", 0, 0))
--
2.41.0.162.gfafddb0af9-goog
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [igt-dev] [PATCH i-g-t 3/3] tests/vkms: Adds VKMS tests and library functions to support them
2023-06-23 23:09 [igt-dev] [PATCH i-g-t 0/3] Add tests and support for VKMS's new ConfigFS features James Shargo
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 1/3] lib/drmtest: Add VKMS as a known driver type James Shargo
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_aux: Make "is_mountpoint" public ("igt_is_mountpoint") James Shargo
@ 2023-06-23 23:09 ` James Shargo
2023-06-28 19:27 ` Kamil Konieczny
2023-06-24 0:49 ` [igt-dev] ✗ GitLab.Pipeline: warning for Add tests and support for VKMS's new ConfigFS features Patchwork
` (2 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: James Shargo @ 2023-06-23 23:09 UTC (permalink / raw)
To: Development mailing list for IGT GPU Tools
From: Jim Shargo <jshargo@chromium.org>
The library functions include useful tools for creating configfs-backed
devices.
The tests exercise some basic functionality of new ConfigFS
functionality, both positive and negative cases.
Signed-off-by: Jim Shargo <jshargo@chromium.org>
---
lib/igt.h | 2 +
lib/igt_configfs.c | 105 +++++++++++
lib/igt_configfs.h | 35 ++++
lib/igt_vkms.c | 362 +++++++++++++++++++++++++++++++++++++
lib/igt_vkms.h | 58 ++++++
lib/meson.build | 2 +
tests/meson.build | 13 ++
tests/vkms/vkms_configfs.c | 189 +++++++++++++++++++
8 files changed, 766 insertions(+)
create mode 100644 lib/igt_configfs.c
create mode 100644 lib/igt_configfs.h
create mode 100644 lib/igt_vkms.c
create mode 100644 lib/igt_vkms.h
create mode 100644 tests/vkms/vkms_configfs.c
diff --git a/lib/igt.h b/lib/igt.h
index 73b6f7727..4c5d16715 100644
--- a/lib/igt.h
+++ b/lib/igt.h
@@ -27,6 +27,7 @@
#include "drmtest.h"
#include "i915_3d.h"
#include "igt_aux.h"
+#include "igt_configfs.h"
#include "igt_core.h"
#include "igt_core.h"
#include "igt_debugfs.h"
@@ -41,6 +42,7 @@
#include "igt_pm.h"
#include "igt_stats.h"
#include "igt_dsc.h"
+#include "igt_vkms.h"
#ifdef HAVE_CHAMELIUM
#include "igt_alsa.h"
#include "igt_audio.h"
diff --git a/lib/igt_configfs.c b/lib/igt_configfs.c
new file mode 100644
index 000000000..874948482
--- /dev/null
+++ b/lib/igt_configfs.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2023 Google LLC.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+#include "igt_configfs.h"
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mount.h>
+
+#include "igt_aux.h"
+
+/**
+ * SECTION:igt_configfs
+ * @short_description: Support code for configfs features
+ * @title: configfs
+ * @include: igt.h
+ *
+ * Helper methods for managing configfs.
+ */
+
+static const char *__igt_configfs_mount(void)
+{
+ if (igt_is_mountpoint("/sys/kernel/config"))
+ return "/sys/kernel/config";
+
+ if (igt_is_mountpoint("/config"))
+ return "/config";
+
+ if (mount("config", "/sys/kernel/config", "configfs", 0, 0))
+ return NULL;
+
+ return "/sys/kernel/config";
+}
+
+/**
+ * igt_configfs_mount:
+ *
+ * This searches for configfs in typical locations and will try to mount at
+ * /sys/kernel/config if it can't be found.
+ *
+ * Returns:
+ * The path to the configfs mount point (e.g. /sys/kernel/debug)
+ */
+const char *igt_configfs_mount(void)
+{
+ static const char *path;
+
+ if (!path)
+ path = __igt_configfs_mount();
+
+ return path;
+}
+
+const char *igt_configfs_vkms_mount(void)
+{
+ static char vkms_path[CONFIGFS_VKMS_DIR_SIZE] = { 0 };
+ const char *path = igt_configfs_mount();
+
+ if (!path)
+ return NULL;
+
+ if (strcmp(vkms_path, "") == 0) {
+ strncpy(vkms_path, path, CONFIGFS_VKMS_DIR_SIZE - 1);
+ strncat(vkms_path, "/vkms", CONFIGFS_VKMS_DIR_SIZE - 1);
+ }
+ return vkms_path;
+}
+
+/**
+ * igt_configfs_dir: Open and return the fd of configfs, or -1 on failure.
+ *
+ * Returns:
+ */
+int igt_configfs_dir(void)
+{
+ const char *path = igt_configfs_mount();
+
+ if (!path)
+ return -1;
+
+ igt_debug("Opening configfs directory '%s'\n", path);
+ return open(path, O_RDWR);
+}
diff --git a/lib/igt_configfs.h b/lib/igt_configfs.h
new file mode 100644
index 000000000..0f1fd5faa
--- /dev/null
+++ b/lib/igt_configfs.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2023 Google LLC.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+#ifndef __IGT_CONFIGFS_H__
+#define __IGT_CONFIGFS_H__
+
+#define CONFIGFS_VKMS_DIR_SIZE 64
+
+const char *igt_configfs_mount(void);
+const char *igt_configfs_vkms_mount(void);
+
+int igt_configfs_dir(void);
+
+#endif /* __IGT_CONFIGFS_H__ */
diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
new file mode 100644
index 000000000..552c637cf
--- /dev/null
+++ b/lib/igt_vkms.c
@@ -0,0 +1,362 @@
+/*
+ * Copyright 2023 Google LLC.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+#include "igt_vkms.h"
+
+#include <dirent.h>
+#include <fcntl.h>
+#include <ftw.h>
+#include <libgen.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "drmtest.h"
+#include "igt_configfs.h"
+#include "igt_core.h"
+
+static void __create_device_from_directory(igt_vkms_t *device, const char *name)
+{
+ const char *vkms_root = igt_configfs_vkms_mount();
+ memset(device, 0, sizeof(*device));
+
+ strncpy(device->name, name, ARRAY_SIZE(device->name) - 1);
+ snprintf(device->device_dir, ARRAY_SIZE(device->device_dir) - 1, "%s/%s",
+ vkms_root, name);
+}
+
+void igt_vkms_destroy_all_devices(void)
+{
+ const char *vkms_root = igt_configfs_vkms_mount();
+ igt_vkms_t device = { 0 };
+ DIR *dir;
+ struct dirent *ent;
+ int ret = 0;
+
+ if (!vkms_root) {
+ igt_warn("Unable to find VKMS configfs directory.\n");
+ return;
+ }
+
+ dir = opendir(vkms_root);
+ if (!dir) {
+ igt_warn(
+ "Unable to open VKMS configfs directory '%s'. Got errno=%d (%s)\n",
+ vkms_root, errno, strerror(errno));
+ return;
+ }
+
+ while ((ent = readdir(dir)) != NULL) {
+ if (strcmp(ent->d_name, ".") == 0 ||
+ strcmp(ent->d_name, "..") == 0)
+ continue;
+
+ __create_device_from_directory(&device, ent->d_name);
+ igt_vkms_device_destroy(&device);
+ if (ret)
+ igt_warn("Unable to reset device '%s/%s'\n", vkms_root,
+ ent->d_name);
+ }
+
+ closedir(dir);
+}
+
+void igt_vkms_device_create(igt_vkms_t *device, const char *name)
+{
+ const char *vkms_root = igt_configfs_vkms_mount();
+ DIR *dir;
+ int ret;
+
+ igt_assert_f(vkms_root, "Unable to find VKMS root '%s'.\n", name);
+
+ dir = opendir(vkms_root);
+ igt_assert_f(
+ dir,
+ "VKMS configfs directory not available at '%s'. Got errno=%d (%s)\n",
+ vkms_root, errno, strerror(errno));
+ if (dir)
+ closedir(dir);
+
+ igt_assert_f(strlen(name) > (ARRAY_SIZE(device->name) - 1),
+ "Name '%s' is too long for a VKMS device.\n", name);
+ igt_assert_f(strlen(vkms_root) + strlen(name) >
+ (ARRAY_SIZE(device->device_dir) - 1),
+ "Desired path is too long when creating '%s/vkms/%s'.\n",
+ vkms_root, name);
+
+ memset(device, 0, sizeof(*device));
+ strncpy(device->name, name, ARRAY_SIZE(device->name) - 1);
+ snprintf(device->device_dir, ARRAY_SIZE(device->device_dir), "%s/%s", vkms_root,
+ name);
+
+ igt_debug("mkdir'ing VKMS device at '%s'\n", device->device_dir);
+
+ ret = mkdir(device->device_dir, 0777);
+ igt_assert_f(ret != 0,
+ "Unable to mkdir device directory '%s'. Got errno=%d (%s)\n",
+ device->device_dir, errno, strerror(errno));
+ memset(device, 0, sizeof(*device));
+}
+
+static int __igt_vkms_unlink_symlinks(const char *fpath, const struct stat *sb,
+ int typeflag, struct FTW *ftwbuf)
+{
+ if (typeflag != FTW_SL)
+ return 0;
+
+ if (unlink(fpath)) {
+ igt_warn(
+ "Unable to unlink vkms object: '%s'. Got errno=%d (%s)\n",
+ fpath, errno, strerror(errno));
+ return -1;
+ }
+ return 0;
+}
+
+static int __igt_vkms_delete_objects(const char *fpath, const struct stat *sb,
+ int typeflag, struct FTW *ftwbuf)
+{
+ char *dirbase, path_buf[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+
+ strncpy(path_buf, fpath, VKMS_CARD_OBJECT_DIR_SIZE - 1);
+ dirbase = basename(dirname(path_buf));
+
+ if (strcmp(dirbase, "planes") != 0 &&
+ strcmp(dirbase, "encoders") != 0 &&
+ strcmp(dirbase, "connectors") != 0 &&
+ strcmp(dirbase, "crtcs") != 0) {
+ return 0;
+ }
+
+ if (rmdir(fpath)) {
+ igt_warn(
+ "Unable to rmdir vkms object: '%s'. Got errno=%d (%s)\n",
+ fpath, errno, strerror(errno));
+ return -1;
+ }
+
+ return 0;
+}
+
+void igt_vkms_device_destroy(igt_vkms_t *device)
+{
+ int ret = 0;
+
+ /*
+ * Some notes on device destruction:
+ * - FTW_PHYS keeps us from following symlinks
+ * - FTW_DEPTH does a DFS of the tree, which lets us delete bottom-up.
+ */
+
+ ret = nftw(device->device_dir, &__igt_vkms_unlink_symlinks,
+ /* nopenfd= */ 16, FTW_PHYS | FTW_DEPTH);
+ igt_assert_f(ret != 0,
+ "Unable to remove symlinks for device directory '%s'\n",
+ device->device_dir);
+
+ ret = nftw(device->device_dir, &__igt_vkms_delete_objects,
+ /* nopenfd= */ 16, FTW_PHYS | FTW_DEPTH);
+ igt_assert_f(ret != 0,
+ "Unable to remove objects for device directory '%s'\n",
+ device->device_dir);
+
+ ret = rmdir(device->device_dir);
+ igt_assert_f(ret != 0,
+ "Unable to rmdir device directory '%s'. Got errno=%d (%s)\n",
+ device->device_dir, errno, strerror(errno));
+
+ memset(device, 0, sizeof(*device));
+}
+
+void igt_vkms_device_add_plane(igt_vkms_t *device, const char *name, int type)
+{
+ char path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 }, writebuf[2] = { 0 };
+ int fd, ret;
+
+ snprintf(path, VKMS_CARD_OBJECT_DIR_SIZE - 1, "%s/planes/%s",
+ device->device_dir, name);
+
+ ret = mkdir(path, 0777);
+ igt_assert_f(ret != 0,
+ "Failed to mkdir VKMS plane '%s'. Got errno=%d (%s)\n",
+ path, errno, strerror(errno));
+
+ strcat(path, "/type");
+ fd = open(path, O_WRONLY);
+ igt_assert_f(
+ fd > 0,
+ "Failed to open plane type for writing '%s'. Got errno=%d (%s)\n",
+ path, errno, strerror(errno));
+
+ snprintf(writebuf, 2, "%d", type);
+ write(fd, writebuf, 1);
+ close(fd);
+}
+
+void igt_vkms_device_add_connector(igt_vkms_t *device, const char *name)
+{
+ char path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ int ret;
+
+ sprintf(path, "%s/connectors/%s", device->device_dir, name);
+
+ ret = mkdir(path, 0777);
+ igt_assert_f(ret != 0,
+ "Failed to mkdir VKMS plane '%s'. Got errno=%d (%s)\n",
+ path, errno, strerror(errno));
+}
+
+void igt_vkms_device_add_encoder(igt_vkms_t *device, const char *name)
+{
+ char path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ int ret;
+
+ sprintf(path, "%s/encoders/%s", device->device_dir, name);
+
+ ret = mkdir(path, 0777);
+ igt_assert_f(ret != 0,
+ "Failed to mkdir VKMS encoder '%s'. Got errno=%d (%s)\n",
+ path, errno, strerror(errno));
+}
+
+void igt_vkms_device_add_crtc(igt_vkms_t *device, const char *name)
+{
+ char path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ int ret;
+
+ sprintf(path, "%s/crtcs/%s", device->device_dir, name);
+
+ ret = mkdir(path, 0777);
+ igt_assert_f(ret != 0,
+ "Failed to mkdir VKMS crtc '%s'. Got errno=%d (%s)\n",
+ path, errno, strerror(errno));
+}
+
+void igt_vkms_device_permit_plane_crtc(igt_vkms_t *device, const char *plane_name,
+ const char *crtc_name)
+{
+ char plane_crtcs_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ char crtc_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ int ret;
+
+ snprintf(plane_crtcs_path, VKMS_CARD_OBJECT_DIR_SIZE - 1,
+ "%s/planes/%s/possible_crtcs/%s", device->device_dir, plane_name,
+ crtc_name);
+ snprintf(crtc_path, VKMS_CARD_OBJECT_DIR_SIZE - 1, "%s/crtcs/%s",
+ device->device_dir, crtc_name);
+
+ ret = symlink(crtc_path, plane_crtcs_path);
+ igt_assert_f(
+ ret != 0,
+ "Failed to symlink VKMS crtc '%s' to plane '%s'. Got errno=%d (%s)\n",
+ crtc_name, plane_name, errno, strerror(errno));
+}
+
+void igt_vkms_device_permit_encoder_crtc(igt_vkms_t *device,
+ const char *encoder_name,
+ const char *crtc_name)
+{
+ char encoder_crtcs_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ char crtc_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ int ret;
+
+ snprintf(encoder_crtcs_path, VKMS_CARD_OBJECT_DIR_SIZE - 1,
+ "%s/encoders/%s/possible_crtcs/%s", device->device_dir,
+ encoder_name, crtc_name);
+ snprintf(crtc_path, VKMS_CARD_OBJECT_DIR_SIZE - 1, "%s/crtcs/%s",
+ device->device_dir, crtc_name);
+
+ ret = symlink(crtc_path, encoder_crtcs_path);
+ igt_assert_f(
+ ret != 0,
+ "Failed to symlink VKMS crtc '%s' to encoder '%s'. Got errno=%d (%s)\n",
+ crtc_name, encoder_name, errno, strerror(errno));
+}
+
+void igt_vkms_device_permit_connector_encoder(igt_vkms_t *device,
+ const char *connector_name,
+ const char *encoder_name)
+{
+ char connector_encoders_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ char encoder_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ int ret;
+
+ snprintf(connector_encoders_path, VKMS_CARD_OBJECT_DIR_SIZE - 1,
+ "%s/connectors/%s/possible_encoders/%s", device->device_dir,
+ connector_name, encoder_name);
+ snprintf(encoder_path, VKMS_CARD_OBJECT_DIR_SIZE - 1, "%s/encoders/%s",
+ device->device_dir, encoder_name);
+
+ ret = symlink(encoder_path, connector_encoders_path);
+ igt_assert_f(
+ ret != 0,
+ "Failed to symlink VKMS encoder '%s' to connector '%s'. Got "
+ "errno=%d (%s)\n",
+ encoder_name, connector_name, errno, strerror(errno));
+}
+
+void igt_vkms_enable(igt_vkms_t *device)
+{
+ char enabled_file[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
+ int fd, ret;
+
+ snprintf(enabled_file, VKMS_CARD_OBJECT_DIR_SIZE - 1,
+ "%s/enabled", device->device_dir);
+
+ fd = open(enabled_file, O_WRONLY);
+ igt_assert_f(fd > 0, "Unable to open '%s'\n",
+ enabled_file);
+
+ ret = write(fd, "1", 1);
+ igt_assert_f(
+ ret >= 0,
+ "Unable to write '%s'. Got errno=%d (%s)\n",
+ enabled_file, errno, strerror(errno));
+
+ ret = close(fd);
+ igt_assert_eq(ret, 0);
+}
+
+int igt_vkms_is_enabled(igt_vkms_t *device)
+{
+ char registration_file[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 },
+ is_enabled[2] = { 0 };
+ int fd, ret = 0;
+
+ snprintf(registration_file, VKMS_CARD_OBJECT_DIR_SIZE - 1,
+ "%s/enabled", device->device_dir);
+
+ fd = open(registration_file, O_RDONLY);
+ igt_assert_f(fd > 0, "Unable to open '%s'\n",
+ registration_file);
+
+ ret = read(fd, is_enabled, ARRAY_SIZE(is_enabled));
+ igt_assert_eq(0, close(fd));
+ if (ret < 0) {
+ return false;
+ }
+
+ return strcmp("1", is_enabled) == 0;
+}
diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
new file mode 100644
index 000000000..d0473a16a
--- /dev/null
+++ b/lib/igt_vkms.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2023 Google LLC.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+#ifndef __IGT_VKMS_H__
+#define __IGT_VKMS_H__
+
+#define VKMS_CARD_DIR_SIZE 128
+#define VKMS_CARD_OBJECT_DIR_SIZE (VKMS_CARD_DIR_SIZE + 128)
+
+void igt_vkms_destroy_all_devices(void);
+
+typedef struct igt_vkms {
+ char name[64];
+ char device_dir[VKMS_CARD_DIR_SIZE];
+} igt_vkms_t;
+
+void igt_vkms_device_create(igt_vkms_t *device, const char *name);
+void igt_vkms_device_destroy(igt_vkms_t *device);
+
+void igt_vkms_device_add_plane(igt_vkms_t *device, const char *name, int type);
+void igt_vkms_device_add_connector(igt_vkms_t *device, const char *name);
+void igt_vkms_device_add_encoder(igt_vkms_t *device, const char *name);
+void igt_vkms_device_add_crtc(igt_vkms_t *device, const char *name);
+
+void igt_vkms_device_permit_plane_crtc(igt_vkms_t *device, const char *plane_name,
+ const char *crtc_name);
+void igt_vkms_device_permit_encoder_crtc(igt_vkms_t *device,
+ const char *encoder_name,
+ const char *crtc_name);
+void igt_vkms_device_permit_connector_encoder(igt_vkms_t *device,
+ const char *connector_name,
+ const char *encoder_name);
+
+void igt_vkms_enable(igt_vkms_t *device);
+int igt_vkms_is_enabled(igt_vkms_t *device);
+
+#endif /* __IGT_VKMS_H__ */
diff --git a/lib/meson.build b/lib/meson.build
index 8e9977083..c6bd908ca 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -18,6 +18,7 @@ lib_sources = [
'i915/i915_crc.c',
'igt_collection.c',
'igt_color_encoding.c',
+ 'igt_configfs.c',
'igt_crc.c',
'igt_debugfs.c',
'igt_device.c',
@@ -47,6 +48,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/tests/meson.build b/tests/meson.build
index 61dcc0769..7c2b59df9 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -285,6 +285,10 @@ chamelium_progs = [
'kms_chamelium_hpd',
]
+vkms_progs = [
+ 'vkms_configfs',
+]
+
test_deps = [ igt_deps ]
if libdrm_nouveau.found()
@@ -355,6 +359,15 @@ if chamelium.found()
test_deps += chamelium
endif
+foreach prog : vkms_progs
+ test_executables += executable(prog, join_paths('vkms', prog + '.c'),
+ dependencies : test_deps,
+ install_dir : libexecdir,
+ install_rpath : libexecdir_rpathdir,
+ install : true)
+ test_list += prog
+endforeach
+
test_executables += executable('drm_fdinfo',
join_paths('i915', 'drm_fdinfo.c'),
dependencies : test_deps + [ lib_igt_drm_fdinfo ],
diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
new file mode 100644
index 000000000..39af6dd07
--- /dev/null
+++ b/tests/vkms/vkms_configfs.c
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2023 Google LLC.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include <string.h>
+#include <xf86drmMode.h>
+
+#include "drmtest.h"
+#include "igt.h"
+#include "igt_configfs.h"
+#include "igt_core.h"
+#include "igt_vkms.h"
+
+IGT_TEST_DESCRIPTION("Basic tests for VKMS, including configfs support");
+
+static void vkms_crtc_no_primary_test(igt_vkms_t *device)
+{
+ igt_vkms_device_add_plane(device, "primary", DRM_PLANE_TYPE_PRIMARY);
+ igt_vkms_device_add_crtc(device, "crtc");
+ igt_vkms_device_add_encoder(device, "encoder");
+ igt_vkms_device_add_connector(device, "connector");
+
+ igt_vkms_device_permit_plane_crtc(device, "primary", "crtc");
+ igt_vkms_device_permit_connector_encoder(device, "connector", "encoder");
+ igt_vkms_device_permit_encoder_crtc(device, "encoder", "crtc");
+
+ igt_vkms_enable(device);
+ igt_assert(!igt_vkms_is_enabled(device));
+}
+
+static void vkms_basic_test(igt_vkms_t *device)
+{
+ igt_warn("Path: %s\n", device->device_dir);
+
+ igt_vkms_device_add_plane(device, "primary", DRM_PLANE_TYPE_PRIMARY);
+ igt_vkms_device_add_crtc(device, "crtc");
+ igt_vkms_device_add_encoder(device, "encoder");
+ igt_vkms_device_add_connector(device, "connector");
+
+ igt_vkms_device_permit_plane_crtc(device, "primary", "crtc");
+ igt_vkms_device_permit_connector_encoder(device, "connector", "encoder");
+ igt_vkms_device_permit_encoder_crtc(device, "encoder", "crtc");
+
+ igt_vkms_enable(device);
+ igt_assert(igt_vkms_is_enabled(device));
+}
+
+static void vkms_multiple_overlays_test(igt_vkms_t *device)
+{
+ igt_vkms_device_add_plane(device, "primary", DRM_PLANE_TYPE_PRIMARY);
+ igt_vkms_device_add_plane(device, "cursor", DRM_PLANE_TYPE_CURSOR);
+ igt_vkms_device_add_plane(device, "overlay0", DRM_PLANE_TYPE_OVERLAY);
+ igt_vkms_device_add_plane(device, "overlay1", DRM_PLANE_TYPE_OVERLAY);
+ igt_vkms_device_add_plane(device, "overlay2", DRM_PLANE_TYPE_OVERLAY);
+ igt_vkms_device_add_plane(device, "overlay3", DRM_PLANE_TYPE_OVERLAY);
+ igt_vkms_device_add_crtc(device, "crtc");
+ igt_vkms_device_add_encoder(device, "encoder");
+ igt_vkms_device_add_connector(device, "connector");
+
+ igt_vkms_device_permit_plane_crtc(device, "primary", "crtc");
+ igt_vkms_device_permit_plane_crtc(device, "cursor", "crtc");
+ igt_vkms_device_permit_plane_crtc(device, "overlay0", "crtc");
+ igt_vkms_device_permit_plane_crtc(device, "overlay1", "crtc");
+ igt_vkms_device_permit_plane_crtc(device, "overlay2", "crtc");
+ igt_vkms_device_permit_plane_crtc(device, "overlay3", "crtc");
+ igt_vkms_device_permit_connector_encoder(device, "connector", "encoder");
+ igt_vkms_device_permit_encoder_crtc(device, "encoder", "crtc");
+
+ igt_vkms_enable(device);
+ igt_assert(igt_vkms_is_enabled(device));
+}
+
+static void vkms_multiple_displays_test(igt_vkms_t *device)
+{
+ igt_vkms_device_add_plane(device, "primary0", DRM_PLANE_TYPE_PRIMARY);
+ igt_vkms_device_add_plane(device, "primary1", DRM_PLANE_TYPE_PRIMARY);
+ igt_vkms_device_add_plane(device, "cursor0", DRM_PLANE_TYPE_CURSOR);
+ igt_vkms_device_add_plane(device, "cursor1", DRM_PLANE_TYPE_CURSOR);
+ igt_vkms_device_add_plane(device, "overlay0", DRM_PLANE_TYPE_OVERLAY);
+ igt_vkms_device_add_plane(device, "overlay1", DRM_PLANE_TYPE_OVERLAY);
+ igt_vkms_device_add_plane(device, "overlay2", DRM_PLANE_TYPE_OVERLAY);
+ igt_vkms_device_add_plane(device, "overlay3", DRM_PLANE_TYPE_OVERLAY);
+ igt_vkms_device_add_crtc(device, "crtc0");
+ igt_vkms_device_add_crtc(device, "crtc1");
+ igt_vkms_device_add_encoder(device, "encoder0");
+ igt_vkms_device_add_encoder(device, "encoder1");
+ igt_vkms_device_add_connector(device, "connector0");
+ igt_vkms_device_add_connector(device, "connector1");
+
+ igt_vkms_device_permit_plane_crtc(device, "primary0", "crtc0");
+ igt_vkms_device_permit_plane_crtc(device, "cursor0", "crtc0");
+ igt_vkms_device_permit_plane_crtc(device, "overlay0", "crtc0");
+ igt_vkms_device_permit_plane_crtc(device, "overlay1", "crtc0");
+ igt_vkms_device_permit_plane_crtc(device, "overlay2", "crtc0");
+ igt_vkms_device_permit_plane_crtc(device, "overlay3", "crtc0");
+ igt_vkms_device_permit_connector_encoder(device, "connector0", "encoder0");
+ igt_vkms_device_permit_encoder_crtc(device, "encoder0", "crtc0");
+
+ igt_vkms_device_permit_plane_crtc(device, "primary1", "crtc1");
+ igt_vkms_device_permit_plane_crtc(device, "cursor1", "crtc1");
+ igt_vkms_device_permit_plane_crtc(device, "overlay0", "crtc1");
+ igt_vkms_device_permit_plane_crtc(device, "overlay1", "crtc1");
+ igt_vkms_device_permit_plane_crtc(device, "overlay2", "crtc1");
+ igt_vkms_device_permit_plane_crtc(device, "overlay3", "crtc1");
+ igt_vkms_device_permit_connector_encoder(device, "connector1", "encoder1");
+ igt_vkms_device_permit_encoder_crtc(device, "encoder1", "crtc1");
+
+ igt_vkms_enable(device);
+ igt_assert(igt_vkms_is_enabled(device));
+}
+
+igt_main
+{
+ igt_vkms_t device = { 0 };
+
+ igt_require_vkms();
+
+ // By clearing out all existing devices, we don't end up with
+ // confusing name collision errors.
+ igt_fixture
+ {
+ igt_vkms_destroy_all_devices();
+ }
+
+ igt_describe("Registering an empty device fails");
+ igt_subtest("empty")
+ {
+ igt_vkms_device_create(&device, "empty-device");
+ igt_vkms_enable(&device);
+ igt_vkms_device_destroy(&device);
+ }
+
+ igt_describe("Registering a CRTC with no primary fails");
+ igt_subtest("no_primary")
+ {
+ igt_vkms_device_create(&device, "no-primary");
+ vkms_crtc_no_primary_test(&device);
+ igt_vkms_device_destroy(&device);
+ }
+
+ igt_describe("Can create a minimal device.");
+ igt_subtest("basic_device")
+ {
+ igt_vkms_device_create(&device, "basic-device");
+ vkms_basic_test(&device);
+ igt_vkms_device_destroy(&device);
+ }
+
+ igt_describe("Can create a device with multiple overlays");
+ igt_subtest("multiple_overlays_device")
+ {
+ igt_vkms_device_create(&device, "multiple-overlays-device");
+ vkms_multiple_overlays_test(&device);
+ igt_vkms_device_destroy(&device);
+ }
+
+ igt_describe("Can create a device with multiple displays");
+ igt_subtest("multiple_displays_device")
+ {
+ igt_vkms_device_create(&device, "multiple-displays-device");
+ vkms_multiple_displays_test(&device);
+ igt_vkms_device_destroy(&device);
+ }
+
+ igt_fixture
+ {
+ if (strcmp(device.name, "") != 0)
+ igt_vkms_device_destroy(&device);
+ }
+}
--
2.41.0.162.gfafddb0af9-goog
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [igt-dev] ✗ GitLab.Pipeline: warning for Add tests and support for VKMS's new ConfigFS features
2023-06-23 23:09 [igt-dev] [PATCH i-g-t 0/3] Add tests and support for VKMS's new ConfigFS features James Shargo
` (2 preceding siblings ...)
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 3/3] tests/vkms: Adds VKMS tests and library functions to support them James Shargo
@ 2023-06-24 0:49 ` Patchwork
2023-06-24 1:23 ` [igt-dev] ✓ Fi.CI.BAT: success " Patchwork
2023-06-24 3:36 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
5 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2023-06-24 0:49 UTC (permalink / raw)
To: James Shargo; +Cc: igt-dev
== Series Details ==
Series: Add tests and support for VKMS's new ConfigFS features
URL : https://patchwork.freedesktop.org/series/119814/
State : warning
== Summary ==
Pipeline status: FAILED.
see https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/pipelines/917454 for the overview.
build:tests-debian-meson has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/44351956):
^~~~~~~~
/usr/include/xf86drmMode.h:533:2: error: unknown type name ‘uint32_t’
uint32_t lessees[0];
^~~~~~~~
/usr/include/xf86drmMode.h:539:2: error: unknown type name ‘uint32_t’
uint32_t count;
^~~~~~~~
/usr/include/xf86drmMode.h:540:2: error: unknown type name ‘uint32_t’
uint32_t objects[0];
^~~~~~~~
/usr/include/xf86drmMode.h:545:39: error: unknown type name ‘uint32_t’
extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
^~~~~~~~
ninja: build stopped: subcommand failed.
section_end:1687567541:step_script
section_start:1687567541:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1687567542:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-debian-meson-arm64 has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/44351959):
^~~~~~~~
/usr/include/xf86drmMode.h:533:2: error: unknown type name ‘uint32_t’
uint32_t lessees[0];
^~~~~~~~
/usr/include/xf86drmMode.h:539:2: error: unknown type name ‘uint32_t’
uint32_t count;
^~~~~~~~
/usr/include/xf86drmMode.h:540:2: error: unknown type name ‘uint32_t’
uint32_t objects[0];
^~~~~~~~
/usr/include/xf86drmMode.h:545:39: error: unknown type name ‘uint32_t’
extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
^~~~~~~~
ninja: build stopped: subcommand failed.
section_end:1687567533:step_script
section_start:1687567533:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1687567533:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-debian-meson-armhf has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/44351958):
^~~~~~~~
/usr/include/xf86drmMode.h:533:2: error: unknown type name ‘uint32_t’
uint32_t lessees[0];
^~~~~~~~
/usr/include/xf86drmMode.h:539:2: error: unknown type name ‘uint32_t’
uint32_t count;
^~~~~~~~
/usr/include/xf86drmMode.h:540:2: error: unknown type name ‘uint32_t’
uint32_t objects[0];
^~~~~~~~
/usr/include/xf86drmMode.h:545:39: error: unknown type name ‘uint32_t’
extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
^~~~~~~~
ninja: build stopped: subcommand failed.
section_end:1687567521:step_script
section_start:1687567521:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1687567522:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-debian-meson-mips has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/44351960):
^~~~~~~~
/usr/include/xf86drmMode.h:533:2: error: unknown type name ‘uint32_t’
uint32_t lessees[0];
^~~~~~~~
/usr/include/xf86drmMode.h:539:2: error: unknown type name ‘uint32_t’
uint32_t count;
^~~~~~~~
/usr/include/xf86drmMode.h:540:2: error: unknown type name ‘uint32_t’
uint32_t objects[0];
^~~~~~~~
/usr/include/xf86drmMode.h:545:39: error: unknown type name ‘uint32_t’
extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
^~~~~~~~
ninja: build stopped: subcommand failed.
section_end:1687567525:step_script
section_start:1687567525:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1687567526:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/44351951):
| ^~~~~~~~
/usr/include/xf86drmMode.h:533:2: error: unknown type name ‘uint32_t’
533 | uint32_t lessees[0];
| ^~~~~~~~
/usr/include/xf86drmMode.h:539:2: error: unknown type name ‘uint32_t’
539 | uint32_t count;
| ^~~~~~~~
/usr/include/xf86drmMode.h:540:2: error: unknown type name ‘uint32_t’
540 | uint32_t objects[0];
| ^~~~~~~~
/usr/include/xf86drmMode.h:545:39: error: unknown type name ‘uint32_t’
545 | extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
| ^~~~~~~~
ninja: build stopped: subcommand failed.
section_end:1687567527:step_script
section_start:1687567527:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1687567528:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora-clang has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/44351955):
uint32_t bpp;
^
/usr/include/xf86drmMode.h:221:2: error: unknown type name 'uint32_t'
uint32_t depth;
^
/usr/include/xf86drmMode.h:223:2: error: unknown type name 'uint32_t'
uint32_t handle;
^
/usr/include/xf86drmMode.h:229:2: error: unknown type name 'uint32_t'
uint32_t id;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
ninja: build stopped: subcommand failed.
section_end:1687567549:step_script
section_start:1687567549:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1687567549:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora-no-libdrm-nouveau has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/44351954):
| ^~~~~~~~
/usr/include/xf86drmMode.h:533:2: error: unknown type name ‘uint32_t’
533 | uint32_t lessees[0];
| ^~~~~~~~
/usr/include/xf86drmMode.h:539:2: error: unknown type name ‘uint32_t’
539 | uint32_t count;
| ^~~~~~~~
/usr/include/xf86drmMode.h:540:2: error: unknown type name ‘uint32_t’
540 | uint32_t objects[0];
| ^~~~~~~~
/usr/include/xf86drmMode.h:545:39: error: unknown type name ‘uint32_t’
545 | extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
| ^~~~~~~~
ninja: build stopped: subcommand failed.
section_end:1687567540:step_script
section_start:1687567540:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1687567542:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora-no-libunwind has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/44351952):
| ^~~~~~~~
/usr/include/xf86drmMode.h:533:2: error: unknown type name ‘uint32_t’
533 | uint32_t lessees[0];
| ^~~~~~~~
/usr/include/xf86drmMode.h:539:2: error: unknown type name ‘uint32_t’
539 | uint32_t count;
| ^~~~~~~~
/usr/include/xf86drmMode.h:540:2: error: unknown type name ‘uint32_t’
540 | uint32_t objects[0];
| ^~~~~~~~
/usr/include/xf86drmMode.h:545:39: error: unknown type name ‘uint32_t’
545 | extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
| ^~~~~~~~
ninja: build stopped: subcommand failed.
section_end:1687567541:step_script
section_start:1687567541:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1687567541:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora-oldest-meson has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/44351953):
| ^~~~~~~~
/usr/include/xf86drmMode.h:533:2: error: unknown type name ‘uint32_t’
533 | uint32_t lessees[0];
| ^~~~~~~~
/usr/include/xf86drmMode.h:539:2: error: unknown type name ‘uint32_t’
539 | uint32_t count;
| ^~~~~~~~
/usr/include/xf86drmMode.h:540:2: error: unknown type name ‘uint32_t’
540 | uint32_t objects[0];
| ^~~~~~~~
/usr/include/xf86drmMode.h:545:39: error: unknown type name ‘uint32_t’
545 | extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
| ^~~~~~~~
ninja: build stopped: subcommand failed.
section_end:1687567529:step_script
section_start:1687567529:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1687567529:cleanup_file_variables
ERROR: Job failed: exit code 1
== Logs ==
For more details see: https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/pipelines/917454
^ permalink raw reply [flat|nested] 10+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for Add tests and support for VKMS's new ConfigFS features
2023-06-23 23:09 [igt-dev] [PATCH i-g-t 0/3] Add tests and support for VKMS's new ConfigFS features James Shargo
` (3 preceding siblings ...)
2023-06-24 0:49 ` [igt-dev] ✗ GitLab.Pipeline: warning for Add tests and support for VKMS's new ConfigFS features Patchwork
@ 2023-06-24 1:23 ` Patchwork
2023-06-24 3:36 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
5 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2023-06-24 1:23 UTC (permalink / raw)
To: James Shargo; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 8240 bytes --]
== Series Details ==
Series: Add tests and support for VKMS's new ConfigFS features
URL : https://patchwork.freedesktop.org/series/119814/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_13317 -> IGTPW_9249
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/index.html
Participating hosts (39 -> 39)
------------------------------
Additional (2): bat-rplp-1 fi-pnv-d510
Missing (2): fi-kbl-soraka fi-snb-2520m
Known issues
------------
Here are the changes found in IGTPW_9249 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@debugfs_test@basic-hwmon:
- bat-rplp-1: NOTRUN -> [SKIP][1] ([i915#7456])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rplp-1/igt@debugfs_test@basic-hwmon.html
* igt@gem_tiled_pread_basic:
- bat-rplp-1: NOTRUN -> [SKIP][2] ([i915#3282])
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rplp-1/igt@gem_tiled_pread_basic.html
* igt@i915_selftest@live@migrate:
- bat-dg2-11: [PASS][3] -> [DMESG-WARN][4] ([i915#7699])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/bat-dg2-11/igt@i915_selftest@live@migrate.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-dg2-11/igt@i915_selftest@live@migrate.html
- bat-mtlp-8: [PASS][5] -> [DMESG-FAIL][6] ([i915#7699])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/bat-mtlp-8/igt@i915_selftest@live@migrate.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-mtlp-8/igt@i915_selftest@live@migrate.html
* igt@i915_selftest@live@mman:
- bat-rpls-2: [PASS][7] -> [TIMEOUT][8] ([i915#6794] / [i915#7392])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/bat-rpls-2/igt@i915_selftest@live@mman.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rpls-2/igt@i915_selftest@live@mman.html
* igt@i915_selftest@live@requests:
- bat-mtlp-8: [PASS][9] -> [DMESG-FAIL][10] ([i915#7269])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/bat-mtlp-8/igt@i915_selftest@live@requests.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-mtlp-8/igt@i915_selftest@live@requests.html
- bat-rpls-1: [PASS][11] -> [ABORT][12] ([i915#7911] / [i915#7920] / [i915#7982])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/bat-rpls-1/igt@i915_selftest@live@requests.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rpls-1/igt@i915_selftest@live@requests.html
* igt@i915_suspend@basic-s2idle-without-i915:
- bat-rpls-2: NOTRUN -> [ABORT][13] ([i915#6687] / [i915#8668])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rpls-2/igt@i915_suspend@basic-s2idle-without-i915.html
* igt@kms_chamelium_frames@dp-crc-fast:
- bat-rplp-1: NOTRUN -> [SKIP][14] ([i915#7828]) +7 similar issues
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rplp-1/igt@kms_chamelium_frames@dp-crc-fast.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- bat-rplp-1: NOTRUN -> [SKIP][15] ([i915#4103] / [i915#4213]) +1 similar issue
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rplp-1/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_force_connector_basic@force-load-detect:
- bat-rplp-1: NOTRUN -> [SKIP][16] ([fdo#109285])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rplp-1/igt@kms_force_connector_basic@force-load-detect.html
* igt@kms_pipe_crc_basic@nonblocking-crc:
- bat-dg2-11: NOTRUN -> [SKIP][17] ([i915#1845] / [i915#5354])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc.html
* igt@kms_psr@primary_page_flip:
- fi-pnv-d510: NOTRUN -> [SKIP][18] ([fdo#109271]) +37 similar issues
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/fi-pnv-d510/igt@kms_psr@primary_page_flip.html
- bat-rplp-1: NOTRUN -> [SKIP][19] ([i915#1072]) +3 similar issues
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rplp-1/igt@kms_psr@primary_page_flip.html
* igt@kms_setmode@basic-clone-single-crtc:
- bat-rplp-1: NOTRUN -> [ABORT][20] ([i915#4579] / [i915#8260])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-rplp-1/igt@kms_setmode@basic-clone-single-crtc.html
- fi-pnv-d510: NOTRUN -> [SKIP][21] ([fdo#109271] / [i915#4579])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/fi-pnv-d510/igt@kms_setmode@basic-clone-single-crtc.html
#### Possible fixes ####
* igt@i915_selftest@live@gt_mocs:
- bat-mtlp-6: [DMESG-FAIL][22] ([i915#7059]) -> [PASS][23]
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/bat-mtlp-6/igt@i915_selftest@live@gt_mocs.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-mtlp-6/igt@i915_selftest@live@gt_mocs.html
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1:
- fi-rkl-11600: [FAIL][24] ([fdo#103375]) -> [PASS][25]
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/fi-rkl-11600/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/fi-rkl-11600/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html
#### Warnings ####
* igt@core_auth@basic-auth:
- bat-adlp-11: [ABORT][26] ([i915#8011]) -> [ABORT][27] ([i915#4423] / [i915#8011])
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/bat-adlp-11/igt@core_auth@basic-auth.html
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/bat-adlp-11/igt@core_auth@basic-auth.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
[i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
[i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
[i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
[i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
[i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
[i915#4423]: https://gitlab.freedesktop.org/drm/intel/issues/4423
[i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
[i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
[i915#6687]: https://gitlab.freedesktop.org/drm/intel/issues/6687
[i915#6794]: https://gitlab.freedesktop.org/drm/intel/issues/6794
[i915#7059]: https://gitlab.freedesktop.org/drm/intel/issues/7059
[i915#7269]: https://gitlab.freedesktop.org/drm/intel/issues/7269
[i915#7392]: https://gitlab.freedesktop.org/drm/intel/issues/7392
[i915#7456]: https://gitlab.freedesktop.org/drm/intel/issues/7456
[i915#7699]: https://gitlab.freedesktop.org/drm/intel/issues/7699
[i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
[i915#7911]: https://gitlab.freedesktop.org/drm/intel/issues/7911
[i915#7920]: https://gitlab.freedesktop.org/drm/intel/issues/7920
[i915#7982]: https://gitlab.freedesktop.org/drm/intel/issues/7982
[i915#8011]: https://gitlab.freedesktop.org/drm/intel/issues/8011
[i915#8260]: https://gitlab.freedesktop.org/drm/intel/issues/8260
[i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_7347 -> IGTPW_9249
CI-20190529: 20190529
CI_DRM_13317: e77d4da4d2bd8d0accd04f83c0008b206f522bc7 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_9249: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/index.html
IGT_7347: 621c2d3115d40a1ba0b53668413ea21edf03a5ff @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/index.html
[-- Attachment #2: Type: text/html, Size: 9547 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* [igt-dev] ✓ Fi.CI.IGT: success for Add tests and support for VKMS's new ConfigFS features
2023-06-23 23:09 [igt-dev] [PATCH i-g-t 0/3] Add tests and support for VKMS's new ConfigFS features James Shargo
` (4 preceding siblings ...)
2023-06-24 1:23 ` [igt-dev] ✓ Fi.CI.BAT: success " Patchwork
@ 2023-06-24 3:36 ` Patchwork
5 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2023-06-24 3:36 UTC (permalink / raw)
To: James Shargo; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 43642 bytes --]
== Series Details ==
Series: Add tests and support for VKMS's new ConfigFS features
URL : https://patchwork.freedesktop.org/series/119814/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_13317_full -> IGTPW_9249_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/index.html
Participating hosts (9 -> 8)
------------------------------
Missing (1): shard-rkl0
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_9249_full:
### IGT changes ###
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen:
- {shard-dg2}: [PASS][1] -> [FAIL][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen.html
Known issues
------------
Here are the changes found in IGTPW_9249_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@api_intel_bb@object-reloc-purge-cache:
- shard-rkl: NOTRUN -> [SKIP][3] ([i915#8411])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@api_intel_bb@object-reloc-purge-cache.html
* igt@device_reset@cold-reset-bound:
- shard-rkl: NOTRUN -> [SKIP][4] ([i915#7701])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-2/igt@device_reset@cold-reset-bound.html
* igt@drm_fdinfo@most-busy-check-all@rcs0:
- shard-rkl: [PASS][5] -> [FAIL][6] ([i915#7742])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-4/igt@drm_fdinfo@most-busy-check-all@rcs0.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-2/igt@drm_fdinfo@most-busy-check-all@rcs0.html
* igt@feature_discovery@display-4x:
- shard-tglu: NOTRUN -> [SKIP][7] ([i915#1839])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-7/igt@feature_discovery@display-4x.html
* igt@gem_bad_reloc@negative-reloc-lut:
- shard-rkl: NOTRUN -> [SKIP][8] ([i915#3281]) +5 similar issues
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@gem_bad_reloc@negative-reloc-lut.html
* igt@gem_ccs@ctrl-surf-copy:
- shard-tglu: NOTRUN -> [SKIP][9] ([i915#3555] / [i915#4579] / [i915#5325])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-4/igt@gem_ccs@ctrl-surf-copy.html
* igt@gem_ccs@suspend-resume:
- shard-rkl: NOTRUN -> [SKIP][10] ([i915#4579] / [i915#5325])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@gem_ccs@suspend-resume.html
* igt@gem_create@create-ext-cpu-access-big:
- shard-rkl: NOTRUN -> [SKIP][11] ([i915#6335])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@gem_create@create-ext-cpu-access-big.html
* igt@gem_ctx_exec@basic-nohangcheck:
- shard-rkl: NOTRUN -> [FAIL][12] ([i915#6268])
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@gem_ctx_exec@basic-nohangcheck.html
* igt@gem_ctx_sseu@invalid-sseu:
- shard-rkl: NOTRUN -> [SKIP][13] ([i915#280])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@gem_ctx_sseu@invalid-sseu.html
* igt@gem_eio@hibernate:
- shard-rkl: NOTRUN -> [ABORT][14] ([i915#7975] / [i915#8213])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@gem_eio@hibernate.html
* igt@gem_exec_balancer@parallel-balancer:
- shard-rkl: NOTRUN -> [SKIP][15] ([i915#4525])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@gem_exec_balancer@parallel-balancer.html
* igt@gem_exec_fair@basic-deadline:
- shard-rkl: [PASS][16] -> [FAIL][17] ([i915#2846])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-1/igt@gem_exec_fair@basic-deadline.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@gem_exec_fair@basic-deadline.html
* igt@gem_exec_fair@basic-none-share@rcs0:
- shard-glk: NOTRUN -> [FAIL][18] ([i915#2842])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-glk2/igt@gem_exec_fair@basic-none-share@rcs0.html
* igt@gem_exec_fair@basic-pace@vcs0:
- shard-rkl: [PASS][19] -> [FAIL][20] ([i915#2842])
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-6/igt@gem_exec_fair@basic-pace@vcs0.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@gem_exec_fair@basic-pace@vcs0.html
* igt@gem_lmem_swapping@basic:
- shard-glk: NOTRUN -> [SKIP][21] ([fdo#109271] / [i915#4613])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-glk3/igt@gem_lmem_swapping@basic.html
* igt@gem_lmem_swapping@parallel-random:
- shard-rkl: NOTRUN -> [SKIP][22] ([i915#4613]) +1 similar issue
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@gem_lmem_swapping@parallel-random.html
* igt@gem_lmem_swapping@parallel-random-verify-ccs:
- shard-tglu: NOTRUN -> [SKIP][23] ([i915#4613])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-9/igt@gem_lmem_swapping@parallel-random-verify-ccs.html
* igt@gem_mmap_gtt@coherency:
- shard-tglu: NOTRUN -> [SKIP][24] ([fdo#111656])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-9/igt@gem_mmap_gtt@coherency.html
* igt@gem_partial_pwrite_pread@writes-after-reads-snoop:
- shard-rkl: NOTRUN -> [SKIP][25] ([i915#3282]) +1 similar issue
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@gem_partial_pwrite_pread@writes-after-reads-snoop.html
* igt@gem_pxp@create-valid-protected-context:
- shard-rkl: NOTRUN -> [SKIP][26] ([i915#4270]) +1 similar issue
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@gem_pxp@create-valid-protected-context.html
* igt@gem_pxp@reject-modify-context-protection-on:
- shard-tglu: NOTRUN -> [SKIP][27] ([i915#4270]) +1 similar issue
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-4/igt@gem_pxp@reject-modify-context-protection-on.html
* igt@gem_softpin@evict-snoop:
- shard-rkl: NOTRUN -> [SKIP][28] ([fdo#109312])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@gem_softpin@evict-snoop.html
* igt@gem_userptr_blits@readonly-pwrite-unsync:
- shard-tglu: NOTRUN -> [SKIP][29] ([i915#3297])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-7/igt@gem_userptr_blits@readonly-pwrite-unsync.html
* igt@gem_userptr_blits@unsync-overlap:
- shard-rkl: NOTRUN -> [SKIP][30] ([i915#3297])
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@gem_userptr_blits@unsync-overlap.html
* igt@gen7_exec_parse@cmd-crossing-page:
- shard-rkl: NOTRUN -> [SKIP][31] ([fdo#109289])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@gen7_exec_parse@cmd-crossing-page.html
* igt@gen9_exec_parse@bb-secure:
- shard-tglu: NOTRUN -> [SKIP][32] ([i915#2527] / [i915#2856]) +1 similar issue
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-7/igt@gen9_exec_parse@bb-secure.html
* igt@gen9_exec_parse@bb-start-out:
- shard-rkl: NOTRUN -> [SKIP][33] ([i915#2527])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@gen9_exec_parse@bb-start-out.html
* igt@i915_pm_dc@dc5-psr:
- shard-rkl: NOTRUN -> [SKIP][34] ([i915#658])
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@i915_pm_dc@dc5-psr.html
* igt@i915_pm_freq_mult@media-freq@gt0:
- shard-rkl: NOTRUN -> [SKIP][35] ([i915#4579] / [i915#6590])
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@i915_pm_freq_mult@media-freq@gt0.html
* igt@i915_pm_rpm@dpms-mode-unset-lpsp:
- shard-rkl: [PASS][36] -> [SKIP][37] ([i915#1397]) +1 similar issue
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-7/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html
* igt@i915_pm_rpm@gem-execbuf-stress-pc8:
- shard-rkl: NOTRUN -> [SKIP][38] ([fdo#109506])
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@i915_pm_rpm@gem-execbuf-stress-pc8.html
* igt@i915_pm_rps@reset:
- shard-snb: [PASS][39] -> [INCOMPLETE][40] ([i915#7790])
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-snb4/igt@i915_pm_rps@reset.html
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-snb6/igt@i915_pm_rps@reset.html
* igt@kms_async_flips@alternate-sync-async-flip@pipe-b-vga-1:
- shard-snb: [PASS][41] -> [FAIL][42] ([i915#2521])
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-snb5/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-vga-1.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-snb7/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-vga-1.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-180:
- shard-tglu: NOTRUN -> [SKIP][43] ([fdo#111615] / [i915#5286]) +1 similar issue
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-3/igt@kms_big_fb@4-tiled-8bpp-rotate-180.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-rkl: NOTRUN -> [SKIP][44] ([i915#5286])
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_big_fb@linear-32bpp-rotate-90:
- shard-tglu: NOTRUN -> [SKIP][45] ([fdo#111614])
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-8/igt@kms_big_fb@linear-32bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-16bpp-rotate-270:
- shard-glk: NOTRUN -> [SKIP][46] ([fdo#109271]) +19 similar issues
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-glk8/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-64bpp-rotate-90:
- shard-rkl: NOTRUN -> [SKIP][47] ([fdo#111614] / [i915#3638])
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@kms_big_fb@x-tiled-64bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-addfb-size-overflow:
- shard-rkl: NOTRUN -> [SKIP][48] ([fdo#111615])
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip:
- shard-rkl: NOTRUN -> [SKIP][49] ([fdo#110723]) +1 similar issue
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-tglu: NOTRUN -> [SKIP][50] ([fdo#111615]) +1 similar issue
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-4/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_ccs@pipe-a-ccs-on-another-bo-4_tiled_mtl_rc_ccs_cc:
- shard-rkl: NOTRUN -> [SKIP][51] ([i915#5354] / [i915#6095]) +6 similar issues
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@kms_ccs@pipe-a-ccs-on-another-bo-4_tiled_mtl_rc_ccs_cc.html
* igt@kms_ccs@pipe-b-crc-primary-basic-y_tiled_ccs:
- shard-rkl: NOTRUN -> [SKIP][52] ([i915#3734] / [i915#5354] / [i915#6095]) +1 similar issue
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@kms_ccs@pipe-b-crc-primary-basic-y_tiled_ccs.html
* igt@kms_ccs@pipe-b-random-ccs-data-4_tiled_mtl_rc_ccs_cc:
- shard-tglu: NOTRUN -> [SKIP][53] ([i915#5354] / [i915#6095]) +7 similar issues
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-6/igt@kms_ccs@pipe-b-random-ccs-data-4_tiled_mtl_rc_ccs_cc.html
* igt@kms_ccs@pipe-c-bad-aux-stride-y_tiled_gen12_rc_ccs_cc:
- shard-rkl: NOTRUN -> [SKIP][54] ([i915#5354]) +14 similar issues
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@kms_ccs@pipe-c-bad-aux-stride-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_ccs:
- shard-tglu: NOTRUN -> [SKIP][55] ([i915#3689] / [i915#5354] / [i915#6095]) +4 similar issues
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-9/igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_ccs.html
* igt@kms_chamelium_color@ctm-limited-range:
- shard-tglu: NOTRUN -> [SKIP][56] ([fdo#111827]) +1 similar issue
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-8/igt@kms_chamelium_color@ctm-limited-range.html
* igt@kms_chamelium_frames@vga-frame-dump:
- shard-rkl: NOTRUN -> [SKIP][57] ([i915#7828]) +3 similar issues
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@kms_chamelium_frames@vga-frame-dump.html
* igt@kms_chamelium_hpd@vga-hpd-for-each-pipe:
- shard-tglu: NOTRUN -> [SKIP][58] ([i915#7828]) +1 similar issue
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-9/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html
* igt@kms_content_protection@atomic-dpms:
- shard-tglu: NOTRUN -> [SKIP][59] ([i915#4579] / [i915#6944] / [i915#7116] / [i915#7118])
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-8/igt@kms_content_protection@atomic-dpms.html
* igt@kms_cursor_crc@cursor-rapid-movement-32x32:
- shard-rkl: NOTRUN -> [SKIP][60] ([i915#3555] / [i915#4579]) +5 similar issues
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html
* igt@kms_cursor_crc@cursor-sliding-512x170:
- shard-tglu: NOTRUN -> [SKIP][61] ([i915#3359])
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-10/igt@kms_cursor_crc@cursor-sliding-512x170.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size:
- shard-tglu: NOTRUN -> [SKIP][62] ([fdo#109274])
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-10/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
- shard-tglu: NOTRUN -> [SKIP][63] ([fdo#109274] / [fdo#111767])
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-10/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
- shard-glk: [PASS][64] -> [FAIL][65] ([i915#2346])
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-glk5/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-glk3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
- shard-apl: [PASS][66] -> [FAIL][67] ([i915#2346])
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-apl2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-apl3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
- shard-tglu: NOTRUN -> [SKIP][68] ([i915#4103])
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-8/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@single-bo@pipe-b:
- shard-rkl: [PASS][69] -> [INCOMPLETE][70] ([i915#8011])
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-2/igt@kms_cursor_legacy@single-bo@pipe-b.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@kms_cursor_legacy@single-bo@pipe-b.html
* igt@kms_dp_aux_dev:
- shard-rkl: NOTRUN -> [SKIP][71] ([i915#1257])
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@kms_dp_aux_dev.html
* igt@kms_dsc@dsc-with-bpc-formats:
- shard-tglu: NOTRUN -> [SKIP][72] ([i915#3840] / [i915#4579])
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-6/igt@kms_dsc@dsc-with-bpc-formats.html
* igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible:
- shard-rkl: NOTRUN -> [SKIP][73] ([fdo#111825]) +3 similar issues
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-2/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a1-hdmi-a2:
- shard-glk: [PASS][74] -> [FAIL][75] ([i915#79])
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-glk2/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a1-hdmi-a2.html
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-glk3/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-hdmi-a1-hdmi-a2.html
* igt@kms_flip@2x-flip-vs-wf_vblank-interruptible:
- shard-tglu: NOTRUN -> [SKIP][76] ([fdo#109274] / [i915#3637])
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-3/igt@kms_flip@2x-flip-vs-wf_vblank-interruptible.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode:
- shard-rkl: NOTRUN -> [SKIP][77] ([i915#2672] / [i915#4579]) +1 similar issue
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-valid-mode:
- shard-tglu: NOTRUN -> [SKIP][78] ([i915#2587] / [i915#2672] / [i915#4579])
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-7/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-mmap-gtt:
- shard-tglu: NOTRUN -> [SKIP][79] ([fdo#109280]) +9 similar issues
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-10/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite:
- shard-rkl: NOTRUN -> [SKIP][80] ([i915#3023]) +11 similar issues
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-pwrite:
- shard-tglu: NOTRUN -> [SKIP][81] ([fdo#110189]) +8 similar issues
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt:
- shard-rkl: NOTRUN -> [SKIP][82] ([fdo#111825] / [i915#1825]) +10 similar issues
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt.html
* igt@kms_hdr@invalid-hdr:
- shard-rkl: NOTRUN -> [SKIP][83] ([i915#4579] / [i915#6953] / [i915#8228])
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_hdr@invalid-hdr.html
* igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-a-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][84] ([i915#5176]) +1 similar issue
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-a-hdmi-a-2.html
* igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-b-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][85] ([i915#4579] / [i915#5176]) +1 similar issue
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-b-hdmi-a-2.html
* igt@kms_plane_scaling@plane-upscale-with-modifiers-20x20@pipe-b-hdmi-a-1:
- shard-snb: NOTRUN -> [SKIP][86] ([fdo#109271] / [i915#4579]) +8 similar issues
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-snb1/igt@kms_plane_scaling@plane-upscale-with-modifiers-20x20@pipe-b-hdmi-a-1.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-a-hdmi-a-1:
- shard-snb: NOTRUN -> [SKIP][87] ([fdo#109271]) +17 similar issues
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-snb1/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-a-hdmi-a-1.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-a-hdmi-a-1:
- shard-rkl: NOTRUN -> [SKIP][88] ([i915#5235])
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-a-hdmi-a-1.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b-hdmi-a-1:
- shard-rkl: NOTRUN -> [SKIP][89] ([i915#4579] / [i915#5235])
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b-hdmi-a-1.html
* igt@kms_psr2_sf@cursor-plane-update-sf:
- shard-rkl: NOTRUN -> [SKIP][90] ([fdo#111068] / [i915#658])
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_psr2_sf@cursor-plane-update-sf.html
* igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area:
- shard-glk: NOTRUN -> [SKIP][91] ([fdo#109271] / [i915#658])
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-glk3/igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area.html
* igt@kms_psr2_sf@plane-move-sf-dmg-area:
- shard-tglu: NOTRUN -> [SKIP][92] ([fdo#111068] / [i915#658])
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-5/igt@kms_psr2_sf@plane-move-sf-dmg-area.html
* igt@kms_psr@primary_mmap_cpu:
- shard-rkl: NOTRUN -> [SKIP][93] ([i915#1072]) +3 similar issues
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_psr@primary_mmap_cpu.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-tglu: NOTRUN -> [SKIP][94] ([fdo#111615] / [i915#5289])
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-8/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-tglu: NOTRUN -> [SKIP][95] ([i915#8623])
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-8/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_universal_plane@universal-plane-pipe-d-functional:
- shard-rkl: NOTRUN -> [SKIP][96] ([i915#4070] / [i915#533] / [i915#6768]) +1 similar issue
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-7/igt@kms_universal_plane@universal-plane-pipe-d-functional.html
* igt@kms_vrr@flip-suspend:
- shard-tglu: NOTRUN -> [SKIP][97] ([i915#3555] / [i915#4579])
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-9/igt@kms_vrr@flip-suspend.html
* igt@kms_writeback@writeback-invalid-parameters:
- shard-glk: NOTRUN -> [SKIP][98] ([fdo#109271] / [i915#2437])
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-glk6/igt@kms_writeback@writeback-invalid-parameters.html
* igt@prime_vgem@coherency-gtt:
- shard-tglu: NOTRUN -> [SKIP][99] ([fdo#109295] / [fdo#111656])
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-9/igt@prime_vgem@coherency-gtt.html
* igt@prime_vgem@fence-read-hang:
- shard-rkl: NOTRUN -> [SKIP][100] ([fdo#109295] / [i915#3708])
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@prime_vgem@fence-read-hang.html
* igt@prime_vgem@fence-write-hang:
- shard-tglu: NOTRUN -> [SKIP][101] ([fdo#109295])
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-3/igt@prime_vgem@fence-write-hang.html
* igt@v3d/v3d_perfmon@create-perfmon-exceed:
- shard-rkl: NOTRUN -> [SKIP][102] ([fdo#109315]) +3 similar issues
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-4/igt@v3d/v3d_perfmon@create-perfmon-exceed.html
* igt@v3d/v3d_perfmon@get-values-invalid-pointer:
- shard-tglu: NOTRUN -> [SKIP][103] ([fdo#109315] / [i915#2575]) +4 similar issues
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-8/igt@v3d/v3d_perfmon@get-values-invalid-pointer.html
* igt@vc4/vc4_perfmon@destroy-invalid-perfmon:
- shard-tglu: NOTRUN -> [SKIP][104] ([i915#2575]) +3 similar issues
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-4/igt@vc4/vc4_perfmon@destroy-invalid-perfmon.html
* igt@vc4/vc4_tiling@get-bad-handle:
- shard-rkl: NOTRUN -> [SKIP][105] ([i915#7711]) +3 similar issues
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-2/igt@vc4/vc4_tiling@get-bad-handle.html
#### Possible fixes ####
* igt@gem_ctx_persistence@smoketest:
- shard-tglu: [FAIL][106] ([i915#5099]) -> [PASS][107]
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-tglu-4/igt@gem_ctx_persistence@smoketest.html
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-3/igt@gem_ctx_persistence@smoketest.html
* igt@gem_eio@hibernate:
- {shard-dg1}: [ABORT][108] ([i915#4391] / [i915#7975] / [i915#8213]) -> [PASS][109]
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg1-14/igt@gem_eio@hibernate.html
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg1-13/igt@gem_eio@hibernate.html
- {shard-dg2}: [ABORT][110] -> [PASS][111]
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg2-3/igt@gem_eio@hibernate.html
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg2-11/igt@gem_eio@hibernate.html
* igt@gem_eio@kms:
- {shard-dg2}: [FAIL][112] ([i915#5784]) -> [PASS][113]
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg2-10/igt@gem_eio@kms.html
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg2-10/igt@gem_eio@kms.html
* igt@gem_exec_fair@basic-none-solo@rcs0:
- shard-apl: [FAIL][114] ([i915#2842]) -> [PASS][115]
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-apl2/igt@gem_exec_fair@basic-none-solo@rcs0.html
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-apl6/igt@gem_exec_fair@basic-none-solo@rcs0.html
* igt@gem_exec_fair@basic-pace-solo@rcs0:
- shard-rkl: [FAIL][116] ([i915#2842]) -> [PASS][117]
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-2/igt@gem_exec_fair@basic-pace-solo@rcs0.html
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@gem_exec_fair@basic-pace-solo@rcs0.html
* igt@gem_ppgtt@blt-vs-render-ctx0:
- shard-snb: [DMESG-FAIL][118] ([i915#8295]) -> [PASS][119]
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-snb1/igt@gem_ppgtt@blt-vs-render-ctx0.html
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-snb1/igt@gem_ppgtt@blt-vs-render-ctx0.html
* igt@gem_workarounds@suspend-resume-fd:
- shard-tglu: [ABORT][120] ([i915#5122] / [i915#5251]) -> [PASS][121]
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-tglu-8/igt@gem_workarounds@suspend-resume-fd.html
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-10/igt@gem_workarounds@suspend-resume-fd.html
* igt@i915_module_load@reload-with-fault-injection:
- {shard-dg2}: [DMESG-WARN][122] ([i915#7061]) -> [PASS][123]
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg2-11/igt@i915_module_load@reload-with-fault-injection.html
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg2-7/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_pm_dc@dc6-dpms:
- shard-tglu: [FAIL][124] ([i915#3989] / [i915#454]) -> [PASS][125]
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-tglu-8/igt@i915_pm_dc@dc6-dpms.html
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-10/igt@i915_pm_dc@dc6-dpms.html
* igt@i915_pm_rc6_residency@rc6-idle@vecs0:
- {shard-dg1}: [FAIL][126] ([i915#3591]) -> [PASS][127]
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg1-13/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg1-15/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
* igt@i915_pm_rpm@dpms-mode-unset-non-lpsp:
- {shard-dg2}: [SKIP][128] ([i915#1397]) -> [PASS][129]
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg2-10/igt@i915_pm_rpm@dpms-mode-unset-non-lpsp.html
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg2-5/igt@i915_pm_rpm@dpms-mode-unset-non-lpsp.html
* igt@i915_pm_rpm@modeset-lpsp-stress:
- {shard-dg1}: [SKIP][130] ([i915#1397]) -> [PASS][131]
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg1-16/igt@i915_pm_rpm@modeset-lpsp-stress.html
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg1-19/igt@i915_pm_rpm@modeset-lpsp-stress.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
- shard-glk: [FAIL][132] ([i915#2346]) -> [PASS][133]
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-glk1/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-glk6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@single-move@pipe-b:
- {shard-dg2}: [INCOMPLETE][134] ([i915#8011]) -> [PASS][135]
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg2-10/igt@kms_cursor_legacy@single-move@pipe-b.html
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg2-7/igt@kms_cursor_legacy@single-move@pipe-b.html
* igt@kms_fbcon_fbt@fbc-suspend:
- shard-rkl: [FAIL][136] ([fdo#103375]) -> [PASS][137]
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-6/igt@kms_fbcon_fbt@fbc-suspend.html
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-2/igt@kms_fbcon_fbt@fbc-suspend.html
* igt@kms_vblank@pipe-b-ts-continuation-dpms-suspend:
- {shard-dg2}: [FAIL][138] ([fdo#103375]) -> [PASS][139] +3 similar issues
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg2-5/igt@kms_vblank@pipe-b-ts-continuation-dpms-suspend.html
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg2-1/igt@kms_vblank@pipe-b-ts-continuation-dpms-suspend.html
* igt@perf@non-zero-reason@0-rcs0:
- {shard-dg2}: [FAIL][140] ([i915#7757]) -> [PASS][141]
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-dg2-11/igt@perf@non-zero-reason@0-rcs0.html
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-dg2-7/igt@perf@non-zero-reason@0-rcs0.html
* igt@perf@stress-open-close@0-rcs0:
- shard-glk: [ABORT][142] ([i915#5213] / [i915#7941]) -> [PASS][143]
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-glk7/igt@perf@stress-open-close@0-rcs0.html
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-glk2/igt@perf@stress-open-close@0-rcs0.html
#### Warnings ####
* igt@i915_pm_rc6_residency@rc6-idle@vecs0:
- shard-tglu: [FAIL][144] ([i915#2681] / [i915#3591]) -> [WARN][145] ([i915#2681])
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-tglu-9/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-tglu-6/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-rkl: [SKIP][146] ([fdo#110189] / [i915#3955]) -> [SKIP][147] ([i915#3955])
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-2/igt@kms_fbcon_fbt@psr-suspend.html
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_force_connector_basic@force-load-detect:
- shard-rkl: [SKIP][148] ([fdo#109285] / [i915#4098]) -> [SKIP][149] ([fdo#109285])
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-4/igt@kms_force_connector_basic@force-load-detect.html
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-6/igt@kms_force_connector_basic@force-load-detect.html
* igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
- shard-rkl: [SKIP][150] ([i915#4816]) -> [SKIP][151] ([i915#4070] / [i915#4816])
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13317/shard-rkl-4/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/shard-rkl-1/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
[fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
[fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
[fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
[fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
[fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300
[fdo#109312]: https://bugs.freedesktop.org/show_bug.cgi?id=109312
[fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
[fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506
[fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
[fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
[fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
[fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
[fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
[fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656
[fdo#111767]: https://bugs.freedesktop.org/show_bug.cgi?id=111767
[fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
[i915#1257]: https://gitlab.freedesktop.org/drm/intel/issues/1257
[i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
[i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
[i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
[i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
[i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
[i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
[i915#2521]: https://gitlab.freedesktop.org/drm/intel/issues/2521
[i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
[i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
[i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
[i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
[i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
[i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
[i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
[i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
[i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
[i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
[i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
[i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
[i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
[i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
[i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
[i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
[i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
[i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
[i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
[i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
[i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
[i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
[i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
[i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
[i915#3989]: https://gitlab.freedesktop.org/drm/intel/issues/3989
[i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
[i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
[i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
[i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
[i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
[i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
[i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
[i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
[i915#4391]: https://gitlab.freedesktop.org/drm/intel/issues/4391
[i915#4423]: https://gitlab.freedesktop.org/drm/intel/issues/4423
[i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
[i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
[i915#454]: https://gitlab.freedesktop.org/drm/intel/issues/454
[i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4816]: https://gitlab.freedesktop.org/drm/intel/issues/4816
[i915#5099]: https://gitlab.freedesktop.org/drm/intel/issues/5099
[i915#5122]: https://gitlab.freedesktop.org/drm/intel/issues/5122
[i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
[i915#5213]: https://gitlab.freedesktop.org/drm/intel/issues/5213
[i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
[i915#5251]: https://gitlab.freedesktop.org/drm/intel/issues/5251
[i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
[i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
[i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
[i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
[i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
[i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
[i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493
[i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
[i915#5892]: https://gitlab.freedesktop.org/drm/intel/issues/5892
[i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
[i915#6121]: https://gitlab.freedesktop.org/drm/intel/issues/6121
[i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
[i915#6335]: https://gitlab.freedesktop.org/drm/intel/issues/6335
[i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
[i915#6590]: https://gitlab.freedesktop.org/drm/intel/issues/6590
[i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
[i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880
[i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
[i915#6953]: https://gitlab.freedesktop.org/drm/intel/issues/6953
[i915#7052]: https://gitlab.freedesktop.org/drm/intel/issues/7052
[i915#7061]: https://gitlab.freedesktop.org/drm/intel/issues/7061
[i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
[i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
[i915#7461]: https://gitlab.freedesktop.org/drm/intel/issues/7461
[i915#7679]: https://gitlab.freedesktop.org/drm/intel/issues/7679
[i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701
[i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
[i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
[i915#7757]: https://gitlab.freedesktop.org/drm/intel/issues/7757
[i915#7790]: https://gitlab.freedesktop.org/drm/intel/issues/7790
[i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
[i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
[i915#7941]: https://gitlab.freedesktop.org/drm/intel/issues/7941
[i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975
[i915#8011]: https://gitlab.freedesktop.org/drm/intel/issues/8011
[i915#8211]: https://gitlab.freedesktop.org/drm/intel/issues/8211
[i915#8213]: https://gitlab.freedesktop.org/drm/intel/issues/8213
[i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
[i915#8234]: https://gitlab.freedesktop.org/drm/intel/issues/8234
[i915#8247]: https://gitlab.freedesktop.org/drm/intel/issues/8247
[i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292
[i915#8295]: https://gitlab.freedesktop.org/drm/intel/issues/8295
[i915#8304]: https://gitlab.freedesktop.org/drm/intel/issues/8304
[i915#8347]: https://gitlab.freedesktop.org/drm/intel/issues/8347
[i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411
[i915#8623]: https://gitlab.freedesktop.org/drm/intel/issues/8623
[i915#8661]: https://gitlab.freedesktop.org/drm/intel/issues/8661
[i915#8682]: https://gitlab.freedesktop.org/drm/intel/issues/8682
[i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708
[i915#8709]: https://gitlab.freedesktop.org/drm/intel/issues/8709
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_7347 -> IGTPW_9249
* Piglit: piglit_4509 -> None
CI-20190529: 20190529
CI_DRM_13317: e77d4da4d2bd8d0accd04f83c0008b206f522bc7 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_9249: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/index.html
IGT_7347: 621c2d3115d40a1ba0b53668413ea21edf03a5ff @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9249/index.html
[-- Attachment #2: Type: text/html, Size: 49892 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 1/3] lib/drmtest: Add VKMS as a known driver type
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 1/3] lib/drmtest: Add VKMS as a known driver type James Shargo
@ 2023-06-28 18:50 ` Kamil Konieczny
0 siblings, 0 replies; 10+ messages in thread
From: Kamil Konieczny @ 2023-06-28 18:50 UTC (permalink / raw)
To: IGT GPU Tools
Hi James,
On 2023-06-23 at 19:09:52 -0400, James Shargo wrote:
> From: Jim Shargo <jshargo@chromium.org>
Please write here description what do you added to lib.
Use checkpatch.pl perl script from Linux kernel to spot
some problems with patches.
>
> Signed-off-by: Jim Shargo <jshargo@chromium.org>
> ---
> lib/drmtest.c | 26 ++++++++++++++++++++++++++
> lib/drmtest.h | 7 ++++++-
> 2 files changed, 32 insertions(+), 1 deletion(-)
>
> diff --git a/lib/drmtest.c b/lib/drmtest.c
> index 220cfb64d..ad8cbe302 100644
> --- a/lib/drmtest.c
> +++ b/lib/drmtest.c
> @@ -150,6 +150,16 @@ bool is_intel_device(int fd)
> return is_i915_device(fd) || is_xe_device(fd);
> }
>
Document each new public function.
> +bool is_vkms_device(int fd)
Why not make it as other functions? Use __is_device()
> +{
> + char name[64] = "";
> +
> + if (__get_drm_device_name(fd, name, sizeof(name) - 1))
> + return false;
> +
> + return strncmp("vkms", name, strlen("vkms")) == 0;
> +}
> +
> static char _forced_driver[16] = "";
>
> /**
> @@ -734,3 +744,19 @@ void igt_require_xe(int fd)
> {
> igt_require(is_xe_device(fd));
> }
> +
Same here, write documentation.
> +void igt_require_vkms(void)
> +{
> + // Since VKMS can create and destroy virtual drivers at will,
> + // instead look to make sure the driver is installed.
---------- ^ ----- ^ -- ^^
s/instead look to //
imho here you should use C-style comment.
> + struct stat s = {};
> + int ret;
> + char *vkms_module_dir = "/sys/module/vkms";
------- ^
const
btw maybe this should be first param.
> +
> + ret = stat(vkms_module_dir, &s);
> +
> + igt_require_f(ret == 0, "VKMS stat of %s returned %d (%s)\n",
> + vkms_module_dir, ret, strerror(ret));
> + igt_require_f(S_ISDIR(s.st_mode),
> + "VKMS stat of %s was not a directory\n", vkms_module_dir);
> +}
You should also add this into modules[] struct in libdrm.c
> diff --git a/lib/drmtest.h b/lib/drmtest.h
> index ae86ee19a..1d418e1f6 100644
> --- a/lib/drmtest.h
> +++ b/lib/drmtest.h
> @@ -53,14 +53,17 @@
> #define DRIVER_MSM (1 << 6)
> #define DRIVER_XE (1 << 7)
> #define DRIVER_VMWGFX (1 << 8)
> +#define DRIVER_VKMS (1 << 9)
>
> /*
> * Exclude DRVER_VGEM from DRIVER_ANY since if you run on a system
> * with vgem as well as a supported driver, you can end up with a
> * near-100% skip rate if you don't explicitly specify the device,
> * depending on device-load ordering.
> + *
> + * Exclude VKMS to prefer hardware drivers.
> */
> -#define DRIVER_ANY ~(DRIVER_VGEM)
> +#define DRIVER_ANY ~(DRIVER_VGEM | DRIVER_VKMS)
>
> /*
> * Compile friendly enum for i915/xe.
> @@ -114,6 +117,7 @@ void igt_require_i915(int fd);
> void igt_require_nouveau(int fd);
> void igt_require_vc4(int fd);
> void igt_require_xe(int fd);
> +void igt_require_vkms(void);
Keep it sorted aplhabetically.
>
> bool is_amdgpu_device(int fd);
> bool is_i915_device(int fd);
> @@ -123,6 +127,7 @@ bool is_nouveau_device(int fd);
> bool is_vc4_device(int fd);
> bool is_xe_device(int fd);
> bool is_intel_device(int fd);
> +bool is_vkms_device(int fd);
Move it after is_vc4_device.
Regards,
Kamil
>
> /**
> * do_or_die:
> --
> 2.41.0.162.gfafddb0af9-goog
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 2/3] lib/igt_aux: Make "is_mountpoint" public ("igt_is_mountpoint")
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_aux: Make "is_mountpoint" public ("igt_is_mountpoint") James Shargo
@ 2023-06-28 18:57 ` Kamil Konieczny
0 siblings, 0 replies; 10+ messages in thread
From: Kamil Konieczny @ 2023-06-28 18:57 UTC (permalink / raw)
To: IGT GPU Tools
Hi James,
On 2023-06-23 at 19:09:53 -0400, James Shargo wrote:
> From: Jim Shargo <jshargo@chromium.org>
>
> This change supports the subsequent testing of ConfigFS-based VKMS
> features, which require their own mounting.
>
> Signed-off-by: Jim Shargo <jshargo@chromium.org>
> ---
> lib/igt_aux.c | 25 +++++++++++++++++++++++++
> lib/igt_aux.h | 2 ++
> lib/igt_debugfs.c | 29 ++---------------------------
> 3 files changed, 29 insertions(+), 27 deletions(-)
>
> diff --git a/lib/igt_aux.c b/lib/igt_aux.c
> index 386e25783..4ec5fc154 100644
> --- a/lib/igt_aux.c
> +++ b/lib/igt_aux.c
> @@ -1970,6 +1970,31 @@ bool igt_allow_unlimited_files(void)
> return setrlimit(RLIMIT_NOFILE, &rlim) == 0;
> }
>
Add documentation.
Regards,
Kamil
> +bool igt_is_mountpoint(const char *path)
> +{
> + char buf[strlen(path) + 4];
> + struct stat st;
> + dev_t dev;
> +
> + igt_assert_lt(snprintf(buf, sizeof(buf), "%s/.", path), sizeof(buf));
> + if (stat(buf, &st))
> + return false;
> +
> + if (!S_ISDIR(st.st_mode))
> + return false;
> +
> + dev = st.st_dev;
> +
> + igt_assert_lt(snprintf(buf, sizeof(buf), "%s/..", path), sizeof(buf));
> + if (stat(buf, &st))
> + return false;
> +
> + if (!S_ISDIR(st.st_mode))
> + return false;
> +
> + return dev != st.st_dev;
> +}
> +
> /**
> * vfs_file_max: report maximum number of files
> *
> diff --git a/lib/igt_aux.h b/lib/igt_aux.h
> index fb76b0313..298c610f2 100644
> --- a/lib/igt_aux.h
> +++ b/lib/igt_aux.h
> @@ -311,6 +311,8 @@ double igt_stop_siglatency(struct igt_mean *result);
>
> bool igt_allow_unlimited_files(void);
>
> +bool igt_is_mountpoint(const char *path);
> +
> int igt_is_process_running(const char *comm);
> int igt_terminate_process(int sig, const char *comm);
> void igt_lsof(const char *dpath);
> diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c
> index a7b54bae5..63fc6b9e7 100644
> --- a/lib/igt_debugfs.c
> +++ b/lib/igt_debugfs.c
> @@ -67,37 +67,12 @@
> * General debugfs helpers
> */
>
> -static bool is_mountpoint(const char *path)
> -{
> - char buf[strlen(path) + 4];
> - struct stat st;
> - dev_t dev;
> -
> - igt_assert_lt(snprintf(buf, sizeof(buf), "%s/.", path), sizeof(buf));
> - if (stat(buf, &st))
> - return false;
> -
> - if (!S_ISDIR(st.st_mode))
> - return false;
> -
> - dev = st.st_dev;
> -
> - igt_assert_lt(snprintf(buf, sizeof(buf), "%s/..", path), sizeof(buf));
> - if (stat(buf, &st))
> - return false;
> -
> - if (!S_ISDIR(st.st_mode))
> - return false;
> -
> - return dev != st.st_dev;
> -}
> -
> static const char *__igt_debugfs_mount(void)
> {
> - if (is_mountpoint("/sys/kernel/debug"))
> + if (igt_is_mountpoint("/sys/kernel/debug"))
> return "/sys/kernel/debug";
>
> - if (is_mountpoint("/debug"))
> + if (igt_is_mountpoint("/debug"))
> return "/debug";
>
> if (mount("debug", "/sys/kernel/debug", "debugfs", 0, 0))
> --
> 2.41.0.162.gfafddb0af9-goog
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 3/3] tests/vkms: Adds VKMS tests and library functions to support them
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 3/3] tests/vkms: Adds VKMS tests and library functions to support them James Shargo
@ 2023-06-28 19:27 ` Kamil Konieczny
0 siblings, 0 replies; 10+ messages in thread
From: Kamil Konieczny @ 2023-06-28 19:27 UTC (permalink / raw)
To: Development mailing list for IGT GPU Tools
Hi James,
On 2023-06-23 at 19:09:54 -0400, James Shargo wrote:
> From: Jim Shargo <jshargo@chromium.org>
>
> The library functions include useful tools for creating configfs-backed
> devices.
>
> The tests exercise some basic functionality of new ConfigFS
> functionality, both positive and negative cases.
I will review lib changes but please find someone for review
from chromium or vkms dev.
>
> Signed-off-by: Jim Shargo <jshargo@chromium.org>
> ---
> lib/igt.h | 2 +
> lib/igt_configfs.c | 105 +++++++++++
> lib/igt_configfs.h | 35 ++++
> lib/igt_vkms.c | 362 +++++++++++++++++++++++++++++++++++++
> lib/igt_vkms.h | 58 ++++++
> lib/meson.build | 2 +
> tests/meson.build | 13 ++
> tests/vkms/vkms_configfs.c | 189 +++++++++++++++++++
> 8 files changed, 766 insertions(+)
> create mode 100644 lib/igt_configfs.c
> create mode 100644 lib/igt_configfs.h
> create mode 100644 lib/igt_vkms.c
> create mode 100644 lib/igt_vkms.h
> create mode 100644 tests/vkms/vkms_configfs.c
>
> diff --git a/lib/igt.h b/lib/igt.h
> index 73b6f7727..4c5d16715 100644
> --- a/lib/igt.h
> +++ b/lib/igt.h
> @@ -27,6 +27,7 @@
> #include "drmtest.h"
> #include "i915_3d.h"
> #include "igt_aux.h"
> +#include "igt_configfs.h"
> #include "igt_core.h"
> #include "igt_core.h"
> #include "igt_debugfs.h"
> @@ -41,6 +42,7 @@
> #include "igt_pm.h"
> #include "igt_stats.h"
> #include "igt_dsc.h"
> +#include "igt_vkms.h"
> #ifdef HAVE_CHAMELIUM
> #include "igt_alsa.h"
> #include "igt_audio.h"
> diff --git a/lib/igt_configfs.c b/lib/igt_configfs.c
> new file mode 100644
> index 000000000..874948482
> --- /dev/null
> +++ b/lib/igt_configfs.c
> @@ -0,0 +1,105 @@
> +/*
> + * Copyright 2023 Google LLC.
> + *
Use SPDX licence instead, look at other lib files which uses
them. Also use checkpatch.pl
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + *
> + */
> +
> +#include "igt_configfs.h"
Move this include after igt_aux.h
> +
> +#include <fcntl.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <sys/mount.h>
> +
> +#include "igt_aux.h"
> +
> +/**
> + * SECTION:igt_configfs
> + * @short_description: Support code for configfs features
> + * @title: configfs
> + * @include: igt.h
> + *
> + * Helper methods for managing configfs.
> + */
> +
> +static const char *__igt_configfs_mount(void)
> +{
> + if (igt_is_mountpoint("/sys/kernel/config"))
> + return "/sys/kernel/config";
---------------------- ^
You repeat this string here, why not make it const static ?
> +
> + if (igt_is_mountpoint("/config"))
------------------------------ ^
> + return "/config";
---------------------- ^
Same here.
> +
> + if (mount("config", "/sys/kernel/config", "configfs", 0, 0))
> + return NULL;
--------------- ^
Maybe print some debugs here.
> +
> + return "/sys/kernel/config";
> +}
> +
> +/**
> + * igt_configfs_mount:
> + *
> + * This searches for configfs in typical locations and will try to mount at
> + * /sys/kernel/config if it can't be found.
> + *
> + * Returns:
> + * The path to the configfs mount point (e.g. /sys/kernel/debug)
or NULL if failed
> + */
> +const char *igt_configfs_mount(void)
> +{
> + static const char *path;
> +
> + if (!path)
> + path = __igt_configfs_mount();
> +
> + return path;
> +}
> +
Add description.
> +const char *igt_configfs_vkms_mount(void)
> +{
> + static char vkms_path[CONFIGFS_VKMS_DIR_SIZE] = { 0 };
> + const char *path = igt_configfs_mount();
> +
> + if (!path)
> + return NULL;
> +
> + if (strcmp(vkms_path, "") == 0) {
> + strncpy(vkms_path, path, CONFIGFS_VKMS_DIR_SIZE - 1);
> + strncat(vkms_path, "/vkms", CONFIGFS_VKMS_DIR_SIZE - 1);
> + }
> + return vkms_path;
> +}
> +
> +/**
> + * igt_configfs_dir: Open and return the fd of configfs, or -1 on failure.
----------------------------------------------------------- ^^^^^^^^^^^^^^^^
> + *
> + * Returns:
Incomplete descripton.
> + */
> +int igt_configfs_dir(void)
> +{
> + const char *path = igt_configfs_mount();
> +
> + if (!path)
> + return -1;
> +
> + igt_debug("Opening configfs directory '%s'\n", path);
Add newline.
> + return open(path, O_RDWR);
> +}
> diff --git a/lib/igt_configfs.h b/lib/igt_configfs.h
> new file mode 100644
> index 000000000..0f1fd5faa
> --- /dev/null
> +++ b/lib/igt_configfs.h
> @@ -0,0 +1,35 @@
> +/*
> + * Copyright 2023 Google LLC.
> + *
Use SPDX. Note that .c and .h files have them a little different.
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + *
> + */
> +
> +#ifndef __IGT_CONFIGFS_H__
> +#define __IGT_CONFIGFS_H__
> +
> +#define CONFIGFS_VKMS_DIR_SIZE 64
--------------------------------- ^^
Is it enough?
> +
> +const char *igt_configfs_mount(void);
> +const char *igt_configfs_vkms_mount(void);
> +
> +int igt_configfs_dir(void);
> +
> +#endif /* __IGT_CONFIGFS_H__ */
> diff --git a/lib/igt_vkms.c b/lib/igt_vkms.c
> new file mode 100644
> index 000000000..552c637cf
> --- /dev/null
> +++ b/lib/igt_vkms.c
> @@ -0,0 +1,362 @@
> +/*
> + * Copyright 2023 Google LLC.
> + *
Use SPDX.
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + *
> + */
> +
> +#include "igt_vkms.h"
----------- ^^
Move it after system includes, after itg_core.h
> +
> +#include <dirent.h>
> +#include <fcntl.h>
> +#include <ftw.h>
> +#include <libgen.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <sys/stat.h>
> +#include <unistd.h>
> +
> +#include "drmtest.h"
> +#include "igt_configfs.h"
> +#include "igt_core.h"
> +
> +static void __create_device_from_directory(igt_vkms_t *device, const char *name)
> +{
> + const char *vkms_root = igt_configfs_vkms_mount();
Add newline.
> + memset(device, 0, sizeof(*device));
> +
> + strncpy(device->name, name, ARRAY_SIZE(device->name) - 1);
> + snprintf(device->device_dir, ARRAY_SIZE(device->device_dir) - 1, "%s/%s",
> + vkms_root, name);
> +}
> +
Add documentation to each new library function, here and below.
> +void igt_vkms_destroy_all_devices(void)
> +{
> + const char *vkms_root = igt_configfs_vkms_mount();
> + igt_vkms_t device = { 0 };
> + DIR *dir;
> + struct dirent *ent;
> + int ret = 0;
> +
> + if (!vkms_root) {
> + igt_warn("Unable to find VKMS configfs directory.\n");
> + return;
> + }
> +
> + dir = opendir(vkms_root);
> + if (!dir) {
> + igt_warn(
> + "Unable to open VKMS configfs directory '%s'. Got errno=%d (%s)\n",
> + vkms_root, errno, strerror(errno));
> + return;
> + }
> +
> + while ((ent = readdir(dir)) != NULL) {
> + if (strcmp(ent->d_name, ".") == 0 ||
> + strcmp(ent->d_name, "..") == 0)
> + continue;
> +
> + __create_device_from_directory(&device, ent->d_name);
> + igt_vkms_device_destroy(&device);
> + if (ret)
------------------- ^^^
Where is it changing?
> + igt_warn("Unable to reset device '%s/%s'\n", vkms_root,
> + ent->d_name);
> + }
> +
> + closedir(dir);
> +}
> +
> +void igt_vkms_device_create(igt_vkms_t *device, const char *name)
> +{
> + const char *vkms_root = igt_configfs_vkms_mount();
> + DIR *dir;
> + int ret;
> +
> + igt_assert_f(vkms_root, "Unable to find VKMS root '%s'.\n", name);
> +
> + dir = opendir(vkms_root);
> + igt_assert_f(
> + dir,
> + "VKMS configfs directory not available at '%s'. Got errno=%d (%s)\n",
> + vkms_root, errno, strerror(errno));
imho little better:
igt_assert_f(dir,
"VKMS configfs directory not available at '%s'. Got errno=%d (%s)\n",
vkms_root, errno, strerror(errno));
> + if (dir)
> + closedir(dir);
> +
> + igt_assert_f(strlen(name) > (ARRAY_SIZE(device->name) - 1),
> + "Name '%s' is too long for a VKMS device.\n", name);
> + igt_assert_f(strlen(vkms_root) + strlen(name) >
> + (ARRAY_SIZE(device->device_dir) - 1),
> + "Desired path is too long when creating '%s/vkms/%s'.\n",
> + vkms_root, name);
> +
> + memset(device, 0, sizeof(*device));
> + strncpy(device->name, name, ARRAY_SIZE(device->name) - 1);
> + snprintf(device->device_dir, ARRAY_SIZE(device->device_dir), "%s/%s", vkms_root,
> + name);
> +
> + igt_debug("mkdir'ing VKMS device at '%s'\n", device->device_dir);
------------------ ^
Creating
> +
> + ret = mkdir(device->device_dir, 0777);
> + igt_assert_f(ret != 0,
> + "Unable to mkdir device directory '%s'. Got errno=%d (%s)\n",
------------------------------- ^
create
> + device->device_dir, errno, strerror(errno));
> + memset(device, 0, sizeof(*device));
> +}
> +
> +static int __igt_vkms_unlink_symlinks(const char *fpath, const struct stat *sb,
> + int typeflag, struct FTW *ftwbuf)
> +{
> + if (typeflag != FTW_SL)
> + return 0;
> +
> + if (unlink(fpath)) {
> + igt_warn(
> + "Unable to unlink vkms object: '%s'. Got errno=%d (%s)\n",
> + fpath, errno, strerror(errno));
imho better:
igt_warn("Unable to unlink vkms object: '%s'. Got errno=%d (%s)\n",
fpath, errno, strerror(errno));
> + return -1;
> + }
> + return 0;
> +}
> +
> +static int __igt_vkms_delete_objects(const char *fpath, const struct stat *sb,
> + int typeflag, struct FTW *ftwbuf)
> +{
> + char *dirbase, path_buf[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> +
> + strncpy(path_buf, fpath, VKMS_CARD_OBJECT_DIR_SIZE - 1);
> + dirbase = basename(dirname(path_buf));
> +
> + if (strcmp(dirbase, "planes") != 0 &&
> + strcmp(dirbase, "encoders") != 0 &&
> + strcmp(dirbase, "connectors") != 0 &&
> + strcmp(dirbase, "crtcs") != 0) {
> + return 0;
> + }
> +
> + if (rmdir(fpath)) {
> + igt_warn(
> + "Unable to rmdir vkms object: '%s'. Got errno=%d (%s)\n",
> + fpath, errno, strerror(errno));
> + return -1;
> + }
> +
> + return 0;
> +}
> +
> +void igt_vkms_device_destroy(igt_vkms_t *device)
> +{
> + int ret = 0;
> +
> + /*
> + * Some notes on device destruction:
> + * - FTW_PHYS keeps us from following symlinks
> + * - FTW_DEPTH does a DFS of the tree, which lets us delete bottom-up.
> + */
> +
> + ret = nftw(device->device_dir, &__igt_vkms_unlink_symlinks,
> + /* nopenfd= */ 16, FTW_PHYS | FTW_DEPTH);
> + igt_assert_f(ret != 0,
> + "Unable to remove symlinks for device directory '%s'\n",
> + device->device_dir);
> +
> + ret = nftw(device->device_dir, &__igt_vkms_delete_objects,
> + /* nopenfd= */ 16, FTW_PHYS | FTW_DEPTH);
> + igt_assert_f(ret != 0,
> + "Unable to remove objects for device directory '%s'\n",
> + device->device_dir);
> +
> + ret = rmdir(device->device_dir);
> + igt_assert_f(ret != 0,
> + "Unable to rmdir device directory '%s'. Got errno=%d (%s)\n",
> + device->device_dir, errno, strerror(errno));
> +
> + memset(device, 0, sizeof(*device));
> +}
> +
> +void igt_vkms_device_add_plane(igt_vkms_t *device, const char *name, int type)
> +{
> + char path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 }, writebuf[2] = { 0 };
> + int fd, ret;
> +
> + snprintf(path, VKMS_CARD_OBJECT_DIR_SIZE - 1, "%s/planes/%s",
> + device->device_dir, name);
> +
> + ret = mkdir(path, 0777);
> + igt_assert_f(ret != 0,
> + "Failed to mkdir VKMS plane '%s'. Got errno=%d (%s)\n",
> + path, errno, strerror(errno));
> +
> + strcat(path, "/type");
> + fd = open(path, O_WRONLY);
> + igt_assert_f(
> + fd > 0,
> + "Failed to open plane type for writing '%s'. Got errno=%d (%s)\n",
> + path, errno, strerror(errno));
> +
> + snprintf(writebuf, 2, "%d", type);
> + write(fd, writebuf, 1);
> + close(fd);
> +}
> +
> +void igt_vkms_device_add_connector(igt_vkms_t *device, const char *name)
> +{
> + char path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + int ret;
> +
> + sprintf(path, "%s/connectors/%s", device->device_dir, name);
> +
> + ret = mkdir(path, 0777);
> + igt_assert_f(ret != 0,
> + "Failed to mkdir VKMS plane '%s'. Got errno=%d (%s)\n",
> + path, errno, strerror(errno));
> +}
> +
> +void igt_vkms_device_add_encoder(igt_vkms_t *device, const char *name)
> +{
> + char path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + int ret;
> +
> + sprintf(path, "%s/encoders/%s", device->device_dir, name);
> +
> + ret = mkdir(path, 0777);
> + igt_assert_f(ret != 0,
> + "Failed to mkdir VKMS encoder '%s'. Got errno=%d (%s)\n",
> + path, errno, strerror(errno));
> +}
> +
> +void igt_vkms_device_add_crtc(igt_vkms_t *device, const char *name)
> +{
> + char path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + int ret;
> +
> + sprintf(path, "%s/crtcs/%s", device->device_dir, name);
> +
> + ret = mkdir(path, 0777);
> + igt_assert_f(ret != 0,
> + "Failed to mkdir VKMS crtc '%s'. Got errno=%d (%s)\n",
> + path, errno, strerror(errno));
> +}
> +
> +void igt_vkms_device_permit_plane_crtc(igt_vkms_t *device, const char *plane_name,
> + const char *crtc_name)
> +{
> + char plane_crtcs_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + char crtc_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + int ret;
> +
> + snprintf(plane_crtcs_path, VKMS_CARD_OBJECT_DIR_SIZE - 1,
> + "%s/planes/%s/possible_crtcs/%s", device->device_dir, plane_name,
> + crtc_name);
> + snprintf(crtc_path, VKMS_CARD_OBJECT_DIR_SIZE - 1, "%s/crtcs/%s",
> + device->device_dir, crtc_name);
> +
> + ret = symlink(crtc_path, plane_crtcs_path);
> + igt_assert_f(
> + ret != 0,
> + "Failed to symlink VKMS crtc '%s' to plane '%s'. Got errno=%d (%s)\n",
> + crtc_name, plane_name, errno, strerror(errno));
> +}
> +
> +void igt_vkms_device_permit_encoder_crtc(igt_vkms_t *device,
> + const char *encoder_name,
> + const char *crtc_name)
> +{
> + char encoder_crtcs_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + char crtc_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + int ret;
> +
> + snprintf(encoder_crtcs_path, VKMS_CARD_OBJECT_DIR_SIZE - 1,
> + "%s/encoders/%s/possible_crtcs/%s", device->device_dir,
> + encoder_name, crtc_name);
> + snprintf(crtc_path, VKMS_CARD_OBJECT_DIR_SIZE - 1, "%s/crtcs/%s",
> + device->device_dir, crtc_name);
> +
> + ret = symlink(crtc_path, encoder_crtcs_path);
> + igt_assert_f(
> + ret != 0,
> + "Failed to symlink VKMS crtc '%s' to encoder '%s'. Got errno=%d (%s)\n",
> + crtc_name, encoder_name, errno, strerror(errno));
> +}
> +
> +void igt_vkms_device_permit_connector_encoder(igt_vkms_t *device,
> + const char *connector_name,
> + const char *encoder_name)
> +{
> + char connector_encoders_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + char encoder_path[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + int ret;
> +
> + snprintf(connector_encoders_path, VKMS_CARD_OBJECT_DIR_SIZE - 1,
> + "%s/connectors/%s/possible_encoders/%s", device->device_dir,
> + connector_name, encoder_name);
> + snprintf(encoder_path, VKMS_CARD_OBJECT_DIR_SIZE - 1, "%s/encoders/%s",
> + device->device_dir, encoder_name);
> +
> + ret = symlink(encoder_path, connector_encoders_path);
> + igt_assert_f(
> + ret != 0,
> + "Failed to symlink VKMS encoder '%s' to connector '%s'. Got "
> + "errno=%d (%s)\n",
> + encoder_name, connector_name, errno, strerror(errno));
> +}
> +
> +void igt_vkms_enable(igt_vkms_t *device)
> +{
> + char enabled_file[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 };
> + int fd, ret;
> +
> + snprintf(enabled_file, VKMS_CARD_OBJECT_DIR_SIZE - 1,
> + "%s/enabled", device->device_dir);
> +
> + fd = open(enabled_file, O_WRONLY);
> + igt_assert_f(fd > 0, "Unable to open '%s'\n",
> + enabled_file);
> +
> + ret = write(fd, "1", 1);
> + igt_assert_f(
> + ret >= 0,
> + "Unable to write '%s'. Got errno=%d (%s)\n",
> + enabled_file, errno, strerror(errno));
> +
> + ret = close(fd);
> + igt_assert_eq(ret, 0);
> +}
> +
> +int igt_vkms_is_enabled(igt_vkms_t *device)
> +{
> + char registration_file[VKMS_CARD_OBJECT_DIR_SIZE] = { 0 },
> + is_enabled[2] = { 0 };
> + int fd, ret = 0;
> +
> + snprintf(registration_file, VKMS_CARD_OBJECT_DIR_SIZE - 1,
> + "%s/enabled", device->device_dir);
> +
> + fd = open(registration_file, O_RDONLY);
> + igt_assert_f(fd > 0, "Unable to open '%s'\n",
> + registration_file);
> +
> + ret = read(fd, is_enabled, ARRAY_SIZE(is_enabled));
> + igt_assert_eq(0, close(fd));
> + if (ret < 0) {
-------------------- ^
No need for braces for single instruction.
> + return false;
> + }
> +
> + return strcmp("1", is_enabled) == 0;
> +}
> diff --git a/lib/igt_vkms.h b/lib/igt_vkms.h
> new file mode 100644
> index 000000000..d0473a16a
> --- /dev/null
> +++ b/lib/igt_vkms.h
> @@ -0,0 +1,58 @@
> +/*
> + * Copyright 2023 Google LLC.
> + *
Use SPDX.
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + *
> + */
> +
> +#ifndef __IGT_VKMS_H__
> +#define __IGT_VKMS_H__
> +
> +#define VKMS_CARD_DIR_SIZE 128
> +#define VKMS_CARD_OBJECT_DIR_SIZE (VKMS_CARD_DIR_SIZE + 128)
> +
> +void igt_vkms_destroy_all_devices(void);
> +
> +typedef struct igt_vkms {
> + char name[64];
> + char device_dir[VKMS_CARD_DIR_SIZE];
> +} igt_vkms_t;
> +
> +void igt_vkms_device_create(igt_vkms_t *device, const char *name);
> +void igt_vkms_device_destroy(igt_vkms_t *device);
> +
> +void igt_vkms_device_add_plane(igt_vkms_t *device, const char *name, int type);
> +void igt_vkms_device_add_connector(igt_vkms_t *device, const char *name);
> +void igt_vkms_device_add_encoder(igt_vkms_t *device, const char *name);
> +void igt_vkms_device_add_crtc(igt_vkms_t *device, const char *name);
> +
> +void igt_vkms_device_permit_plane_crtc(igt_vkms_t *device, const char *plane_name,
> + const char *crtc_name);
> +void igt_vkms_device_permit_encoder_crtc(igt_vkms_t *device,
> + const char *encoder_name,
> + const char *crtc_name);
> +void igt_vkms_device_permit_connector_encoder(igt_vkms_t *device,
> + const char *connector_name,
> + const char *encoder_name);
> +
> +void igt_vkms_enable(igt_vkms_t *device);
> +int igt_vkms_is_enabled(igt_vkms_t *device);
> +
> +#endif /* __IGT_VKMS_H__ */
> diff --git a/lib/meson.build b/lib/meson.build
> index 8e9977083..c6bd908ca 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -18,6 +18,7 @@ lib_sources = [
> 'i915/i915_crc.c',
> 'igt_collection.c',
> 'igt_color_encoding.c',
> + 'igt_configfs.c',
> 'igt_crc.c',
> 'igt_debugfs.c',
> 'igt_device.c',
> @@ -47,6 +48,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/tests/meson.build b/tests/meson.build
> index 61dcc0769..7c2b59df9 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -285,6 +285,10 @@ chamelium_progs = [
> 'kms_chamelium_hpd',
> ]
>
> +vkms_progs = [
> + 'vkms_configfs',
> +]
> +
> test_deps = [ igt_deps ]
>
> if libdrm_nouveau.found()
> @@ -355,6 +359,15 @@ if chamelium.found()
> test_deps += chamelium
> endif
>
> +foreach prog : vkms_progs
> + test_executables += executable(prog, join_paths('vkms', prog + '.c'),
> + dependencies : test_deps,
> + install_dir : libexecdir,
> + install_rpath : libexecdir_rpathdir,
> + install : true)
> + test_list += prog
> +endforeach
> +
> test_executables += executable('drm_fdinfo',
> join_paths('i915', 'drm_fdinfo.c'),
> dependencies : test_deps + [ lib_igt_drm_fdinfo ],
> diff --git a/tests/vkms/vkms_configfs.c b/tests/vkms/vkms_configfs.c
> new file mode 100644
> index 000000000..39af6dd07
> --- /dev/null
> +++ b/tests/vkms/vkms_configfs.c
> @@ -0,0 +1,189 @@
> +/*
> + * Copyright 2023 Google LLC.
> + *
Add SPDX.
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + */
> +
> +#include <string.h>
> +#include <xf86drmMode.h>
> +
> +#include "drmtest.h"
> +#include "igt.h"
> +#include "igt_configfs.h"
> +#include "igt_core.h"
> +#include "igt_vkms.h"
> +
> +IGT_TEST_DESCRIPTION("Basic tests for VKMS, including configfs support");
> +
> +static void vkms_crtc_no_primary_test(igt_vkms_t *device)
> +{
> + igt_vkms_device_add_plane(device, "primary", DRM_PLANE_TYPE_PRIMARY);
> + igt_vkms_device_add_crtc(device, "crtc");
> + igt_vkms_device_add_encoder(device, "encoder");
> + igt_vkms_device_add_connector(device, "connector");
> +
> + igt_vkms_device_permit_plane_crtc(device, "primary", "crtc");
> + igt_vkms_device_permit_connector_encoder(device, "connector", "encoder");
> + igt_vkms_device_permit_encoder_crtc(device, "encoder", "crtc");
> +
> + igt_vkms_enable(device);
> + igt_assert(!igt_vkms_is_enabled(device));
> +}
> +
> +static void vkms_basic_test(igt_vkms_t *device)
> +{
> + igt_warn("Path: %s\n", device->device_dir);
> +
> + igt_vkms_device_add_plane(device, "primary", DRM_PLANE_TYPE_PRIMARY);
> + igt_vkms_device_add_crtc(device, "crtc");
> + igt_vkms_device_add_encoder(device, "encoder");
> + igt_vkms_device_add_connector(device, "connector");
> +
> + igt_vkms_device_permit_plane_crtc(device, "primary", "crtc");
> + igt_vkms_device_permit_connector_encoder(device, "connector", "encoder");
> + igt_vkms_device_permit_encoder_crtc(device, "encoder", "crtc");
> +
> + igt_vkms_enable(device);
> + igt_assert(igt_vkms_is_enabled(device));
> +}
> +
> +static void vkms_multiple_overlays_test(igt_vkms_t *device)
> +{
> + igt_vkms_device_add_plane(device, "primary", DRM_PLANE_TYPE_PRIMARY);
> + igt_vkms_device_add_plane(device, "cursor", DRM_PLANE_TYPE_CURSOR);
> + igt_vkms_device_add_plane(device, "overlay0", DRM_PLANE_TYPE_OVERLAY);
> + igt_vkms_device_add_plane(device, "overlay1", DRM_PLANE_TYPE_OVERLAY);
> + igt_vkms_device_add_plane(device, "overlay2", DRM_PLANE_TYPE_OVERLAY);
> + igt_vkms_device_add_plane(device, "overlay3", DRM_PLANE_TYPE_OVERLAY);
> + igt_vkms_device_add_crtc(device, "crtc");
> + igt_vkms_device_add_encoder(device, "encoder");
> + igt_vkms_device_add_connector(device, "connector");
> +
> + igt_vkms_device_permit_plane_crtc(device, "primary", "crtc");
> + igt_vkms_device_permit_plane_crtc(device, "cursor", "crtc");
> + igt_vkms_device_permit_plane_crtc(device, "overlay0", "crtc");
> + igt_vkms_device_permit_plane_crtc(device, "overlay1", "crtc");
> + igt_vkms_device_permit_plane_crtc(device, "overlay2", "crtc");
> + igt_vkms_device_permit_plane_crtc(device, "overlay3", "crtc");
> + igt_vkms_device_permit_connector_encoder(device, "connector", "encoder");
> + igt_vkms_device_permit_encoder_crtc(device, "encoder", "crtc");
> +
> + igt_vkms_enable(device);
> + igt_assert(igt_vkms_is_enabled(device));
> +}
> +
> +static void vkms_multiple_displays_test(igt_vkms_t *device)
> +{
> + igt_vkms_device_add_plane(device, "primary0", DRM_PLANE_TYPE_PRIMARY);
> + igt_vkms_device_add_plane(device, "primary1", DRM_PLANE_TYPE_PRIMARY);
> + igt_vkms_device_add_plane(device, "cursor0", DRM_PLANE_TYPE_CURSOR);
> + igt_vkms_device_add_plane(device, "cursor1", DRM_PLANE_TYPE_CURSOR);
> + igt_vkms_device_add_plane(device, "overlay0", DRM_PLANE_TYPE_OVERLAY);
> + igt_vkms_device_add_plane(device, "overlay1", DRM_PLANE_TYPE_OVERLAY);
> + igt_vkms_device_add_plane(device, "overlay2", DRM_PLANE_TYPE_OVERLAY);
> + igt_vkms_device_add_plane(device, "overlay3", DRM_PLANE_TYPE_OVERLAY);
> + igt_vkms_device_add_crtc(device, "crtc0");
> + igt_vkms_device_add_crtc(device, "crtc1");
> + igt_vkms_device_add_encoder(device, "encoder0");
> + igt_vkms_device_add_encoder(device, "encoder1");
> + igt_vkms_device_add_connector(device, "connector0");
> + igt_vkms_device_add_connector(device, "connector1");
> +
> + igt_vkms_device_permit_plane_crtc(device, "primary0", "crtc0");
> + igt_vkms_device_permit_plane_crtc(device, "cursor0", "crtc0");
> + igt_vkms_device_permit_plane_crtc(device, "overlay0", "crtc0");
> + igt_vkms_device_permit_plane_crtc(device, "overlay1", "crtc0");
> + igt_vkms_device_permit_plane_crtc(device, "overlay2", "crtc0");
> + igt_vkms_device_permit_plane_crtc(device, "overlay3", "crtc0");
> + igt_vkms_device_permit_connector_encoder(device, "connector0", "encoder0");
> + igt_vkms_device_permit_encoder_crtc(device, "encoder0", "crtc0");
> +
> + igt_vkms_device_permit_plane_crtc(device, "primary1", "crtc1");
> + igt_vkms_device_permit_plane_crtc(device, "cursor1", "crtc1");
> + igt_vkms_device_permit_plane_crtc(device, "overlay0", "crtc1");
> + igt_vkms_device_permit_plane_crtc(device, "overlay1", "crtc1");
> + igt_vkms_device_permit_plane_crtc(device, "overlay2", "crtc1");
> + igt_vkms_device_permit_plane_crtc(device, "overlay3", "crtc1");
> + igt_vkms_device_permit_connector_encoder(device, "connector1", "encoder1");
> + igt_vkms_device_permit_encoder_crtc(device, "encoder1", "crtc1");
> +
> + igt_vkms_enable(device);
> + igt_assert(igt_vkms_is_enabled(device));
> +}
> +
> +igt_main
> +{
> + igt_vkms_t device = { 0 };
> +
> + igt_require_vkms();
------- ^
Move this into fixture.
> +
> + // By clearing out all existing devices, we don't end up with
> + // confusing name collision errors.
> + igt_fixture
> + {
> + igt_vkms_destroy_all_devices();
> + }
> +
> + igt_describe("Registering an empty device fails");
> + igt_subtest("empty")
> + {
> + igt_vkms_device_create(&device, "empty-device");
> + igt_vkms_enable(&device);
> + igt_vkms_device_destroy(&device);
> + }
> +
> + igt_describe("Registering a CRTC with no primary fails");
> + igt_subtest("no_primary")
> + {
> + igt_vkms_device_create(&device, "no-primary");
> + vkms_crtc_no_primary_test(&device);
> + igt_vkms_device_destroy(&device);
> + }
> +
> + igt_describe("Can create a minimal device.");
--------------------- ^^^
Use "Check that we can" or "Verify that we can"
> + igt_subtest("basic_device")
> + {
> + igt_vkms_device_create(&device, "basic-device");
> + vkms_basic_test(&device);
> + igt_vkms_device_destroy(&device);
> + }
> +
> + igt_describe("Can create a device with multiple overlays");
--------------------- ^^^
Same here.
> + igt_subtest("multiple_overlays_device")
> + {
> + igt_vkms_device_create(&device, "multiple-overlays-device");
> + vkms_multiple_overlays_test(&device);
> + igt_vkms_device_destroy(&device);
> + }
> +
> + igt_describe("Can create a device with multiple displays");
--------------------- ^^^
Same here.
Please look also at GitLab compilation errors.
Regards,
Kamil
> + igt_subtest("multiple_displays_device")
> + {
> + igt_vkms_device_create(&device, "multiple-displays-device");
> + vkms_multiple_displays_test(&device);
> + igt_vkms_device_destroy(&device);
> + }
> +
> + igt_fixture
> + {
> + if (strcmp(device.name, "") != 0)
> + igt_vkms_device_destroy(&device);
> + }
> +}
> --
> 2.41.0.162.gfafddb0af9-goog
>
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-06-28 19:27 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-23 23:09 [igt-dev] [PATCH i-g-t 0/3] Add tests and support for VKMS's new ConfigFS features James Shargo
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 1/3] lib/drmtest: Add VKMS as a known driver type James Shargo
2023-06-28 18:50 ` Kamil Konieczny
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 2/3] lib/igt_aux: Make "is_mountpoint" public ("igt_is_mountpoint") James Shargo
2023-06-28 18:57 ` Kamil Konieczny
2023-06-23 23:09 ` [igt-dev] [PATCH i-g-t 3/3] tests/vkms: Adds VKMS tests and library functions to support them James Shargo
2023-06-28 19:27 ` Kamil Konieczny
2023-06-24 0:49 ` [igt-dev] ✗ GitLab.Pipeline: warning for Add tests and support for VKMS's new ConfigFS features Patchwork
2023-06-24 1:23 ` [igt-dev] ✓ Fi.CI.BAT: success " Patchwork
2023-06-24 3:36 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox