[igt-dev] [PATCH i-g-t 1/3] tests/i915/api_intel_allocator: Exercise allocator in multiprocess mode
Andrzej Turko
andrzej.turko at linux.intel.com
Thu May 27 19:27:48 UTC 2021
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 <andrzej.turko at linux.intel.com>
Cc: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
---
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 182d9ba79..b4f7799e7 100644
--- a/tests/i915/api_intel_allocator.c
+++ b/tests/i915/api_intel_allocator.c
@@ -620,6 +620,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;
@@ -671,6 +715,9 @@ igt_main
igt_dynamic("reserve")
reserve(fd, a->type);
}
+
+ igt_dynamic("multiprocess")
+ multiprocess(fd, a->type);
}
}
--
2.25.1
More information about the igt-dev
mailing list