[PATCH i-g-t v2 8/8] tests/intel/gem_mmap: add basic multi-GPU subtest
Piatkowski, Dominik Karol
dominik.karol.piatkowski at intel.com
Thu Jan 25 07:59:36 UTC 2024
Hi Kamil,
LGTM.
Reviewed-by: Dominik Karol Piątkowski <dominik.karol.piatkowski at intel.com>
> -----Original Message-----
> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of Kamil
> Konieczny
> Sent: Wednesday, January 24, 2024 9:42 PM
> To: igt-dev at lists.freedesktop.org
> Subject: [PATCH i-g-t v2 8/8] tests/intel/gem_mmap: add basic multi-GPU
> subtest
>
> 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