[PATCH i-g-t v2 8/8] tests/intel/gem_mmap: add basic multi-GPU subtest
Kamil Konieczny
kamil.konieczny at linux.intel.com
Wed Jan 24 20:41:34 UTC 2024
Test basic mmap for two or more GPU cards.
Signed-off-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
---
tests/intel/gem_mmap.c | 77 +++++++++++++++++++++++++++---------------
1 file changed, 50 insertions(+), 27 deletions(-)
diff --git a/tests/intel/gem_mmap.c b/tests/intel/gem_mmap.c
index d4ca1eda7..90bcec7b0 100644
--- a/tests/intel/gem_mmap.c
+++ b/tests/intel/gem_mmap.c
@@ -38,6 +38,8 @@
#include "drm.h"
#include "i915/gem_create.h"
+#include "intel_multigpu.h"
+
/**
* TEST: gem mmap
* Description: Basic MMAP IOCTL tests for memory regions.
@@ -61,6 +63,11 @@
* mapping existence after gem_close and unmapping.
* Run type: BAT
*
+ * SUBTEST: basic-multigpu
+ * Description:
+ * Test basics of mmap on two or more GPUs.
+ * Run type: BAT
+ *
* SUBTEST: basic-small-bo
* Description:
* Test the write read coherency and simultaneous access of different pages of a small buffer
@@ -209,12 +216,40 @@ static int mmap_ioctl(int i915, struct drm_i915_gem_mmap *arg)
return err;
}
-igt_main
+static void test_basic(int i915, int pat)
{
+ struct drm_i915_gem_mmap arg = {
+ .handle = gem_create(fd, OBJECT_SIZE),
+ .size = OBJECT_SIZE,
+ };
uint8_t expected[OBJECT_SIZE];
uint8_t buf[OBJECT_SIZE];
uint8_t *addr;
+ igt_assert_eq(mmap_ioctl(fd, &arg), 0);
+ addr = from_user_pointer(arg.addr_ptr);
+
+ igt_info("Testing contents of newly created object.\n");
+ memset(expected, 0, sizeof(expected));
+ igt_assert(memcmp(addr, expected, sizeof(expected)) == 0);
+
+ igt_info("Testing coherency of writes and mmap reads.\n");
+ memset(buf, 0, sizeof(buf));
+ memset(buf + 1024, pat, 1024);
+ memset(expected + 1024, pat, 1024);
+ gem_write(fd, arg.handle, 0, buf, OBJECT_SIZE);
+ igt_assert(memcmp(buf, addr, sizeof(buf)) == 0);
+
+ igt_info("Testing that mapping stays after close\n");
+ gem_close(fd, arg.handle);
+ igt_assert(memcmp(buf, addr, sizeof(buf)) == 0);
+
+ igt_info("Testing unmapping\n");
+ munmap(addr, OBJECT_SIZE);
+}
+
+igt_main
+{
igt_fixture {
fd = drm_open_driver(DRIVER_INTEL);
igt_require(gem_has_legacy_mmap(fd));
@@ -306,36 +341,13 @@ igt_main
igt_describe("Test basics of newly mapped gem object like default content, write and read "
"coherency, mapping existence after gem_close and unmapping.");
- igt_subtest("basic") {
- struct drm_i915_gem_mmap arg = {
- .handle = gem_create(fd, OBJECT_SIZE),
- .size = OBJECT_SIZE,
- };
- igt_assert_eq(mmap_ioctl(fd, &arg), 0);
- addr = from_user_pointer(arg.addr_ptr);
-
- igt_info("Testing contents of newly created object.\n");
- memset(expected, 0, sizeof(expected));
- igt_assert(memcmp(addr, expected, sizeof(expected)) == 0);
-
- igt_info("Testing coherency of writes and mmap reads.\n");
- memset(buf, 0, sizeof(buf));
- memset(buf + 1024, 0x01, 1024);
- memset(expected + 1024, 0x01, 1024);
- gem_write(fd, arg.handle, 0, buf, OBJECT_SIZE);
- igt_assert(memcmp(buf, addr, sizeof(buf)) == 0);
-
- igt_info("Testing that mapping stays after close\n");
- gem_close(fd, arg.handle);
- igt_assert(memcmp(buf, addr, sizeof(buf)) == 0);
-
- igt_info("Testing unmapping\n");
- munmap(addr, OBJECT_SIZE);
- }
+ igt_subtest("basic")
+ test_basic(fd, 1);
igt_describe("Map small buffer object though direct CPU access, bypassing GPU.");
igt_subtest("short-mmap") {
uint32_t handle = gem_create(fd, OBJECT_SIZE);
+ uint8_t *addr;
igt_assert(OBJECT_SIZE > 4096);
@@ -373,4 +385,15 @@ igt_main
igt_fixture
drm_close_driver(fd);
+
+ igt_describe("Test basics of mapped on two or more GPUs.");
+ igt_subtest("basic-multigpu") {
+ igt_multi_fork_foreach_gpu(gpu, DRIVER_INTEL) {
+ int pat = 1 + rand() % 128;
+
+ igt_info("Basic mmap test with pattern x%x\n", pat);
+ test_basic(gpu, pat);
+ }
+ igt_waitchildren();
+ }
}
--
2.42.0
More information about the igt-dev
mailing list