[PATCH i-g-t] tests/intel/xe_vm: fix xe_bb_size() conversion
Zbigniew Kempczyński
zbigniew.kempczynski at intel.com
Thu Feb 1 18:48:47 UTC 2024
On Thu, Feb 01, 2024 at 10:06:37AM +0000, Matthew Auld wrote:
> The large* tests need to be able to partition the bo_size without
> breaking any alignment restrictions, and adding on the pre-fetch size
> breaks that. Rather keep the passed in bo_size as-is and add the
> prefetch size as hidden padding at the end.
>
> Signed-off-by: Matthew Auld <matthew.auld at intel.com>
> Cc: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> ---
> tests/intel/xe_vm.c | 22 ++++++++++++----------
> 1 file changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/tests/intel/xe_vm.c b/tests/intel/xe_vm.c
> index 67276b220..fe667e64d 100644
> --- a/tests/intel/xe_vm.c
> +++ b/tests/intel/xe_vm.c
> @@ -954,6 +954,7 @@ test_large_binds(int fd, struct drm_xe_engine_class_instance *eci,
> .num_syncs = 2,
> .syncs = to_user_pointer(sync),
> };
> + size_t bo_size_prefetch, padding;
> uint64_t addr = 0x1ull << 30, base_addr = 0x1ull << 30;
> uint32_t vm;
> uint32_t exec_queues[MAX_N_EXEC_QUEUES];
> @@ -975,20 +976,21 @@ test_large_binds(int fd, struct drm_xe_engine_class_instance *eci,
> igt_assert(n_exec_queues <= MAX_N_EXEC_QUEUES);
> vm = xe_vm_create(fd, 0, 0);
>
> - bo_size = xe_bb_size(fd, bo_size);
> -
> if (flags & LARGE_BIND_FLAG_USERPTR) {
> - map = aligned_alloc(xe_get_default_alignment(fd), bo_size);
> + bo_size_prefetch = xe_bb_size(fd, bo_size);
> + map = aligned_alloc(xe_get_default_alignment(fd), bo_size_prefetch);
> igt_assert(map);
> } else {
> igt_skip_on(xe_visible_vram_size(fd, 0) && bo_size >
> xe_visible_vram_size(fd, 0));
>
> - bo = xe_bo_create(fd, vm, bo_size,
> + bo_size_prefetch = xe_bb_size(fd, bo_size);
> + bo = xe_bo_create(fd, vm, bo_size_prefetch,
> vram_if_possible(fd, eci->gt_id),
> DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM);
> map = xe_bo_map(fd, bo, bo_size);
> }
> + padding = bo_size_prefetch - bo_size;
>
> for (i = 0; i < n_exec_queues; i++) {
> exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0);
> @@ -1001,19 +1003,19 @@ test_large_binds(int fd, struct drm_xe_engine_class_instance *eci,
> xe_vm_bind_userptr_async(fd, vm, 0, to_user_pointer(map),
> addr, bo_size / 2, NULL, 0);
> xe_vm_bind_userptr_async(fd, vm, 0, to_user_pointer(map) + bo_size / 2,
> - addr + bo_size / 2, bo_size / 2,
> + addr + bo_size / 2, bo_size / 2 + padding,
> sync, 1);
> } else {
> xe_vm_bind_userptr_async(fd, vm, 0, to_user_pointer(map),
> - addr, bo_size, sync, 1);
> + addr, bo_size + padding, sync, 1);
> }
> } else {
> if (flags & LARGE_BIND_FLAG_SPLIT) {
> xe_vm_bind_async(fd, vm, 0, bo, 0, addr, bo_size / 2, NULL, 0);
> xe_vm_bind_async(fd, vm, 0, bo, bo_size / 2, addr + bo_size / 2,
> - bo_size / 2, sync, 1);
> + bo_size / 2 + padding, sync, 1);
> } else {
> - xe_vm_bind_async(fd, vm, 0, bo, 0, addr, bo_size, sync, 1);
> + xe_vm_bind_async(fd, vm, 0, bo, 0, addr, bo_size + padding, sync, 1);
> }
> }
>
> @@ -1061,9 +1063,9 @@ test_large_binds(int fd, struct drm_xe_engine_class_instance *eci,
> xe_vm_unbind_async(fd, vm, 0, 0, base_addr,
> bo_size / 2, NULL, 0);
> xe_vm_unbind_async(fd, vm, 0, 0, base_addr + bo_size / 2,
> - bo_size / 2, sync, 1);
> + bo_size / 2 + padding, sync, 1);
> } else {
> - xe_vm_unbind_async(fd, vm, 0, 0, base_addr, bo_size,
> + xe_vm_unbind_async(fd, vm, 0, 0, base_addr, bo_size + padding,
> sync, 1);
> }
> igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> --
> 2.43.0
>
LGTM:
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
--
Zbigniew
More information about the igt-dev
mailing list