[Intel-gfx] [igt-dev] [PATCH i-g-t] i915/gem_exec_parallel: Add basic userptr thrashing
Joonas Lahtinen
joonas.lahtinen at linux.intel.com
Mon Sep 28 10:50:29 UTC 2020
Quoting Chris Wilson (2020-08-03 13:14:58)
> Mix in a modicum of generic userptr thrashing for a quick (1s) BAT pass,
> as we have currently no coverage of userptr at all in BAT.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Definitely makes sense as there was a reported userptr regression.
Reviewed-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
Regards, Joonas
> ---
> tests/i915/gem_exec_parallel.c | 31 +++++++++++++++++++++++++++++--
> 1 file changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/tests/i915/gem_exec_parallel.c b/tests/i915/gem_exec_parallel.c
> index bf94b93d4..96feb8250 100644
> --- a/tests/i915/gem_exec_parallel.c
> +++ b/tests/i915/gem_exec_parallel.c
> @@ -45,6 +45,7 @@ static inline uint32_t hash32(uint32_t val)
>
> #define CONTEXTS 0x1
> #define FDS 0x2
> +#define USERPTR 0x4
>
> #define NUMOBJ 16
>
> @@ -164,6 +165,30 @@ static void check_bo(int fd, uint32_t handle, int pass, struct thread *threads)
> igt_assert_eq_u32(result, x);
> }
>
> +static uint32_t handle_create(int fd, unsigned int flags, void **data)
> +{
> + if (flags & USERPTR) {
> + uint32_t handle;
> + void *ptr;
> +
> + posix_memalign(&ptr, 4096, 4096);
> + gem_userptr(fd, ptr, 4096, 0, 0, &handle);
> + *data = ptr;
> +
> + return handle;
> + }
> +
> + return gem_create(fd, 4096);
> +}
> +
> +static void handle_close(int fd, unsigned int flags, uint32_t handle, void *data)
> +{
> + if (flags & USERPTR)
> + free(data);
> +
> + gem_close(fd, handle);
> +}
> +
> static void all(int fd, struct intel_execution_engine2 *engine, unsigned flags)
> {
> const int gen = intel_gen(intel_get_drm_devid(fd));
> @@ -172,6 +197,7 @@ static void all(int fd, struct intel_execution_engine2 *engine, unsigned flags)
> struct thread *threads;
> uint32_t scratch[NUMOBJ], handle[NUMOBJ];
> unsigned engines[16], nengine;
> + void *arg[NUMOBJ];
> int go;
> int i;
>
> @@ -196,7 +222,7 @@ static void all(int fd, struct intel_execution_engine2 *engine, unsigned flags)
> igt_require(nengine);
>
> for (i = 0; i < NUMOBJ; i++) {
> - scratch[i] = handle[i] = gem_create(fd, 4096);
> + scratch[i] = handle[i] = handle_create(fd, flags, &arg[i]);
> if (flags & FDS)
> scratch[i] = gem_flink(fd, handle[i]);
> }
> @@ -233,7 +259,7 @@ static void all(int fd, struct intel_execution_engine2 *engine, unsigned flags)
>
> for (i = 0; i < NUMOBJ; i++) {
> check_bo(fd, handle[i], i, threads);
> - gem_close(fd, handle[i]);
> + handle_close(fd, flags, handle[i], arg[i]);
> }
>
> igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
> @@ -251,6 +277,7 @@ igt_main
> { "basic", 0 },
> { "contexts", CONTEXTS },
> { "fds", FDS },
> + { "userptr", USERPTR },
> { NULL }
> };
> int fd;
> --
> 2.28.0
>
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev
More information about the Intel-gfx
mailing list