All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements
@ 2021-06-21 12:57 Boris Brezillon
  2021-06-21 12:57 ` [igt-dev] [PATCH 1/7] tests/panfrost: Make sure we open a DUMB capable node for prime tests Boris Brezillon
                   ` (8 more replies)
  0 siblings, 9 replies; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 12:57 UTC (permalink / raw)
  To: Rob Herring, Tomeu Vizoso, Alyssa Rosenzweig, Steven Price, Robin Murphy
  Cc: igt-dev

Hello,

This is a collection of fixes for the panfrost testsuite:
 * submit tests are now passing on Bifrost
 * the prime test is fixed to handle the case where the KMS device is
   assigned card1

There's also an extra test to make sure we don't crash the kernel
when closing the DRM FD while jobs are still in-flight.

Regards,

Boris

Boris Brezillon (7):
  tests/panfrost: Make sure we open a DUMB capable node for prime tests
  lib/panfrost: Handle the NULL case in igt_panfrost_free_bo()
  lib/panfrost: Add a helper to create a job loop
  lib/panfrost: Add a helper to create a NULL job
  tests/panfrost: Simplify submit tests
  lib/panfrost: Get rid of igt_panfrost_trivial_job()
  tests/panfrost: Test FD-close while jobs are still in-flight

 lib/igt_panfrost.c      | 159 +++++++++++++---------------------------
 lib/igt_panfrost.h      |   3 +-
 tests/panfrost_prime.c  |  26 ++++++-
 tests/panfrost_submit.c | 101 ++++++++++++-------------
 4 files changed, 126 insertions(+), 163 deletions(-)

-- 
2.31.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* [igt-dev] [PATCH 1/7] tests/panfrost: Make sure we open a DUMB capable node for prime tests
  2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
@ 2021-06-21 12:57 ` Boris Brezillon
  2021-06-21 17:00   ` Petri Latvala
  2021-06-21 12:57 ` [igt-dev] [PATCH 2/7] lib/panfrost: Handle the NULL case in igt_panfrost_free_bo() Boris Brezillon
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 12:57 UTC (permalink / raw)
  To: Rob Herring, Tomeu Vizoso, Alyssa Rosenzweig, Steven Price, Robin Murphy
  Cc: igt-dev

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
---
 tests/panfrost_prime.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/tests/panfrost_prime.c b/tests/panfrost_prime.c
index 351d46f2f7e6..f9818108a662 100644
--- a/tests/panfrost_prime.c
+++ b/tests/panfrost_prime.c
@@ -35,12 +35,36 @@
 #include <sys/ioctl.h>
 #include "panfrost_drm.h"
 
+static int igt_panfrost_open_kms_driver(void)
+{
+	for (unsigned i = 0; i < 2; i++) {
+		uint64_t cap_dumb_buf = 0, cap_prime = 0;
+		char path[32];
+		int fd;
+
+		snprintf(path, sizeof(path), "/dev/dri/card%d", i);
+
+		fd = open(path, O_RDWR);
+		if (fd < 0)
+			continue;
+
+		drmGetCap(fd, DRM_CAP_DUMB_BUFFER, &cap_dumb_buf);
+		drmGetCap(fd, DRM_CAP_PRIME, &cap_prime);
+		if (cap_dumb_buf && (cap_prime & DRM_PRIME_CAP_EXPORT))
+			return fd;
+
+		close(fd);
+	}
+
+	return -1;
+}
+
 igt_main
 {
 	int fd, kms_fd;
 
 	igt_fixture {
-		kms_fd = drm_open_driver_master(DRIVER_ANY);
+		kms_fd = igt_panfrost_open_kms_driver();
 		fd = drm_open_driver(DRIVER_PANFROST);
 	}
 
-- 
2.31.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [igt-dev] [PATCH 2/7] lib/panfrost: Handle the NULL case in igt_panfrost_free_bo()
  2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
  2021-06-21 12:57 ` [igt-dev] [PATCH 1/7] tests/panfrost: Make sure we open a DUMB capable node for prime tests Boris Brezillon
