[PATCH] xe_exec_reset: Enhance spin test

Dandamudi, Priyanka priyanka.dandamudi at intel.com
Wed Jul 24 05:12:17 UTC 2024



> -----Original Message-----
> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of Matthew
> Brost
> Sent: Saturday, July 13, 2024 3:40 AM
> To: igt-dev at lists.freedesktop.org
> Subject: [PATCH] xe_exec_reset: Enhance spin test
> 
> Let's make spin test a bit moe robust by doing multiple iterations and passing
> in an already singaled sync-obj.
> 
> Signed-off-by: Matthew Brost <matthew.brost at intel.com>
> ---
>  tests/intel/xe_exec_reset.c | 48 ++++++++++++++++++++++++-------------
>  1 file changed, 32 insertions(+), 16 deletions(-)
> 
> diff --git a/tests/intel/xe_exec_reset.c b/tests/intel/xe_exec_reset.c index
> dcb22f275f..87661a950b 100644
> --- a/tests/intel/xe_exec_reset.c
> +++ b/tests/intel/xe_exec_reset.c
> @@ -22,11 +22,17 @@
>  #include "xe/xe_spin.h"
>  #include <string.h>
> 
> +#define SYNC_OBJ_SIGNALED	(0x1 << 0)
> +
>  /**
>   * SUBTEST: spin
>   * Description: test spin
> + *
> + * SUBTEST: spin-signaled
> + * Description: test spin with signaled sync obj
>   */
> -static void test_spin(int fd, struct drm_xe_engine_class_instance *eci)
> +static void test_spin(int fd, struct drm_xe_engine_class_instance *eci,
> +		      unsigned int flags)
>  {
>  	uint32_t vm;
>  	uint64_t addr = 0x1a0000;
> @@ -45,6 +51,7 @@ static void test_spin(int fd, struct
> drm_xe_engine_class_instance *eci)
>  	uint32_t bo = 0;
>  	struct xe_spin *spin;
>  	struct xe_spin_opts spin_opts = { .addr = addr, .preempt = false };
> +	int i;
> 
>  	vm = xe_vm_create(fd, 0, 0);
>  	bo_size = sizeof(*spin);
> @@ -56,28 +63,33 @@ static void test_spin(int fd, struct
> drm_xe_engine_class_instance *eci)
>  	spin = xe_bo_map(fd, bo, bo_size);
> 
>  	exec_queue = xe_exec_queue_create(fd, vm, eci, 0);
> -	syncobj = syncobj_create(fd, 0);
> +	syncobj = syncobj_create(fd, (flags & SYNC_OBJ_SIGNALED) ?
> +				 DRM_SYNCOBJ_CREATE_SIGNALED : 0);
> 
>  	sync[0].handle = syncobj_create(fd, 0);
>  	xe_vm_bind_async(fd, vm, 0, bo, 0, addr, bo_size, sync, 1);
> 
> -	xe_spin_init(spin, &spin_opts);
> +#define N_TIMES 4
> +	for (i = 0; i < N_TIMES; ++i) {
> +		xe_spin_init(spin, &spin_opts);
> 
> -	sync[0].flags &= ~DRM_XE_SYNC_FLAG_SIGNAL;
> -	sync[1].flags |= DRM_XE_SYNC_FLAG_SIGNAL;
> -	sync[1].handle = syncobj;
> +		sync[0].flags &= ~DRM_XE_SYNC_FLAG_SIGNAL;
> +		sync[1].flags |= DRM_XE_SYNC_FLAG_SIGNAL;
> +		sync[1].handle = syncobj;
> 
> -	exec.exec_queue_id = exec_queue;
> -	exec.address = addr;
> -	xe_exec(fd, &exec);
> +		exec.exec_queue_id = exec_queue;
> +		exec.address = addr;
> +		xe_exec(fd, &exec);
> 
> -	xe_spin_wait_started(spin);
> -	usleep(50000);
> -	igt_assert(!syncobj_wait(fd, &syncobj, 1, 1, 0, NULL));
> -	xe_spin_end(spin);
> +		xe_spin_wait_started(spin);
> +		usleep(50000);
> +		igt_assert(!syncobj_wait(fd, &syncobj, 1, 1, 0, NULL));
> +		xe_spin_end(spin);
> 
> -	igt_assert(syncobj_wait(fd, &syncobj, 1, INT64_MAX, 0, NULL));
> -	igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> +		igt_assert(syncobj_wait(fd, &syncobj, 1, INT64_MAX, 0,
> NULL));
> +		igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0,
> NULL));
> +	}
> +#undef N_TIMES
> 
>  	sync[0].flags |= DRM_XE_SYNC_FLAG_SIGNAL;
>  	xe_vm_unbind_async(fd, vm, 0, 0, addr, bo_size, sync, 1); @@ -729,7
> +741,11 @@ igt_main
> 
>  	igt_subtest("spin")
>  		xe_for_each_engine(fd, hwe)
> -			test_spin(fd, hwe);
> +			test_spin(fd, hwe, 0);
> +
> +	igt_subtest("spin-signaled")
> +		xe_for_each_engine(fd, hwe)
> +			test_spin(fd, hwe, SYNC_OBJ_SIGNALED);
> 
>  	igt_subtest("cat-error")
>  		xe_for_each_engine(fd, hwe)
> --
> 2.34.1
LGTM
Reviewed-by: Priyanka Dandamudi <Priyanka.dandamudi at intel.com>


More information about the igt-dev mailing list