[PATCH i-g-t 2/2] tests/intel/xe_vm: Unify bind-flag-invalid and bind-array-flag-invalid test functions

Dandamudi, Priyanka priyanka.dandamudi at intel.com
Tue Aug 19 06:06:07 UTC 2025



> -----Original Message-----
> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of
> Christoph Manszewski
> Sent: 12 August 2025 06:32 PM
> To: igt-dev at lists.freedesktop.org
> Cc: Dugast, Francois <francois.dugast at intel.com>; Brost, Matthew
> <matthew.brost at intel.com>; Manszewski, Christoph
> <christoph.manszewski at intel.com>
> Subject: [PATCH i-g-t 2/2] tests/intel/xe_vm: Unify bind-flag-invalid and bind-
> array-flag-invalid test functions
> 
> Unify the single bind and array bind invalid flag subtests by using a common
> test function which parametrizes the number of bind operations to perform.
> 
> Cc: Matthew Brost <matthew.brost at intel.com>
> Cc: Francois Dugast <francois.dugast at intel.com>
> Signed-off-by: Christoph Manszewski <christoph.manszewski at intel.com>
> ---
>  tests/intel/xe_vm.c | 98 +++++++--------------------------------------
>  1 file changed, 15 insertions(+), 83 deletions(-)
> 
> diff --git a/tests/intel/xe_vm.c b/tests/intel/xe_vm.c index
> 236494407..7a37bfe05 100644
> --- a/tests/intel/xe_vm.c
> +++ b/tests/intel/xe_vm.c
> @@ -2191,86 +2191,6 @@ static bool pxp_interface_supported(int fd)
>  	return ret != -EINVAL;
>  }
> 
> -/**
> - * SUBTEST: bind-flag-invalid
> - * Functionality: bind
> - * Description: Ensure invalid bind flags are rejected.
> - * Test category: negative test
> - */
> -static void bind_flag_invalid(int fd)
> -{
> -	uint32_t bo, bo_size = xe_get_default_alignment(fd);
> -	uint64_t addr = 0x1a0000;
> -	uint32_t vm;
> -	struct drm_xe_vm_bind bind;
> -	struct drm_xe_sync sync[1] = {
> -		{ .type = DRM_XE_SYNC_TYPE_SYNCOBJ, .flags =
> DRM_XE_SYNC_FLAG_SIGNAL, },
> -	};
> -
> -	vm = xe_vm_create(fd, 0, 0);
> -	bo = xe_bo_create(fd, vm, bo_size, vram_if_possible(fd, 0), 0);
> -	sync[0].handle = syncobj_create(fd, 0);
> -
> -	memset(&bind, 0, sizeof(bind));
> -	bind.vm_id = vm;
> -	bind.num_binds = 1;
> -	bind.bind.obj = bo;
> -	bind.bind.range = bo_size;
> -	bind.bind.addr = addr;
> -	bind.bind.op = DRM_XE_VM_BIND_OP_MAP;
> -	bind.bind.pat_index = intel_get_pat_idx_wb(fd);
> -	bind.num_syncs = 1;
> -	bind.syncs = (uintptr_t)sync;
> -
> -	/* Using valid flags should work */
> -	bind.bind.flags = 0;
> -	igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> -	igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> -	syncobj_reset(fd, &sync[0].handle, 1);
> -
> -	bind.bind.flags = DRM_XE_VM_BIND_FLAG_READONLY;
> -	igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> -	igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> -	syncobj_reset(fd, &sync[0].handle, 1);
> -
> -	bind.bind.flags = DRM_XE_VM_BIND_FLAG_IMMEDIATE;
> -	igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> -	igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> -	syncobj_reset(fd, &sync[0].handle, 1);
> -
> -	if (pxp_interface_supported(fd)) {
> -		bind.bind.flags = DRM_XE_VM_BIND_FLAG_CHECK_PXP;
> -		igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> -		igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0,
> NULL));
> -		syncobj_reset(fd, &sync[0].handle, 1);
> -	}
> -
> -	bind.bind.flags = DRM_XE_VM_BIND_FLAG_NULL;
> -	bind.bind.obj = 0;
> -	igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> -	igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> -	syncobj_reset(fd, &sync[0].handle, 1);
> -	bind.bind.obj = bo;
> -
> -	bind.bind.flags = DRM_XE_VM_BIND_FLAG_DUMPABLE;
> -	igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> -	igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> -	syncobj_reset(fd, &sync[0].handle, 1);
> -
> -	/* Using invalid flags should not work */
> -	bind.bind.flags = 1 << 5;
> -	igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> -	do_ioctl_err(fd, DRM_IOCTL_XE_VM_BIND, &bind, EINVAL);
> -
> -	/* Using valid flags should still work */
> -	bind.bind.flags = 0;
> -	igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> -	igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> -
> -	syncobj_destroy(fd, sync[0].handle);
> -	xe_vm_destroy(fd, vm);
> -}
> -
>  static void __bind_flag_valid(int fd, uint32_t bo, struct drm_xe_vm_bind bind,
>  			      struct drm_xe_vm_bind_op *bind_ops, int
> num_binds)  { @@ -2293,6 +2213,9 @@ static void __bind_flag_valid(int fd,
> uint32_t bo, struct drm_xe_vm_bind bind,
>  			bind_ops[j].obj = valid_flags[i] ==
> DRM_XE_VM_BIND_FLAG_NULL ? 0 : bo;
>  		}
> 
> +		if (num_binds == 1)
> +			bind.bind = bind_ops[0];
> +
>  		igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
>  		igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0,
> NULL));
>  		syncobj_reset(fd, &sync[0].handle, 1); @@ -2300,6 +2223,11
> @@ static void __bind_flag_valid(int fd, uint32_t bo, struct drm_xe_vm_bind
> bind,  }
> 
>  /**
> + * SUBTEST: bind-flag-invalid
> + * Functionality: bind
> + * Description: Ensure invalid bind flags are rejected.
> + * Test category: negative test
> + *
>   * SUBTEST: bind-array-flag-invalid
>   * Functionality: bind
>   * Description: Ensure invalid bind flags are rejected when submitting an
> array of binds.
> @@ -2317,7 +2245,7 @@ static void test_bind_flag_invalid(int fd, int
> num_binds)
>  		{ .type = DRM_XE_SYNC_TYPE_SYNCOBJ, .flags =
> DRM_XE_SYNC_FLAG_SIGNAL, },
>  	};
> 
> -	igt_assert(num_binds > 1);
> +	igt_assert(num_binds > 0);
> 
>  	vm = xe_vm_create(fd, 0, 0);
>  	bo = xe_bo_create(fd, vm, bo_size, vram_if_possible(fd, 0), 0); @@ -
> 2333,7 +2261,8 @@ static void test_bind_flag_invalid(int fd, int num_binds)
>  	}
> 
>  	memset(&bind, 0, sizeof(bind));
> -	bind.vector_of_binds = to_user_pointer(bind_ops);
> +	if (num_binds > 1)
> +		bind.vector_of_binds = to_user_pointer(bind_ops);
>  	bind.num_binds = num_binds;
>  	bind.syncs = to_user_pointer(sync);
>  	bind.num_syncs = 1;
> @@ -2348,6 +2277,9 @@ static void test_bind_flag_invalid(int fd, int
> num_binds)
>  		bind_ops[i].obj = bo;
>  	}
> 
> +	if (num_binds == 1)
> +		bind.bind = bind_ops[0];
> +
>  	do_ioctl_err(fd, DRM_IOCTL_XE_VM_BIND, &bind, EINVAL);
> 
>  	/* Using valid flags should still work */ @@ -2676,7 +2608,7 @@
> igt_main
>  		userptr_invalid(fd);
> 
>  	igt_subtest("bind-flag-invalid")
> -		bind_flag_invalid(fd);
> +		test_bind_flag_invalid(fd, 1);
> 
>  	igt_subtest("compact-64k-pages")
>  		xe_for_each_engine(fd, hwe) {
> --
> 2.47.1
LGTM,
Reviewed-by: Priyanka Dandamudi <priyanka.dandamudi at intel.com>



More information about the igt-dev mailing list