All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t v3 0/3] V3D Mixed Job Submission Tests
@ 2023-02-10 17:46 Maíra Canal
  2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 1/3] lib/v3d: Add a helper to create a empty shader Maíra Canal
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Maíra Canal @ 2023-02-10 17:46 UTC (permalink / raw)
  To: Melissa Wen, André Almeida, Petri Latvala, Kamil Konieczny,
	Iago Toral Quiroga
  Cc: igt-dev

Currently, the V3D tests only support CL job submissions, 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. 

v1 -> v2:

- Add a progress bar to the "threaded-job-submission" sub-test (Melissa Wen).
- Fix checkpatch issues.

v2 -> v3:

- Add descriptions to all the public functions added (Kamil Konieczny).

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                  |  75 +++++++
 lib/igt_v3d.h                  |  20 ++
 tests/v3d/meson.build          |   2 +
 tests/v3d/v3d_job_submission.c | 218 ++++++++++++++++++++
 tests/v3d/v3d_submit_csd.c     | 362 +++++++++++++++++++++++++++++++++
 tests/v3d_ci/v3d.testlist      |  21 ++
 6 files changed, 698 insertions(+)
 create mode 100644 tests/v3d/v3d_job_submission.c
 create mode 100644 tests/v3d/v3d_submit_csd.c

-- 
2.39.1

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

* [igt-dev] [PATCH i-g-t v3 1/3] lib/v3d: Add a helper to create a empty shader
  2023-02-10 17:46 [igt-dev] [PATCH i-g-t v3 0/3] V3D Mixed Job Submission Tests Maíra Canal
@ 2023-02-10 17:46 ` Maíra Canal
  2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL Maíra Canal
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Maíra Canal @ 2023-02-10 17:46 UTC (permalink / raw)
  To: Melissa Wen, André Almeida, Petri Latvala, Kamil Konieczny,
	Iago Toral Quiroga
  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) {}

Reviewed-by: Melissa Wen <mwen@igalia.com>
Signed-off-by: Maíra Canal <mcanal@igalia.com>
---
 lib/igt_v3d.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_v3d.h | 20 ++++++++++++++
 2 files changed, 95 insertions(+)

diff --git a/lib/igt_v3d.c b/lib/igt_v3d.c
index 41ea32fc..11155424 100644
--- a/lib/igt_v3d.c
+++ b/lib/igt_v3d.c
@@ -355,3 +355,78 @@ void igt_v3d_free_cl_job(int fd, struct v3d_cl_job *job)
 	free(job->submit);
 	free(job);
 }
+
+/**
+ * igt_v3d_empty_shader:
+ * @fd: device file descriptor
+ *
+ * This helper returns a simple compute dispatch job. It sets the
+ * configurations (cfg) needed for the job and has the assembled instructions
+ * necessary to process an empty shader.
+ */
+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;
+}
+
+/**
+ * igt_v3d_free_csd_job:
+ * @job: a compute shader dispatch job
+ *
+ * This helper frees all the fields of the struct v3d_csd_job and the
+ * alocatted job itself.
+ */
+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.1

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

* [igt-dev] [PATCH i-g-t v3 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL
  2023-02-10 17:46 [igt-dev] [PATCH i-g-t v3 0/3] V3D Mixed Job Submission Tests Maíra Canal
  2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 1/3] lib/v3d: Add a helper to create a empty shader Maíra Canal
@ 2023-02-10 17:46 ` Maíra Canal
  2023-02-14 21:33   ` Kamil Konieczny
  2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs Maíra Canal
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 8+ messages in thread
From: Maíra Canal @ 2023-02-10 17:46 UTC (permalink / raw)
  To: Melissa Wen, André Almeida, Petri Latvala, Kamil Konieczny,
	Iago Toral Quiroga
  Cc: igt-dev

Add eightteen 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.

Reviewed-by: Melissa Wen <mwen@igalia.com>
Signed-off-by: Maíra Canal <mcanal@igalia.com>
---
 tests/v3d/meson.build      |   1 +
 tests/v3d/v3d_submit_csd.c | 362 +++++++++++++++++++++++++++++++++++++
 tests/v3d_ci/v3d.testlist  |  18 ++
 3 files changed, 381 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..256140c8
--- /dev/null
+++ b/tests/v3d/v3d_submit_csd.c
@@ -0,0 +1,362 @@
+// 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.1

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

* [igt-dev] [PATCH i-g-t v3 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs
  2023-02-10 17:46 [igt-dev] [PATCH i-g-t v3 0/3] V3D Mixed Job Submission Tests Maíra Canal
  2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 1/3] lib/v3d: Add a helper to create a empty shader Maíra Canal
  2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL Maíra Canal
@ 2023-02-10 17:46 ` Maíra Canal
  2023-02-14 21:44   ` Kamil Konieczny
  2023-02-10 18:27 ` [igt-dev] ✓ Fi.CI.BAT: success for V3D Mixed Job Submission Tests (rev4) Patchwork
  2023-02-11 12:42 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  4 siblings, 1 reply; 8+ messages in thread
