Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests
@ 2023-01-13 12:44 Maíra Canal
  2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 1/3] lib/v3d: Add a helper to create a empty shader Maíra Canal
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Maíra Canal @ 2023-01-13 12:44 UTC (permalink / raw)
  To: Melissa Wen, André Almeida, Petri Latvala, Kamil Konieczny,
	Boris Brezillon, Tomeu Vizoso, Emma Anholt, Iago Toral Quiroga,
	Rob Clark
  Cc: igt-dev

Currently, the V3D tests only support CL job submissions [1], while V3D has also
capabilities for CSD and TFU jobs. Therefore, create tests for
DRM_IOCTL_V3D_SUBMIT_CSD, an ioctl for dispatching compute shader jobs to the
GPU. In order to create a simple CSD job, I hard-coded the pipeline assembly
shader of an empty shader in order to reproduce a shader and be able to create
an acceptable packet that can be sent to the GPU.

So, patch 1 introduces a helper function to submit a minimal CSD job to the GPU,
which will be useful for the tests. The minimal job will use the pipeline
assembly shader of an empty shader. Patches 2-3 will include new tests in the
V3D test suite for DRM_IOCTL_V3D_SUBMIT_CSD and create tests that mix different
types of jobs, in order to evaluate the synchronization between the two types of
jobs. 

[1] This series depends on https://patchwork.freedesktop.org/series/112363/

Best Regards,
- Maíra Canal

Maíra Canal (3):
  lib/v3d: Add a helper to create a empty shader
  tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL
  tests/v3d_job_submission: Create tests to mix CL and CSD jobs

 lib/igt_v3d.c                  |  60 ++++++
 lib/igt_v3d.h                  |  20 ++
 tests/v3d/meson.build          |   2 +
 tests/v3d/v3d_job_submission.c | 212 ++++++++++++++++++++
 tests/v3d/v3d_submit_csd.c     | 357 +++++++++++++++++++++++++++++++++
 tests/v3d_ci/v3d.testlist      |  21 ++
 6 files changed, 672 insertions(+)
 create mode 100644 tests/v3d/v3d_job_submission.c
 create mode 100644 tests/v3d/v3d_submit_csd.c

-- 
2.39.0

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

* [igt-dev] [PATCH i-g-t 1/3] lib/v3d: Add a helper to create a empty shader
  2023-01-13 12:44 [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Maíra Canal
@ 2023-01-13 12:44 ` Maíra Canal
  2023-02-10 13:31   ` Kamil Konieczny
  2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL Maíra Canal
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 10+ messages in thread
From: Maíra Canal @ 2023-01-13 12:44 UTC (permalink / raw)
  To: Melissa Wen, André Almeida, Petri Latvala, Kamil Konieczny,
	Boris Brezillon, Tomeu Vizoso, Emma Anholt, Iago Toral Quiroga,
	Rob Clark
  Cc: igt-dev

In order to submit a compute dispatch job, a BO must contain the
assembly shader that corresponds to the job. Therefore, create a helper
to encapsulate a simple compute dispatch job. This helper sets the
configurations (cfg) needed for the job and has the assembled instructions
necessary to process an empty shader, just like the following one:

    #version 310 es
    layout (local_size_x = 1) in;
    void main (void) {}

Signed-off-by: Maíra Canal <mcanal@igalia.com>
---
 lib/igt_v3d.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_v3d.h | 20 +++++++++++++++++
 2 files changed, 80 insertions(+)

diff --git a/lib/igt_v3d.c b/lib/igt_v3d.c
index cc8f410d..dd5ebb6d 100644
--- a/lib/igt_v3d.c
+++ b/lib/igt_v3d.c
@@ -341,3 +341,63 @@ void igt_v3d_free_cl_job(int fd, struct v3d_cl_job *job)
 	free(job->submit);
 	free(job);
 }
+
+struct v3d_csd_job *igt_v3d_empty_shader(int fd)
+{
+	struct v3d_csd_job *job;
+	uint32_t *bos;
+
+	/* Reproduce an empty shader */
+	const uint32_t assembly[] = { 0xbb800000, 0x3c203186,
+				      0xbb800000, 0x3c003186,
+				      0xbb800000, 0x3c003186 };
+	const uint32_t group_count_x = 1, group_count_y = 1, group_count_z = 1;
+	const uint32_t num_batches = 1, wgs_per_sg = 1, batches_per_sg = 1, wg_size = 1;
+
+	job = calloc(1, sizeof(*job));
+
+	job->shader_assembly = igt_v3d_create_bo(fd, PAGE_SIZE);
+	job->cl = igt_v3d_create_bo(fd, PAGE_SIZE);
+	job->submit = calloc(1, sizeof(*job->submit));
+
+	igt_v3d_bo_mmap(fd, job->shader_assembly);
+	igt_v3d_bo_mmap(fd, job->cl);
+
+	memset(job->shader_assembly->map, 0, sizeof(*job->shader_assembly->map));
+	memcpy(job->shader_assembly->map, assembly, sizeof(assembly));
+	memset(job->cl->map, 0, sizeof(*job->cl->map));
+
+	job->submit->bo_handle_count = 2;
+	bos = malloc(sizeof(*bos) * job->submit->bo_handle_count);
+	bos[0] = job->shader_assembly->handle;
+	bos[1] = job->cl->handle;
+
+	job->submit->bo_handles = to_user_pointer(bos);
+
+	job->submit->cfg[0] |= group_count_x << V3D_CSD_CFG012_WG_COUNT_SHIFT;
+	job->submit->cfg[1] |= group_count_y << V3D_CSD_CFG012_WG_COUNT_SHIFT;
+	job->submit->cfg[2] |= group_count_z << V3D_CSD_CFG012_WG_COUNT_SHIFT;
+
+	job->submit->cfg[3] |= (wgs_per_sg & 0xf) << V3D_CSD_CFG3_WGS_PER_SG_SHIFT;
+	job->submit->cfg[3] |= (batches_per_sg - 1) << V3D_CSD_CFG3_BATCHES_PER_SG_M1_SHIFT;
+	job->submit->cfg[3] |= (wg_size & 0xff) << V3D_CSD_CFG3_WG_SIZE_SHIFT;
+
+	job->submit->cfg[4] = num_batches - 1;
+
+	job->submit->cfg[5] = job->shader_assembly->offset | V3D_CSD_CFG5_PROPAGATE_NANS;
+	job->submit->cfg[5] |= V3D_CSD_CFG5_SINGLE_SEG;
+	job->submit->cfg[5] |= V3D_CSD_CFG5_THREADING;
+
+	job->submit->cfg[6] = job->cl->offset;
+
+	return job;
+}
+
+void igt_v3d_free_csd_job(int fd, struct v3d_csd_job *job)
+{
+	free(from_user_pointer(job->submit->bo_handles));
+	igt_v3d_free_bo(fd, job->shader_assembly);
+	igt_v3d_free_bo(fd, job->cl);
+	free(job->submit);
+	free(job);
+}
diff --git a/lib/igt_v3d.h b/lib/igt_v3d.h
index 2cf7fbd8..b96a3b43 100644
--- a/lib/igt_v3d.h
+++ b/lib/igt_v3d.h
@@ -28,6 +28,17 @@
 
 #define PAGE_SIZE 4096
 
