[igt-dev] [PATCH i-g-t v2] tests/i915/gem_exec_schedule.c: Switch to gem_sync and gem_read

Chris Wilson chris at chris-wilson.co.uk
Fri Feb 15 00:15:11 UTC 2019


Quoting Antonio Argenziano (2019-02-15 00:04:48)
> use IOCTLs gem_read for reading and, gem_sync to wait on a batch, this
> will help testing platforms that might not expose gtt mapping.
> 
> v2:
>         - use a local helper for reading from BOs. (Chris)
>         - Always sync before reading. (Chris)
> 
> Signed-off-by: Antonio Argenziano <antonio.argenziano at intel.com>
> 
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  tests/i915/gem_exec_schedule.c | 132 ++++++++++++++++-----------------
>  1 file changed, 64 insertions(+), 68 deletions(-)
> 
> diff --git a/tests/i915/gem_exec_schedule.c b/tests/i915/gem_exec_schedule.c
> index 00f9528a..5e48219e 100644
> --- a/tests/i915/gem_exec_schedule.c
> +++ b/tests/i915/gem_exec_schedule.c
> @@ -49,6 +49,26 @@
>  
>  IGT_TEST_DESCRIPTION("Check that we can control the order of execution");
>  
> +static inline
> +uint32_t __sync_read_u32(int fd, uint32_t handle, uint64_t offset)
> +{
> +       uint32_t value;
> +
> +       gem_sync(fd, handle); /* No write hazard lies! */
> +       gem_read(fd, handle, 0, &value, sizeof(value));

Trying to subtly point out that offset is always 0?

> +
> +       return value;
> +
> +}
> +
> +static inline
> +void __sync_range_read_u32(int fd, uint32_t handle, uint32_t *dest, uint64_t size)

I probably would have gone with sync_read_u32_count, or
sync_read(void *dst, uint64_t size)

(I have no idea why people insist that there's an 'e' in dstination)

> @@ -287,22 +304,19 @@ static void smoketest(int fd, unsigned ring, unsigned timeout)
>         }
>         igt_waitchildren();
>  
> -       ptr = gem_mmap__gtt(fd, scratch, 4096, PROT_READ);
> -       gem_set_domain(fd, scratch, /* no write hazard lies! */
> -                       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> +       __sync_range_read_u32(fd, scratch, result, sizeof(result));
>         gem_close(fd, scratch);
>  
>         for (unsigned n = 0; n < ncpus; n++) {
> -               igt_assert_eq_u32(ptr[2*n], ~n);
> +               igt_assert_eq_u32(result[2 * n], ~n);
>                 /*
>                  * Note this count is approximate due to unconstrained
>                  * ordering of the dword writes between engines.
>                  *
>                  * Take the result with a pinch of salt.
>                  */
> -               igt_info("Child[%d] completed %u cycles\n",  n, ptr[2*n+1]);
> +               igt_info("Child[%d] completed %u cycles\n",  n, result[(2 * n) + 1]);

(More brackets) + yes, please. :)

Didn't spot anything else, looks technically correct and quite possibly an
improvement for existing users.
-Chris


More information about the igt-dev mailing list