From: Maíra Canal @ 2023-02-10 17:46 UTC (permalink / raw)
  To: Melissa Wen, André Almeida, Petri Latvala, Kamil Konieczny,
	Iago Toral Quiroga
  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, tests the relationship between
single syncobjs and multisync using mixed jobs as well.

Reviewed-by: Melissa Wen <mwen@igalia.com>
Signed-off-by: Maíra Canal <mcanal@igalia.com>
---
 tests/v3d/meson.build          |   1 +
 tests/v3d/v3d_job_submission.c | 218 +++++++++++++++++++++++++++++++++
 tests/v3d_ci/v3d.testlist      |   3 +
 3 files changed, 222 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..0c36629c
--- /dev/null
+++ b/tests/v3d/v3d_job_submission.c
@@ -0,0 +1,218 @@
+// 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++) {
+			igt_print_activity();
+
+			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++) {
+			igt_print_activity();
+
+			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]);
+		}
+
+		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.1

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

* [igt-dev] ✓ Fi.CI.BAT: success for V3D Mixed Job Submission Tests (rev4)
  2023-02-10 17:46 [igt-dev] [PATCH i-g-t v3 0/3] V3D Mixed Job Submission Tests Maíra Canal
                   ` (2 preceding siblings ...)
  2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs Maíra Canal
@ 2023-02-10 18:27 ` Patchwork
  2023-02-11 12:42 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  4 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2023-02-10 18:27 UTC (permalink / raw)
  To: Maíra Canal; +Cc: igt-dev

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

== Series Details ==

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

== Summary ==

