[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