* [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
* 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
* [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
* 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
* [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
* 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
* [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
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