CI Bug Log - changes from CI_DRM_12729 -> IGTPW_8486
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (41 -> 39)
------------------------------

  Missing    (2): bat-kbl-2 fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_module_load@reload:
    - fi-bsw-n3050:       [PASS][1] -> [DMESG-WARN][2] ([i915#1982])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/fi-bsw-n3050/igt@i915_module_load@reload.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/fi-bsw-n3050/igt@i915_module_load@reload.html

  * igt@i915_selftest@live@gt_heartbeat:
    - fi-kbl-7567u:       [PASS][3] -> [DMESG-FAIL][4] ([i915#5334] / [i915#7872])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/fi-kbl-7567u/igt@i915_selftest@live@gt_heartbeat.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/fi-kbl-7567u/igt@i915_selftest@live@gt_heartbeat.html

  * igt@i915_selftest@live@hangcheck:
    - fi-kbl-soraka:      [PASS][5] -> [INCOMPLETE][6] ([i915#7913])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/fi-kbl-soraka/igt@i915_selftest@live@hangcheck.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/fi-kbl-soraka/igt@i915_selftest@live@hangcheck.html

  
#### Possible fixes ####

  * igt@i915_pm_rpm@basic-rte:
    - {bat-adlp-6}:       [ABORT][7] ([i915#7977]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/bat-adlp-6/igt@i915_pm_rpm@basic-rte.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/bat-adlp-6/igt@i915_pm_rpm@basic-rte.html

  * igt@i915_selftest@live@gt_heartbeat:
    - fi-apl-guc:         [DMESG-FAIL][9] ([i915#5334]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html
    - fi-kbl-soraka:      [DMESG-FAIL][11] ([i915#5334] / [i915#7872]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/fi-kbl-soraka/igt@i915_selftest@live@gt_heartbeat.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/fi-kbl-soraka/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#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#4258]: https://gitlab.freedesktop.org/drm/intel/issues/4258
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334
  [i915#6311]: https://gitlab.freedesktop.org/drm/intel/issues/6311
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#7359]: https://gitlab.freedesktop.org/drm/intel/issues/7359
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7852]: https://gitlab.freedesktop.org/drm/intel/issues/7852
  [i915#7872]: https://gitlab.freedesktop.org/drm/intel/issues/7872
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#7977]: https://gitlab.freedesktop.org/drm/intel/issues/7977
  [i915#7996]: https://gitlab.freedesktop.org/drm/intel/issues/7996


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7157 -> IGTPW_8486

  CI-20190529: 20190529
  CI_DRM_12729: d09b2cf01d8c5bf0a3a2b544dad1ac987727d9d8 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8486: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/index.html
  IGT_7157: 96d12fdc942cee9526a951b377b195ca9c8276b1 @ 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_8486/index.html

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

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

* [igt-dev] ✓ Fi.CI.IGT: success for V3D Mixed Job Submission Tests (rev4)
  2023-02-10 17:46 [igt-dev] [PATCH i-g-t v3 0/3] V3D Mixed Job Submission Tests Maíra Canal
                   ` (3 preceding siblings ...)
  2023-02-10 18:27 ` [igt-dev] ✓ Fi.CI.BAT: success for V3D Mixed Job Submission Tests (rev4) Patchwork
@ 2023-02-11 12:42 ` Patchwork
  4 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2023-02-11 12:42 UTC (permalink / raw)
  To: Maíra Canal; +Cc: igt-dev

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

== Series Details ==

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

== Summary ==

CI Bug Log - changes from CI_DRM_12729_full -> IGTPW_8486_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

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

  
New tests
---------

  New tests have been introduced between CI_DRM_12729_full and IGTPW_8486_full:

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

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

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

  * igt@v3d/v3d_job_submission@threaded-job-submission:
    - Statuses : 5 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 : 3 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 : 4 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 : 5 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 : 4 skip(s)
    - Exec time: [0.0] s

  * igt@v3d/v3d_submit_csd@bad-pad:
    - Statuses : 3 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 : 5 skip(s)
    - Exec time: [0.0] s

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

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

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

  * igt@v3d/v3d_submit_csd@single-in-sync:
    - Statuses : 5 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 : 4 skip(s)
    - Exec time: [0.0] s

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

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-glk:          [PASS][2] -> [FAIL][3] ([i915#2842])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-glk5/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk6/igt@gem_exec_fair@basic-pace-share@rcs0.html

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

  * igt@gen9_exec_parse@allowed-single:
    - shard-glk:          [PASS][5] -> [ABORT][6] ([i915#5566])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-glk1/igt@gen9_exec_parse@allowed-single.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk6/igt@gen9_exec_parse@allowed-single.html

  * igt@kms_ccs@pipe-a-bad-aux-stride-y_tiled_gen12_rc_ccs_cc:
    - shard-glk:          NOTRUN -> [SKIP][7] ([fdo#109271] / [i915#3886])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk9/igt@kms_ccs@pipe-a-bad-aux-stride-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-hdmi-a1-hdmi-a2:
    - shard-glk:          [PASS][8] -> [FAIL][9] ([i915#79])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-glk1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-hdmi-a1-hdmi-a2.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk5/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ac-hdmi-a1-hdmi-a2.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-gtt:
    - shard-glk:          NOTRUN -> [SKIP][10] ([fdo#109271]) +40 similar issues
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk7/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-gtt.html

  * igt@kms_plane_alpha_blend@alpha-transparent-fb@pipe-b-hdmi-a-2:
    - shard-glk:          NOTRUN -> [FAIL][11] ([i915#4573]) +2 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk5/igt@kms_plane_alpha_blend@alpha-transparent-fb@pipe-b-hdmi-a-2.html

  * {igt@v3d/v3d_job_submission@multiple-singlesync-to-multisync} (NEW):
    - {shard-tglu}:       NOTRUN -> [SKIP][12] ([fdo#109315] / [i915#2575]) +8 similar issues
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-tglu-1/igt@v3d/v3d_job_submission@multiple-singlesync-to-multisync.html

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

  * {igt@v3d/v3d_submit_csd@multi-and-single-sync} (NEW):
    - shard-snb:          NOTRUN -> [SKIP][14] ([fdo#109271]) +53 similar issues
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-snb2/igt@v3d/v3d_submit_csd@multi-and-single-sync.html

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

  
#### Possible fixes ####

  * igt@fbdev@read:
    - {shard-tglu}:       [SKIP][16] ([i915#2582]) -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-tglu-6/igt@fbdev@read.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-tglu-7/igt@fbdev@read.html

  * igt@gem_bad_reloc@negative-reloc-lut:
    - {shard-rkl}:        [SKIP][18] ([i915#3281]) -> [PASS][19] +10 similar issues
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-6/igt@gem_bad_reloc@negative-reloc-lut.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-5/igt@gem_bad_reloc@negative-reloc-lut.html

  * igt@gem_eio@reset-stress:
    - {shard-dg1}:        [FAIL][20] ([i915#5784]) -> [PASS][21]
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-dg1-14/igt@gem_eio@reset-stress.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-dg1-15/igt@gem_eio@reset-stress.html

  * igt@gem_exec_fair@basic-none-share@rcs0:
    - shard-glk:          [FAIL][22] ([i915#2842]) -> [PASS][23] +1 similar issue
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-glk1/igt@gem_exec_fair@basic-none-share@rcs0.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk3/igt@gem_exec_fair@basic-none-share@rcs0.html

  * igt@gem_exec_fair@basic-pace@rcs0:
    - {shard-rkl}:        [FAIL][24] ([i915#2842]) -> [PASS][25] +3 similar issues
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-6/igt@gem_exec_fair@basic-pace@rcs0.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-5/igt@gem_exec_fair@basic-pace@rcs0.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-uncached:
    - {shard-rkl}:        [SKIP][26] ([i915#3282]) -> [PASS][27] +2 similar issues
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-3/igt@gem_partial_pwrite_pread@writes-after-reads-uncached.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-5/igt@gem_partial_pwrite_pread@writes-after-reads-uncached.html

  * igt@gem_softpin@noreloc-s3:
    - shard-glk:          [TIMEOUT][28] -> [PASS][29] +1 similar issue
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-glk6/igt@gem_softpin@noreloc-s3.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk8/igt@gem_softpin@noreloc-s3.html

  * igt@gen9_exec_parse@batch-invalid-length:
    - {shard-rkl}:        [SKIP][30] ([i915#2527]) -> [PASS][31] +3 similar issues
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-4/igt@gen9_exec_parse@batch-invalid-length.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-5/igt@gen9_exec_parse@batch-invalid-length.html

  * igt@i915_pipe_stress@stress-xrgb8888-untiled:
    - {shard-rkl}:        [SKIP][32] ([i915#4098]) -> [PASS][33]
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-2/igt@i915_pipe_stress@stress-xrgb8888-untiled.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-6/igt@i915_pipe_stress@stress-xrgb8888-untiled.html

  * igt@i915_pm_dc@dc9-dpms:
    - {shard-rkl}:        [SKIP][34] ([i915#3361]) -> [PASS][35]
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-5/igt@i915_pm_dc@dc9-dpms.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-6/igt@i915_pm_dc@dc9-dpms.html

  * igt@i915_pm_rpm@dpms-lpsp:
    - {shard-rkl}:        [SKIP][36] ([i915#1397]) -> [PASS][37] +1 similar issue
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-3/igt@i915_pm_rpm@dpms-lpsp.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-6/igt@i915_pm_rpm@dpms-lpsp.html

  * igt@i915_pm_rpm@dpms-mode-unset-lpsp:
    - {shard-tglu}:       [SKIP][38] ([i915#1397]) -> [PASS][39]
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-tglu-6/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-tglu-3/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html

  * igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - {shard-dg1}:        [SKIP][40] ([i915#1397]) -> [PASS][41]
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-dg1-14/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-dg1-16/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@i915_pm_rpm@system-suspend-modeset:
    - {shard-tglu}:       [SKIP][42] ([i915#3547]) -> [PASS][43]
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-tglu-6/igt@i915_pm_rpm@system-suspend-modeset.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-tglu-5/igt@i915_pm_rpm@system-suspend-modeset.html

  * igt@kms_atomic@plane-invalid-params-fence:
    - {shard-tglu}:       [SKIP][44] ([i915#1845] / [i915#7651]) -> [PASS][45]
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-tglu-6/igt@kms_atomic@plane-invalid-params-fence.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-tglu-1/igt@kms_atomic@plane-invalid-params-fence.html

  * igt@kms_big_fb@linear-8bpp-rotate-180:
    - {shard-tglu}:       [SKIP][46] ([i915#7651]) -> [PASS][47] +4 similar issues
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-tglu-6/igt@kms_big_fb@linear-8bpp-rotate-180.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-tglu-1/igt@kms_big_fb@linear-8bpp-rotate-180.html

  * igt@kms_big_fb@x-tiled-32bpp-rotate-0:
    - {shard-rkl}:        [SKIP][48] ([i915#1845] / [i915#4098]) -> [PASS][49] +17 similar issues
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-5/igt@kms_big_fb@x-tiled-32bpp-rotate-0.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-6/igt@kms_big_fb@x-tiled-32bpp-rotate-0.html

  * igt@kms_draw_crc@fill-fb:
    - {shard-tglu}:       [SKIP][50] ([i915#1845]) -> [PASS][51] +1 similar issue
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-tglu-6/igt@kms_draw_crc@fill-fb.html
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-tglu-3/igt@kms_draw_crc@fill-fb.html

  * igt@kms_flip@plain-flip-ts-check-interruptible@c-hdmi-a1:
    - shard-glk:          [FAIL][52] ([i915#2122]) -> [PASS][53]
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-glk3/igt@kms_flip@plain-flip-ts-check-interruptible@c-hdmi-a1.html
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk3/igt@kms_flip@plain-flip-ts-check-interruptible@c-hdmi-a1.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-blt:
    - {shard-tglu}:       [SKIP][54] ([i915#1849]) -> [PASS][55] +1 similar issue
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-tglu-6/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-blt.html
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-tglu-2/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-blt:
    - {shard-rkl}:        [SKIP][56] ([i915#1849] / [i915#4098]) -> [PASS][57] +12 similar issues
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-blt.html
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-blt.html

  * igt@kms_plane@pixel-format@pipe-b-planes:
    - {shard-rkl}:        [SKIP][58] ([i915#1849]) -> [PASS][59] +1 similar issue
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-1/igt@kms_plane@pixel-format@pipe-b-planes.html
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-6/igt@kms_plane@pixel-format@pipe-b-planes.html

  * igt@kms_psr@sprite_render:
    - {shard-rkl}:        [SKIP][60] ([i915#1072]) -> [PASS][61] +1 similar issue
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-3/igt@kms_psr@sprite_render.html
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-6/igt@kms_psr@sprite_render.html

  * igt@kms_universal_plane@disable-primary-vs-flip-pipe-b:
    - {shard-rkl}:        [SKIP][62] ([i915#1845] / [i915#4070] / [i915#4098]) -> [PASS][63] +1 similar issue
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-2/igt@kms_universal_plane@disable-primary-vs-flip-pipe-b.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-6/igt@kms_universal_plane@disable-primary-vs-flip-pipe-b.html

  * igt@perf@non-zero-reason:
    - shard-glk:          [TIMEOUT][64] ([i915#6943]) -> [PASS][65]
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-glk6/igt@perf@non-zero-reason.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-glk1/igt@perf@non-zero-reason.html

  * igt@perf@polling-small-buf:
    - {shard-rkl}:        [FAIL][66] ([i915#1722]) -> [PASS][67]
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-2/igt@perf@polling-small-buf.html
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-5/igt@perf@polling-small-buf.html

  * igt@perf_pmu@idle@rcs0:
    - {shard-rkl}:        [FAIL][68] ([i915#4349]) -> [PASS][69]
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-1/igt@perf_pmu@idle@rcs0.html
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-5/igt@perf_pmu@idle@rcs0.html

  * igt@prime_vgem@basic-read:
    - {shard-rkl}:        [SKIP][70] ([fdo#109295] / [i915#3291] / [i915#3708]) -> [PASS][71]
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-rkl-2/igt@prime_vgem@basic-read.html
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-rkl-5/igt@prime_vgem@basic-read.html

  * igt@sysfs_timeslice_duration@timeout@vecs0:
    - {shard-dg1}:        [FAIL][72] ([i915#1755]) -> [PASS][73] +2 similar issues
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12729/shard-dg1-15/igt@sysfs_timeslice_duration@timeout@vecs0.html
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/shard-dg1-15/igt@sysfs_timeslice_duration@timeout@vecs0.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#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#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#109303]: https://bugs.freedesktop.org/show_bug.cgi?id=109303
  [fdo#109307]: https://bugs.freedesktop.org/show_bug.cgi?id=109307
  [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#110542]: https://bugs.freedesktop.org/show_bug.cgi?id=110542
  [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#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722
  [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#1850]: https://gitlab.freedesktop.org/drm/intel/issues/1850
  [i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2433]: https://gitlab.freedesktop.org/drm/intel/issues/2433
  [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#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
  [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
  [i915#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#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [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#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#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [i915#3547]: https://gitlab.freedesktop.org/drm/intel/issues/3547
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [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#3826]: https://gitlab.freedesktop.org/drm/intel/issues/3826
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3952]: https://gitlab.freedesktop.org/drm/intel/issues/3952
  [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#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#426]: https://gitlab.freedesktop.org/drm/intel/issues/426
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#433]: https://gitlab.freedesktop.org/drm/intel/issues/433
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4387]: https://gitlab.freedesktop.org/drm/intel/issues/4387
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
  [i915#4573]: https://gitlab.freedesktop.org/drm/intel/issues/4573
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4818]: https://gitlab.freedesktop.org/drm/intel/issues/4818
  [i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4859]: https://gitlab.freedesktop.org/drm/intel/issues/4859
  [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
  [i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
  [i915#4958]: https://gitlab.freedesktop.org/drm/intel/issues/4958
  [i915#5030]: https://gitlab.freedesktop.org/drm/intel/issues/5030
  [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#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
  [i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
  [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
  [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6245]: https://gitlab.freedesktop.org/drm/intel/issues/6245
  [i915#6247]: https://gitlab.freedesktop.org/drm/intel/issues/6247
  [i915#6248]: https://gitlab.freedesktop.org/drm/intel/issues/6248
  [i915#6252]: https://gitlab.freedesktop.org/drm/intel/issues/6252
  [i915#6258]: https://gitlab.freedesktop.org/drm/intel/issues/6258
  [i915#6259]: https://gitlab.freedesktop.org/drm/intel/issues/6259
  [i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
  [i915#6334]: https://gitlab.freedesktop.org/drm/intel/issues/6334
  [i915#6335]: https://gitlab.freedesktop.org/drm/intel/issues/6335
  [i915#6403]: https://gitlab.freedesktop.org/drm/intel/issues/6403
  [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#6590]: https://gitlab.freedesktop.org/drm/intel/issues/6590
  [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
  [i915#6943]: https://gitlab.freedesktop.org/drm/intel/issues/6943
  [i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
  [i915#6946]: https://gitlab.freedesktop.org/drm/intel/issues/6946
  [i915#7037]: https://gitlab.freedesktop.org/drm/intel/issues/7037
  [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7178]: https://gitlab.freedesktop.org/drm/intel/issues/7178
  [i915#7561]: https://gitlab.freedesktop.org/drm/intel/issues/7561
  [i915#7582]: https://gitlab.freedesktop.org/drm/intel/issues/7582
  [i915#7651]: https://gitlab.freedesktop.org/drm/intel/issues/7651
  [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
  [i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
  [i915#7949]: https://gitlab.freedesktop.org/drm/intel/issues/7949
  [i915#7957]: https://gitlab.freedesktop.org/drm/intel/issues/7957


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7157 -> IGTPW_8486

  CI-20190529: 20190529
  CI_DRM_12729: d09b2cf01d8c5bf0a3a2b544dad1ac987727d9d8 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8486: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8486/index.html
  IGT_7157: 96d12fdc942cee9526a951b377b195ca9c8276b1 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

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

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

* Re: [igt-dev] [PATCH i-g-t v3 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL
  2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL Maíra Canal
@ 2023-02-14 21:33   ` Kamil Konieczny
  0 siblings, 0 replies; 8+ messages in thread
From: Kamil Konieczny @ 2023-02-14 21:33 UTC (permalink / raw)
  To: igt-dev; +Cc: Iago Toral Quiroga

Hi Maíra,

On 2023-02-10 at 14:46:18 -0300, Maíra Canal wrote:
> Add eightteen igt_subtests for the DRM_IOCTL_V3D_SUBMIT_CSD, which ensures
---------- ^
s/eightteen/eighteen/
imho you can skip number of tests added, also just s/igt_subtests/subtests/
 
> 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.
> 
> Reviewed-by: Melissa Wen <mwen@igalia.com>
> Signed-off-by: Maíra Canal <mcanal@igalia.com>

Please note new Petri e-mail: Petri Latvala <adrinael@adrinael.net>

> ---
>  tests/v3d/meson.build      |   1 +
>  tests/v3d/v3d_submit_csd.c | 362 +++++++++++++++++++++++++++++++++++++
>  tests/v3d_ci/v3d.testlist  |  18 ++
>  3 files changed, 381 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..256140c8
> --- /dev/null
> +++ b/tests/v3d/v3d_submit_csd.c
> @@ -0,0 +1,362 @@
> +// 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

Please put here global description:
IGT_TEST_DESCRIPTION("Global description of tests in this module");

For example, see:
https://patchwork.freedesktop.org/patch/522415/?series=113522&rev=3

Btw these are minor corrections, please keep your r-b tag,

Regards,
Kamil

> +
> +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.1
> 

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

* Re: [igt-dev] [PATCH i-g-t v3 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs
  2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs Maíra Canal
@ 2023-02-14 21:44   ` Kamil Konieczny
  0 siblings, 0 replies; 8+ messages in thread
From: Kamil Konieczny @ 2023-02-14 21:44 UTC (permalink / raw)
  To: igt-dev; +Cc: Iago Toral Quiroga

Hi Maíra,

On 2023-02-10 at 14:46:19 -0300, Maíra Canal wrote:
> Add three igt_subtests that combine CL jobs and CSD jobs, to assure the
----------- ^
s/igt_subtests/subtests/

> proper synchronization of different queues, especially the
> independence between them. Moreover, tests the relationship between
> single syncobjs and multisync using mixed jobs as well.
> 
> Reviewed-by: Melissa Wen <mwen@igalia.com>
> Signed-off-by: Maíra Canal <mcanal@igalia.com>
> ---
>  tests/v3d/meson.build          |   1 +
>  tests/v3d/v3d_job_submission.c | 218 +++++++++++++++++++++++++++++++++
>  tests/v3d_ci/v3d.testlist      |   3 +
>  3 files changed, 222 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..0c36629c
> --- /dev/null
> +++ b/tests/v3d/v3d_job_submission.c
> @@ -0,0 +1,218 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2022 Igalia S.L.
> + */
> +
> +#include "igt.h"
> +#include "igt_v3d.h"
> +#include "igt_syncobj.h"
> +
> +static int fd;
> +

Please put here global description:
IGT_TEST_DESCRIPTION("Global description of tests in this module");

Please write comment before defines what CL and CSD mean and
what is a difference between them.

Btw these are minor corrections, please keep your r-b tag,

Regards,
Kamil

> +#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++) {
> +			igt_print_activity();
> +
> +			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++) {
> +			igt_print_activity();
> +
> +			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]);
> +		}
> +
> +		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.1
> 

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

end of thread, other threads:[~2023-02-14 21:44 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-10 17:46 [igt-dev] [PATCH i-g-t v3 0/3] V3D Mixed Job Submission Tests Maíra Canal
2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 1/3] lib/v3d: Add a helper to create a empty shader Maíra Canal
2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 2/3] tests/v3d_submit_csd: Create test for V3D's Submit CSD IOCTL Maíra Canal
2023-02-14 21:33   ` Kamil Konieczny
2023-02-10 17:46 ` [igt-dev] [PATCH i-g-t v3 3/3] tests/v3d_job_submission: Create tests to mix CL and CSD jobs Maíra Canal
2023-02-14 21:44   ` Kamil Konieczny
2023-02-10 18:27 ` [igt-dev] ✓ Fi.CI.BAT: success for V3D Mixed Job Submission Tests (rev4) Patchwork
2023-02-11 12:42 ` [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.