+#define V3D_CSD_CFG012_WG_COUNT_SHIFT 16
+/* Batches per supergroup minus 1.  8 bits. */
+#define V3D_CSD_CFG3_BATCHES_PER_SG_M1_SHIFT 12
+/* Workgroups per supergroup, 0 means 16 */
+#define V3D_CSD_CFG3_WGS_PER_SG_SHIFT 8
+#define V3D_CSD_CFG3_WG_SIZE_SHIFT 0
+
+#define V3D_CSD_CFG5_PROPAGATE_NANS (1 << 2)
+#define V3D_CSD_CFG5_SINGLE_SEG (1 << 1)
+#define V3D_CSD_CFG5_THREADING (1 << 0)
+
 struct v3d_cl;
 
 struct v3d_bo {
@@ -46,6 +57,12 @@ struct v3d_cl_job {
 	struct v3d_bo *tile_state;
 };
 
+struct v3d_csd_job {
+	struct drm_v3d_submit_csd *submit;
+	struct v3d_bo *shader_assembly;
+	struct v3d_bo *cl;
+};
+
 struct v3d_bo *igt_v3d_create_bo(int fd, size_t size);
 void igt_v3d_free_bo(int fd, struct v3d_bo *bo);
 
@@ -67,4 +84,7 @@ void igt_v3d_set_multisync(struct drm_v3d_multi_sync *ms, enum v3d_queue wait_st
 struct v3d_cl_job *igt_v3d_noop_job(int fd);
 void igt_v3d_free_cl_job(int fd, struct v3d_cl_job *job);
 
+struct v3d_csd_job *igt_v3d_empty_shader(int fd);
+void igt_v3d_free_csd_job(int fd, struct v3d_csd_job *job);
+
 #endif /* IGT_V3D_H */
-- 
2.39.0

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

* [igt-dev] [PATCH i-g-t 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL
  2023-01-13 12:44 [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Maíra Canal
  2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 1/3] lib/v3d: Add a helper to create a empty shader Maíra Canal
@ 2023-01-13 12:44 ` Maíra Canal
  2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs Maíra Canal
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Maíra Canal @ 2023-01-13 12:44 UTC (permalink / raw)
  To: Melissa Wen, André Almeida, Petri Latvala, Kamil Konieczny,
	Boris Brezillon, Tomeu Vizoso, Emma Anholt, Iago Toral Quiroga,
	Rob Clark
  Cc: igt-dev

Add eighteen igt_subtests for the DRM_IOCTL_V3D_SUBMIT_CSD, which ensures
that improper parameters return an errno and test multisync and
single sync abilities. For most of the subtests, the empty shader is the
base of the submission, as it is one of the simplest jobs possible, allowing
it to test the synchronization abilities of the V3D.

Signed-off-by: Maíra Canal <mcanal@igalia.com>
---
 tests/v3d/meson.build      |   1 +
 tests/v3d/v3d_submit_csd.c | 357 +++++++++++++++++++++++++++++++++++++
 tests/v3d_ci/v3d.testlist  |  18 ++
 3 files changed, 376 insertions(+)
 create mode 100644 tests/v3d/v3d_submit_csd.c

diff --git a/tests/v3d/meson.build b/tests/v3d/meson.build
index be92fd66..d070fdb5 100644
--- a/tests/v3d/meson.build
+++ b/tests/v3d/meson.build
@@ -4,6 +4,7 @@ v3d_progs = [
 	'v3d_get_param',
 	'v3d_mmap',
 	'v3d_submit_cl',
+	'v3d_submit_csd',
 	'v3d_perfmon',
 	'v3d_wait_bo',
 ]
diff --git a/tests/v3d/v3d_submit_csd.c b/tests/v3d/v3d_submit_csd.c
new file mode 100644
index 00000000..c12c573b
--- /dev/null
+++ b/tests/v3d/v3d_submit_csd.c
@@ -0,0 +1,357 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2022 Igalia S.L.
+ */
+
+#include "igt.h"
+#include "igt_v3d.h"
+#include "igt_syncobj.h"
+
+/* One tenth of a second */
+#define SHORT_TIME_NSEC 100000000ull
+
+#define NSECS_PER_SEC 1000000000ull
+
+static uint64_t
+gettime_ns(void)
+{
+	struct timespec current;
+	clock_gettime(CLOCK_MONOTONIC, &current);
+	return (uint64_t)current.tv_sec * NSECS_PER_SEC + current.tv_nsec;
+}
+
+static uint64_t
+short_timeout(void)
+{
+	return gettime_ns() + SHORT_TIME_NSEC;
+}
+
+igt_main
+{
+	int fd;
+
+	igt_fixture {
+		fd = drm_open_driver(DRIVER_V3D);
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_CSD));
+	}
+
+	igt_describe("Make sure a submission cannot be accepted with a pad different than zero.");
+	igt_subtest("bad-pad") {
+		struct drm_v3d_submit_csd submit = {
+			.pad = 1
+		};
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, &submit, EINVAL);
+	}
+
+	igt_describe("Make sure a submission cannot be accepted with invalid flags.");
+	igt_subtest("bad-flag") {
+		struct drm_v3d_submit_csd submit = {
+			.flags = 0xaa
+		};
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, &submit, EINVAL);
+	}
+
+	igt_describe("Make sure a submission cannot be accepted if the extensions handle is invalid.");
+	igt_subtest("bad-extension") {
+		struct drm_v3d_submit_csd submit = {
+			.flags = DRM_V3D_SUBMIT_EXTENSION,
+			.extensions = 0ULL
+		};
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, &submit, EINVAL);
+	}
+
+	igt_describe("Make sure a submission cannot be accepted if the BO handle is invalid.");
+	igt_subtest("bad-bo") {
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		job->submit->bo_handles = 0ULL;
+		job->submit->bo_handle_count = 1;
+
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit, EFAULT);
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Make sure a submission cannot be accepted if the perfmon id is invalid.");
+	igt_subtest("bad-perfmon") {
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_PERFMON));
+
+		job->submit->perfmon_id = 1;
+
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit, ENOENT);
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Make sure a submission cannot be accepted if the in-sync is not signaled.");
+	igt_subtest("bad-in-sync") {
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		job->submit->in_sync = syncobj_create(fd, 0);
+
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit, EINVAL);
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Make sure that the multisync pad is zero.");
+	igt_subtest("bad-multisync-pad") {
+		struct drm_v3d_multi_sync ms = { };
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT));
+
+		ms.pad = 1;
+
+		job->submit->flags = DRM_V3D_SUBMIT_EXTENSION;
+		job->submit->extensions = to_user_pointer(&ms);
+
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit, EINVAL);
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Make sure that the multisync extension id exists.");
+	igt_subtest("bad-multisync-extension") {
+		struct drm_v3d_multi_sync ms = { };
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT));
+
+		ms.base.id = 0;
+
+		job->submit->flags = DRM_V3D_SUBMIT_EXTENSION;
+		job->submit->extensions = to_user_pointer(&ms);
+
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit, EINVAL);
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Make sure that the multisync out-sync is valid.");
+	igt_subtest("bad-multisync-out-sync") {
+		struct drm_v3d_multi_sync ms = { };
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT));
+
+		igt_v3d_set_multisync(&ms, V3D_CSD);
+
+		ms.out_sync_count = 1;
+		ms.out_syncs = 0ULL;
+
+		job->submit->flags = DRM_V3D_SUBMIT_EXTENSION;
+		job->submit->extensions = to_user_pointer(&ms);
+
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit, EFAULT);
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Make sure that the multisync in-sync is valid.");
+	igt_subtest("bad-multisync-in-sync") {
+		struct drm_v3d_multi_sync ms = { };
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT));
+
+		igt_v3d_set_multisync(&ms, V3D_CSD);
+
+		ms.in_sync_count = 1;
+		ms.in_syncs = 0ULL;
+
+		job->submit->flags = DRM_V3D_SUBMIT_EXTENSION;
+		job->submit->extensions = to_user_pointer(&ms);
+
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit, EFAULT);
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Test a valid submission without syncobj.");
+	igt_subtest("valid-submission") {
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit);
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Test a valid submission with a single out-sync.");
+	igt_subtest("single-out-sync") {
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		job->submit->out_sync = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit);
+		igt_assert(syncobj_wait(fd, &job->submit->out_sync, 1, INT64_MAX, 0, NULL));
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Test a valid submission with a single in-sync.");
+	igt_subtest("single-in-sync") {
+		struct v3d_csd_job *job1 = igt_v3d_empty_shader(fd);
+		struct v3d_csd_job *job2 = igt_v3d_empty_shader(fd);
+		uint32_t out_sync;
+
+		out_sync = syncobj_create(fd, 0);
+
+		job1->submit->in_sync= out_sync;
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job1->submit, EINVAL);
+
+		job2->submit->out_sync = out_sync;
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job2->submit);
+
+		igt_assert(syncobj_wait(fd, &job2->submit->out_sync, 1,
+					INT64_MAX, 0, NULL));
+
+		job1->submit->in_sync= out_sync;
+		job1->submit->out_sync = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job1->submit);
+
+		igt_assert(syncobj_wait(fd, &job1->submit->out_sync, 1,
+					INT64_MAX, 0, NULL));
+
+		igt_v3d_free_csd_job(fd, job1);
+		igt_v3d_free_csd_job(fd, job2);
+	}
+
+	igt_describe("Test a valid submission with a multisync without syncobjs.");
+	igt_subtest("valid-multisync-submission") {
+		struct drm_v3d_multi_sync ms = { };
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+
+		job->submit->flags = DRM_V3D_SUBMIT_EXTENSION;
+
+		if (!igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT)) {
+			do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, &job->submit, EINVAL);
+		} else {
+			igt_v3d_set_multisync(&ms, V3D_CSD);
+			job->submit->extensions = to_user_pointer(&ms);
+
+			do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit);
+		}
+
+		igt_v3d_free_csd_job(fd, job);
+	}
+
+	igt_describe("Test a valid submission with a multiple out-syncs.");
+	igt_subtest("multisync-out-syncs") {
+		struct drm_v3d_multi_sync ms = { };
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+		struct drm_v3d_sem *out_syncs;
+		int i;
+
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT));
+
+		igt_v3d_set_multisync(&ms, V3D_CSD);
+		ms.out_sync_count = 4;
+
+		out_syncs = malloc(ms.out_sync_count * sizeof(*out_syncs));
+		for (i = 0; i < ms.out_sync_count; i++)
+			out_syncs[i].handle = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
+
+		ms.out_syncs = to_user_pointer(out_syncs);
+
+		job->submit->flags = DRM_V3D_SUBMIT_EXTENSION;
+		job->submit->extensions = to_user_pointer(&ms);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit);
+		for (i = 0; i < ms.out_sync_count; i++)
+			igt_assert(syncobj_wait(fd, &out_syncs[i].handle, 1, INT64_MAX, 0, NULL));
+
+		igt_v3d_free_csd_job(fd, job);
+		free(out_syncs);
+	}
+
+	igt_describe("Make sure that the multisync extension is preferred over the single syncobjs.");
+	igt_subtest("multi-and-single-sync") {
+		struct drm_v3d_multi_sync ms = { };
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+		struct drm_v3d_sem *out_syncs;
+		int i;
+
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT));
+
+		igt_v3d_set_multisync(&ms, V3D_CSD);
+		ms.out_sync_count = 1;
+
+		out_syncs = malloc(ms.out_sync_count * sizeof(*out_syncs));
+		for (i = 0; i < ms.out_sync_count; i++)
+			out_syncs[i].handle = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
+
+		ms.out_syncs = to_user_pointer(out_syncs);
+
+		job->submit->flags = DRM_V3D_SUBMIT_EXTENSION;
+		job->submit->extensions = to_user_pointer(&ms);
+
+		job->submit->out_sync = syncobj_create(fd, 0);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit);
+		for (i = 0; i < ms.out_sync_count; i++)
+			igt_assert(syncobj_wait(fd, &out_syncs[i].handle, 1, INT64_MAX, 0, NULL));
+
+		/*
+		 * The multisync extension should be prioritized over the single syncobjs.
+		 * So, the job->submit->out_sync should stay not signaled.
+		 */
+		igt_assert_eq(syncobj_wait_err(fd, &job->submit->out_sync, 1, INT64_MAX, 0), -EINVAL);
+
+		igt_v3d_free_csd_job(fd, job);
+		free(out_syncs);
+	}
+
+	igt_describe("Test the implicit order of the submission to the CSD queue.");
+	igt_subtest("multiple-job-submission") {
+		const uint32_t num_jobs = 10;
+		struct v3d_csd_job **jobs = NULL;
+		int i;
+
+		jobs = malloc(num_jobs * sizeof(*jobs));
+
+		for (i = 0; i < num_jobs; i++) {
+			jobs[i] = igt_v3d_empty_shader(fd);
+			jobs[i]->submit->out_sync = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
+		}
+
+		for (i = 0; i < num_jobs; i++)
+			do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, jobs[i]->submit);
+
+		igt_assert(syncobj_wait(fd, &jobs[num_jobs - 1]->submit->out_sync, 1, short_timeout(), 0, NULL));
+
+		/*
+		 * If the last job is signaled, then all the previous jobs should
+		 * already signaled, to assure the implicit synchronization.
+		 */
+		for (i = 0; i < num_jobs; i++) {
+			igt_assert(syncobj_wait(fd, &jobs[i]->submit->out_sync, 1, 0, 0, NULL));
+			igt_v3d_free_csd_job(fd, jobs[i]);
+		}
+
+		free(jobs);
+	}
+
+	igt_describe("Test the coherency of creation/destruction of a perfmon attached to a job.");
+	igt_subtest("job-perfmon") {
+		uint8_t counters[] = { V3D_PERFCNT_L2T_TMU_READS,
+				       V3D_PERFCNT_L2T_CLE_READS,
+				       V3D_PERFCNT_L2T_VCD_READS,
+				       V3D_PERFCNT_L2T_TMUCFG_READS };
+		struct v3d_csd_job *job = igt_v3d_empty_shader(fd);
+		uint32_t id;
+
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_PERFMON));
+
+		id = igt_v3d_perfmon_create(fd, ARRAY_SIZE(counters), counters);
+
+		job->submit->out_sync = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
+		job->submit->perfmon_id = id;
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, job->submit);
+		igt_assert(syncobj_wait(fd, &job->submit->out_sync, 1,
+					INT64_MAX, 0, NULL));
+		igt_v3d_perfmon_get_values(fd, job->submit->perfmon_id);
+
+		igt_v3d_free_csd_job(fd, job);
+
+		igt_v3d_perfmon_get_values(fd, id);
+		igt_v3d_perfmon_destroy(fd, id);
+	}
+
+	igt_fixture
+		close(fd);
+}
diff --git a/tests/v3d_ci/v3d.testlist b/tests/v3d_ci/v3d.testlist
index 80e99831..5452fd99 100644
--- a/tests/v3d_ci/v3d.testlist
+++ b/tests/v3d_ci/v3d.testlist
@@ -29,6 +29,24 @@ igt@v3d/v3d_submit_cl@multiple-job-submission
 igt@v3d/v3d_submit_cl@multisync-out-syncs
 igt@v3d/v3d_submit_cl@multi-and-single-sync
 igt@v3d/v3d_submit_cl@job-perfmon
+igt@v3d/v3d_submit_csd@bad-pad
+igt@v3d/v3d_submit_csd@bad-flag
+igt@v3d/v3d_submit_csd@bad-extension
+igt@v3d/v3d_submit_csd@bad-bo
+igt@v3d/v3d_submit_csd@bad-perfmon
+igt@v3d/v3d_submit_csd@bad-in-sync
+igt@v3d/v3d_submit_csd@bad-multisync-pad
+igt@v3d/v3d_submit_csd@bad-multisync-extension
+igt@v3d/v3d_submit_csd@bad-multisync-out-sync
+igt@v3d/v3d_submit_csd@bad-multisync-in-sync
+igt@v3d/v3d_submit_csd@valid-submission
+igt@v3d/v3d_submit_csd@single-out-sync
+igt@v3d/v3d_submit_csd@single-in-sync
+igt@v3d/v3d_submit_csd@valid-multisync-submission
+igt@v3d/v3d_submit_csd@multiple-job-submission
+igt@v3d/v3d_submit_csd@multisync-out-syncs
+igt@v3d/v3d_submit_csd@multi-and-single-sync
+igt@v3d/v3d_submit_csd@job-perfmon
 igt@v3d/v3d_perfmon@create-perfmon-0
 igt@v3d/v3d_perfmon@create-perfmon-exceed
 igt@v3d/v3d_perfmon@create-perfmon-invalid-counters
-- 
2.39.0

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

* [igt-dev] [PATCH i-g-t 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs
  2023-01-13 12:44 [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Maíra Canal
  2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 1/3] lib/v3d: Add a helper to create a empty shader Maíra Canal
  2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL Maíra Canal
@ 2023-01-13 12:44 ` Maíra Canal
  2023-02-08 10:27   ` Melissa Wen
  2023-01-13 13:23 ` [igt-dev] ✗ Fi.CI.BUILD: failure for V3D Mixed Job Submission Tests Patchwork
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 10+ messages in thread
From: Maíra Canal @ 2023-01-13 12:44 UTC (permalink / raw)
  To: Melissa Wen, André Almeida, Petri Latvala, Kamil Konieczny,
	Boris Brezillon, Tomeu Vizoso, Emma Anholt, Iago Toral Quiroga,
	Rob Clark
  Cc: igt-dev

Add three igt_subtests that combine CL jobs and CSD jobs, to assure the
proper synchronization of different queues, especially the
independence between them. Moreover, it tests the relationship between
single syncobjs and multisync using mixed jobs as well.

Signed-off-by: Maíra Canal <mcanal@igalia.com>
---
 tests/v3d/meson.build          |   1 +
 tests/v3d/v3d_job_submission.c | 212 +++++++++++++++++++++++++++++++++
 tests/v3d_ci/v3d.testlist      |   3 +
 3 files changed, 216 insertions(+)
 create mode 100644 tests/v3d/v3d_job_submission.c

diff --git a/tests/v3d/meson.build b/tests/v3d/meson.build
index d070fdb5..03b4de61 100644
--- a/tests/v3d/meson.build
+++ b/tests/v3d/meson.build
@@ -2,6 +2,7 @@ v3d_progs = [
 	'v3d_create_bo',
 	'v3d_get_bo_offset',
 	'v3d_get_param',
+	'v3d_job_submission',
 	'v3d_mmap',
 	'v3d_submit_cl',
 	'v3d_submit_csd',
diff --git a/tests/v3d/v3d_job_submission.c b/tests/v3d/v3d_job_submission.c
new file mode 100644
index 00000000..3050284c
--- /dev/null
+++ b/tests/v3d/v3d_job_submission.c
@@ -0,0 +1,212 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2022 Igalia S.L.
+ */
+
+#include "igt.h"
+#include "igt_v3d.h"
+#include "igt_syncobj.h"
+
+static int fd;
+
+#define NUM_CL_JOBS  1000
+#define NUM_CSD_JOBS 250
+
+static int syncobj_wait_array(uint32_t *handles, uint32_t count)
+{
+	int i, ret = 0;
+
+	for (i = 0; i < count; i++) {
+		ret = syncobj_wait_err(fd, &handles[i], 1, INT64_MAX, 0);
+		if (ret)
+			return ret;
+	}
+
+	return ret;
+}
+
+static void *create_cl_jobs(void *args)
+{
+	struct v3d_cl_job **jobs = args;
+	int i;
+
+	for (i = 0; i < NUM_CL_JOBS; i++) {
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, jobs[i]->submit);
+		igt_assert(syncobj_wait(fd, &jobs[i]->submit->out_sync, 1,
+					INT64_MAX, 0, NULL));
+	}
+
+	return NULL;
+}
+
+static void *create_csd_jobs(void *args)
+{
+	struct v3d_csd_job **jobs = args;
+	int i;
+
+	for (i = 0; i < NUM_CSD_JOBS; i++) {
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, jobs[i]->submit);
+		igt_assert(syncobj_wait(fd, &jobs[i]->submit->out_sync, 1,
+					INT64_MAX, 0, NULL));
+	}
+
+	return NULL;
+}
+
+igt_main
+{
+	igt_fixture {
+		fd = drm_open_driver(DRIVER_V3D);
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_CSD));
+		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT));
+	}
+
+	igt_describe("Test if the out-sync of an array of mixed jobs is behaving correctly.");
+	igt_subtest("array-job-submission") {
+		uint32_t handles[4];
+		struct v3d_cl_job *cl_jobs[2];
+		struct v3d_csd_job *csd_jobs[2];
+		int i;
+
+		for (i = 0; i < ARRAY_SIZE(handles); i++)
+			handles[i] = syncobj_create(fd, 0);
+
+		for (i = 0; i < 2; i++) {
+			cl_jobs[i] = igt_v3d_noop_job(fd);
+			csd_jobs[i] = igt_v3d_empty_shader(fd);
+		}
+
+		cl_jobs[0]->submit->out_sync =  handles[0];
+		csd_jobs[0]->submit->out_sync =  handles[1];
+		cl_jobs[1]->submit->out_sync =  handles[2];
+		csd_jobs[1]->submit->out_sync =  handles[3];
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, cl_jobs[0]->submit);
+		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[0]->submit);
+		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, cl_jobs[1]->submit);
+		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[1]->submit);
+		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), 0);
+
+		for (i = 0; i < 2; i++) {
+			igt_v3d_free_cl_job(fd, cl_jobs[i]);
+			igt_v3d_free_csd_job(fd, csd_jobs[i]);
+		}
+	}
+
+	igt_describe("Test if multiple singlesyncs have the same behaviour as one multisync.");
+	igt_subtest("multiple-singlesync-to-multisync") {
+		struct drm_v3d_multi_sync ms = { 0 };
+		uint32_t handles[4];
+		struct v3d_cl_job *cl_jobs[2];
+		struct v3d_csd_job *csd_jobs[2];
+		struct drm_v3d_sem *in_syncs, *out_syncs;
+		int i;
+
+		for (i = 0; i < ARRAY_SIZE(handles); i++)
+			handles[i] = syncobj_create(fd, 0);
+
+		for (i = 0; i < 2; i++) {
+			cl_jobs[i] = igt_v3d_noop_job(fd);
+			csd_jobs[i] = igt_v3d_empty_shader(fd);
+		}
+
+		cl_jobs[0]->submit->out_sync =  handles[0];
+		csd_jobs[0]->submit->out_sync =  handles[1];
+		cl_jobs[1]->submit->out_sync =  handles[2];
+
+		igt_v3d_set_multisync(&ms, V3D_CSD);
+		ms.in_sync_count = 3;
+		ms.out_sync_count = 1;
+
+		in_syncs = malloc(ms.in_sync_count * sizeof(*in_syncs));
+		out_syncs = malloc(ms.out_sync_count * sizeof(*in_syncs));
+
+		for (i = 0; i < ms.in_sync_count; i++)
+			in_syncs[i].handle = handles[i];
+
+		out_syncs[0].handle = handles[3];
+
+		ms.in_syncs = to_user_pointer(in_syncs);
+		ms.out_syncs = to_user_pointer(out_syncs);
+
+		csd_jobs[1]->submit->flags = DRM_V3D_SUBMIT_EXTENSION;
+		csd_jobs[1]->submit->extensions = to_user_pointer(&ms);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, cl_jobs[0]->submit);
+
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[1]->submit, EINVAL);
+		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[0]->submit);
+
+		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[1]->submit, EINVAL);
+		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, cl_jobs[1]->submit);
+		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
+
+		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[1]->submit);
+		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), 0);
+
+		for (i = 0; i < 2; i++) {
+			igt_v3d_free_cl_job(fd, cl_jobs[i]);
+			igt_v3d_free_csd_job(fd, csd_jobs[i]);
+		}
+	}
+
+	igt_describe("Test if all queues are progressing independently.");
+	igt_subtest("threaded-job-submission") {
+		struct v3d_cl_job **cl_jobs = NULL;
+		struct v3d_csd_job **csd_jobs = NULL;
+		pthread_t *threads[2];
+		int i, ret;
+
+		cl_jobs = malloc(NUM_CL_JOBS * sizeof(*cl_jobs));
+		csd_jobs = malloc(NUM_CSD_JOBS * sizeof(*csd_jobs));
+
+		for (i = 0; i < NUM_CL_JOBS; i++) {
+			cl_jobs[i] = igt_v3d_noop_job(fd);
+			cl_jobs[i]->submit->out_sync = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
+		}
+
+		for (i = 0; i < NUM_CSD_JOBS; i++) {
+			csd_jobs[i] = igt_v3d_empty_shader(fd);
+			csd_jobs[i]->submit->out_sync = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
+		}
+
+		for (i = 0; i < ARRAY_SIZE(threads); i++) {
+			threads[i] = malloc(sizeof(*threads[i]));
+			igt_assert(threads[i] != NULL);
+		}
+
+		ret = pthread_create(threads[0], NULL, &create_cl_jobs, cl_jobs);
+		igt_assert_eq(ret, 0);
+
+		ret = pthread_create(threads[1], NULL, &create_csd_jobs, csd_jobs);
+		igt_assert_eq(ret, 0);
+
+		for (i = 0; i < ARRAY_SIZE(threads); i++)
+			pthread_join(*threads[i], NULL);
+
+		for (i = 0; i < NUM_CL_JOBS; i++)
+			igt_v3d_free_cl_job(fd, cl_jobs[i]);
+
+		for (i = 0; i < NUM_CSD_JOBS; i++)
+			igt_v3d_free_csd_job(fd, csd_jobs[i]);
+
+		for (i = 0; i < ARRAY_SIZE(threads); i++)
+			free(threads[i]);
+
+		free(cl_jobs);
+		free(csd_jobs);
+	}
+
+	igt_fixture
+		close(fd);
+}
diff --git a/tests/v3d_ci/v3d.testlist b/tests/v3d_ci/v3d.testlist
index 5452fd99..106e9cf2 100644
--- a/tests/v3d_ci/v3d.testlist
+++ b/tests/v3d_ci/v3d.testlist
@@ -7,6 +7,9 @@ igt@v3d/v3d_get_bo_offset@get-bad-handle
 igt@v3d/v3d_get_param@base-params
 igt@v3d/v3d_get_param@get-bad-param
 igt@v3d/v3d_get_param@get-bad-flags