@ 2021-06-21 12:57 ` Boris Brezillon
  2021-06-21 12:57 ` [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop Boris Brezillon
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 12:57 UTC (permalink / raw)
  To: Rob Herring, Tomeu Vizoso, Alyssa Rosenzweig, Steven Price, Robin Murphy
  Cc: igt-dev

So we don't have to bother checking the value before calling this
function.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
---
 lib/igt_panfrost.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/igt_panfrost.c b/lib/igt_panfrost.c
index 8b0c2b7743ea..4bbb5ddf4076 100644
--- a/lib/igt_panfrost.c
+++ b/lib/igt_panfrost.c
@@ -72,6 +72,9 @@ igt_panfrost_gem_new(int fd, size_t size)
 void
 igt_panfrost_free_bo(int fd, struct panfrost_bo *bo)
 {
+        if (!bo)
+                return;
+
         if (bo->map)
                 munmap(bo->map, bo->size);
         gem_close(fd, bo->handle);
-- 
2.31.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop
  2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
  2021-06-21 12:57 ` [igt-dev] [PATCH 1/7] tests/panfrost: Make sure we open a DUMB capable node for prime tests Boris Brezillon
  2021-06-21 12:57 ` [igt-dev] [PATCH 2/7] lib/panfrost: Handle the NULL case in igt_panfrost_free_bo() Boris Brezillon
@ 2021-06-21 12:57 ` Boris Brezillon
  2021-06-21 13:35   ` Alyssa Rosenzweig
  2021-06-21 12:57 ` [igt-dev] [PATCH 4/7] lib/panfrost: Add a helper to create a NULL job Boris Brezillon
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 12:57 UTC (permalink / raw)
  To: Rob Herring, Tomeu Vizoso, Alyssa Rosenzweig, Steven Price, Robin Murphy
  Cc: igt-dev

Useful to trigger job timeouts and test the kernel driver timeout
handling logic.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
---
 lib/igt_panfrost.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 lib/igt_panfrost.h |  1 +
 2 files changed, 44 insertions(+)

diff --git a/lib/igt_panfrost.c b/lib/igt_panfrost.c
index 4bbb5ddf4076..988cd757c055 100644
--- a/lib/igt_panfrost.c
+++ b/lib/igt_panfrost.c
@@ -130,6 +130,49 @@ void igt_panfrost_bo_mmap(int fd, struct panfrost_bo *bo)
         igt_assert(bo->map);
 }
 
+struct panfrost_submit *igt_panfrost_job_loop(int fd)
+{
+        struct panfrost_submit *submit;
+        struct mali_job_descriptor_header header = {
+                .job_type = JOB_TYPE_SET_VALUE,
+                .job_barrier = 1,
+                .unknown_flags = 5,
+                .job_index = 1,
+                .job_descriptor_size = 1,
+        };
+        struct mali_payload_set_value payload = {
+                .unknown = 3,
+        };
+        uint32_t *bos;
+
+        submit = malloc(sizeof(*submit));
+	memset(submit, 0, sizeof(*submit));
+
+        submit->submit_bo = igt_panfrost_gem_new(fd, ALIGN(sizeof(header) + sizeof(payload), 64) * 2);
+        igt_panfrost_bo_mmap(fd, submit->submit_bo);
+
+        payload.out = header.next_job_64 = submit->submit_bo->offset + ALIGN(sizeof(header) + sizeof(payload), 64);
+        memcpy(submit->submit_bo->map, &header, sizeof(header));
+        memcpy(submit->submit_bo->map + sizeof(header), &payload, sizeof(payload));
+        payload.out = header.next_job_64 = submit->submit_bo->offset;
+        memcpy(submit->submit_bo->map + ALIGN(sizeof(header) + sizeof(payload), 64), &header, sizeof(header));
+        memcpy(submit->submit_bo->map + ALIGN(sizeof(header) + sizeof(payload), 64) + sizeof(header), &payload, sizeof(payload));
+
+        submit->args = malloc(sizeof(*submit->args));
+        memset(submit->args, 0, sizeof(*submit->args));
+        submit->args->jc = submit->submit_bo->offset;
+
+        bos = malloc(sizeof(*bos) * 1);
+        bos[0] = submit->submit_bo->handle;
+
+        submit->args->bo_handles = to_user_pointer(bos);
+        submit->args->bo_handle_count = 1;
+
+        igt_assert_eq(drmSyncobjCreate(fd, DRM_SYNCOBJ_CREATE_SIGNALED, &submit->args->out_sync), 0);
+
+        return submit;
+}
+
 struct panfrost_submit *igt_panfrost_trivial_job(int fd, bool do_crash, int width, int height, uint32_t color)
 {
         struct panfrost_submit *submit;
diff --git a/lib/igt_panfrost.h b/lib/igt_panfrost.h
index cc7998dcb4bf..22bf4c7bad9d 100644
--- a/lib/igt_panfrost.h
+++ b/lib/igt_panfrost.h
@@ -48,6 +48,7 @@ struct panfrost_bo *igt_panfrost_gem_new(int fd, size_t size);
 void igt_panfrost_free_bo(int fd, struct panfrost_bo *bo);
 
 struct panfrost_submit *igt_panfrost_trivial_job(int fd, bool do_crash, int width, int height, uint32_t color);
+struct panfrost_submit *igt_panfrost_job_loop(int fd);
 void igt_panfrost_free_job(int fd, struct panfrost_submit *submit);
 
 /* IOCTL wrappers */
-- 
2.31.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [igt-dev] [PATCH 4/7] lib/panfrost: Add a helper to create a NULL job
  2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
                   ` (2 preceding siblings ...)
  2021-06-21 12:57 ` [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop Boris Brezillon
@ 2021-06-21 12:57 ` Boris Brezillon
  2021-06-21 12:57 ` [igt-dev] [PATCH 5/7] tests/panfrost: Simplify submit tests Boris Brezillon
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 12:57 UTC (permalink / raw)
  To: Rob Herring, Tomeu Vizoso, Alyssa Rosenzweig, Steven Price, Robin Murphy
  Cc: igt-dev

Useful when we just want to make sure the scheduler has executed a
job (way simpler than creating actual jobs).

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
---
 lib/igt_panfrost.c | 33 +++++++++++++++++++++++++++++++++
 lib/igt_panfrost.h |  1 +
 2 files changed, 34 insertions(+)

diff --git a/lib/igt_panfrost.c b/lib/igt_panfrost.c
index 988cd757c055..60995f4ed18d 100644
--- a/lib/igt_panfrost.c
+++ b/lib/igt_panfrost.c
@@ -173,6 +173,39 @@ struct panfrost_submit *igt_panfrost_job_loop(int fd)
         return submit;
 }
 
+struct panfrost_submit *igt_panfrost_null_job(int fd)
+{
+        struct panfrost_submit *submit;
+        struct mali_job_descriptor_header header = {
+                .job_type = JOB_TYPE_NULL,
+                .job_index = 1,
+                .job_descriptor_size = 1,
+        };
+        uint32_t *bos;
+
+        submit = malloc(sizeof(*submit));
+	memset(submit, 0, sizeof(*submit));
+
+        submit->submit_bo = igt_panfrost_gem_new(fd, sizeof(header));
+        igt_panfrost_bo_mmap(fd, submit->submit_bo);
+
+        memcpy(submit->submit_bo->map, &header, sizeof(header));
+
+        submit->args = malloc(sizeof(*submit->args));
+        memset(submit->args, 0, sizeof(*submit->args));
+        submit->args->jc = submit->submit_bo->offset;
+
+        bos = malloc(sizeof(*bos) * 1);
+        bos[0] = submit->submit_bo->handle;
+
+        submit->args->bo_handles = to_user_pointer(bos);
+        submit->args->bo_handle_count = 1;
+
+        igt_assert_eq(drmSyncobjCreate(fd, DRM_SYNCOBJ_CREATE_SIGNALED, &submit->args->out_sync), 0);
+
+        return submit;
+}
+
 struct panfrost_submit *igt_panfrost_trivial_job(int fd, bool do_crash, int width, int height, uint32_t color)
 {
         struct panfrost_submit *submit;
diff --git a/lib/igt_panfrost.h b/lib/igt_panfrost.h
index 22bf4c7bad9d..953dd4b7dd47 100644
--- a/lib/igt_panfrost.h
+++ b/lib/igt_panfrost.h
@@ -49,6 +49,7 @@ void igt_panfrost_free_bo(int fd, struct panfrost_bo *bo);
 
 struct panfrost_submit *igt_panfrost_trivial_job(int fd, bool do_crash, int width, int height, uint32_t color);
 struct panfrost_submit *igt_panfrost_job_loop(int fd);
+struct panfrost_submit *igt_panfrost_null_job(int fd);
 void igt_panfrost_free_job(int fd, struct panfrost_submit *submit);
 
 /* IOCTL wrappers */
-- 
2.31.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [igt-dev] [PATCH 5/7] tests/panfrost: Simplify submit tests
  2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
                   ` (3 preceding siblings ...)
  2021-06-21 12:57 ` [igt-dev] [PATCH 4/7] lib/panfrost: Add a helper to create a NULL job Boris Brezillon
@ 2021-06-21 12:57 ` Boris Brezillon
  2021-06-21 13:36   ` Alyssa Rosenzweig
  2021-06-21 12:57 ` [igt-dev] [PATCH 6/7] lib/panfrost: Get rid of igt_panfrost_trivial_job() Boris Brezillon
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 12:57 UTC (permalink / raw)
  To: Rob Herring, Tomeu Vizoso, Alyssa Rosenzweig, Steven Price, Robin Murphy
  Cc: igt-dev

Use NULL jobs and WRITE_VALUE job loops to test job submission. This
way we get tests that pass on both Midgard and Bifrost without pulling
the pan_pack() infrastructure from mesa. Note that we'll have to do that
at some point if we want to add complex tests, but we're not there yet.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
---
 tests/panfrost_submit.c | 88 +++++++++++++++++------------------------
 1 file changed, 36 insertions(+), 52 deletions(-)

diff --git a/tests/panfrost_submit.c b/tests/panfrost_submit.c
index 13ce85b73d9e..aa2c277bbdb6 100644
--- a/tests/panfrost_submit.c
+++ b/tests/panfrost_submit.c
@@ -57,30 +57,9 @@ abs_timeout(uint64_t duration)
         return (uint64_t)current.tv_sec * NSECS_PER_SEC + current.tv_nsec + duration;
 }
 
-static void check_error(int fd, struct panfrost_submit *submit)
+static void check_done(struct mali_job_descriptor_header *header)
 {
-	struct mali_job_descriptor_header *header;
-
-        header = submit->submit_bo->map;
-        igt_assert_eq_u64(header->fault_pointer, 0);
-}
-
-static void check_fb(int fd, struct panfrost_bo *bo)
-{
-        int gpu_prod_id = igt_panfrost_get_param(fd, DRM_PANFROST_PARAM_GPU_PROD_ID);
-        __uint32_t *fbo;
-        int i;
-
-        fbo = bo->map;
-
-        if (gpu_prod_id >= 0x0750) {
-                for (i = 0; i < ALIGN(WIDTH, 16) * HEIGHT; i++)
-                        igt_assert_eq_u32(fbo[i], CLEAR_COLOR);
-        } else {
-                // Mask the alpha away because on <=T720 we don't know how to have it
-                for (i = 0; i < ALIGN(WIDTH, 16) * HEIGHT; i++)
-                        igt_assert_eq_u32(fbo[i], CLEAR_COLOR & 0x00ffffff);
-        }
+        igt_assert(header->exception_status == 1 && header->fault_pointer == 0);
 }
 
 igt_main
@@ -94,15 +73,12 @@ igt_main
         igt_subtest("pan-submit") {
                 struct panfrost_submit *submit;
 
-                submit = igt_panfrost_trivial_job(fd, false, WIDTH, HEIGHT,
-                                                  CLEAR_COLOR);
+                submit = igt_panfrost_null_job(fd);
 
-                igt_panfrost_bo_mmap(fd, submit->fbo);
                 do_ioctl(fd, DRM_IOCTL_PANFROST_SUBMIT, submit->args);
                 igt_assert(syncobj_wait(fd, &submit->args->out_sync, 1,
                                         abs_timeout(SHORT_TIME_NSEC), 0, NULL));
-                check_error(fd, submit);
-                check_fb(fd, submit->fbo);
+                check_done(submit->submit_bo->map);
                 igt_panfrost_free_job(fd, submit);
         }
 
@@ -114,65 +90,73 @@ igt_main
         igt_subtest("pan-submit-error-bad-in-syncs") {
                 struct panfrost_submit *submit;
 
-                submit = igt_panfrost_trivial_job(fd, false, WIDTH, HEIGHT,
-                                                  CLEAR_COLOR);
+                submit = igt_panfrost_null_job(fd);
                 submit->args->in_syncs = 0ULL;
                 submit->args->in_sync_count = 1;
 
                 do_ioctl_err(fd, DRM_IOCTL_PANFROST_SUBMIT, submit->args, EFAULT);
+                igt_panfrost_free_job(fd, submit);
         }
 
         igt_subtest("pan-submit-error-bad-bo-handles") {
                 struct panfrost_submit *submit;
 
-                submit = igt_panfrost_trivial_job(fd, false, WIDTH, HEIGHT,
-                                                  CLEAR_COLOR);
+                submit = igt_panfrost_null_job(fd);
                 submit->args->bo_handles = 0ULL;
                 submit->args->bo_handle_count = 1;
 
                 do_ioctl_err(fd, DRM_IOCTL_PANFROST_SUBMIT, submit->args, EFAULT);
+                igt_panfrost_free_job(fd, submit);
         }
 
         igt_subtest("pan-submit-error-bad-requirements") {
                 struct panfrost_submit *submit;
 
-                submit = igt_panfrost_trivial_job(fd, false, WIDTH, HEIGHT,
-                                                  CLEAR_COLOR);
+                submit = igt_panfrost_null_job(fd);
                 submit->args->requirements = 2;
 
                 do_ioctl_err(fd, DRM_IOCTL_PANFROST_SUBMIT, submit->args, EINVAL);
+                igt_panfrost_free_job(fd, submit);
         }
 
         igt_subtest("pan-submit-error-bad-out-sync") {
                 struct panfrost_submit *submit;
 
-                submit = igt_panfrost_trivial_job(fd, false, WIDTH, HEIGHT,
-                                                  CLEAR_COLOR);
+                submit = igt_panfrost_null_job(fd);
                 submit->args->out_sync = -1;
 
                 do_ioctl_err(fd, DRM_IOCTL_PANFROST_SUBMIT, submit->args, ENODEV);
+                igt_panfrost_free_job(fd, submit);
         }
 
         igt_subtest("pan-reset") {
-                struct panfrost_submit *submit;
+                int tmpfd = drm_open_driver(DRIVER_PANFROST);
+                struct panfrost_submit *submit[2];
+                struct mali_job_descriptor_header *headers[3];
 
-                submit = igt_panfrost_trivial_job(fd, true, WIDTH, HEIGHT,
-                                                  CLEAR_COLOR);
-                do_ioctl(fd, DRM_IOCTL_PANFROST_SUBMIT, submit->args);
-                /* Expect for this job to timeout */
-                igt_assert(!syncobj_wait(fd, &submit->args->out_sync, 1,
+                submit[0] = igt_panfrost_job_loop(fd);
+                submit[1] = igt_panfrost_null_job(tmpfd);
+                headers[0] = submit[0]->submit_bo->map;
+                headers[1] = submit[0]->submit_bo->map +
+                             ALIGN(sizeof(struct mali_job_descriptor_header) + sizeof(struct mali_payload_set_value),
+                                   64);
+                headers[2] = submit[1]->submit_bo->map;
+                do_ioctl(fd, DRM_IOCTL_PANFROST_SUBMIT, submit[0]->args);
+                do_ioctl(tmpfd, DRM_IOCTL_PANFROST_SUBMIT, submit[1]->args);
+                /* First job should timeout, second job should complete right after the timeout */
+                igt_assert(!syncobj_wait(fd, &submit[0]->args->out_sync, 1,
                                          abs_timeout(SHORT_TIME_NSEC), 0, NULL));
-                igt_panfrost_free_job(fd, submit);
-
-                submit = igt_panfrost_trivial_job(fd, false, WIDTH, HEIGHT,
-                                                  CLEAR_COLOR);
-                igt_panfrost_bo_mmap(fd, submit->fbo);
-                do_ioctl(fd, DRM_IOCTL_PANFROST_SUBMIT, submit->args);
-                /* This one should work */
-                igt_assert(syncobj_wait(fd, &submit->args->out_sync, 1,
+                igt_assert(syncobj_wait(fd, &submit[0]->args->out_sync, 1,
                                         abs_timeout(BAD_JOB_TIME_NSEC), 0, NULL));
-                check_fb(fd, submit->fbo);
-                igt_panfrost_free_job(fd, submit);
+                igt_assert(syncobj_wait(tmpfd, &submit[1]->args->out_sync, 1,
+                                        abs_timeout(SHORT_TIME_NSEC), 0, NULL));
+
+                /* At least one job header of the job loop should have its exception status set to 0 */
+                igt_assert(headers[0]->exception_status != 1 || headers[1]->exception_status != 1);
+                check_done(headers[2]);
+                igt_panfrost_free_job(fd, submit[0]);
+                igt_panfrost_free_job(tmpfd, submit[1]);
+                close(tmpfd);
         }
 
         igt_fixture {
-- 
2.31.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [igt-dev] [PATCH 6/7] lib/panfrost: Get rid of igt_panfrost_trivial_job()
  2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
                   ` (4 preceding siblings ...)
  2021-06-21 12:57 ` [igt-dev] [PATCH 5/7] tests/panfrost: Simplify submit tests Boris Brezillon
@ 2021-06-21 12:57 ` Boris Brezillon
  2021-06-21 13:37   ` Alyssa Rosenzweig
  2021-06-21 12:57 ` [igt-dev] [PATCH 7/7] tests/panfrost: Test FD-close while jobs are still in-flight Boris Brezillon
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 12:57 UTC (permalink / raw)
  To: Rob Herring, Tomeu Vizoso, Alyssa Rosenzweig, Steven Price, Robin Murphy
  Cc: igt-dev

We no longer use fragment jobs to test job submission, let's get rid
of igt_panfrost_trivial_job(). If we ever need to issue fragment
jobs again, we'll probably have to pull the pan_pack() infra from
mesa and make the helper deal with Bifrost specificities.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
---
 lib/igt_panfrost.c | 136 ---------------------------------------------
 lib/igt_panfrost.h |   1 -
 2 files changed, 137 deletions(-)

diff --git a/lib/igt_panfrost.c b/lib/igt_panfrost.c
index 60995f4ed18d..361c8fe44cd5 100644
--- a/lib/igt_panfrost.c
+++ b/lib/igt_panfrost.c
@@ -206,142 +206,6 @@ struct panfrost_submit *igt_panfrost_null_job(int fd)
         return submit;
 }
 
-struct panfrost_submit *igt_panfrost_trivial_job(int fd, bool do_crash, int width, int height, uint32_t color)
-{
-        struct panfrost_submit *submit;
-        struct mali_job_descriptor_header header = {
-                .job_type = JOB_TYPE_FRAGMENT,
-                .job_index = 1,
-                .job_descriptor_size = 1,
-        };
-        struct mali_payload_fragment payload = {
-                .min_tile_coord = MALI_COORDINATE_TO_TILE_MIN(0, 0),
-                .max_tile_coord = MALI_COORDINATE_TO_TILE_MAX(ALIGN(width, 16), height),
-        };
-        struct bifrost_framebuffer mfbd_framebuffer = {
-            .unk0 = 0x0,
-            .unknown1 = 0x0,
-            .tiler_meta = 0xff00000000,
-            .width1 = MALI_POSITIVE(ALIGN(width, 16)),
-            .height1 = MALI_POSITIVE(height),
-            .width2 = MALI_POSITIVE(ALIGN(width, 16)),
-            .height2 = MALI_POSITIVE(height),
-            .unk1 = 0x1080,
-            .unk2 = 0x0,
-            .rt_count_1 = MALI_POSITIVE(1),
-            .rt_count_2 = 1,
-            .unk3 = 0x100,
-            .clear_stencil = 0x0,
-            .clear_depth = 0.000000,
-            .unknown2 = 0x1f,
-        };
-        struct mali_single_framebuffer sfbd_framebuffer = {
-            .unknown2 = 0x1f,
-            .width = MALI_POSITIVE(width),
-            .height = MALI_POSITIVE(height),
-            .stride = width * 4,
-            .resolution_check = ((width + height) / 3) << 4,
-            .tiler_flags = 0xfff,
-            .clear_color_1 = color,
-            .clear_color_2 = color,
-            .clear_color_3 = color,
-            .clear_color_4 = color,
-            .clear_flags = 0x101100 | MALI_CLEAR_SLOW,
-            .format = 0xb84e0281,
-        };
-        struct mali_rt_format fmt = {
-                .unk1 = 0x4000000,
-                .unk2 = 0x1,
-                .nr_channels = MALI_POSITIVE(4),
-                .flags = do_crash ? 0x444 | (1 << 8) : 0x444,
-                .swizzle = MALI_CHANNEL_BLUE | (MALI_CHANNEL_GREEN << 3) | (MALI_CHANNEL_RED << 6) | (MALI_CHANNEL_ONE << 9),
-                .unk4 = 0x8,
-        };
-        struct bifrost_render_target rts = {
-                .format = fmt,
-                .chunknown = {
-                    .unk = 0x0,
-                    .pointer = 0x0,
-                },
-                .framebuffer_stride = ALIGN(width, 16) * 4 / 16,
-                .clear_color_1 = color,
-                .clear_color_2 = color,
-                .clear_color_3 = color,
-                .clear_color_4 = color,
-        };
-        int gpu_prod_id = igt_panfrost_get_param(fd, DRM_PANFROST_PARAM_GPU_PROD_ID);
-        uint32_t *known_unknown;
-        uint32_t *bos;
-
-        submit = malloc(sizeof(*submit));
-
-        submit->fbo = igt_panfrost_gem_new(fd, ALIGN(width, 16) * height * 4);
-        rts.framebuffer = submit->fbo->offset;
-        sfbd_framebuffer.framebuffer = submit->fbo->offset;
-
-        submit->tiler_heap_bo = igt_panfrost_gem_new(fd, 32768 * 128);
-        mfbd_framebuffer.tiler_heap_start = submit->tiler_heap_bo->offset;
-        mfbd_framebuffer.tiler_heap_end = submit->tiler_heap_bo->offset + 32768 * 128;
-        sfbd_framebuffer.tiler_heap_free = mfbd_framebuffer.tiler_heap_start;
-        sfbd_framebuffer.tiler_heap_end = mfbd_framebuffer.tiler_heap_end;
-
-        submit->tiler_scratch_bo = igt_panfrost_gem_new(fd, 128 * 128 * 128);
-        mfbd_framebuffer.tiler_scratch_start = submit->tiler_scratch_bo->offset;
-        mfbd_framebuffer.tiler_scratch_middle = submit->tiler_scratch_bo->offset + 0xf0000;
-        sfbd_framebuffer.unknown_address_0 = mfbd_framebuffer.tiler_scratch_start;
-
-        submit->scratchpad_bo = igt_panfrost_gem_new(fd, 64 * 4096);
-        igt_panfrost_bo_mmap(fd, submit->scratchpad_bo);
-        mfbd_framebuffer.scratchpad = submit->scratchpad_bo->offset;
-        sfbd_framebuffer.unknown_address_1 = submit->scratchpad_bo->offset;
-        sfbd_framebuffer.unknown_address_2 = submit->scratchpad_bo->offset + 512;
-
-        known_unknown = ((void*)submit->scratchpad_bo->map) + 512;
-        *known_unknown = 0xa0000000;
-
-        if (gpu_prod_id >= 0x0750) {
-            submit->fb_bo = igt_panfrost_gem_new(fd, sizeof(mfbd_framebuffer) + sizeof(struct bifrost_render_target));
-            igt_panfrost_bo_mmap(fd, submit->fb_bo);
-            memcpy(submit->fb_bo->map, &mfbd_framebuffer, sizeof(mfbd_framebuffer));
-            memcpy(submit->fb_bo->map + sizeof(mfbd_framebuffer), &rts, sizeof(struct bifrost_render_target));
-            payload.framebuffer = submit->fb_bo->offset | MALI_MFBD;
-        } else {
-            // We don't know yet how to cause a hang on <=T720
-            // Should probably use an infinite loop to hang the GPU
-            igt_require(!do_crash);
-            submit->fb_bo = igt_panfrost_gem_new(fd, sizeof(sfbd_framebuffer));
-            igt_panfrost_bo_mmap(fd, submit->fb_bo);
-            memcpy(submit->fb_bo->map, &sfbd_framebuffer, sizeof(sfbd_framebuffer));
-            payload.framebuffer = submit->fb_bo->offset | MALI_SFBD;
-        }
-
-        submit->submit_bo = igt_panfrost_gem_new(fd, sizeof(header) + sizeof(payload) + 1024000);
-        igt_panfrost_bo_mmap(fd, submit->submit_bo);
-
-        memcpy(submit->submit_bo->map, &header, sizeof(header));
-        memcpy(submit->submit_bo->map + sizeof(header), &payload, sizeof(payload));
-
-        submit->args = malloc(sizeof(*submit->args));
-        memset(submit->args, 0, sizeof(*submit->args));
-        submit->args->jc = submit->submit_bo->offset;
-        submit->args->requirements = PANFROST_JD_REQ_FS;
-
-        bos = malloc(sizeof(*bos) * 6);
-        bos[0] = submit->fbo->handle;
-        bos[1] = submit->tiler_heap_bo->handle;
-        bos[2] = submit->tiler_scratch_bo->handle;
-        bos[3] = submit->scratchpad_bo->handle;
-        bos[4] = submit->fb_bo->handle;
-        bos[5] = submit->submit_bo->handle;
-
-        submit->args->bo_handles = to_user_pointer(bos);
-        submit->args->bo_handle_count = 6;
-
-        igt_assert_eq(drmSyncobjCreate(fd, DRM_SYNCOBJ_CREATE_SIGNALED, &submit->args->out_sync), 0);
-
-        return submit;
-}
-
 void igt_panfrost_free_job(int fd, struct panfrost_submit *submit)
 {
         free(from_user_pointer(submit->args->bo_handles));
diff --git a/lib/igt_panfrost.h b/lib/igt_panfrost.h
index 953dd4b7dd47..227ea9e25e28 100644
--- a/lib/igt_panfrost.h
+++ b/lib/igt_panfrost.h
@@ -47,7 +47,6 @@ struct panfrost_submit {
 struct panfrost_bo *igt_panfrost_gem_new(int fd, size_t size);
 void igt_panfrost_free_bo(int fd, struct panfrost_bo *bo);
 
-struct panfrost_submit *igt_panfrost_trivial_job(int fd, bool do_crash, int width, int height, uint32_t color);
 struct panfrost_submit *igt_panfrost_job_loop(int fd);
 struct panfrost_submit *igt_panfrost_null_job(int fd);
 void igt_panfrost_free_job(int fd, struct panfrost_submit *submit);
-- 
2.31.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [igt-dev] [PATCH 7/7] tests/panfrost: Test FD-close while jobs are still in-flight
  2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
                   ` (5 preceding siblings ...)
  2021-06-21 12:57 ` [igt-dev] [PATCH 6/7] lib/panfrost: Get rid of igt_panfrost_trivial_job() Boris Brezillon
@ 2021-06-21 12:57 ` Boris Brezillon
  2021-06-21 13:37   ` Alyssa Rosenzweig
  2021-06-21 13:49 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/panfrost: Misc fixes/improvements Patchwork
  2021-06-21 15:45 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  8 siblings, 1 reply; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 12:57 UTC (permalink / raw)
  To: Rob Herring, Tomeu Vizoso, Alyssa Rosenzweig, Steven Price, Robin Murphy
  Cc: igt-dev

We had use-after-free faults in the past because the MMU context
while released while jobs were still in flight, and the job cleanup
path assumed the context was still present. Add a test to make sure this
won't happen again.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
---
 tests/panfrost_submit.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/tests/panfrost_submit.c b/tests/panfrost_submit.c
index aa2c277bbdb6..ef2437d60ab7 100644
--- a/tests/panfrost_submit.c
+++ b/tests/panfrost_submit.c
@@ -159,6 +159,17 @@ igt_main
                 close(tmpfd);
         }
 
+        igt_subtest("pan-submit-and-close") {
+                /* We need our own FD because we close it right after the job submission */
+                int tmpfd = drm_open_driver(DRIVER_PANFROST);
+                struct panfrost_submit *submit;
+
+                submit = igt_panfrost_job_loop(tmpfd);
+                do_ioctl(tmpfd, DRM_IOCTL_PANFROST_SUBMIT, submit->args);
+                igt_panfrost_free_job(tmpfd, submit);
+                close(tmpfd);
+        }
+
         igt_fixture {
                 close(fd);
         }
-- 
2.31.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop
  2021-06-21 12:57 ` [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop Boris Brezillon
@ 2021-06-21 13:35   ` Alyssa Rosenzweig
  2021-06-21 14:09     ` Steven Price
  2021-06-21 14:18     ` Boris Brezillon
  0 siblings, 2 replies; 20+ messages in thread
From: Alyssa Rosenzweig @ 2021-06-21 13:35 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Tomeu Vizoso, Steven Price, igt-dev, Rob Herring,
	Alyssa Rosenzweig, Robin Murphy

I don't see how this test works.

> +        struct mali_payload_set_value payload = {
> +                .unknown = 3,
> +        };

0x3 is the selector for "zero".

> +        payload.out = header.next_job_64 = submit->submit_bo->offset + ALIGN(sizeof(header) + sizeof(payload), 64);

So you are writing 0 to the next_job_64 field, which ends the job chain
prematurely.

Perhaps you meant to use an "immediate 64" selector to write the address
to jump to? If so, that will be Bifrost only, since the "immediate 64"
selector is new in Midgard. 

Upon a second reading, maybe the idea is to ping-pong the jobs
statically? I.e. two jobs that have next_job pointed to one another,
a job barrier and prefetching disabled, with the content irrelevant. If
so, the `out` value can be the same for both and allocate upfront with
the payload so the logic is clearer. Even better, I think you could use
NULL jobs for the same purpose.
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 5/7] tests/panfrost: Simplify submit tests
  2021-06-21 12:57 ` [igt-dev] [PATCH 5/7] tests/panfrost: Simplify submit tests Boris Brezillon
@ 2021-06-21 13:36   ` Alyssa Rosenzweig
  0 siblings, 0 replies; 20+ messages in thread
From: Alyssa Rosenzweig @ 2021-06-21 13:36 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Tomeu Vizoso, Steven Price, igt-dev, Rob Herring,
	Alyssa Rosenzweig, Robin Murphy

Ah-ha, you do so here... perhaps you mean to move the timeout test patch
_after_ this patch and then do a simpler test with NULL jobs instead?
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 6/7] lib/panfrost: Get rid of igt_panfrost_trivial_job()
  2021-06-21 12:57 ` [igt-dev] [PATCH 6/7] lib/panfrost: Get rid of igt_panfrost_trivial_job() Boris Brezillon
@ 2021-06-21 13:37   ` Alyssa Rosenzweig
  0 siblings, 0 replies; 20+ messages in thread
From: Alyssa Rosenzweig @ 2021-06-21 13:37 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Tomeu Vizoso, Steven Price, igt-dev, Rob Herring,
	Alyssa Rosenzweig, Robin Murphy

r-b, glad to see this reminder of early Mesa gone.

On Mon, Jun 21, 2021 at 02:57:23PM +0200, Boris Brezillon wrote:
> We no longer use fragment jobs to test job submission, let's get rid
> of igt_panfrost_trivial_job(). If we ever need to issue fragment
> jobs again, we'll probably have to pull the pan_pack() infra from
> mesa and make the helper deal with Bifrost specificities.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> ---
>  lib/igt_panfrost.c | 136 ---------------------------------------------
>  lib/igt_panfrost.h |   1 -
>  2 files changed, 137 deletions(-)
> 
> diff --git a/lib/igt_panfrost.c b/lib/igt_panfrost.c
> index 60995f4ed18d..361c8fe44cd5 100644
> --- a/lib/igt_panfrost.c
> +++ b/lib/igt_panfrost.c
> @@ -206,142 +206,6 @@ struct panfrost_submit *igt_panfrost_null_job(int fd)
>          return submit;
>  }
>  
> -struct panfrost_submit *igt_panfrost_trivial_job(int fd, bool do_crash, int width, int height, uint32_t color)
> -{
> -        struct panfrost_submit *submit;
> -        struct mali_job_descriptor_header header = {
> -                .job_type = JOB_TYPE_FRAGMENT,
> -                .job_index = 1,
> -                .job_descriptor_size = 1,
> -        };
> -        struct mali_payload_fragment payload = {
> -                .min_tile_coord = MALI_COORDINATE_TO_TILE_MIN(0, 0),
> -                .max_tile_coord = MALI_COORDINATE_TO_TILE_MAX(ALIGN(width, 16), height),
> -        };
> -        struct bifrost_framebuffer mfbd_framebuffer = {
> -            .unk0 = 0x0,
> -            .unknown1 = 0x0,
> -            .tiler_meta = 0xff00000000,
> -            .width1 = MALI_POSITIVE(ALIGN(width, 16)),
> -            .height1 = MALI_POSITIVE(height),
> -            .width2 = MALI_POSITIVE(ALIGN(width, 16)),
> -            .height2 = MALI_POSITIVE(height),
> -            .unk1 = 0x1080,
> -            .unk2 = 0x0,
> -            .rt_count_1 = MALI_POSITIVE(1),
> -            .rt_count_2 = 1,
> -            .unk3 = 0x100,
> -            .clear_stencil = 0x0,
> -            .clear_depth = 0.000000,
> -            .unknown2 = 0x1f,
> -        };
> -        struct mali_single_framebuffer sfbd_framebuffer = {
> -            .unknown2 = 0x1f,
> -            .width = MALI_POSITIVE(width),
> -            .height = MALI_POSITIVE(height),
> -            .stride = width * 4,
> -            .resolution_check = ((width + height) / 3) << 4,
> -            .tiler_flags = 0xfff,
> -            .clear_color_1 = color,
> -            .clear_color_2 = color,
> -            .clear_color_3 = color,
> -            .clear_color_4 = color,
> -            .clear_flags = 0x101100 | MALI_CLEAR_SLOW,
> -            .format = 0xb84e0281,
> -        };
> -        struct mali_rt_format fmt = {
> -                .unk1 = 0x4000000,
> -                .unk2 = 0x1,
> -                .nr_channels = MALI_POSITIVE(4),
> -                .flags = do_crash ? 0x444 | (1 << 8) : 0x444,
> -                .swizzle = MALI_CHANNEL_BLUE | (MALI_CHANNEL_GREEN << 3) | (MALI_CHANNEL_RED << 6) | (MALI_CHANNEL_ONE << 9),
> -                .unk4 = 0x8,
> -        };
> -        struct bifrost_render_target rts = {
> -                .format = fmt,
> -                .chunknown = {
> -                    .unk = 0x0,
> -                    .pointer = 0x0,
> -                },
> -                .framebuffer_stride = ALIGN(width, 16) * 4 / 16,
> -                .clear_color_1 = color,
> -                .clear_color_2 = color,
> -                .clear_color_3 = color,
> -                .clear_color_4 = color,
> -        };
> -        int gpu_prod_id = igt_panfrost_get_param(fd, DRM_PANFROST_PARAM_GPU_PROD_ID);
> -        uint32_t *known_unknown;
> -        uint32_t *bos;
> -
> -        submit = malloc(sizeof(*submit));
> -
> -        submit->fbo = igt_panfrost_gem_new(fd, ALIGN(width, 16) * height * 4);
> -        rts.framebuffer = submit->fbo->offset;
> -        sfbd_framebuffer.framebuffer = submit->fbo->offset;
> -
> -        submit->tiler_heap_bo = igt_panfrost_gem_new(fd, 32768 * 128);
> -        mfbd_framebuffer.tiler_heap_start = submit->tiler_heap_bo->offset;
> -        mfbd_framebuffer.tiler_heap_end = submit->tiler_heap_bo->offset + 32768 * 128;
> -        sfbd_framebuffer.tiler_heap_free = mfbd_framebuffer.tiler_heap_start;
> -        sfbd_framebuffer.tiler_heap_end = mfbd_framebuffer.tiler_heap_end;
> -
> -        submit->tiler_scratch_bo = igt_panfrost_gem_new(fd, 128 * 128 * 128);
> -        mfbd_framebuffer.tiler_scratch_start = submit->tiler_scratch_bo->offset;
> -        mfbd_framebuffer.tiler_scratch_middle = submit->tiler_scratch_bo->offset + 0xf0000;
> -        sfbd_framebuffer.unknown_address_0 = mfbd_framebuffer.tiler_scratch_start;
> -
> -        submit->scratchpad_bo = igt_panfrost_gem_new(fd, 64 * 4096);
> -        igt_panfrost_bo_mmap(fd, submit->scratchpad_bo);
> -        mfbd_framebuffer.scratchpad = submit->scratchpad_bo->offset;
> -        sfbd_framebuffer.unknown_address_1 = submit->scratchpad_bo->offset;
> -        sfbd_framebuffer.unknown_address_2 = submit->scratchpad_bo->offset + 512;
> -
> -        known_unknown = ((void*)submit->scratchpad_bo->map) + 512;
> -        *known_unknown = 0xa0000000;
> -
> -        if (gpu_prod_id >= 0x0750) {
> -            submit->fb_bo = igt_panfrost_gem_new(fd, sizeof(mfbd_framebuffer) + sizeof(struct bifrost_render_target));
> -            igt_panfrost_bo_mmap(fd, submit->fb_bo);
> -            memcpy(submit->fb_bo->map, &mfbd_framebuffer, sizeof(mfbd_framebuffer));
> -            memcpy(submit->fb_bo->map + sizeof(mfbd_framebuffer), &rts, sizeof(struct bifrost_render_target));
> -            payload.framebuffer = submit->fb_bo->offset | MALI_MFBD;
> -        } else {
> -            // We don't know yet how to cause a hang on <=T720
> -            // Should probably use an infinite loop to hang the GPU
> -            igt_require(!do_crash);
> -            submit->fb_bo = igt_panfrost_gem_new(fd, sizeof(sfbd_framebuffer));
> -            igt_panfrost_bo_mmap(fd, submit->fb_bo);
> -            memcpy(submit->fb_bo->map, &sfbd_framebuffer, sizeof(sfbd_framebuffer));
> -            payload.framebuffer = submit->fb_bo->offset | MALI_SFBD;
> -        }
> -
> -        submit->submit_bo = igt_panfrost_gem_new(fd, sizeof(header) + sizeof(payload) + 1024000);
> -        igt_panfrost_bo_mmap(fd, submit->submit_bo);
> -
> -        memcpy(submit->submit_bo->map, &header, sizeof(header));
> -        memcpy(submit->submit_bo->map + sizeof(header), &payload, sizeof(payload));
> -
> -        submit->args = malloc(sizeof(*submit->args));
> -        memset(submit->args, 0, sizeof(*submit->args));
> -        submit->args->jc = submit->submit_bo->offset;
> -        submit->args->requirements = PANFROST_JD_REQ_FS;
> -
> -        bos = malloc(sizeof(*bos) * 6);
> -        bos[0] = submit->fbo->handle;
> -        bos[1] = submit->tiler_heap_bo->handle;
> -        bos[2] = submit->tiler_scratch_bo->handle;
> -        bos[3] = submit->scratchpad_bo->handle;
> -        bos[4] = submit->fb_bo->handle;
> -        bos[5] = submit->submit_bo->handle;
> -
> -        submit->args->bo_handles = to_user_pointer(bos);
> -        submit->args->bo_handle_count = 6;
> -
> -        igt_assert_eq(drmSyncobjCreate(fd, DRM_SYNCOBJ_CREATE_SIGNALED, &submit->args->out_sync), 0);
> -
> -        return submit;
> -}
> -
>  void igt_panfrost_free_job(int fd, struct panfrost_submit *submit)
>  {
>          free(from_user_pointer(submit->args->bo_handles));
> diff --git a/lib/igt_panfrost.h b/lib/igt_panfrost.h
> index 953dd4b7dd47..227ea9e25e28 100644
> --- a/lib/igt_panfrost.h
> +++ b/lib/igt_panfrost.h
> @@ -47,7 +47,6 @@ struct panfrost_submit {
>  struct panfrost_bo *igt_panfrost_gem_new(int fd, size_t size);
>  void igt_panfrost_free_bo(int fd, struct panfrost_bo *bo);
>  
> -struct panfrost_submit *igt_panfrost_trivial_job(int fd, bool do_crash, int width, int height, uint32_t color);
>  struct panfrost_submit *igt_panfrost_job_loop(int fd);
>  struct panfrost_submit *igt_panfrost_null_job(int fd);
>  void igt_panfrost_free_job(int fd, struct panfrost_submit *submit);
> -- 
> 2.31.1
> 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 7/7] tests/panfrost: Test FD-close while jobs are still in-flight
  2021-06-21 12:57 ` [igt-dev] [PATCH 7/7] tests/panfrost: Test FD-close while jobs are still in-flight Boris Brezillon
@ 2021-06-21 13:37   ` Alyssa Rosenzweig
  0 siblings, 0 replies; 20+ messages in thread
From: Alyssa Rosenzweig @ 2021-06-21 13:37 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Tomeu Vizoso, Steven Price, igt-dev, Rob Herring,
	Alyssa Rosenzweig, Robin Murphy

r-b

On Mon, Jun 21, 2021 at 02:57:24PM +0200, Boris Brezillon wrote:
> We had use-after-free faults in the past because the MMU context
> while released while jobs were still in flight, and the job cleanup
> path assumed the context was still present. Add a test to make sure this
> won't happen again.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> ---
>  tests/panfrost_submit.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/tests/panfrost_submit.c b/tests/panfrost_submit.c
> index aa2c277bbdb6..ef2437d60ab7 100644
> --- a/tests/panfrost_submit.c
> +++ b/tests/panfrost_submit.c
> @@ -159,6 +159,17 @@ igt_main
>                  close(tmpfd);
>          }
>  
> +        igt_subtest("pan-submit-and-close") {
> +                /* We need our own FD because we close it right after the job submission */
> +                int tmpfd = drm_open_driver(DRIVER_PANFROST);
> +                struct panfrost_submit *submit;
> +
> +                submit = igt_panfrost_job_loop(tmpfd);
> +                do_ioctl(tmpfd, DRM_IOCTL_PANFROST_SUBMIT, submit->args);
> +                igt_panfrost_free_job(tmpfd, submit);
> +                close(tmpfd);
> +        }
> +
>          igt_fixture {
>                  close(fd);
>          }
> -- 
> 2.31.1
> 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/panfrost: Misc fixes/improvements
  2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
                   ` (6 preceding siblings ...)
  2021-06-21 12:57 ` [igt-dev] [PATCH 7/7] tests/panfrost: Test FD-close while jobs are still in-flight Boris Brezillon
@ 2021-06-21 13:49 ` Patchwork
  2021-06-21 15:45 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  8 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2021-06-21 13:49 UTC (permalink / raw)
  To: Boris Brezillon; +Cc: igt-dev


[-- Attachment #1.1: Type: text/plain, Size: 2684 bytes --]

== Series Details ==

Series: tests/panfrost: Misc fixes/improvements
URL   : https://patchwork.freedesktop.org/series/91726/
State : success

== Summary ==

CI Bug Log - changes from IGT_6115 -> IGTPW_5947
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/index.html

Known issues
------------

  Here are the changes found in IGTPW_5947 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@amdgpu/amd_basic@cs-gfx:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][1] ([fdo#109271]) +9 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/fi-kbl-soraka/igt@amdgpu/amd_basic@cs-gfx.html

  
#### Possible fixes ####

  * igt@i915_module_load@reload:
    - fi-kbl-soraka:      [DMESG-WARN][2] ([i915#1982]) -> [PASS][3]
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/fi-kbl-soraka/igt@i915_module_load@reload.html
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/fi-kbl-soraka/igt@i915_module_load@reload.html

  * igt@i915_selftest@live@gt_heartbeat:
    - fi-cml-u2:          [DMESG-FAIL][4] ([i915#2291] / [i915#541]) -> [PASS][5]
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/fi-cml-u2/igt@i915_selftest@live@gt_heartbeat.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/fi-cml-u2/igt@i915_selftest@live@gt_heartbeat.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2291]: https://gitlab.freedesktop.org/drm/intel/issues/2291
  [i915#3303]: https://gitlab.freedesktop.org/drm/intel/issues/3303
  [i915#541]: https://gitlab.freedesktop.org/drm/intel/issues/541


Participating hosts (43 -> 36)
------------------------------

  Missing    (7): fi-ilk-m540 fi-hsw-4200u fi-tgl-1115g4 fi-bsw-cyan fi-ctg-p8600 fi-kbl-x1275 fi-bdw-samus 


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_6115 -> IGTPW_5947

  CI-20190529: 20190529
  CI_DRM_10252: b6c631d4b0b55b47b95763da2df57e40ba55f283 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_5947: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/index.html
  IGT_6115: 4ef420186b82f1a6d9c9b69d2f8de4fd100a2af3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git



== Testlist changes ==

+igt@panfrost_submit@pan-submit-and-close

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/index.html

[-- Attachment #1.2: Type: text/html, Size: 3280 bytes --]

[-- Attachment #2: Type: text/plain, Size: 154 bytes --]

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop
  2021-06-21 13:35   ` Alyssa Rosenzweig
@ 2021-06-21 14:09     ` Steven Price
  2021-06-21 14:29       ` Boris Brezillon
  2021-06-21 14:18     ` Boris Brezillon
  1 sibling, 1 reply; 20+ messages in thread
From: Steven Price @ 2021-06-21 14:09 UTC (permalink / raw)
  To: Alyssa Rosenzweig, Boris Brezillon
  Cc: igt-dev, Rob Herring, Robin Murphy, Alyssa Rosenzweig, Tomeu Vizoso

On 21/06/2021 14:35, Alyssa Rosenzweig wrote:
> I don't see how this test works.
> 
>> +        struct mali_payload_set_value payload = {
>> +                .unknown = 3,
>> +        };
> 
> 0x3 is the selector for "zero".
> 
>> +        payload.out = header.next_job_64 = submit->submit_bo->offset + ALIGN(sizeof(header) + sizeof(payload), 64);
> 
> So you are writing 0 to the next_job_64 field, which ends the job chain
> prematurely.
> 
> Perhaps you meant to use an "immediate 64" selector to write the address
> to jump to? If so, that will be Bifrost only, since the "immediate 64"
> selector is new in Midgard. 
> 
> Upon a second reading, maybe the idea is to ping-pong the jobs
> statically? I.e. two jobs that have next_job pointed to one another,
> a job barrier and prefetching disabled, with the content irrelevant. If
> so, the `out` value can be the same for both and allocate upfront with
> the payload so the logic is clearer. Even better, I think you could use
> NULL jobs for the same purpose.
> 

I think this is overwriting the status field on the next job. The
hardware checks that job header to make sure the status field is zero
before executing (precisely to avoid such a loop happening by accident).
So two (or more) jobs where the next-job pointers are in a loop works as
long as you clear the status fields.

As a side-note: this is very much in the not-really-supported area of
the hardware. The architecture doesn't prevent the GPU from reading
ahead in the job chain and rejecting a job before the write-value
happens. But AFAIK this does work on existing GPUs.

Steve
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop
  2021-06-21 13:35   ` Alyssa Rosenzweig
  2021-06-21 14:09     ` Steven Price
@ 2021-06-21 14:18     ` Boris Brezillon
  2021-06-21 16:02       ` Alyssa Rosenzweig
  1 sibling, 1 reply; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 14:18 UTC (permalink / raw)
  To: Alyssa Rosenzweig
  Cc: Tomeu Vizoso, Steven Price, igt-dev, Rob Herring,
	Alyssa Rosenzweig, Robin Murphy

On Mon, 21 Jun 2021 09:35:03 -0400
Alyssa Rosenzweig <alyssa@collabora.com> wrote:

> I don't see how this test works.
> 
> > +        struct mali_payload_set_value payload = {
> > +                .unknown = 3,
> > +        };  
> 
> 0x3 is the selector for "zero".

Yep.

> 
> > +        payload.out = header.next_job_64 = submit->submit_bo->offset + ALIGN(sizeof(header) + sizeof(payload), 64);  
> 
> So you are writing 0 to the next_job_64 field, which ends the job chain
> prematurely.

Nope, I'm writing 0 to the next job ->exception_status field, which is
needed if we want the loop to be effective (as soon as the GPU sees a
job that has a non-zero exception_status it triggers an INVALID_DATA
fault).

> 
> Perhaps you meant to use an "immediate 64" selector to write the address
> to jump to? If so, that will be Bifrost only, since the "immediate 64"
> selector is new in Midgard. 

I really want to write a zero here.

> 
> Upon a second reading, maybe the idea is to ping-pong the jobs
> statically? I.e. two jobs that have next_job pointed to one another,
> a job barrier and prefetching disabled, with the content irrelevant. If
> so, the `out` value can be the same for both and allocate upfront with
> the payload so the logic is clearer.

If I'm correct, ->out is the address the WRITE_VALUE job writes to, so
with 2 jobs, I really have to pass 2 different addresses there,
otherwise one job won't have its exception_status field reset to 0.
This being said, I wonder if I really need 2 jobs here. I'll try with a
single job pointing to himself and writing 0 to its exception_status
field.


> Even better, I think you could use
> NULL jobs for the same purpose.

NULL jobs won't work, I really need to reset the exception_status,
otherwise it triggers an INVALID_DATA fault.
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop
  2021-06-21 14:09     ` Steven Price
@ 2021-06-21 14:29       ` Boris Brezillon
  0 siblings, 0 replies; 20+ messages in thread
From: Boris Brezillon @ 2021-06-21 14:29 UTC (permalink / raw)
  To: Steven Price
  Cc: Tomeu Vizoso, Alyssa Rosenzweig, igt-dev, Rob Herring,
	Alyssa Rosenzweig, Robin Murphy

On Mon, 21 Jun 2021 15:09:28 +0100
Steven Price <steven.price@arm.com> wrote:

> On 21/06/2021 14:35, Alyssa Rosenzweig wrote:
> > I don't see how this test works.
> >   
> >> +        struct mali_payload_set_value payload = {
> >> +                .unknown = 3,
> >> +        };  
> > 
> > 0x3 is the selector for "zero".
> >   
> >> +        payload.out = header.next_job_64 = submit->submit_bo->offset + ALIGN(sizeof(header) + sizeof(payload), 64);  
> > 
> > So you are writing 0 to the next_job_64 field, which ends the job chain
> > prematurely.
> > 
> > Perhaps you meant to use an "immediate 64" selector to write the address
> > to jump to? If so, that will be Bifrost only, since the "immediate 64"
> > selector is new in Midgard. 
> > 
> > Upon a second reading, maybe the idea is to ping-pong the jobs
> > statically? I.e. two jobs that have next_job pointed to one another,
> > a job barrier and prefetching disabled, with the content irrelevant. If
> > so, the `out` value can be the same for both and allocate upfront with
> > the payload so the logic is clearer. Even better, I think you could use
> > NULL jobs for the same purpose.
> >   
> 
> I think this is overwriting the status field on the next job. The
> hardware checks that job header to make sure the status field is zero
> before executing (precisely to avoid such a loop happening by accident).
> So two (or more) jobs where the next-job pointers are in a loop works as
> long as you clear the status fields.

Exactly.

> 
> As a side-note: this is very much in the not-really-supported area of
> the hardware. The architecture doesn't prevent the GPU from reading
> ahead in the job chain and rejecting a job before the write-value
> happens.

Good to know. I thought the barrier and no_prefetch flags would prevent
that from happening.
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for tests/panfrost: Misc fixes/improvements
  2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
                   ` (7 preceding siblings ...)
  2021-06-21 13:49 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/panfrost: Misc fixes/improvements Patchwork
@ 2021-06-21 15:45 ` Patchwork
  8 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2021-06-21 15:45 UTC (permalink / raw)
  To: Boris Brezillon; +Cc: igt-dev


[-- Attachment #1.1: Type: text/plain, Size: 30257 bytes --]

== Series Details ==

Series: tests/panfrost: Misc fixes/improvements
URL   : https://patchwork.freedesktop.org/series/91726/
State : success

== Summary ==

CI Bug Log - changes from IGT_6115_full -> IGTPW_5947_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/index.html

Known issues
------------

  Here are the changes found in IGTPW_5947_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_persistence@legacy-engines-persistence:
    - shard-snb:          NOTRUN -> [SKIP][1] ([fdo#109271] / [i915#1099]) +5 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-snb7/igt@gem_ctx_persistence@legacy-engines-persistence.html

  * igt@gem_eio@in-flight-contexts-1us:
    - shard-tglb:         [PASS][2] -> [TIMEOUT][3] ([i915#3063])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-tglb7/igt@gem_eio@in-flight-contexts-1us.html
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb7/igt@gem_eio@in-flight-contexts-1us.html

  * igt@gem_eio@unwedge-stress:
    - shard-tglb:         [PASS][4] -> [TIMEOUT][5] ([i915#2369] / [i915#3063])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-tglb8/igt@gem_eio@unwedge-stress.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb3/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_fair@basic-deadline:
    - shard-apl:          NOTRUN -> [FAIL][6] ([i915#2846])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl8/igt@gem_exec_fair@basic-deadline.html

  * igt@gem_exec_fair@basic-flow@rcs0:
    - shard-tglb:         [PASS][7] -> [FAIL][8] ([i915#2842])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-tglb1/igt@gem_exec_fair@basic-flow@rcs0.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb6/igt@gem_exec_fair@basic-flow@rcs0.html

  * igt@gem_exec_fair@basic-none@vcs0:
    - shard-kbl:          NOTRUN -> [FAIL][9] ([i915#2842]) +1 similar issue
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl7/igt@gem_exec_fair@basic-none@vcs0.html

  * igt@gem_exec_reloc@basic-wide-active@bcs0:
    - shard-apl:          NOTRUN -> [FAIL][10] ([i915#3633]) +3 similar issues
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl6/igt@gem_exec_reloc@basic-wide-active@bcs0.html

  * igt@gem_mmap_gtt@cpuset-big-copy-xy:
    - shard-iclb:         NOTRUN -> [FAIL][11] ([i915#307])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb8/igt@gem_mmap_gtt@cpuset-big-copy-xy.html

  * igt@gem_render_copy@y-tiled-ccs-to-yf-tiled-mc-ccs:
    - shard-iclb:         NOTRUN -> [SKIP][12] ([i915#768])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb4/igt@gem_render_copy@y-tiled-ccs-to-yf-tiled-mc-ccs.html

  * igt@gem_userptr_blits@dmabuf-sync:
    - shard-apl:          NOTRUN -> [SKIP][13] ([fdo#109271] / [i915#3323])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl6/igt@gem_userptr_blits@dmabuf-sync.html

  * igt@gen7_exec_parse@cmd-crossing-page:
    - shard-tglb:         NOTRUN -> [SKIP][14] ([fdo#109289]) +1 similar issue
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb1/igt@gen7_exec_parse@cmd-crossing-page.html
    - shard-iclb:         NOTRUN -> [SKIP][15] ([fdo#109289]) +1 similar issue
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb4/igt@gen7_exec_parse@cmd-crossing-page.html

  * igt@gen9_exec_parse@cmd-crossing-page:
    - shard-tglb:         NOTRUN -> [SKIP][16] ([fdo#112306])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb7/igt@gen9_exec_parse@cmd-crossing-page.html
    - shard-iclb:         NOTRUN -> [SKIP][17] ([fdo#112306])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb2/igt@gen9_exec_parse@cmd-crossing-page.html

  * igt@kms_big_fb@linear-16bpp-rotate-90:
    - shard-apl:          NOTRUN -> [SKIP][18] ([fdo#109271]) +182 similar issues
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl7/igt@kms_big_fb@linear-16bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-32bpp-rotate-270:
    - shard-iclb:         NOTRUN -> [SKIP][19] ([fdo#110725] / [fdo#111614])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb3/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
    - shard-tglb:         NOTRUN -> [SKIP][20] ([fdo#111614])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb3/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-270:
    - shard-iclb:         [PASS][21] -> [DMESG-WARN][22] ([i915#3621])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-iclb1/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb1/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-8bpp-rotate-270:
    - shard-iclb:         NOTRUN -> [SKIP][23] ([fdo#110723])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb4/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html
    - shard-tglb:         NOTRUN -> [SKIP][24] ([fdo#111615]) +1 similar issue
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb3/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html

  * igt@kms_chamelium@hdmi-mode-timings:
    - shard-kbl:          NOTRUN -> [SKIP][25] ([fdo#109271] / [fdo#111827]) +4 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl2/igt@kms_chamelium@hdmi-mode-timings.html
    - shard-iclb:         NOTRUN -> [SKIP][26] ([fdo#109284] / [fdo#111827]) +5 similar issues
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb3/igt@kms_chamelium@hdmi-mode-timings.html

  * igt@kms_chamelium@vga-hpd-enable-disable-mode:
    - shard-glk:          NOTRUN -> [SKIP][27] ([fdo#109271] / [fdo#111827]) +6 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk4/igt@kms_chamelium@vga-hpd-enable-disable-mode.html

  * igt@kms_color_chamelium@pipe-a-ctm-limited-range:
    - shard-apl:          NOTRUN -> [SKIP][28] ([fdo#109271] / [fdo#111827]) +19 similar issues
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl6/igt@kms_color_chamelium@pipe-a-ctm-limited-range.html

  * igt@kms_color_chamelium@pipe-d-ctm-limited-range:
    - shard-tglb:         NOTRUN -> [SKIP][29] ([fdo#109284] / [fdo#111827]) +6 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb8/igt@kms_color_chamelium@pipe-d-ctm-limited-range.html
    - shard-iclb:         NOTRUN -> [SKIP][30] ([fdo#109278] / [fdo#109284] / [fdo#111827])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb8/igt@kms_color_chamelium@pipe-d-ctm-limited-range.html

  * igt@kms_color_chamelium@pipe-invalid-ctm-matrix-sizes:
    - shard-snb:          NOTRUN -> [SKIP][31] ([fdo#109271] / [fdo#111827]) +20 similar issues
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-snb2/igt@kms_color_chamelium@pipe-invalid-ctm-matrix-sizes.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-apl:          NOTRUN -> [TIMEOUT][32] ([i915#1319]) +2 similar issues
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl2/igt@kms_content_protection@atomic-dpms.html
    - shard-tglb:         NOTRUN -> [SKIP][33] ([fdo#111828])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb3/igt@kms_content_protection@atomic-dpms.html
    - shard-iclb:         NOTRUN -> [SKIP][34] ([fdo#109300] / [fdo#111066])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb4/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-iclb:         NOTRUN -> [SKIP][35] ([i915#3116])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb5/igt@kms_content_protection@dp-mst-lic-type-0.html
    - shard-tglb:         NOTRUN -> [SKIP][36] ([i915#3116])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb1/igt@kms_content_protection@dp-mst-lic-type-0.html

  * igt@kms_cursor_crc@pipe-c-cursor-max-size-sliding:
    - shard-iclb:         NOTRUN -> [SKIP][37] ([fdo#109278]) +10 similar issues
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb3/igt@kms_cursor_crc@pipe-c-cursor-max-size-sliding.html

  * igt@kms_cursor_crc@pipe-d-cursor-32x32-sliding:
    - shard-tglb:         NOTRUN -> [SKIP][38] ([i915#3319])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb6/igt@kms_cursor_crc@pipe-d-cursor-32x32-sliding.html

  * igt@kms_cursor_crc@pipe-d-cursor-max-size-rapid-movement:
    - shard-tglb:         NOTRUN -> [SKIP][39] ([i915#3359]) +2 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb6/igt@kms_cursor_crc@pipe-d-cursor-max-size-rapid-movement.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-legacy:
    - shard-iclb:         NOTRUN -> [SKIP][40] ([fdo#109274] / [fdo#109278]) +1 similar issue
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb8/igt@kms_cursor_legacy@cursorb-vs-flipb-legacy.html

  * igt@kms_flip@2x-flip-vs-suspend:
    - shard-iclb:         NOTRUN -> [SKIP][41] ([fdo#109274]) +2 similar issues
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb2/igt@kms_flip@2x-flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend-interruptible@a-dp1:
    - shard-kbl:          [PASS][42] -> [DMESG-WARN][43] ([i915#180]) +6 similar issues
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-kbl6/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl6/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html

  * igt@kms_flip@flip-vs-suspend@b-dp1:
    - shard-apl:          [PASS][44] -> [DMESG-WARN][45] ([i915#180]) +1 similar issue
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-apl7/igt@kms_flip@flip-vs-suspend@b-dp1.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl1/igt@kms_flip@flip-vs-suspend@b-dp1.html

  * igt@kms_flip@plain-flip-fb-recreate@a-hdmi-a1:
    - shard-glk:          [PASS][46] -> [FAIL][47] ([i915#2122])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-glk1/igt@kms_flip@plain-flip-fb-recreate@a-hdmi-a1.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk5/igt@kms_flip@plain-flip-fb-recreate@a-hdmi-a1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile:
    - shard-apl:          NOTRUN -> [SKIP][48] ([fdo#109271] / [i915#2642])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl2/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-glk:          [PASS][49] -> [FAIL][50] ([i915#2546] / [i915#49])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-glk7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-wc.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-wc.html
    - shard-apl:          [PASS][51] -> [FAIL][52] ([i915#49])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-apl1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-wc.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-shrfb-msflip-blt:
    - shard-snb:          NOTRUN -> [SKIP][53] ([fdo#109271]) +354 similar issues
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-snb2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-kbl:          NOTRUN -> [SKIP][54] ([fdo#109271]) +53 similar issues
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff:
    - shard-tglb:         NOTRUN -> [SKIP][55] ([fdo#111825]) +15 similar issues
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-plflip-blt:
    - shard-iclb:         NOTRUN -> [SKIP][56] ([fdo#109280]) +10 similar issues
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb5/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-plflip-blt.html

  * igt@kms_hdmi_inject@inject-audio:
    - shard-tglb:         NOTRUN -> [SKIP][57] ([i915#433])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb7/igt@kms_hdmi_inject@inject-audio.html

  * igt@kms_pipe_crc_basic@hang-read-crc-pipe-d:
    - shard-kbl:          NOTRUN -> [SKIP][58] ([fdo#109271] / [i915#533])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl4/igt@kms_pipe_crc_basic@hang-read-crc-pipe-d.html
    - shard-glk:          NOTRUN -> [SKIP][59] ([fdo#109271] / [i915#533])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk2/igt@kms_pipe_crc_basic@hang-read-crc-pipe-d.html
    - shard-apl:          NOTRUN -> [SKIP][60] ([fdo#109271] / [i915#533])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl7/igt@kms_pipe_crc_basic@hang-read-crc-pipe-d.html

  * igt@kms_plane@plane-panning-bottom-right-suspend@pipe-b-planes:
    - shard-kbl:          NOTRUN -> [DMESG-WARN][61] ([i915#180])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl6/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-b-planes.html

  * igt@kms_plane_alpha_blend@pipe-a-alpha-basic:
    - shard-apl:          NOTRUN -> [FAIL][62] ([fdo#108145] / [i915#265]) +2 similar issues
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl2/igt@kms_plane_alpha_blend@pipe-a-alpha-basic.html

  * igt@kms_plane_alpha_blend@pipe-c-constant-alpha-max:
    - shard-glk:          NOTRUN -> [FAIL][63] ([fdo#108145] / [i915#265])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk2/igt@kms_plane_alpha_blend@pipe-c-constant-alpha-max.html
    - shard-kbl:          NOTRUN -> [FAIL][64] ([fdo#108145] / [i915#265])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl4/igt@kms_plane_alpha_blend@pipe-c-constant-alpha-max.html

  * igt@kms_plane_lowres@pipe-b-tiling-x:
    - shard-iclb:         NOTRUN -> [SKIP][65] ([i915#3536]) +1 similar issue
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb6/igt@kms_plane_lowres@pipe-b-tiling-x.html
    - shard-tglb:         NOTRUN -> [SKIP][66] ([i915#3536])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb2/igt@kms_plane_lowres@pipe-b-tiling-x.html

  * igt@kms_plane_multiple@atomic-pipe-d-tiling-yf:
    - shard-tglb:         NOTRUN -> [SKIP][67] ([fdo#112054])
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb2/igt@kms_plane_multiple@atomic-pipe-d-tiling-yf.html

  * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-5:
    - shard-glk:          NOTRUN -> [SKIP][68] ([fdo#109271] / [i915#658])
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk3/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-5.html
    - shard-tglb:         NOTRUN -> [SKIP][69] ([i915#2920])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb6/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-5.html
    - shard-kbl:          NOTRUN -> [SKIP][70] ([fdo#109271] / [i915#658])
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl4/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-5.html
    - shard-iclb:         NOTRUN -> [SKIP][71] ([i915#658])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb1/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-5.html

  * igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-3:
    - shard-apl:          NOTRUN -> [SKIP][72] ([fdo#109271] / [i915#658]) +4 similar issues
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl2/igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area-3.html

  * igt@kms_psr@psr2_cursor_mmap_cpu:
    - shard-iclb:         NOTRUN -> [SKIP][73] ([fdo#109441])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb7/igt@kms_psr@psr2_cursor_mmap_cpu.html
    - shard-tglb:         NOTRUN -> [FAIL][74] ([i915#132] / [i915#3467])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb5/igt@kms_psr@psr2_cursor_mmap_cpu.html

  * igt@kms_psr@psr2_suspend:
    - shard-iclb:         [PASS][75] -> [SKIP][76] ([fdo#109441]) +2 similar issues
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-iclb2/igt@kms_psr@psr2_suspend.html
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb6/igt@kms_psr@psr2_suspend.html

  * igt@kms_sysfs_edid_timing:
    - shard-apl:          NOTRUN -> [FAIL][77] ([IGT#2])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl8/igt@kms_sysfs_edid_timing.html

  * igt@kms_vblank@pipe-c-ts-continuation-suspend:
    - shard-kbl:          NOTRUN -> [INCOMPLETE][78] ([i915#155] / [i915#2828] / [i915#794])
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl2/igt@kms_vblank@pipe-c-ts-continuation-suspend.html

  * igt@kms_vblank@pipe-d-ts-continuation-modeset-hang:
    - shard-glk:          NOTRUN -> [SKIP][79] ([fdo#109271]) +41 similar issues
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk8/igt@kms_vblank@pipe-d-ts-continuation-modeset-hang.html

  * igt@nouveau_crc@pipe-d-source-outp-inactive:
    - shard-tglb:         NOTRUN -> [SKIP][80] ([i915#2530])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb6/igt@nouveau_crc@pipe-d-source-outp-inactive.html
    - shard-iclb:         NOTRUN -> [SKIP][81] ([fdo#109278] / [i915#2530])
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb1/igt@nouveau_crc@pipe-d-source-outp-inactive.html

  * igt@prime_nv_pcopy@test1_macro:
    - shard-tglb:         NOTRUN -> [SKIP][82] ([fdo#109291])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb5/igt@prime_nv_pcopy@test1_macro.html
    - shard-iclb:         NOTRUN -> [SKIP][83] ([fdo#109291])
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb1/igt@prime_nv_pcopy@test1_macro.html

  * igt@prime_vgem@fence-flip-hang:
    - shard-iclb:         NOTRUN -> [SKIP][84] ([fdo#109295])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb2/igt@prime_vgem@fence-flip-hang.html
    - shard-tglb:         NOTRUN -> [SKIP][85] ([fdo#109295])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb8/igt@prime_vgem@fence-flip-hang.html

  * igt@sysfs_clients@fair-7:
    - shard-apl:          NOTRUN -> [SKIP][86] ([fdo#109271] / [i915#2994]) +3 similar issues
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl8/igt@sysfs_clients@fair-7.html

  * igt@sysfs_clients@sema-10:
    - shard-tglb:         NOTRUN -> [SKIP][87] ([i915#2994])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-tglb6/igt@sysfs_clients@sema-10.html
    - shard-kbl:          NOTRUN -> [SKIP][88] ([fdo#109271] / [i915#2994])
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl1/igt@sysfs_clients@sema-10.html
    - shard-glk:          NOTRUN -> [SKIP][89] ([fdo#109271] / [i915#2994])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk6/igt@sysfs_clients@sema-10.html
    - shard-iclb:         NOTRUN -> [SKIP][90] ([i915#2994])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb7/igt@sysfs_clients@sema-10.html

  
#### Possible fixes ####

  * igt@gem_exec_fair@basic-none-rrul@rcs0:
    - shard-glk:          [FAIL][91] ([i915#2842]) -> [PASS][92] +1 similar issue
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-glk6/igt@gem_exec_fair@basic-none-rrul@rcs0.html
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk7/igt@gem_exec_fair@basic-none-rrul@rcs0.html

  * igt@i915_pm_dc@dc9-dpms:
    - shard-apl:          [FAIL][93] ([i915#3343]) -> [PASS][94]
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-apl7/igt@i915_pm_dc@dc9-dpms.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl6/igt@i915_pm_dc@dc9-dpms.html

  * igt@i915_suspend@fence-restore-untiled:
    - shard-kbl:          [DMESG-WARN][95] ([i915#180]) -> [PASS][96]
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-kbl7/igt@i915_suspend@fence-restore-untiled.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl1/igt@i915_suspend@fence-restore-untiled.html

  * igt@kms_big_fb@linear-32bpp-rotate-180:
    - shard-glk:          [DMESG-WARN][97] ([i915#118] / [i915#95]) -> [PASS][98] +2 similar issues
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-glk5/igt@kms_big_fb@linear-32bpp-rotate-180.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-glk4/igt@kms_big_fb@linear-32bpp-rotate-180.html

  * igt@kms_psr@psr2_cursor_render:
    - shard-iclb:         [SKIP][99] ([fdo#109441]) -> [PASS][100] +1 similar issue
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-iclb7/igt@kms_psr@psr2_cursor_render.html
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb2/igt@kms_psr@psr2_cursor_render.html

  * igt@kms_vblank@pipe-b-ts-continuation-suspend:
    - shard-apl:          [DMESG-WARN][101] ([i915#180]) -> [PASS][102] +1 similar issue
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-apl6/igt@kms_vblank@pipe-b-ts-continuation-suspend.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl2/igt@kms_vblank@pipe-b-ts-continuation-suspend.html

  
#### Warnings ####

  * igt@kms_psr2_sf@cursor-plane-update-sf:
    - shard-iclb:         [SKIP][103] ([i915#658]) -> [SKIP][104] ([i915#2920]) +2 similar issues
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-iclb1/igt@kms_psr2_sf@cursor-plane-update-sf.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb2/igt@kms_psr2_sf@cursor-plane-update-sf.html

  * igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-2:
    - shard-iclb:         [SKIP][105] ([i915#2920]) -> [SKIP][106] ([i915#658])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-iclb2/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-2.html
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb5/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-2.html

  * igt@runner@aborted:
    - shard-kbl:          ([FAIL][107], [FAIL][108], [FAIL][109]) ([i915#180] / [i915#2505] / [i915#3002] / [i915#3363]) -> ([FAIL][110], [FAIL][111], [FAIL][112], [FAIL][113], [FAIL][114], [FAIL][115], [FAIL][116], [FAIL][117]) ([i915#180] / [i915#1814] / [i915#2505] / [i915#3002] / [i915#3363])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-kbl2/igt@runner@aborted.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-kbl7/igt@runner@aborted.html
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-kbl6/igt@runner@aborted.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl7/igt@runner@aborted.html
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl7/igt@runner@aborted.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl6/igt@runner@aborted.html
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl4/igt@runner@aborted.html
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl6/igt@runner@aborted.html
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl2/igt@runner@aborted.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl2/igt@runner@aborted.html
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-kbl2/igt@runner@aborted.html
    - shard-iclb:         ([FAIL][118], [FAIL][119]) ([i915#3002]) -> ([FAIL][120], [FAIL][121], [FAIL][122]) ([i915#1814] / [i915#3002])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-iclb5/igt@runner@aborted.html
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-iclb1/igt@runner@aborted.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb3/igt@runner@aborted.html
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb1/igt@runner@aborted.html
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-iclb6/igt@runner@aborted.html
    - shard-apl:          ([FAIL][123], [FAIL][124], [FAIL][125]) ([i915#1814] / [i915#3002] / [i915#3363]) -> ([FAIL][126], [FAIL][127], [FAIL][128]) ([fdo#109271] / [i915#180] / [i915#1814] / [i915#3002] / [i915#3363])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-apl6/igt@runner@aborted.html
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-apl2/igt@runner@aborted.html
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_6115/shard-apl3/igt@runner@aborted.html
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl1/igt@runner@aborted.html
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl8/igt@runner@aborted.html
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/shard-apl1/igt@runner@aborted.html

  
  [IGT#2]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/2
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
  [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [fdo#109284]: https://bugs.freedesktop.org/show_bug.cgi?id=109284
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#110725]: https://bugs.freedesktop.org/show_bug.cgi?id=110725
  [fdo#111066]: https://bugs.freedesktop.org/show_bug.cgi?id=111066
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [fdo#111828]: https://bugs.freedesktop.org/show_bug.cgi?id=111828
  [fdo#112054]: https://bugs.freedesktop.org/show_bug.cgi?id=112054
  [fdo#112306]: https://bugs.freedesktop.org/show_bug.cgi?id=112306
  [i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
  [i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
  [i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319
  [i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
  [i915#155]: https://gitlab.freedesktop.org/drm/intel/issues/155
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#1814]: https://gitlab.freedesktop.org/drm/intel/issues/1814
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2369]: https://gitlab.freedesktop.org/drm/intel/issues/2369
  [i915#2505]: https://gitlab.freedesktop.org/drm/intel/issues/2505
  [i915#2530]: https://gitlab.freedesktop.org/drm/intel/issues/2530
  [i915#2546]: https://gitlab.freedesktop.org/drm/intel/issues/2546
  [i915#2642]: https://gitlab.freedesktop.org/drm/intel/issues/2642
  [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
  [i915#2828]: https://gitlab.freedesktop.org/drm/intel/issues/2828
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
  [i915#2920]: https://gitlab.freedesktop.org/drm/intel/issues/2920
  [i915#2994]: https://gitlab.freedesktop.org/drm/intel/issues/2994
  [i915#3002]: https://gitlab.freedesktop.org/drm/intel/issues/3002
  [i915#3063]: https://gitlab.freedesktop.org/drm/intel/issues/3063
  [i915#307]: https://gitlab.freedesktop.org/drm/intel/issues/307
  [i915#3116]: https://gitlab.freedesktop.org/drm/intel/issues/3116
  [i915#3319]: https://gitlab.freedesktop.org/drm/intel/issues/3319
  [i915#3323]: https://gitlab.freedesktop.org/drm/intel/issues/3323
  [i915#3343]: https://gitlab.freedesktop.org/drm/intel/issues/3343
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3363]: https://gitlab.freedesktop.org/drm/intel/issues/3363
  [i915#3467]: https://gitlab.freedesktop.org/drm/intel/issues/3467
  [i915#3536]: https://gitlab.freedesktop.org/drm/intel/issues/3536
  [i915#3621]: https://gitlab.freedesktop.org/drm/intel/issues/3621
  [i915#3633]: https://gitlab.freedesktop.org/drm/intel/issues/3633
  [i915#433]: https://gitlab.freedesktop.org/drm/intel/issues/433
  [i915#49]: https://gitlab.freedesktop.org/drm/intel/issues/49
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#768]: https://gitlab.freedesktop.org/drm/intel/issues/768
  [i915#794]: https://gitlab.freedesktop.org/drm/intel/issues/794
  [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95


Participating hosts (7 -> 7)
------------------------------

  No changes in participating hosts


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_6115 -> IGTPW_5947

  CI-20190529: 2019052

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_5947/index.html

[-- Attachment #1.2: Type: text/html, Size: 38802 bytes --]

[-- Attachment #2: Type: text/plain, Size: 154 bytes --]

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop
  2021-06-21 14:18     ` Boris Brezillon
@ 2021-06-21 16:02       ` Alyssa Rosenzweig
  0 siblings, 0 replies; 20+ messages in thread
From: Alyssa Rosenzweig @ 2021-06-21 16:02 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Tomeu Vizoso, Steven Price, igt-dev, Rob Herring,
	Alyssa Rosenzweig, Robin Murphy

> Nope, I'm writing 0 to the next job ->exception_status field, which is
> needed if we want the loop to be effective (as soon as the GPU sees a
> job that has a non-zero exception_status it triggers an INVALID_DATA
> fault).

Ah-ha, sorry, misunderstood where out pointed. Would it be possible to
express the intent a bit more clearly, or at least add some comments
explaining what's happening? Thanks.
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 1/7] tests/panfrost: Make sure we open a DUMB capable node for prime tests
  2021-06-21 12:57 ` [igt-dev] [PATCH 1/7] tests/panfrost: Make sure we open a DUMB capable node for prime tests Boris Brezillon
@ 2021-06-21 17:00   ` Petri Latvala
  2021-06-22  6:52     ` Boris Brezillon
  0 siblings, 1 reply; 20+ messages in thread
From: Petri Latvala @ 2021-06-21 17:00 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Tomeu Vizoso, Steven Price, igt-dev, Rob Herring,
	Alyssa Rosenzweig, Robin Murphy

On Mon, Jun 21, 2021 at 02:57:18PM +0200, Boris Brezillon wrote:
> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> ---
>  tests/panfrost_prime.c | 26 +++++++++++++++++++++++++-
>  1 file changed, 25 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/panfrost_prime.c b/tests/panfrost_prime.c
> index 351d46f2f7e6..f9818108a662 100644
> --- a/tests/panfrost_prime.c
> +++ b/tests/panfrost_prime.c
> @@ -35,12 +35,36 @@
>  #include <sys/ioctl.h>
>  #include "panfrost_drm.h"
>  
> +static int igt_panfrost_open_kms_driver(void)
> +{
> +	for (unsigned i = 0; i < 2; i++) {
> +		uint64_t cap_dumb_buf = 0, cap_prime = 0;
> +		char path[32];
> +		int fd;
> +
> +		snprintf(path, sizeof(path), "/dev/dri/card%d", i);
> +
> +		fd = open(path, O_RDWR);
> +		if (fd < 0)
> +			continue;
> +
> +		drmGetCap(fd, DRM_CAP_DUMB_BUFFER, &cap_dumb_buf);
> +		drmGetCap(fd, DRM_CAP_PRIME, &cap_prime);
> +		if (cap_dumb_buf && (cap_prime & DRM_PRIME_CAP_EXPORT))
> +			return fd;
> +
> +		close(fd);
> +	}
> +
> +	return -1;
> +}
> +
>  igt_main
>  {
>  	int fd, kms_fd;
>  
>  	igt_fixture {
> -		kms_fd = drm_open_driver_master(DRIVER_ANY);
> +		kms_fd = igt_panfrost_open_kms_driver();


How we've done this kind of thing elsewhere is

1) use drm_open_driver_another(0, DRIVER_foobar) +
drm_open_driver_another(1, DRIVER_something) to open the two driver
fds. The _another variants make sure the fds are from different
devices. Then, check that the fds meet the requirements for testing
with igt_require et al, don't go looking for additional devices. Let
the test produce a 'skip' result if requirements are not met.

2) use device filters when executing the tests to control what devices
get chosen. Docs at
https://drm.pages.freedesktop.org/igt-gpu-tools/igt-gpu-tools-Device-selection.html


That way someone who has, say, vkms + vgem + panfrost drivers present
is able to run tests and specify that they don't want you to touch
vkms.


-- 
Petri Latvala
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [igt-dev] [PATCH 1/7] tests/panfrost: Make sure we open a DUMB capable node for prime tests
  2021-06-21 17:00   ` Petri Latvala
@ 2021-06-22  6:52     ` Boris Brezillon
  0 siblings, 0 replies; 20+ messages in thread
From: Boris Brezillon @ 2021-06-22  6:52 UTC (permalink / raw)
  To: Petri Latvala
  Cc: Tomeu Vizoso, Steven Price, igt-dev, Rob Herring,
	Alyssa Rosenzweig, Robin Murphy

Hi Petri,

On Mon, 21 Jun 2021 20:00:33 +0300
Petri Latvala <petri.latvala@intel.com> wrote:

> On Mon, Jun 21, 2021 at 02:57:18PM +0200, Boris Brezillon wrote:
> > Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> > ---
> >  tests/panfrost_prime.c | 26 +++++++++++++++++++++++++-
> >  1 file changed, 25 insertions(+), 1 deletion(-)
> > 
> > diff --git a/tests/panfrost_prime.c b/tests/panfrost_prime.c
> > index 351d46f2f7e6..f9818108a662 100644
> > --- a/tests/panfrost_prime.c
> > +++ b/tests/panfrost_prime.c
> > @@ -35,12 +35,36 @@
> >  #include <sys/ioctl.h>
> >  #include "panfrost_drm.h"
> >  
> > +static int igt_panfrost_open_kms_driver(void)
> > +{
> > +	for (unsigned i = 0; i < 2; i++) {
> > +		uint64_t cap_dumb_buf = 0, cap_prime = 0;
> > +		char path[32];
> > +		int fd;
> > +
> > +		snprintf(path, sizeof(path), "/dev/dri/card%d", i);
> > +
> > +		fd = open(path, O_RDWR);
> > +		if (fd < 0)
> > +			continue;
> > +
> > +		drmGetCap(fd, DRM_CAP_DUMB_BUFFER, &cap_dumb_buf);
> > +		drmGetCap(fd, DRM_CAP_PRIME, &cap_prime);
> > +		if (cap_dumb_buf && (cap_prime & DRM_PRIME_CAP_EXPORT))
> > +			return fd;
> > +
> > +		close(fd);
> > +	}
> > +
> > +	return -1;
> > +}
> > +
> >  igt_main
> >  {
> >  	int fd, kms_fd;
> >  
> >  	igt_fixture {
> > -		kms_fd = drm_open_driver_master(DRIVER_ANY);
> > +		kms_fd = igt_panfrost_open_kms_driver();  
> 
> 
> How we've done this kind of thing elsewhere is
> 
> 1) use drm_open_driver_another(0, DRIVER_foobar) +
> drm_open_driver_another(1, DRIVER_something) to open the two driver
> fds. The _another variants make sure the fds are from different
> devices. Then, check that the fds meet the requirements for testing
> with igt_require et al, don't go looking for additional devices. Let
> the test produce a 'skip' result if requirements are not met.
> 
> 2) use device filters when executing the tests to control what devices
> get chosen. Docs at
> https://drm.pages.freedesktop.org/igt-gpu-tools/igt-gpu-tools-Device-selection.html
> 
> 
> That way someone who has, say, vkms + vgem + panfrost drivers present
> is able to run tests and specify that they don't want you to touch
> vkms.
> 

Thanks for the tip. I'll use drm_open_driver_another() in v2.

Regards,

Boris
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2021-06-22  6:52 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-21 12:57 [igt-dev] [PATCH 0/7] tests/panfrost: Misc fixes/improvements Boris Brezillon
2021-06-21 12:57 ` [igt-dev] [PATCH 1/7] tests/panfrost: Make sure we open a DUMB capable node for prime tests Boris Brezillon
2021-06-21 17:00   ` Petri Latvala
2021-06-22  6:52     ` Boris Brezillon
2021-06-21 12:57 ` [igt-dev] [PATCH 2/7] lib/panfrost: Handle the NULL case in igt_panfrost_free_bo() Boris Brezillon
2021-06-21 12:57 ` [igt-dev] [PATCH 3/7] lib/panfrost: Add a helper to create a job loop Boris Brezillon
2021-06-21 13:35   ` Alyssa Rosenzweig
2021-06-21 14:09     ` Steven Price
2021-06-21 14:29       ` Boris Brezillon
2021-06-21 14:18     ` Boris Brezillon
2021-06-21 16:02       ` Alyssa Rosenzweig
2021-06-21 12:57 ` [igt-dev] [PATCH 4/7] lib/panfrost: Add a helper to create a NULL job Boris Brezillon
2021-06-21 12:57 ` [igt-dev] [PATCH 5/7] tests/panfrost: Simplify submit tests Boris Brezillon
2021-06-21 13:36   ` Alyssa Rosenzweig
2021-06-21 12:57 ` [igt-dev] [PATCH 6/7] lib/panfrost: Get rid of igt_panfrost_trivial_job() Boris Brezillon
2021-06-21 13:37   ` Alyssa Rosenzweig
2021-06-21 12:57 ` [igt-dev] [PATCH 7/7] tests/panfrost: Test FD-close while jobs are still in-flight Boris Brezillon
2021-06-21 13:37   ` Alyssa Rosenzweig
2021-06-21 13:49 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/panfrost: Misc fixes/improvements Patchwork
2021-06-21 15:45 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.