[i-g-t 1/2] tests/intel/xe_exec_fault_mode: Test to check the access of invalid va
Kumar, Janga Rahul
janga.rahul.kumar at intel.com
Wed Mar 20 09:01:03 UTC 2024
> -----Original Message-----
> From: Dandamudi, Priyanka <priyanka.dandamudi at intel.com>
> Sent: Wednesday, March 13, 2024 3:03 PM
> To: Dandamudi, Priyanka <priyanka.dandamudi at intel.com>; Bommu, Krishnaiah
> <krishnaiah.bommu at intel.com>; Kumar, Janga Rahul
> <janga.rahul.kumar at intel.com>; igt-dev at lists.freedesktop.org
> Subject: [i-g-t 1/2] tests/intel/xe_exec_fault_mode: Test to check the access of
> invalid va
>
> From: Priyanka Dandamudi <priyanka.dandamudi at intel.com>
>
> Added a test where it submits a batch to access invalid va (not binded) Expected
> result to be -EIO from user fence ioctl caused due to CAT error.
>
> Cc: Janga Rahul Kumar <janga.rahul.kumar at intel.com>
> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray at intel.com>
> Signed-off-by: Priyanka Dandamudi <priyanka.dandamudi at intel.com>
> Signed-off-by: Bommu Krishnaiah <krishnaiah.bommu at intel.com>
> ---
> tests/intel/xe_exec_fault_mode.c | 43 ++++++++++++++++++++++++--------
> 1 file changed, 32 insertions(+), 11 deletions(-)
>
> diff --git a/tests/intel/xe_exec_fault_mode.c
> b/tests/intel/xe_exec_fault_mode.c
> index 20a7cf8fe..0914e221b 100644
> --- a/tests/intel/xe_exec_fault_mode.c
> +++ b/tests/intel/xe_exec_fault_mode.c
> @@ -31,8 +31,13 @@
> #define BIND_EXEC_QUEUE (0x1 << 4)
> #define PREFETCH (0x1 << 5)
> #define INVALID_FAULT (0x1 << 6)
> +#define INVALID_VA (0x1 << 7)
>
> /**
> + * SUBTEST: invalid-va
> + * Description: Access invalid va and check for EIO through user fence.
> + * Test category: functionality test
> + *
> * SUBTEST: once-%s
> * Description: Run %arg[1] fault mode test only once
> * Test category: functionality test
> @@ -157,13 +162,11 @@ test_exec(int fd, struct
> drm_xe_engine_class_instance *eci,
>
> sync[0].addr = to_user_pointer(&data[0].vm_sync);
> if (bo)
> - xe_vm_bind_async(fd, vm, bind_exec_queues[0], bo, 0, addr,
> - bo_size, sync, 1);
> + xe_vm_bind_async(fd, vm, bind_exec_queues[0], bo, 0, addr,
> bo_size,
> +sync, 1);
> else
> xe_vm_bind_userptr_async(fd, vm, bind_exec_queues[0],
> to_user_pointer(data), addr,
> bo_size, sync, 1);
> -
> #define ONE_SEC MS_TO_NS(1000)
> xe_wait_ufence(fd, &data[0].vm_sync, USER_FENCE_VALUE,
> bind_exec_queues[0], ONE_SEC); @@ -186,6 +189,9 @@
> test_exec(int fd, struct drm_xe_engine_class_instance *eci,
> int e = i % n_exec_queues;
>
> b = 0;
> + if (flags & INVALID_VA)
> + sdi_addr = 0x1fffffffffff000;
> +
> data[i].batch[b++] = MI_STORE_DWORD_IMM_GEN4;
> data[i].batch[b++] = sdi_addr;
> data[i].batch[b++] = sdi_addr >> 32;
> @@ -257,14 +263,20 @@ test_exec(int fd, struct
> drm_xe_engine_class_instance *eci,
> igt_assert(data != MAP_FAILED);
> }
> }
> -
> if (!(flags & INVALID_FAULT)) {
> + int64_t timeout = ONE_SEC;
> +
> j = flags & INVALIDATE ? n_execs - 1 : 0;
> - for (i = j; i < n_execs; i++)
> - xe_wait_ufence(fd, &data[i].exec_sync,
> USER_FENCE_VALUE,
> - exec_queues[i % n_exec_queues],
> ONE_SEC);
> - }
>
> + for (i = j; i < n_execs; i++) {
> + if (flags & INVALID_VA)
> + igt_assert_eq(__xe_wait_ufence(fd,
> &data[i].exec_sync, USER_FENCE_VALUE,
> + exec_queues[i %
> n_exec_queues], &timeout), EIO);
> + else
> + igt_assert_eq(__xe_wait_ufence(fd,
> &data[i].exec_sync, USER_FENCE_VALUE,
> + exec_queues[i %
> n_exec_queues], &timeout), 0);
> + }
> + }
> sync[0].addr = to_user_pointer(&data[0].vm_sync);
> xe_vm_unbind_async(fd, vm, bind_exec_queues[0], 0, addr, bo_size,
> sync, 1);
> @@ -272,8 +284,12 @@ test_exec(int fd, struct drm_xe_engine_class_instance
> *eci,
> bind_exec_queues[0], ONE_SEC);
>
> if (!(flags & INVALID_FAULT)) {
> - for (i = j; i < n_execs; i++)
> - igt_assert_eq(data[i].data, 0xc0ffee);
> + for (i = j; i < n_execs; i++) {
> + if (flags & INVALID_VA)
> + igt_assert_neq(data[i].data, 0xc0ffee);
This check looks obvious as you have updated the sdi_addr, Better to avoid this check for INVALID_VA subtest.
-Rahul
> + else
> + igt_assert_eq(data[i].data, 0xc0ffee);
> + }
> }
>
> for (i = 0; i < n_exec_queues; i++) {
> @@ -366,6 +382,11 @@ igt_main
> s->flags);
> }
>
> - igt_fixture
> + igt_subtest("invalid-va")
> + xe_for_each_engine(fd, hwe)
> + test_exec(fd, hwe, 1, 1, INVALID_VA);
> +
> + igt_fixture {
> drm_close_driver(fd);
> + }
> }
> --
> 2.25.1
More information about the igt-dev
mailing list