+igt@v3d/v3d_job_submission@array-job-submission
+igt@v3d/v3d_job_submission@multiple-singlesync-to-multisync
+igt@v3d/v3d_job_submission@threaded-job-submission
 igt@v3d/v3d_mmap@mmap-bad-flags
 igt@v3d/v3d_mmap@mmap-bad-handle
 igt@v3d/v3d_mmap@mmap-bo
-- 
2.39.0

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

* [igt-dev] ✗ Fi.CI.BUILD: failure for V3D Mixed Job Submission Tests
  2023-01-13 12:44 [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Maíra Canal
                   ` (2 preceding siblings ...)
  2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs Maíra Canal
@ 2023-01-13 13:23 ` Patchwork
  2023-02-07 14:17 ` [igt-dev] ✓ Fi.CI.BAT: success for V3D Mixed Job Submission Tests (rev2) Patchwork
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2023-01-13 13:23 UTC (permalink / raw)
  To: Maíra Canal; +Cc: igt-dev

== Series Details ==

Series: V3D Mixed Job Submission Tests
URL   : https://patchwork.freedesktop.org/series/112805/
State : failure

== Summary ==

Applying: lib/v3d: Add a helper to create a empty shader
Using index info to reconstruct a base tree...
M	lib/igt_v3d.c
M	lib/igt_v3d.h
Falling back to patching base and 3-way merge...
Auto-merging lib/igt_v3d.h
CONFLICT (content): Merge conflict in lib/igt_v3d.h
Auto-merging lib/igt_v3d.c
CONFLICT (content): Merge conflict in lib/igt_v3d.c
Patch failed at 0001 lib/v3d: Add a helper to create a empty shader
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".


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

* [igt-dev] ✓ Fi.CI.BAT: success for V3D Mixed Job Submission Tests (rev2)
  2023-01-13 12:44 [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Maíra Canal
                   ` (3 preceding siblings ...)
  2023-01-13 13:23 ` [igt-dev] ✗ Fi.CI.BUILD: failure for V3D Mixed Job Submission Tests Patchwork
@ 2023-02-07 14:17 ` Patchwork
  2023-02-07 16:11 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  2023-02-08 10:31 ` [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Melissa Wen
  6 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2023-02-07 14:17 UTC (permalink / raw)
  To: Maíra Canal; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 6564 bytes --]

== Series Details ==

Series: V3D Mixed Job Submission Tests (rev2)
URL   : https://patchwork.freedesktop.org/series/112805/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_12708 -> IGTPW_8457
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (36 -> 37)
------------------------------

  Additional (3): fi-kbl-x1275 bat-atsm-1 bat-adls-5 
  Missing    (2): fi-kbl-soraka fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_huc_copy@huc-copy:
    - fi-kbl-x1275:       NOTRUN -> [SKIP][1] ([fdo#109271] / [i915#2190])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/fi-kbl-x1275/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@verify-random:
    - fi-kbl-x1275:       NOTRUN -> [SKIP][2] ([fdo#109271] / [i915#4613]) +3 similar issues
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/fi-kbl-x1275/igt@gem_lmem_swapping@verify-random.html

  * igt@i915_selftest@live@gt_heartbeat:
    - fi-apl-guc:         [PASS][3] -> [DMESG-FAIL][4] ([i915#5334])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions-varying-size:
    - fi-bsw-n3050:       [PASS][5] -> [FAIL][6] ([i915#6298])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/fi-bsw-n3050/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions-varying-size.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/fi-bsw-n3050/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions-varying-size.html

  * igt@kms_pipe_crc_basic@read-crc:
    - fi-kbl-x1275:       NOTRUN -> [SKIP][7] ([fdo#109271]) +40 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/fi-kbl-x1275/igt@kms_pipe_crc_basic@read-crc.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@workarounds:
    - {bat-dg2-11}:       [DMESG-WARN][8] -> [PASS][9]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/bat-dg2-11/igt@i915_selftest@live@workarounds.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/bat-dg2-11/igt@i915_selftest@live@workarounds.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions:
    - fi-bsw-n3050:       [FAIL][10] ([i915#6298]) -> [PASS][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/fi-bsw-n3050/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/fi-bsw-n3050/igt@kms_cursor_legacy@basic-busy-flip-before-cursor@atomic-transitions.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
  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
  [i915#5251]: https://gitlab.freedesktop.org/drm/intel/issues/5251
  [i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334
  [i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591
  [i915#6298]: https://gitlab.freedesktop.org/drm/intel/issues/6298
  [i915#6311]: https://gitlab.freedesktop.org/drm/intel/issues/6311
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#7359]: https://gitlab.freedesktop.org/drm/intel/issues/7359
  [i915#7456]: https://gitlab.freedesktop.org/drm/intel/issues/7456
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#7981]: https://gitlab.freedesktop.org/drm/intel/issues/7981
  [i915#7996]: https://gitlab.freedesktop.org/drm/intel/issues/7996
  [i915#8060]: https://gitlab.freedesktop.org/drm/intel/issues/8060
  [i915#8062]: https://gitlab.freedesktop.org/drm/intel/issues/8062


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7153 -> IGTPW_8457

  CI-20190529: 20190529
  CI_DRM_12708: e9426d9d1eeb72f84725043dd2a9e073d9a6f1d7 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8457: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/index.html
  IGT_7153: f47f859f13376958a2bd199423b1f0ff53dddbe0 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git


Testlist changes
----------------

+igt@v3d/v3d_job_submission@array-job-submission
+igt@v3d/v3d_job_submission@multiple-singlesync-to-multisync
+igt@v3d/v3d_job_submission@threaded-job-submission
+igt@v3d/v3d_submit_csd@bad-bo
+igt@v3d/v3d_submit_csd@bad-extension
+igt@v3d/v3d_submit_csd@bad-flag
+igt@v3d/v3d_submit_csd@bad-in-sync
+igt@v3d/v3d_submit_csd@bad-multisync-extension
+igt@v3d/v3d_submit_csd@bad-multisync-in-sync
+igt@v3d/v3d_submit_csd@bad-multisync-out-sync
+igt@v3d/v3d_submit_csd@bad-multisync-pad
+igt@v3d/v3d_submit_csd@bad-pad
+igt@v3d/v3d_submit_csd@bad-perfmon
+igt@v3d/v3d_submit_csd@job-perfmon
+igt@v3d/v3d_submit_csd@multiple-job-submission
+igt@v3d/v3d_submit_csd@multisync-out-syncs
+igt@v3d/v3d_submit_csd@multi-and-single-sync
+igt@v3d/v3d_submit_csd@single-in-sync
+igt@v3d/v3d_submit_csd@single-out-sync
+igt@v3d/v3d_submit_csd@valid-multisync-submission
+igt@v3d/v3d_submit_csd@valid-submission

== Logs ==

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

[-- Attachment #2: Type: text/html, Size: 6030 bytes --]

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

* [igt-dev] ✓ Fi.CI.IGT: success for V3D Mixed Job Submission Tests (rev2)
  2023-01-13 12:44 [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Maíra Canal
                   ` (4 preceding siblings ...)
  2023-02-07 14:17 ` [igt-dev] ✓ Fi.CI.BAT: success for V3D Mixed Job Submission Tests (rev2) Patchwork
@ 2023-02-07 16:11 ` Patchwork
  2023-02-08 10:31 ` [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Melissa Wen
  6 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2023-02-07 16:11 UTC (permalink / raw)
  To: Maíra Canal; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 24443 bytes --]

== Series Details ==

Series: V3D Mixed Job Submission Tests (rev2)
URL   : https://patchwork.freedesktop.org/series/112805/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_12708_full -> IGTPW_8457_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (10 -> 11)
------------------------------

  Additional (1): shard-rkl0 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_8457_full:

### IGT changes ###

#### Possible regressions ####

  * {igt@v3d/v3d_submit_csd@bad-perfmon} (NEW):
    - {shard-dg1}:        NOTRUN -> [SKIP][1] +11 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-dg1-17/igt@v3d/v3d_submit_csd@bad-perfmon.html

  
#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * igt@i915_module_load@reload-with-fault-injection:
    - {shard-tglu}:       [PASS][2] -> [DMESG-WARN][3]
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-tglu-3/igt@i915_module_load@reload-with-fault-injection.html
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-tglu-5/igt@i915_module_load@reload-with-fault-injection.html

  
New tests
---------

  New tests have been introduced between CI_DRM_12708_full and IGTPW_8457_full:

### New IGT tests (21) ###

  * igt@v3d/v3d_job_submission@array-job-submission:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_job_submission@multiple-singlesync-to-multisync:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_job_submission@threaded-job-submission:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-bo:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-extension:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-flag:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-in-sync:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-multisync-extension:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-multisync-in-sync:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-multisync-out-sync:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-multisync-pad:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-pad:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-perfmon:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@job-perfmon:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@multi-and-single-sync:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@multiple-job-submission:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@multisync-out-syncs:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@single-in-sync:
    - Statuses : 2 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@single-out-sync:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@valid-multisync-submission:
    - Statuses : 3 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@valid-submission:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_fair@basic-none-rrul@rcs0:
    - shard-glk:          NOTRUN -> [FAIL][4] ([i915#2842])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-glk8/igt@gem_exec_fair@basic-none-rrul@rcs0.html

  * igt@gem_exec_fair@basic-none-share@rcs0:
    - shard-glk:          [PASS][5] -> [FAIL][6] ([i915#2842])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-glk3/igt@gem_exec_fair@basic-none-share@rcs0.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-glk2/igt@gem_exec_fair@basic-none-share@rcs0.html

  * igt@gem_lmem_swapping@massive:
    - shard-glk:          NOTRUN -> [SKIP][7] ([fdo#109271] / [i915#4613])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-glk7/igt@gem_lmem_swapping@massive.html

  * igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a:
    - shard-glk:          NOTRUN -> [SKIP][8] ([fdo#109271] / [i915#1937])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-glk9/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html

  * {igt@v3d/v3d_submit_csd@bad-bo} (NEW):
    - {shard-tglu-10}:    NOTRUN -> [SKIP][9] ([fdo#109315] / [i915#2575]) +2 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-tglu-10/igt@v3d/v3d_submit_csd@bad-bo.html

  * {igt@v3d/v3d_submit_csd@bad-extension} (NEW):
    - {shard-tglu}:       NOTRUN -> [SKIP][10] ([fdo#109315] / [i915#2575]) +8 similar issues
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-tglu-1/igt@v3d/v3d_submit_csd@bad-extension.html

  * {igt@v3d/v3d_submit_csd@bad-multisync-pad} (NEW):
    - {shard-tglu-9}:     NOTRUN -> [SKIP][11] ([fdo#109315] / [i915#2575]) +2 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-tglu-9/igt@v3d/v3d_submit_csd@bad-multisync-pad.html

  * {igt@v3d/v3d_submit_csd@bad-pad} (NEW):
    - shard-glk:          NOTRUN -> [SKIP][12] ([fdo#109271]) +34 similar issues
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-glk1/igt@v3d/v3d_submit_csd@bad-pad.html

  * {igt@v3d/v3d_submit_csd@valid-multisync-submission} (NEW):
    - {shard-rkl}:        NOTRUN -> [SKIP][13] ([fdo#109315]) +19 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-4/igt@v3d/v3d_submit_csd@valid-multisync-submission.html

  
#### Possible fixes ####

  * igt@fbdev@eof:
    - {shard-rkl}:        [SKIP][14] ([i915#2582]) -> [PASS][15] +1 similar issue
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-1/igt@fbdev@eof.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-6/igt@fbdev@eof.html

  * igt@gem_ctx_persistence@engines-hang@bcs0:
    - {shard-rkl}:        [SKIP][16] ([i915#6252]) -> [PASS][17] +1 similar issue
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-5/igt@gem_ctx_persistence@engines-hang@bcs0.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-3/igt@gem_ctx_persistence@engines-hang@bcs0.html

  * igt@gem_eio@unwedge-stress:
    - {shard-dg1}:        [FAIL][18] ([i915#5784]) -> [PASS][19]
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-dg1-12/igt@gem_eio@unwedge-stress.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-dg1-15/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_endless@dispatch@bcs0:
    - {shard-rkl}:        [SKIP][20] ([i915#6247]) -> [PASS][21]
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-5/igt@gem_exec_endless@dispatch@bcs0.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-4/igt@gem_exec_endless@dispatch@bcs0.html

  * igt@i915_pm_rpm@pm-tiling:
    - {shard-rkl}:        [SKIP][22] ([fdo#109308]) -> [PASS][23]
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-4/igt@i915_pm_rpm@pm-tiling.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-6/igt@i915_pm_rpm@pm-tiling.html

  * igt@i915_selftest@live@hangcheck:
    - {shard-rkl}:        [INCOMPLETE][24] -> [PASS][25]
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-3/igt@i915_selftest@live@hangcheck.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-4/igt@i915_selftest@live@hangcheck.html

  * igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_rc_ccs:
    - {shard-rkl}:        [SKIP][26] ([i915#1845] / [i915#4098]) -> [PASS][27] +18 similar issues
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-1/igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_rc_ccs.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-6/igt@kms_ccs@pipe-b-random-ccs-data-y_tiled_gen12_rc_ccs.html

  * igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions-varying-size:
    - shard-glk:          [FAIL][28] ([i915#2346]) -> [PASS][29]
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-glk7/igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions-varying-size.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-glk1/igt@kms_cursor_legacy@flip-vs-cursor@atomic-transitions-varying-size.html

  * igt@kms_fbcon_fbt@fbc:
    - {shard-rkl}:        [SKIP][30] ([i915#1849] / [i915#4098]) -> [PASS][31] +7 similar issues
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-5/igt@kms_fbcon_fbt@fbc.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-6/igt@kms_fbcon_fbt@fbc.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@ab-hdmi-a1-hdmi-a2:
    - shard-glk:          [FAIL][32] ([i915#79]) -> [PASS][33]
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-glk6/igt@kms_flip@2x-flip-vs-expired-vblank@ab-hdmi-a1-hdmi-a2.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-glk8/igt@kms_flip@2x-flip-vs-expired-vblank@ab-hdmi-a1-hdmi-a2.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - {shard-tglu}:       [SKIP][34] ([i915#1849]) -> [PASS][35] +1 similar issue
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-tglu-6/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-tglu-2/igt@kms_frontbuffer_tracking@fbc-suspend.html

  * igt@kms_plane@plane-position-covered@pipe-a-planes:
    - {shard-tglu}:       [SKIP][36] ([i915#1849] / [i915#3558]) -> [PASS][37] +1 similar issue
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-tglu-6/igt@kms_plane@plane-position-covered@pipe-a-planes.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-tglu-2/igt@kms_plane@plane-position-covered@pipe-a-planes.html

  * igt@kms_psr@cursor_plane_onoff:
    - {shard-rkl}:        [SKIP][38] ([i915#1072]) -> [PASS][39]
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-3/igt@kms_psr@cursor_plane_onoff.html
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-6/igt@kms_psr@cursor_plane_onoff.html

  * igt@kms_universal_plane@universal-plane-pageflip-windowed-pipe-a:
    - {shard-tglu}:       [SKIP][40] ([fdo#109274]) -> [PASS][41]
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-tglu-6/igt@kms_universal_plane@universal-plane-pageflip-windowed-pipe-a.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-tglu-2/igt@kms_universal_plane@universal-plane-pageflip-windowed-pipe-a.html

  * igt@kms_vblank@pipe-a-query-busy-hang:
    - {shard-tglu}:       [SKIP][42] ([i915#7651]) -> [PASS][43] +4 similar issues
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-tglu-6/igt@kms_vblank@pipe-a-query-busy-hang.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-tglu-1/igt@kms_vblank@pipe-a-query-busy-hang.html

  * igt@kms_vblank@pipe-b-query-busy:
    - {shard-tglu}:       [SKIP][44] ([i915#1845] / [i915#7651]) -> [PASS][45]
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-tglu-6/igt@kms_vblank@pipe-b-query-busy.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-tglu-1/igt@kms_vblank@pipe-b-query-busy.html

  * igt@perf_pmu@idle@rcs0:
    - {shard-rkl}:        [FAIL][46] ([i915#4349]) -> [PASS][47]
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-6/igt@perf_pmu@idle@rcs0.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-3/igt@perf_pmu@idle@rcs0.html

  * igt@sysfs_timeslice_duration@timeout@rcs0:
    - {shard-dg1}:        [FAIL][48] ([i915#1755]) -> [PASS][49] +3 similar issues
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-dg1-18/igt@sysfs_timeslice_duration@timeout@rcs0.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-dg1-16/igt@sysfs_timeslice_duration@timeout@rcs0.html

  * igt@testdisplay:
    - {shard-rkl}:        [SKIP][50] ([i915#4098]) -> [PASS][51] +1 similar issue
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12708/shard-rkl-2/igt@testdisplay.html
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/shard-rkl-6/igt@testdisplay.html

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

  [fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279
  [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [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#109302]: https://bugs.freedesktop.org/show_bug.cgi?id=109302
  [fdo#109307]: https://bugs.freedesktop.org/show_bug.cgi?id=109307
  [fdo#109308]: https://bugs.freedesktop.org/show_bug.cgi?id=109308
  [fdo#109312]: https://bugs.freedesktop.org/show_bug.cgi?id=109312
  [fdo#109314]: https://bugs.freedesktop.org/show_bug.cgi?id=109314
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506
  [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
  [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111644]: https://bugs.freedesktop.org/show_bug.cgi?id=111644
  [fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [fdo#112054]: https://bugs.freedesktop.org/show_bug.cgi?id=112054
  [fdo#112283]: https://bugs.freedesktop.org/show_bug.cgi?id=112283
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1257]: https://gitlab.freedesktop.org/drm/intel/issues/1257
  [i915#132]: https://gitlab.freedesktop.org/drm/intel/issues/132
  [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
  [i915#1755]: https://gitlab.freedesktop.org/drm/intel/issues/1755
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
  [i915#1902]: https://gitlab.freedesktop.org/drm/intel/issues/1902
  [i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2435]: https://gitlab.freedesktop.org/drm/intel/issues/2435
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
  [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
  [i915#2658]: https://gitlab.freedesktop.org/drm/intel/issues/2658
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
  [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
  [i915#2920]: https://gitlab.freedesktop.org/drm/intel/issues/2920
  [i915#3116]: https://gitlab.freedesktop.org/drm/intel/issues/3116
  [i915#315]: https://gitlab.freedesktop.org/drm/intel/issues/315
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
  [i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301
  [i915#3318]: https://gitlab.freedesktop.org/drm/intel/issues/3318
  [i915#3323]: https://gitlab.freedesktop.org/drm/intel/issues/3323
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469
  [i915#3528]: https://gitlab.freedesktop.org/drm/intel/issues/3528
  [i915#3536]: https://gitlab.freedesktop.org/drm/intel/issues/3536
  [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
  [i915#3547]: https://gitlab.freedesktop.org/drm/intel/issues/3547
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3558]: https://gitlab.freedesktop.org/drm/intel/issues/3558
  [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
  [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3936]: https://gitlab.freedesktop.org/drm/intel/issues/3936
  [i915#3952]: https://gitlab.freedesktop.org/drm/intel/issues/3952
  [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
  [i915#3966]: https://gitlab.freedesktop.org/drm/intel/issues/3966
  [i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4387]: https://gitlab.freedesktop.org/drm/intel/issues/4387
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4767]: https://gitlab.freedesktop.org/drm/intel/issues/4767
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4854]: https://gitlab.freedesktop.org/drm/intel/issues/4854
  [i915#4859]: https://gitlab.freedesktop.org/drm/intel/issues/4859
  [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
  [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
  [i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
  [i915#5115]: https://gitlab.freedesktop.org/drm/intel/issues/5115
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5288]: https://gitlab.freedesktop.org/drm/intel/issues/5288
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461
  [i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
  [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6117]: https://gitlab.freedesktop.org/drm/intel/issues/6117
  [i915#6230]: https://gitlab.freedesktop.org/drm/intel/issues/6230
  [i915#6245]: https://gitlab.freedesktop.org/drm/intel/issues/6245
  [i915#6247]: https://gitlab.freedesktop.org/drm/intel/issues/6247
  [i915#6252]: https://gitlab.freedesktop.org/drm/intel/issues/6252
  [i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
  [i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
  [i915#6335]: https://gitlab.freedesktop.org/drm/intel/issues/6335
  [i915#6355]: https://gitlab.freedesktop.org/drm/intel/issues/6355
  [i915#6433]: https://gitlab.freedesktop.org/drm/intel/issues/6433
  [i915#6497]: https://gitlab.freedesktop.org/drm/intel/issues/6497
  [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
  [i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
  [i915#6946]: https://gitlab.freedesktop.org/drm/intel/issues/6946
  [i915#6953]: https://gitlab.freedesktop.org/drm/intel/issues/6953
  [i915#7037]: https://gitlab.freedesktop.org/drm/intel/issues/7037
  [i915#7052]: https://gitlab.freedesktop.org/drm/intel/issues/7052
  [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7128]: https://gitlab.freedesktop.org/drm/intel/issues/7128
  [i915#7178]: https://gitlab.freedesktop.org/drm/intel/issues/7178
  [i915#7294]: https://gitlab.freedesktop.org/drm/intel/issues/7294
  [i915#7456]: https://gitlab.freedesktop.org/drm/intel/issues/7456
  [i915#7561]: https://gitlab.freedesktop.org/drm/intel/issues/7561
  [i915#7651]: https://gitlab.freedesktop.org/drm/intel/issues/7651
  [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
  [i915#7957]: https://gitlab.freedesktop.org/drm/intel/issues/7957
  [i915#8018]: https://gitlab.freedesktop.org/drm/intel/issues/8018


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7153 -> IGTPW_8457

  CI-20190529: 20190529
  CI_DRM_12708: e9426d9d1eeb72f84725043dd2a9e073d9a6f1d7 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8457: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8457/index.html
  IGT_7153: f47f859f13376958a2bd199423b1f0ff53dddbe0 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

[-- Attachment #2: Type: text/html, Size: 17926 bytes --]

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

* Re: [igt-dev] [PATCH i-g-t 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs
  2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs Maíra Canal
@ 2023-02-08 10:27   ` Melissa Wen
  0 siblings, 0 replies; 10+ messages in thread
From: Melissa Wen @ 2023-02-08 10:27 UTC (permalink / raw)
  To: Maíra Canal
  Cc: Rob Clark, igt-dev, Petri Latvala, Tomeu Vizoso,
	Iago Toral Quiroga

[-- Attachment #1: Type: text/plain, Size: 8707 bytes --]

On 01/13, Maíra Canal wrote:
> Add three igt_subtests that combine CL jobs and CSD jobs, to assure the
> proper synchronization of different queues, especially the
> independence between them. Moreover, it tests the relationship between
> single syncobjs and multisync using mixed jobs as well.
> 
> Signed-off-by: Maíra Canal <mcanal@igalia.com>
> ---
>  tests/v3d/meson.build          |   1 +
>  tests/v3d/v3d_job_submission.c | 212 +++++++++++++++++++++++++++++++++
>  tests/v3d_ci/v3d.testlist      |   3 +
>  3 files changed, 216 insertions(+)
>  create mode 100644 tests/v3d/v3d_job_submission.c
> 
> diff --git a/tests/v3d/meson.build b/tests/v3d/meson.build
> index d070fdb5..03b4de61 100644
> --- a/tests/v3d/meson.build
> +++ b/tests/v3d/meson.build
> @@ -2,6 +2,7 @@ v3d_progs = [
>  	'v3d_create_bo',
>  	'v3d_get_bo_offset',
>  	'v3d_get_param',
> +	'v3d_job_submission',
>  	'v3d_mmap',
>  	'v3d_submit_cl',
>  	'v3d_submit_csd',
> diff --git a/tests/v3d/v3d_job_submission.c b/tests/v3d/v3d_job_submission.c
> new file mode 100644
> index 00000000..3050284c
> --- /dev/null
> +++ b/tests/v3d/v3d_job_submission.c
> @@ -0,0 +1,212 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2022 Igalia S.L.
> + */
> +
> +#include "igt.h"
> +#include "igt_v3d.h"
> +#include "igt_syncobj.h"
> +
> +static int fd;
> +
> +#define NUM_CL_JOBS  1000
> +#define NUM_CSD_JOBS 250
> +
> +static int syncobj_wait_array(uint32_t *handles, uint32_t count)
> +{
> +	int i, ret = 0;
> +
> +	for (i = 0; i < count; i++) {
> +		ret = syncobj_wait_err(fd, &handles[i], 1, INT64_MAX, 0);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	return ret;
> +}
> +
> +static void *create_cl_jobs(void *args)
> +{
> +	struct v3d_cl_job **jobs = args;
> +	int i;
> +
> +	for (i = 0; i < NUM_CL_JOBS; i++) {
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, jobs[i]->submit);
> +		igt_assert(syncobj_wait(fd, &jobs[i]->submit->out_sync, 1,
> +					INT64_MAX, 0, NULL));
> +	}
> +
> +	return NULL;
> +}
> +
> +static void *create_csd_jobs(void *args)
> +{
> +	struct v3d_csd_job **jobs = args;
> +	int i;
> +
> +	for (i = 0; i < NUM_CSD_JOBS; i++) {
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, jobs[i]->submit);
> +		igt_assert(syncobj_wait(fd, &jobs[i]->submit->out_sync, 1,
> +					INT64_MAX, 0, NULL));
> +	}
> +
> +	return NULL;
> +}
> +
> +igt_main
> +{
> +	igt_fixture {
> +		fd = drm_open_driver(DRIVER_V3D);
> +		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_CSD));
> +		igt_require(igt_v3d_get_param(fd, DRM_V3D_PARAM_SUPPORTS_MULTISYNC_EXT));
> +	}
> +
> +	igt_describe("Test if the out-sync of an array of mixed jobs is behaving correctly.");
> +	igt_subtest("array-job-submission") {
> +		uint32_t handles[4];
> +		struct v3d_cl_job *cl_jobs[2];
> +		struct v3d_csd_job *csd_jobs[2];
> +		int i;
> +
> +		for (i = 0; i < ARRAY_SIZE(handles); i++)
> +			handles[i] = syncobj_create(fd, 0);
> +
> +		for (i = 0; i < 2; i++) {
> +			cl_jobs[i] = igt_v3d_noop_job(fd);
> +			csd_jobs[i] = igt_v3d_empty_shader(fd);
> +		}
> +
> +		cl_jobs[0]->submit->out_sync =  handles[0];
> +		csd_jobs[0]->submit->out_sync =  handles[1];
> +		cl_jobs[1]->submit->out_sync =  handles[2];
> +		csd_jobs[1]->submit->out_sync =  handles[3];
> +
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, cl_jobs[0]->submit);
> +		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
> +
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[0]->submit);
> +		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
> +
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, cl_jobs[1]->submit);
> +		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
> +
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[1]->submit);
> +		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), 0);
> +
> +		for (i = 0; i < 2; i++) {
> +			igt_v3d_free_cl_job(fd, cl_jobs[i]);
> +			igt_v3d_free_csd_job(fd, csd_jobs[i]);
> +		}
> +	}
> +
> +	igt_describe("Test if multiple singlesyncs have the same behaviour as one multisync.");
> +	igt_subtest("multiple-singlesync-to-multisync") {
> +		struct drm_v3d_multi_sync ms = { 0 };
> +		uint32_t handles[4];
> +		struct v3d_cl_job *cl_jobs[2];
> +		struct v3d_csd_job *csd_jobs[2];
> +		struct drm_v3d_sem *in_syncs, *out_syncs;
> +		int i;
> +
> +		for (i = 0; i < ARRAY_SIZE(handles); i++)
> +			handles[i] = syncobj_create(fd, 0);
> +
> +		for (i = 0; i < 2; i++) {
> +			cl_jobs[i] = igt_v3d_noop_job(fd);
> +			csd_jobs[i] = igt_v3d_empty_shader(fd);
> +		}
> +
> +		cl_jobs[0]->submit->out_sync =  handles[0];
> +		csd_jobs[0]->submit->out_sync =  handles[1];
> +		cl_jobs[1]->submit->out_sync =  handles[2];
> +
> +		igt_v3d_set_multisync(&ms, V3D_CSD);
> +		ms.in_sync_count = 3;
> +		ms.out_sync_count = 1;
> +
> +		in_syncs = malloc(ms.in_sync_count * sizeof(*in_syncs));
> +		out_syncs = malloc(ms.out_sync_count * sizeof(*in_syncs));
> +
> +		for (i = 0; i < ms.in_sync_count; i++)
> +			in_syncs[i].handle = handles[i];
> +
> +		out_syncs[0].handle = handles[3];
> +
> +		ms.in_syncs = to_user_pointer(in_syncs);
> +		ms.out_syncs = to_user_pointer(out_syncs);
> +
> +		csd_jobs[1]->submit->flags = DRM_V3D_SUBMIT_EXTENSION;
> +		csd_jobs[1]->submit->extensions = to_user_pointer(&ms);
> +
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, cl_jobs[0]->submit);
> +
> +		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[1]->submit, EINVAL);
> +		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
> +
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[0]->submit);
> +
> +		do_ioctl_err(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[1]->submit, EINVAL);
> +		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
> +
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CL, cl_jobs[1]->submit);
> +		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), -EINVAL);
> +
> +		do_ioctl(fd, DRM_IOCTL_V3D_SUBMIT_CSD, csd_jobs[1]->submit);
> +		igt_assert_eq(syncobj_wait_array(handles, ARRAY_SIZE(handles)), 0);
> +
> +		for (i = 0; i < 2; i++) {
> +			igt_v3d_free_cl_job(fd, cl_jobs[i]);
> +			igt_v3d_free_csd_job(fd, csd_jobs[i]);
> +		}
> +	}
> +
> +	igt_describe("Test if all queues are progressing independently.");
> +	igt_subtest("threaded-job-submission") {

As this test takes longer than usual, can you add a progress bar here?
https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/lib/igt_aux.c#L686

> +		struct v3d_cl_job **cl_jobs = NULL;
> +		struct v3d_csd_job **csd_jobs = NULL;
> +		pthread_t *threads[2];
> +		int i, ret;
> +
> +		cl_jobs = malloc(NUM_CL_JOBS * sizeof(*cl_jobs));
> +		csd_jobs = malloc(NUM_CSD_JOBS * sizeof(*csd_jobs));
> +
> +		for (i = 0; i < NUM_CL_JOBS; i++) {
> +			cl_jobs[i] = igt_v3d_noop_job(fd);
> +			cl_jobs[i]->submit->out_sync = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
> +		}
> +
> +		for (i = 0; i < NUM_CSD_JOBS; i++) {
> +			csd_jobs[i] = igt_v3d_empty_shader(fd);
> +			csd_jobs[i]->submit->out_sync = syncobj_create(fd, DRM_SYNCOBJ_CREATE_SIGNALED);
> +		}
> +
> +		for (i = 0; i < ARRAY_SIZE(threads); i++) {
> +			threads[i] = malloc(sizeof(*threads[i]));
> +			igt_assert(threads[i] != NULL);
> +		}
> +
> +		ret = pthread_create(threads[0], NULL, &create_cl_jobs, cl_jobs);
> +		igt_assert_eq(ret, 0);
> +
> +		ret = pthread_create(threads[1], NULL, &create_csd_jobs, csd_jobs);
> +		igt_assert_eq(ret, 0);
> +
> +		for (i = 0; i < ARRAY_SIZE(threads); i++)
> +			pthread_join(*threads[i], NULL);
> +
> +		for (i = 0; i < NUM_CL_JOBS; i++)
> +			igt_v3d_free_cl_job(fd, cl_jobs[i]);
> +
> +		for (i = 0; i < NUM_CSD_JOBS; i++)
> +			igt_v3d_free_csd_job(fd, csd_jobs[i]);
> +
> +		for (i = 0; i < ARRAY_SIZE(threads); i++)
> +			free(threads[i]);
> +
> +		free(cl_jobs);
> +		free(csd_jobs);
> +	}
> +
> +	igt_fixture
> +		close(fd);
> +}
> diff --git a/tests/v3d_ci/v3d.testlist b/tests/v3d_ci/v3d.testlist
> index 5452fd99..106e9cf2 100644
> --- a/tests/v3d_ci/v3d.testlist
> +++ b/tests/v3d_ci/v3d.testlist
> @@ -7,6 +7,9 @@ igt@v3d/v3d_get_bo_offset@get-bad-handle
>  igt@v3d/v3d_get_param@base-params
>  igt@v3d/v3d_get_param@get-bad-param
>  igt@v3d/v3d_get_param@get-bad-flags
> +igt@v3d/v3d_job_submission@array-job-submission
> +igt@v3d/v3d_job_submission@multiple-singlesync-to-multisync
> +igt@v3d/v3d_job_submission@threaded-job-submission
>  igt@v3d/v3d_mmap@mmap-bad-flags
>  igt@v3d/v3d_mmap@mmap-bad-handle
>  igt@v3d/v3d_mmap@mmap-bo
> -- 
> 2.39.0
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests
  2023-01-13 12:44 [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Maíra Canal
                   ` (5 preceding siblings ...)
  2023-02-07 16:11 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2023-02-08 10:31 ` Melissa Wen
  6 siblings, 0 replies; 10+ messages in thread
From: Melissa Wen @ 2023-02-08 10:31 UTC (permalink / raw)
  To: Maíra Canal
  Cc: Rob Clark, igt-dev, Petri Latvala, Tomeu Vizoso,
	Iago Toral Quiroga


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

On 01/13, Maíra Canal wrote:
> Currently, the V3D tests only support CL job submissions [1], while V3D has also
> capabilities for CSD and TFU jobs. Therefore, create tests for
> DRM_IOCTL_V3D_SUBMIT_CSD, an ioctl for dispatching compute shader jobs to the
> GPU. In order to create a simple CSD job, I hard-coded the pipeline assembly
> shader of an empty shader in order to reproduce a shader and be able to create
> an acceptable packet that can be sent to the GPU.
> 
> So, patch 1 introduces a helper function to submit a minimal CSD job to the GPU,
> which will be useful for the tests. The minimal job will use the pipeline
> assembly shader of an empty shader. Patches 2-3 will include new tests in the
> V3D test suite for DRM_IOCTL_V3D_SUBMIT_CSD and create tests that mix different
> types of jobs, in order to evaluate the synchronization between the two types of
> jobs. 
> 
> [1] This series depends on https://patchwork.freedesktop.org/series/112363/

Hi Maíra,

Thanks for the extensive testing.
I just commented about a minor improvement for threaded-submission test.
With this in the next version, you can add:

Reviewed-by: Melissa Wen <mwen@igalia.com>

Thanks,

Melissa
> 
> Best Regards,
> - Maíra Canal
> 
> Maíra Canal (3):
>   lib/v3d: Add a helper to create a empty shader
>   tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL
>   tests/v3d_job_submission: Create tests to mix CL and CSD jobs
> 
>  lib/igt_v3d.c                  |  60 ++++++
>  lib/igt_v3d.h                  |  20 ++
>  tests/v3d/meson.build          |   2 +
>  tests/v3d/v3d_job_submission.c | 212 ++++++++++++++++++++
>  tests/v3d/v3d_submit_csd.c     | 357 +++++++++++++++++++++++++++++++++
>  tests/v3d_ci/v3d.testlist      |  21 ++
>  6 files changed, 672 insertions(+)
>  create mode 100644 tests/v3d/v3d_job_submission.c
>  create mode 100644 tests/v3d/v3d_submit_csd.c
> 
> -- 
> 2.39.0
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [igt-dev] [PATCH i-g-t 1/3] lib/v3d: Add a helper to create a empty shader
  2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 1/3] lib/v3d: Add a helper to create a empty shader Maíra Canal
