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