Thread (8 messages) 8 messages, 3 authors, 2021-06-18

Re: [igt-dev] [PATCH i-g-t 1/2] tests/i915/api_intel_allocator: Exercise allocator in multiprocess mode

From: Zbigniew Kempczyński <hidden>
Date: 2021-06-18 08:19:17

On Thu, Jun 17, 2021 at 09:16:42AM +0200, Andrzej Turko wrote:
Test creation and usage of allocators in multiprocess mode
for contexts shared with the parent process as well as
private for the child.

This new test discovers a bug in the allocator implementation:
allocator is not correctly initialized if it is opened by
a child process using its private file descriptor.

Signed-off-by: Andrzej Turko <redacted>
Cc: Zbigniew Kempczyński <redacted>
This exposes some allocator thread weak point - asserting and blocking ipc.
I'm enquing work to improve this. But test is ok:

Reviewed-by: Zbigniew Kempczyński <redacted>

--
Zbigniew

quoted hunk ↗ jump to hunk
---
 tests/i915/api_intel_allocator.c | 40 ++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
diff --git a/tests/i915/api_intel_allocator.c b/tests/i915/api_intel_allocator.c
index ea4ba8bb1..fdfbdba82 100644
--- a/tests/i915/api_intel_allocator.c
+++ b/tests/i915/api_intel_allocator.c
@@ -621,6 +621,43 @@ static void execbuf_with_allocator(int fd)
 	igt_assert(intel_allocator_close(ahnd) == true);
 }
 
+static void fork_reopen_allocator(int fd, uint8_t type)
+{
+	uint64_t p_ahnd, sh_ahnd, fd_ahnd, ctx_ahnd;
+	uint64_t offset;
+
+	intel_allocator_multiprocess_start();
+
+	p_ahnd = intel_allocator_open(fd, 0, type);
+	offset = intel_allocator_alloc(p_ahnd, 1, 123, 0);
+	if (type == INTEL_ALLOCATOR_SIMPLE)
+		igt_assert(intel_allocator_is_allocated(p_ahnd, 1, 123, offset));
+
+	igt_fork(child, 1) {
+		sh_ahnd = intel_allocator_open(fd, 0, type);
+		if (type == INTEL_ALLOCATOR_SIMPLE)
+			igt_assert(intel_allocator_is_allocated(sh_ahnd, 1, 123, offset));
+
+		ctx_ahnd = intel_allocator_open(fd, 1, type);
+		igt_assert(!intel_allocator_is_allocated(ctx_ahnd, 1, 123, offset));
+		intel_allocator_alloc(ctx_ahnd, 2, 123, 0);
+
+		fd = gem_reopen_driver(fd);
+		fd_ahnd = intel_allocator_open(fd, 0, type);
+		igt_assert(!intel_allocator_is_allocated(fd_ahnd, 1, 123, offset));
+		intel_allocator_alloc(fd_ahnd, 2, 123, 0);
+
+		intel_allocator_close(sh_ahnd);
+		intel_allocator_close(ctx_ahnd);
+		intel_allocator_close(fd_ahnd);
+	}
+
+	igt_waitchildren();
+	intel_allocator_close(p_ahnd);
+
+	intel_allocator_multiprocess_stop();
+}
+
 struct allocators {
 	const char *name;
 	uint8_t type;
@@ -672,6 +709,9 @@ igt_main
 				igt_dynamic("reserve")
 					reserve(fd, a->type);
 			}
+
+			igt_dynamic("fork-reopen-allocator")
+					fork_reopen_allocator(fd, a->type);
 		}
 	}
 
-- 
2.25.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help