@ 2023-02-10 13:31   ` Kamil Konieczny
  0 siblings, 0 replies; 10+ messages in thread
From: Kamil Konieczny @ 2023-02-10 13:31 UTC (permalink / raw)
  To: igt-dev
  Cc: Rob Clark, Petri Latvala, Tomeu Vizoso, Iago Toral Quiroga,
	Emma Anholt

Hi Maíra,

your patchset is almost ready to merge. Few nits left, see below.

On 2023-01-13 at 09:44:51 -0300, Maíra Canal wrote:
> In order to submit a compute dispatch job, a BO must contain the
> assembly shader that corresponds to the job. Therefore, create a helper
> to encapsulate a simple compute dispatch job. This helper sets the
> configurations (cfg) needed for the job and has the assembled instructions
> necessary to process an empty shader, just like the following one:
> 
>     #version 310 es
>     layout (local_size_x = 1) in;
>     void main (void) {}
> 
> Signed-off-by: Maíra Canal <mcanal@igalia.com>
> ---
>  lib/igt_v3d.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_v3d.h | 20 +++++++++++++++++
>  2 files changed, 80 insertions(+)
> 
> diff --git a/lib/igt_v3d.c b/lib/igt_v3d.c
> index cc8f410d..dd5ebb6d 100644
> --- a/lib/igt_v3d.c
> +++ b/lib/igt_v3d.c
> @@ -341,3 +341,63 @@ void igt_v3d_free_cl_job(int fd, struct v3d_cl_job *job)
>  	free(job->submit);
>  	free(job);
>  }
> +

Please describe every public library function, for example
see at other library for
/**
 * @function_name
 * @parameters
 *
 * returns description
 */

> +struct v3d_csd_job *igt_v3d_empty_shader(int fd)
> +{
> +	struct v3d_csd_job *job;
> +	uint32_t *bos;
> +
> +	/* Reproduce an empty shader */
> +	const uint32_t assembly[] = { 0xbb800000, 0x3c203186,
> +				      0xbb800000, 0x3c003186,
> +				      0xbb800000, 0x3c003186 };
> +	const uint32_t group_count_x = 1, group_count_y = 1, group_count_z = 1;
> +	const uint32_t num_batches = 1, wgs_per_sg = 1, batches_per_sg = 1, wg_size = 1;
> +
> +	job = calloc(1, sizeof(*job));
> +
> +	job->shader_assembly = igt_v3d_create_bo(fd, PAGE_SIZE);
> +	job->cl = igt_v3d_create_bo(fd, PAGE_SIZE);
> +	job->submit = calloc(1, sizeof(*job->submit));
> +
> +	igt_v3d_bo_mmap(fd, job->shader_assembly);
> +	igt_v3d_bo_mmap(fd, job->cl);
> +
> +	memset(job->shader_assembly->map, 0, sizeof(*job->shader_assembly->map));
> +	memcpy(job->shader_assembly->map, assembly, sizeof(assembly));
> +	memset(job->cl->map, 0, sizeof(*job->cl->map));
> +
> +	job->submit->bo_handle_count = 2;
> +	bos = malloc(sizeof(*bos) * job->submit->bo_handle_count);
> +	bos[0] = job->shader_assembly->handle;
> +	bos[1] = job->cl->handle;
> +
> +	job->submit->bo_handles = to_user_pointer(bos);
> +
> +	job->submit->cfg[0] |= group_count_x << V3D_CSD_CFG012_WG_COUNT_SHIFT;
> +	job->submit->cfg[1] |= group_count_y << V3D_CSD_CFG012_WG_COUNT_SHIFT;
> +	job->submit->cfg[2] |= group_count_z << V3D_CSD_CFG012_WG_COUNT_SHIFT;
> +
> +	job->submit->cfg[3] |= (wgs_per_sg & 0xf) << V3D_CSD_CFG3_WGS_PER_SG_SHIFT;
> +	job->submit->cfg[3] |= (batches_per_sg - 1) << V3D_CSD_CFG3_BATCHES_PER_SG_M1_SHIFT;
> +	job->submit->cfg[3] |= (wg_size & 0xff) << V3D_CSD_CFG3_WG_SIZE_SHIFT;
> +
> +	job->submit->cfg[4] = num_batches - 1;
> +
> +	job->submit->cfg[5] = job->shader_assembly->offset | V3D_CSD_CFG5_PROPAGATE_NANS;
> +	job->submit->cfg[5] |= V3D_CSD_CFG5_SINGLE_SEG;
> +	job->submit->cfg[5] |= V3D_CSD_CFG5_THREADING;
> +
> +	job->submit->cfg[6] = job->cl->offset;
> +
> +	return job;
> +}
> +

Same here, put description.

Regards,
Kamil

> +void igt_v3d_free_csd_job(int fd, struct v3d_csd_job *job)
> +{
> +	free(from_user_pointer(job->submit->bo_handles));
> +	igt_v3d_free_bo(fd, job->shader_assembly);
> +	igt_v3d_free_bo(fd, job->cl);
> +	free(job->submit);
> +	free(job);
> +}
> diff --git a/lib/igt_v3d.h b/lib/igt_v3d.h
> index 2cf7fbd8..b96a3b43 100644
> --- a/lib/igt_v3d.h
> +++ b/lib/igt_v3d.h
> @@ -28,6 +28,17 @@
>  
>  #define PAGE_SIZE 4096
>  
> +#define V3D_CSD_CFG012_WG_COUNT_SHIFT 16
> +/* Batches per supergroup minus 1.  8 bits. */
> +#define V3D_CSD_CFG3_BATCHES_PER_SG_M1_SHIFT 12
> +/* Workgroups per supergroup, 0 means 16 */
> +#define V3D_CSD_CFG3_WGS_PER_SG_SHIFT 8
> +#define V3D_CSD_CFG3_WG_SIZE_SHIFT 0
> +
> +#define V3D_CSD_CFG5_PROPAGATE_NANS (1 << 2)
> +#define V3D_CSD_CFG5_SINGLE_SEG (1 << 1)
> +#define V3D_CSD_CFG5_THREADING (1 << 0)
> +
>  struct v3d_cl;
>  
>  struct v3d_bo {
> @@ -46,6 +57,12 @@ struct v3d_cl_job {
>  	struct v3d_bo *tile_state;
>  };
>  
> +struct v3d_csd_job {
> +	struct drm_v3d_submit_csd *submit;
> +	struct v3d_bo *shader_assembly;
> +	struct v3d_bo *cl;
> +};
> +
>  struct v3d_bo *igt_v3d_create_bo(int fd, size_t size);
>  void igt_v3d_free_bo(int fd, struct v3d_bo *bo);
>  
> @@ -67,4 +84,7 @@ void igt_v3d_set_multisync(struct drm_v3d_multi_sync *ms, enum v3d_queue wait_st
>  struct v3d_cl_job *igt_v3d_noop_job(int fd);
>  void igt_v3d_free_cl_job(int fd, struct v3d_cl_job *job);
>  
> +struct v3d_csd_job *igt_v3d_empty_shader(int fd);
> +void igt_v3d_free_csd_job(int fd, struct v3d_csd_job *job);
> +
>  #endif /* IGT_V3D_H */
> -- 
> 2.39.0
> 

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

end of thread, other threads:[~2023-02-10 13:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-13 12:44 [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Maíra Canal
2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 1/3] lib/v3d: Add a helper to create a empty shader Maíra Canal
2023-02-10 13:31   ` Kamil Konieczny
2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL Maíra Canal
2023-01-13 12:44 ` [igt-dev] [PATCH i-g-t 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs Maíra Canal
2023-02-08 10:27   ` Melissa Wen
2023-01-13 13:23 ` [igt-dev] ✗ Fi.CI.BUILD: failure for V3D Mixed Job Submission Tests Patchwork
2023-02-07 14:17 ` [igt-dev] ✓ Fi.CI.BAT: success for V3D Mixed Job Submission Tests (rev2) Patchwork
2023-02-07 16:11 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2023-02-08 10:31 ` [igt-dev] [PATCH i-g-t 0/3] V3D Mixed Job Submission Tests Melissa Wen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox