[igt-dev] [PATCH i-g-t 1/3] tests/i915/api_intel_allocator: Exercise allocator in multiprocess mode
From: Andrzej Turko <hidden>
Date: 2021-06-09 12:59:48
Subsystem:
the rest · Maintainer:
Linus Torvalds
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> --- tests/i915/api_intel_allocator.c | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+)
diff --git a/tests/i915/api_intel_allocator.c b/tests/i915/api_intel_allocator.c
index ea4ba8bb1..b43467a33 100644
--- a/tests/i915/api_intel_allocator.c
+++ b/tests/i915/api_intel_allocator.c@@ -621,6 +621,50 @@ static void execbuf_with_allocator(int fd) igt_assert(intel_allocator_close(ahnd) == true); } +static void multiprocess(int fd, uint8_t type) { + uint64_t p_ahnd, sh_ahnd, fd_ahnd, ctx_ahnd; + uint64_t sh_left, sh_right, fd_left, fd_right; + 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_get_address_range(sh_ahnd, &sh_left, &sh_right); + intel_allocator_get_address_range(fd_ahnd, &fd_left, &fd_right); + igt_assert(sh_left == fd_left && sh_right == fd_right); + + 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 +716,9 @@ igt_main igt_dynamic("reserve") reserve(fd, a->type); } + + igt_dynamic("multiprocess") + multiprocess(fd, a->type); } }
--
2.25.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev