[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