* [igt-dev] [RFC PATCH 0/3] Syncs vs async exec/bind uAPI change
@ 2023-12-07 6:03 Matthew Brost
2023-12-07 6:03 ` [igt-dev] [RFC PATCH 1/3] xe_vm: Add section to test zero number of VM binds Matthew Brost
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Matthew Brost @ 2023-12-07 6:03 UTC (permalink / raw)
To: igt-dev
IGT changes for Xe uAPI changes [1].
A little more cleanup should be done but enough to get all IGTs passing.
Will finish cleanup in another rev or a follow up series.
Matt
[1] https://patchwork.freedesktop.org/series/127472/
Matthew Brost (3):
xe_vm: Add section to test zero number of VM binds
xe_exec_basic: Add section to test zero number of BB in exec IOCTL
drm-uapi/xe: Uniform async vs sync handling
benchmarks/gem_wsim.c | 13 ++-
include/drm-uapi/xe_drm.h | 70 +++++++++------
lib/igt_fb.c | 2 +-
lib/intel_batchbuffer.c | 7 +-
lib/intel_compute.c | 2 +-
lib/intel_ctx.c | 4 +-
lib/xe/xe_ioctl.c | 66 +++++++-------
lib/xe/xe_ioctl.h | 11 +--
lib/xe/xe_query.c | 3 +-
lib/xe/xe_spin.c | 8 +-
lib/xe/xe_util.c | 4 +-
tests/intel/xe_access_counter.c | 2 +-
tests/intel/xe_ccs.c | 4 +-
tests/intel/xe_copy_basic.c | 2 +-
tests/intel/xe_create.c | 6 +-
tests/intel/xe_dma_buf_sync.c | 4 +-
tests/intel/xe_drm_fdinfo.c | 8 +-
tests/intel/xe_evict.c | 37 ++++----
tests/intel/xe_evict_ccs.c | 2 +-
tests/intel/xe_exec_balancer.c | 19 ++---
tests/intel/xe_exec_basic.c | 118 +++++++++++++++++++++++--
tests/intel/xe_exec_compute_mode.c | 11 ++-
tests/intel/xe_exec_fault_mode.c | 9 +-
tests/intel/xe_exec_queue_property.c | 2 +-
tests/intel/xe_exec_reset.c | 27 +++---
tests/intel/xe_exec_store.c | 18 ++--
tests/intel/xe_exec_threads.c | 26 +++---
tests/intel/xe_exercise_blt.c | 2 +-
tests/intel/xe_huc_copy.c | 2 +-
tests/intel/xe_intel_bb.c | 2 +-
tests/intel/xe_noexec_ping_pong.c | 6 +-
tests/intel/xe_pat.c | 4 +-
tests/intel/xe_perf_pmu.c | 12 +--
tests/intel/xe_pm.c | 6 +-
tests/intel/xe_pm_residency.c | 4 +-
tests/intel/xe_spin_batch.c | 4 +-
tests/intel/xe_vm.c | 123 ++++++++++++++++++++-------
tests/intel/xe_waitfence.c | 8 +-
38 files changed, 412 insertions(+), 246 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 6+ messages in thread* [igt-dev] [RFC PATCH 1/3] xe_vm: Add section to test zero number of VM binds 2023-12-07 6:03 [igt-dev] [RFC PATCH 0/3] Syncs vs async exec/bind uAPI change Matthew Brost @ 2023-12-07 6:03 ` Matthew Brost 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 2/3] xe_exec_basic: Add section to test zero number of BB in exec IOCTL Matthew Brost ` (2 subsequent siblings) 3 siblings, 0 replies; 6+ messages in thread From: Matthew Brost @ 2023-12-07 6:03 UTC (permalink / raw) To: igt-dev Verify the bind queue ordering works wrt out-sync signaling when zero number of binds passed to VM bind IOCTL. Signed-off-by: Matthew Brost <matthew.brost@intel.com> --- lib/xe/xe_ioctl.c | 13 ++++++++++ lib/xe/xe_ioctl.h | 2 ++ tests/intel/xe_vm.c | 63 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) diff --git a/lib/xe/xe_ioctl.c b/lib/xe/xe_ioctl.c index c91bf25c49..761e91eb3a 100644 --- a/lib/xe/xe_ioctl.c +++ b/lib/xe/xe_ioctl.c @@ -164,6 +164,19 @@ void xe_vm_bind_async(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, num_syncs, 0, 0); } +void xe_vm_bind_zero(int fd, uint32_t vm, uint32_t exec_queue, + struct drm_xe_sync *sync, uint32_t num_syncs) +{ + struct drm_xe_vm_bind bind = { + .vm_id = vm, + .num_syncs = num_syncs, + .syncs = (uintptr_t)sync, + .exec_queue_id = exec_queue, + }; + + igt_assert_eq(igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind), 0); +} + void xe_vm_bind_async_flags(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, uint64_t offset, uint64_t addr, uint64_t size, struct drm_xe_sync *sync, uint32_t num_syncs, diff --git a/lib/xe/xe_ioctl.h b/lib/xe/xe_ioctl.h index 32b34b15a3..a302418544 100644 --- a/lib/xe/xe_ioctl.h +++ b/lib/xe/xe_ioctl.h @@ -38,6 +38,8 @@ void xe_vm_prefetch_async(int fd, uint32_t vm, uint32_t exec_queue, void xe_vm_bind_async(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, uint64_t offset, uint64_t addr, uint64_t size, struct drm_xe_sync *sync, uint32_t num_syncs); +void xe_vm_bind_zero(int fd, uint32_t vm, uint32_t exec_queue, + struct drm_xe_sync *sync, uint32_t num_syncs); void xe_vm_bind_userptr_async(int fd, uint32_t vm, uint32_t exec_queue, uint64_t userptr, uint64_t addr, uint64_t size, struct drm_xe_sync *sync, uint32_t num_syncs); diff --git a/tests/intel/xe_vm.c b/tests/intel/xe_vm.c index fb65793d11..62bf950504 100644 --- a/tests/intel/xe_vm.c +++ b/tests/intel/xe_vm.c @@ -730,6 +730,63 @@ test_bind_execqueues_independent(int fd, struct drm_xe_engine_class_instance *ec xe_vm_destroy(fd, vm); } +/** + * SUBTEST: zero-binds + * Description: Test zero binds in IOCTL + * Functionality: bind engines + * Run type: BAT + */ + +static void test_zero_binds(int fd, struct drm_xe_engine_class_instance *eci) +{ + uint32_t vm; + uint64_t addr = 0x1a0000; + struct drm_xe_sync sync[1] = { + { .flags = DRM_XE_SYNC_TYPE_SYNCOBJ | DRM_XE_SYNC_FLAG_SIGNAL, }, + }; + size_t bo_size; + uint32_t bo = 0; + struct xe_cork cork; + + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + bo_size = ALIGN(xe_cs_prefetch_size(fd), + xe_get_default_alignment(fd)); + bo = xe_bo_create(fd, vm, bo_size, + vram_if_possible(fd, eci->gt_id), + DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM); + + xe_cork_init(fd, eci, &cork); + xe_cork_wait_started(&cork); + + /* Initial bind behind cork */ + sync[0].handle = cork.syncobj; + sync[0].flags &= ~DRM_XE_SYNC_FLAG_SIGNAL; + xe_vm_bind_async(fd, vm, 0, bo, 0, addr, bo_size, sync, 1); + + /* Bind /w num_binds == 0 */ + sync[0].handle = syncobj_create(fd, 0); + sync[0].flags |= DRM_XE_SYNC_FLAG_SIGNAL; + xe_vm_bind_zero(fd, vm, 0, sync, 1); + + /* Let jobs runs for a bit */ + usleep(100000); + + /* both binds are waiting */ + igt_assert(!syncobj_wait(fd, &sync[0].handle, 1, 0, 0, NULL)); + + /* Release cork */ + xe_cork_end(&cork); + xe_cork_wait_done(&cork); + xe_cork_fini(&cork); + + /* both binds are done */ + igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL)); + + syncobj_destroy(fd, sync[0].handle); + gem_close(fd, bo); + xe_vm_destroy(fd, vm); +} + #define BIND_ARRAY_BIND_EXEC_QUEUE_FLAG (0x1 << 0) @@ -1917,6 +1974,12 @@ igt_main xe_for_each_engine(fd, hwe) test_bind_execqueues_independent(fd, hwe, CONFLICT); + igt_subtest("zero-binds") + xe_for_each_engine(fd, hwe) { + test_zero_binds(fd, hwe); + break; + } + igt_subtest("bind-array-twice") xe_for_each_engine(fd, hwe) test_bind_array(fd, hwe, 2, 0); -- 2.34.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [igt-dev] [RFC PATCH 2/3] xe_exec_basic: Add section to test zero number of BB in exec IOCTL 2023-12-07 6:03 [igt-dev] [RFC PATCH 0/3] Syncs vs async exec/bind uAPI change Matthew Brost 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 1/3] xe_vm: Add section to test zero number of VM binds Matthew Brost @ 2023-12-07 6:03 ` Matthew Brost 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 3/3] drm-uapi/xe: Uniform async vs sync handling Matthew Brost 2023-12-07 7:36 ` [igt-dev] ✗ CI.xeBAT: failure for Syncs vs async exec/bind uAPI change Patchwork 3 siblings, 0 replies; 6+ messages in thread From: Matthew Brost @ 2023-12-07 6:03 UTC (permalink / raw) To: igt-dev Verify the exec queue ordering works wrt out-sync signaling when zero number of BB passed to exec IOCTL. Signed-off-by: Matthew Brost <matthew.brost@intel.com> --- tests/intel/xe_exec_basic.c | 108 ++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/tests/intel/xe_exec_basic.c b/tests/intel/xe_exec_basic.c index 2defd1e358..b20581382c 100644 --- a/tests/intel/xe_exec_basic.c +++ b/tests/intel/xe_exec_basic.c @@ -17,6 +17,7 @@ #include "xe/xe_ioctl.h" #include "xe/xe_query.h" +#include "xe/xe_spin.h" #include <string.h> #define MAX_N_EXEC_QUEUES 16 @@ -300,6 +301,109 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, } } +/** + * SUBTEST: zero-execs + * Description: Test zero execs in IOCTL + * Functionality: exec IOCTL + * Run type: BAT + */ + +static void test_zero_execs(int fd, struct drm_xe_engine_class_instance *eci, + int n_execs) +{ + uint32_t vm; + uint64_t addr = 0x1a0000; + struct drm_xe_sync sync[2] = { + { .flags = DRM_XE_SYNC_TYPE_SYNCOBJ | DRM_XE_SYNC_FLAG_SIGNAL, }, + { .flags = DRM_XE_SYNC_TYPE_SYNCOBJ | DRM_XE_SYNC_FLAG_SIGNAL, }, + }; + struct drm_xe_exec exec = { + .num_batch_buffer = 1, + .num_syncs = 1, + .syncs = to_user_pointer(sync), + }; + size_t bo_size; + uint32_t bo = 0; + uint32_t syncobj; + uint32_t exec_queue; + struct xe_cork cork; + struct { + uint32_t batch[16]; + uint64_t pad; + uint32_t data; + } *data; + int i, b; + + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + bo_size = sizeof(*data) * n_execs; + bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), + xe_get_default_alignment(fd)); + bo = xe_bo_create(fd, vm, bo_size, + vram_if_possible(fd, eci->gt_id), + DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM); + data = xe_bo_map(fd, bo, bo_size); + exec_queue = xe_exec_queue_create(fd, vm, eci, 0); + + xe_cork_init(fd, eci, &cork); + xe_cork_wait_started(&cork); + + /* Initial bind behind cork */ + sync[0].handle = syncobj = syncobj_create(fd, 0); + sync[0].flags |= DRM_XE_SYNC_FLAG_SIGNAL; + sync[1].handle = cork.syncobj; + sync[1].flags &= ~DRM_XE_SYNC_FLAG_SIGNAL; + xe_vm_bind_async(fd, vm, 0, bo, 0, addr, bo_size, sync, 2); + + /* Exec behind bind */ + for (i = 0; i < n_execs; i++) { + uint64_t batch_offset = (char *)&data[i].batch - (char *)data; + uint64_t batch_addr = addr + batch_offset; + uint64_t sdi_offset = (char *)&data[i].data - (char *)data; + uint64_t sdi_addr = addr + sdi_offset; + + b = 0; + data[i].batch[b++] = MI_STORE_DWORD_IMM_GEN4; + data[i].batch[b++] = sdi_addr; + data[i].batch[b++] = sdi_addr >> 32; + data[i].batch[b++] = 0xc0ffee; + data[i].batch[b++] = MI_BATCH_BUFFER_END; + igt_assert(b <= ARRAY_SIZE(data[i].batch)); + + sync[0].flags &= ~DRM_XE_SYNC_FLAG_SIGNAL; + + exec.exec_queue_id = exec_queue; + exec.address = batch_addr; + xe_exec(fd, &exec); + } + + /* Exec with no batch buffer */ + sync[0].handle = syncobj_create(fd, 0); + sync[0].flags |= DRM_XE_SYNC_FLAG_SIGNAL; + exec.num_batch_buffer = 0; + exec.address = 0; + xe_exec(fd, &exec); + + /* Let jobs runs for a bit */ + usleep(100000); + + /* both bind and execs are waiting */ + igt_assert(!syncobj_wait(fd, &syncobj, 1, 0, 0, NULL)); + igt_assert(!syncobj_wait(fd, &sync[0].handle, 1, 0, 0, NULL)); + + /* Release cork */ + xe_cork_end(&cork); + xe_cork_wait_done(&cork); + xe_cork_fini(&cork); + + /* both binds are done */ + igt_assert(syncobj_wait(fd, &syncobj, 1, INT64_MAX, 0, NULL)); + igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL)); + + syncobj_destroy(fd, sync[0].handle); + gem_close(fd, bo); + xe_vm_destroy(fd, vm); +} + igt_main { struct drm_xe_engine_class_instance *hwe; @@ -369,6 +473,10 @@ igt_main test_exec(fd, hwe, 1, 0, 1, s->flags); } + igt_subtest("zero-execs") + xe_for_each_engine(fd, hwe) + test_zero_execs(fd, hwe, 1); + igt_fixture drm_close_driver(fd); } -- 2.34.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [igt-dev] [RFC PATCH 3/3] drm-uapi/xe: Uniform async vs sync handling 2023-12-07 6:03 [igt-dev] [RFC PATCH 0/3] Syncs vs async exec/bind uAPI change Matthew Brost 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 1/3] xe_vm: Add section to test zero number of VM binds Matthew Brost 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 2/3] xe_exec_basic: Add section to test zero number of BB in exec IOCTL Matthew Brost @ 2023-12-07 6:03 ` Matthew Brost 2023-12-07 19:59 ` Rodrigo Vivi 2023-12-07 7:36 ` [igt-dev] ✗ CI.xeBAT: failure for Syncs vs async exec/bind uAPI change Patchwork 3 siblings, 1 reply; 6+ messages in thread From: Matthew Brost @ 2023-12-07 6:03 UTC (permalink / raw) To: igt-dev Align with commit ("drm/xe/uapi: Uniform async vs sync handling") Signed-off-by: Matthew Brost <matthew.brost@intel.com> --- benchmarks/gem_wsim.c | 13 +++--- include/drm-uapi/xe_drm.h | 70 +++++++++++++++++----------- lib/igt_fb.c | 2 +- lib/intel_batchbuffer.c | 7 ++- lib/intel_compute.c | 2 +- lib/intel_ctx.c | 4 +- lib/xe/xe_ioctl.c | 57 +++++++++------------- lib/xe/xe_ioctl.h | 9 +--- lib/xe/xe_query.c | 3 +- lib/xe/xe_spin.c | 8 ++-- lib/xe/xe_util.c | 4 +- tests/intel/xe_access_counter.c | 2 +- tests/intel/xe_ccs.c | 4 +- tests/intel/xe_copy_basic.c | 2 +- tests/intel/xe_create.c | 6 +-- tests/intel/xe_dma_buf_sync.c | 4 +- tests/intel/xe_drm_fdinfo.c | 8 ++-- tests/intel/xe_evict.c | 37 +++++++-------- tests/intel/xe_evict_ccs.c | 2 +- tests/intel/xe_exec_balancer.c | 19 ++++---- tests/intel/xe_exec_basic.c | 16 +++---- tests/intel/xe_exec_compute_mode.c | 11 ++--- tests/intel/xe_exec_fault_mode.c | 9 ++-- tests/intel/xe_exec_queue_property.c | 2 +- tests/intel/xe_exec_reset.c | 27 +++++------ tests/intel/xe_exec_store.c | 18 +++---- tests/intel/xe_exec_threads.c | 26 +++++------ tests/intel/xe_exercise_blt.c | 2 +- tests/intel/xe_huc_copy.c | 2 +- tests/intel/xe_intel_bb.c | 2 +- tests/intel/xe_noexec_ping_pong.c | 6 +-- tests/intel/xe_pat.c | 4 +- tests/intel/xe_perf_pmu.c | 12 ++--- tests/intel/xe_pm.c | 6 +-- tests/intel/xe_pm_residency.c | 4 +- tests/intel/xe_spin_batch.c | 4 +- tests/intel/xe_vm.c | 62 ++++++++++++------------ tests/intel/xe_waitfence.c | 8 ++-- 38 files changed, 232 insertions(+), 252 deletions(-) diff --git a/benchmarks/gem_wsim.c b/benchmarks/gem_wsim.c index e937e10279..9146149e87 100644 --- a/benchmarks/gem_wsim.c +++ b/benchmarks/gem_wsim.c @@ -1760,7 +1760,7 @@ xe_alloc_step_batch(struct workload *wrk, struct w_step *w) w->xe.exec.exec_queue_id = eq->id; w->xe.exec.num_batch_buffer = 1; /* always at least one out fence */ - w->xe.exec.num_syncs = 1; + w->xe.exec.syncs.num_syncs = 1; /* count syncs */ for_each_dep(dep, w->data_deps) { int dep_idx = w->idx + dep->target; @@ -1768,7 +1768,7 @@ xe_alloc_step_batch(struct workload *wrk, struct w_step *w) igt_assert(dep_idx >= 0 && dep_idx < w->idx); igt_assert(wrk->steps[dep_idx].type == BATCH); - w->xe.exec.num_syncs++; + w->xe.exec.syncs.num_syncs++; } for_each_dep(dep, w->fence_deps) { int dep_idx = w->idx + dep->target; @@ -1777,9 +1777,9 @@ xe_alloc_step_batch(struct workload *wrk, struct w_step *w) igt_assert(wrk->steps[dep_idx].type == SW_FENCE || wrk->steps[dep_idx].type == BATCH); - w->xe.exec.num_syncs++; + w->xe.exec.syncs.num_syncs++; } - w->xe.syncs = calloc(w->xe.exec.num_syncs, sizeof(*w->xe.syncs)); + w->xe.syncs = calloc(w->xe.exec.syncs.num_syncs, sizeof(*w->xe.syncs)); /* fill syncs */ i = 0; /* out fence */ @@ -1801,7 +1801,7 @@ xe_alloc_step_batch(struct workload *wrk, struct w_step *w) w->xe.syncs[i].handle = wrk->steps[dep_idx].xe.syncs[0].handle; w->xe.syncs[i++].type = DRM_XE_SYNC_TYPE_SYNCOBJ; } - w->xe.exec.syncs = to_user_pointer(w->xe.syncs); + w->xe.exec.syncs.syncs = to_user_pointer(w->xe.syncs); } static bool set_priority(uint32_t ctx_id, int prio) @@ -2037,8 +2037,7 @@ static void xe_vm_create_(struct xe_vm *vm) uint32_t flags = 0; if (vm->compute_mode) - flags |= DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | - DRM_XE_VM_CREATE_FLAG_LR_MODE; + flags |= DRM_XE_VM_CREATE_FLAG_LR_MODE; vm->id = xe_vm_create(fd, flags, 0); } diff --git a/include/drm-uapi/xe_drm.h b/include/drm-uapi/xe_drm.h index 590f7b7af4..fd8172fe2d 100644 --- a/include/drm-uapi/xe_drm.h +++ b/include/drm-uapi/xe_drm.h @@ -3,8 +3,8 @@ * Copyright © 2023 Intel Corporation */ -#ifndef _XE_DRM_H_ -#define _XE_DRM_H_ +#ifndef _UAPI_XE_DRM_H_ +#define _UAPI_XE_DRM_H_ #include "drm.h" @@ -39,7 +39,7 @@ extern "C" { * redefine the interface more easily than an ever growing struct of * increasing complexity, and for large parts of that interface to be * entirely optional. The downside is more pointer chasing; chasing across - * the boundary with pointers encapsulated inside u64. + * the __user boundary with pointers encapsulated inside u64. * * Example chaining: * @@ -141,8 +141,7 @@ struct drm_xe_engine_class_instance { * Kernel only classes (not actual hardware engine class). Used for * creating ordered queues of VM bind operations. */ -#define DRM_XE_ENGINE_CLASS_VM_BIND_ASYNC 5 -#define DRM_XE_ENGINE_CLASS_VM_BIND_SYNC 6 +#define DRM_XE_ENGINE_CLASS_VM_BIND 5 __u16 engine_class; __u16 engine_instance; @@ -660,7 +659,6 @@ struct drm_xe_vm_create { * still enable recoverable pagefaults if supported by the device. */ #define DRM_XE_VM_CREATE_FLAG_LR_MODE (1 << 1) -#define DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT (1 << 2) /* * DRM_XE_VM_CREATE_FLAG_FAULT_MODE requires also * DRM_XE_VM_CREATE_FLAG_LR_MODE. It allows memory to be allocated @@ -668,7 +666,7 @@ struct drm_xe_vm_create { * The xe driver internally uses recoverable pagefaults to implement * this. */ -#define DRM_XE_VM_CREATE_FLAG_FAULT_MODE (1 << 3) +#define DRM_XE_VM_CREATE_FLAG_FAULT_MODE (1 << 2) /** @flags: Flags */ __u32 flags; @@ -736,6 +734,12 @@ struct drm_xe_vm_bind_op { * * Note: For userptr and externally imported dma-buf the kernel expects * either 1WAY or 2WAY for the @pat_index. + * + * For DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions + * on the @pat_index. For such mappings there is no actual memory being + * mapped (the address in the PTE is invalid), so the various PAT memory + * attributes likely do not apply. Simply leaving as zero is one + * option (still a valid pat_index). */ __u16 pat_index; @@ -770,12 +774,11 @@ struct drm_xe_vm_bind_op { __u32 op; #define DRM_XE_VM_BIND_FLAG_READONLY (1 << 0) -#define DRM_XE_VM_BIND_FLAG_ASYNC (1 << 1) /* * Valid on a faulting VM only, do the MAP operation immediately rather * than deferring the MAP to the page fault handler. */ -#define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 2) +#define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 1) /* * When the NULL flag is set, the page tables are setup with a special * bit which indicates writes are dropped and all reads return zero. In @@ -783,7 +786,7 @@ struct drm_xe_vm_bind_op { * operations, the BO handle MBZ, and the BO offset MBZ. This flag is * intended to implement VK sparse bindings. */ -#define DRM_XE_VM_BIND_FLAG_NULL (1 << 3) +#define DRM_XE_VM_BIND_FLAG_NULL (1 << 2) /** @flags: Bind flags */ __u32 flags; @@ -801,6 +804,27 @@ struct drm_xe_vm_bind_op { __u64 reserved[3]; }; +/** + * struct drm_xe_syncs - In / out syncs for IOCTLs. + */ +struct drm_xe_syncs { + /** @num_syncs: amount of syncs to wait on */ + __u32 num_syncs; + + /* + * Block in IOCTL until operation complete, num_syncs MBZ if set. + */ +#define DRM_XE_SYNCS_FLAG_WAIT_FOR_OP (1 << 0) + /** @flags: Sync flags */ + __u32 flags; + + /** @syncs: pointer to struct drm_xe_sync array */ + __u64 syncs; + + /** @reserved: Reserved */ + __u64 reserved[2]; +}; + struct drm_xe_vm_bind { /** @extensions: Pointer to the first extension struct, if any */ __u64 extensions; @@ -832,14 +856,8 @@ struct drm_xe_vm_bind { __u64 vector_of_binds; }; - /** @pad: MBZ */ - __u32 pad2; - - /** @num_syncs: amount of syncs to wait on */ - __u32 num_syncs; - - /** @syncs: pointer to struct drm_xe_sync array */ - __u64 syncs; + /** @syncs: syncs for bind */ + struct drm_xe_syncs syncs; /** @reserved: Reserved */ __u64 reserved[2]; @@ -968,14 +986,14 @@ struct drm_xe_exec { /** @extensions: Pointer to the first extension struct, if any */ __u64 extensions; + /** @pad: MBZ */ + __u32 pad; + /** @exec_queue_id: Exec queue ID for the batch buffer */ __u32 exec_queue_id; - /** @num_syncs: Amount of struct drm_xe_sync in array. */ - __u32 num_syncs; - - /** @syncs: Pointer to struct drm_xe_sync array. */ - __u64 syncs; + /** @syncs: syncs for exec */ + struct drm_xe_syncs syncs; /** * @address: address of batch buffer if num_batch_buffer == 1 or an @@ -989,8 +1007,8 @@ struct drm_xe_exec { */ __u16 num_batch_buffer; - /** @pad: MBZ */ - __u16 pad[3]; + /** @pad2: MBZ */ + __u16 pad2[3]; /** @reserved: Reserved */ __u64 reserved[2]; @@ -1117,4 +1135,4 @@ struct drm_xe_wait_user_fence { } #endif -#endif /* _XE_DRM_H_ */ +#endif /* _UAPI_XE_DRM_H_ */ diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 907464273c..68abe9169e 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -2896,7 +2896,7 @@ static void blitcopy(const struct igt_fb *dst_fb, &bb_size, mem_region) == 0); } else if (is_xe) { - vm = xe_vm_create(dst_fb->fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(dst_fb->fd, 0, 0); exec_queue = xe_exec_queue_create(dst_fb->fd, vm, &inst, 0); xe_ctx = intel_ctx_xe(dst_fb->fd, vm, exec_queue, 0, 0, 0); mem_region = vram_if_possible(dst_fb->fd, 0); diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c index 472c881298..b790d3ed9d 100644 --- a/lib/intel_batchbuffer.c +++ b/lib/intel_batchbuffer.c @@ -967,7 +967,7 @@ __intel_bb_create(int fd, uint32_t ctx, uint32_t vm, const intel_ctx_cfg_t *cfg, if (!vm) { igt_assert_f(!ctx, "No vm provided for engine"); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); } ibb->uses_full_ppgtt = true; @@ -1347,9 +1347,8 @@ static void __unbind_xe_objects(struct intel_bb *ibb) if (ibb->num_objects > 1) { struct drm_xe_vm_bind_op *bind_ops; uint32_t op = DRM_XE_VM_BIND_OP_UNMAP; - uint32_t flags = DRM_XE_VM_BIND_FLAG_ASYNC; - bind_ops = xe_alloc_bind_ops(ibb, op, flags, 0); + bind_ops = xe_alloc_bind_ops(ibb, op, 0, 0); xe_vm_bind_array(ibb->fd, ibb->vm_id, 0, bind_ops, ibb->num_objects, syncs, 2); free(bind_ops); @@ -2395,7 +2394,7 @@ __xe_bb_exec(struct intel_bb *ibb, uint64_t flags, bool sync) syncs[0].handle = syncobj_create(ibb->fd, 0); if (ibb->num_objects > 1) { - bind_ops = xe_alloc_bind_ops(ibb, DRM_XE_VM_BIND_OP_MAP, DRM_XE_VM_BIND_FLAG_ASYNC, 0); + bind_ops = xe_alloc_bind_ops(ibb, DRM_XE_VM_BIND_OP_MAP, 0, 0); xe_vm_bind_array(ibb->fd, ibb->vm_id, 0, bind_ops, ibb->num_objects, syncs, 1); free(bind_ops); diff --git a/lib/intel_compute.c b/lib/intel_compute.c index 0beab471b5..b3189db2f7 100644 --- a/lib/intel_compute.c +++ b/lib/intel_compute.c @@ -82,7 +82,7 @@ static void bo_execenv_create(int fd, struct bo_execenv *execenv) else engine_class = DRM_XE_ENGINE_CLASS_COMPUTE; - execenv->vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + execenv->vm = xe_vm_create(fd, 0, 0); execenv->exec_queue = xe_exec_queue_create_class(fd, execenv->vm, engine_class); } diff --git a/lib/intel_ctx.c b/lib/intel_ctx.c index b43dd63919..0221a1d6fd 100644 --- a/lib/intel_ctx.c +++ b/lib/intel_ctx.c @@ -428,8 +428,8 @@ int __intel_ctx_xe_exec(const intel_ctx_t *ctx, uint64_t ahnd, uint64_t bb_offse }; struct drm_xe_exec exec = { .exec_queue_id = ctx->exec_queue, - .syncs = (uintptr_t)syncs, - .num_syncs = 2, + .syncs.syncs = (uintptr_t)syncs, + .syncs.num_syncs = 2, .address = bb_offset, .num_batch_buffer = 1, }; diff --git a/lib/xe/xe_ioctl.c b/lib/xe/xe_ioctl.c index 761e91eb3a..cd3880cdc5 100644 --- a/lib/xe/xe_ioctl.c +++ b/lib/xe/xe_ioctl.c @@ -68,7 +68,7 @@ void xe_vm_unbind_all_async(int fd, uint32_t vm, uint32_t exec_queue, uint32_t num_syncs) { __xe_vm_bind_assert(fd, vm, exec_queue, bo, 0, 0, 0, - DRM_XE_VM_BIND_OP_UNMAP_ALL, DRM_XE_VM_BIND_FLAG_ASYNC, + DRM_XE_VM_BIND_OP_UNMAP_ALL, 0, sync, num_syncs, 0, 0); } @@ -81,8 +81,8 @@ void xe_vm_bind_array(int fd, uint32_t vm, uint32_t exec_queue, .vm_id = vm, .num_binds = num_bind, .vector_of_binds = (uintptr_t)bind_ops, - .num_syncs = num_syncs, - .syncs = (uintptr_t)sync, + .syncs.num_syncs = num_syncs, + .syncs.syncs = (uintptr_t)sync, .exec_queue_id = exec_queue, }; @@ -106,8 +106,10 @@ int __xe_vm_bind(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, .bind.op = op, .bind.flags = flags, .bind.prefetch_mem_region_instance = prefetch_region, - .num_syncs = num_syncs, - .syncs = (uintptr_t)sync, + .syncs.num_syncs = num_syncs, + .syncs.syncs = (uintptr_t)sync, + .syncs.flags = num_syncs == 0 ? + DRM_XE_SYNCS_FLAG_WAIT_FOR_OP : 0, .exec_queue_id = exec_queue, .bind.pat_index = (pat_index == DEFAULT_PAT_INDEX) ? intel_get_pat_idx_wb(fd) : pat_index, @@ -129,29 +131,13 @@ void __xe_vm_bind_assert(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, DEFAULT_PAT_INDEX, ext), 0); } -void xe_vm_bind(int fd, uint32_t vm, uint32_t bo, uint64_t offset, - uint64_t addr, uint64_t size, - struct drm_xe_sync *sync, uint32_t num_syncs) -{ - __xe_vm_bind_assert(fd, vm, 0, bo, offset, addr, size, - DRM_XE_VM_BIND_OP_MAP, 0, sync, num_syncs, 0, 0); -} - -void xe_vm_unbind(int fd, uint32_t vm, uint64_t offset, - uint64_t addr, uint64_t size, - struct drm_xe_sync *sync, uint32_t num_syncs) -{ - __xe_vm_bind_assert(fd, vm, 0, 0, offset, addr, size, - DRM_XE_VM_BIND_OP_UNMAP, 0, sync, num_syncs, 0, 0); -} - void xe_vm_prefetch_async(int fd, uint32_t vm, uint32_t exec_queue, uint64_t offset, uint64_t addr, uint64_t size, struct drm_xe_sync *sync, uint32_t num_syncs, uint32_t region) { __xe_vm_bind_assert(fd, vm, exec_queue, 0, offset, addr, size, - DRM_XE_VM_BIND_OP_PREFETCH, DRM_XE_VM_BIND_FLAG_ASYNC, + DRM_XE_VM_BIND_OP_PREFETCH, 0, sync, num_syncs, region, 0); } @@ -160,7 +146,7 @@ void xe_vm_bind_async(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, struct drm_xe_sync *sync, uint32_t num_syncs) { __xe_vm_bind_assert(fd, vm, exec_queue, bo, offset, addr, size, - DRM_XE_VM_BIND_OP_MAP, DRM_XE_VM_BIND_FLAG_ASYNC, sync, + DRM_XE_VM_BIND_OP_MAP, 0, sync, num_syncs, 0, 0); } @@ -169,8 +155,10 @@ void xe_vm_bind_zero(int fd, uint32_t vm, uint32_t exec_queue, { struct drm_xe_vm_bind bind = { .vm_id = vm, - .num_syncs = num_syncs, - .syncs = (uintptr_t)sync, + .syncs.num_syncs = num_syncs, + .syncs.syncs = (uintptr_t)sync, + .syncs.flags = num_syncs == 0 ? + DRM_XE_SYNCS_FLAG_WAIT_FOR_OP : 0, .exec_queue_id = exec_queue, }; @@ -183,7 +171,7 @@ void xe_vm_bind_async_flags(int fd, uint32_t vm, uint32_t exec_queue, uint32_t b uint32_t flags) { __xe_vm_bind_assert(fd, vm, exec_queue, bo, offset, addr, size, - DRM_XE_VM_BIND_OP_MAP, DRM_XE_VM_BIND_FLAG_ASYNC | flags, + DRM_XE_VM_BIND_OP_MAP, flags, sync, num_syncs, 0, 0); } @@ -192,7 +180,7 @@ void xe_vm_bind_userptr_async(int fd, uint32_t vm, uint32_t exec_queue, struct drm_xe_sync *sync, uint32_t num_syncs) { __xe_vm_bind_assert(fd, vm, exec_queue, 0, userptr, addr, size, - DRM_XE_VM_BIND_OP_MAP_USERPTR, DRM_XE_VM_BIND_FLAG_ASYNC, + DRM_XE_VM_BIND_OP_MAP_USERPTR, 0, sync, num_syncs, 0, 0); } @@ -202,8 +190,8 @@ void xe_vm_bind_userptr_async_flags(int fd, uint32_t vm, uint32_t exec_queue, uint32_t num_syncs, uint32_t flags) { __xe_vm_bind_assert(fd, vm, exec_queue, 0, userptr, addr, size, - DRM_XE_VM_BIND_OP_MAP_USERPTR, DRM_XE_VM_BIND_FLAG_ASYNC | - flags, sync, num_syncs, 0, 0); + DRM_XE_VM_BIND_OP_MAP_USERPTR, flags, + sync, num_syncs, 0, 0); } void xe_vm_unbind_async(int fd, uint32_t vm, uint32_t exec_queue, @@ -211,7 +199,7 @@ void xe_vm_unbind_async(int fd, uint32_t vm, uint32_t exec_queue, struct drm_xe_sync *sync, uint32_t num_syncs) { __xe_vm_bind_assert(fd, vm, exec_queue, 0, offset, addr, size, - DRM_XE_VM_BIND_OP_UNMAP, DRM_XE_VM_BIND_FLAG_ASYNC, sync, + DRM_XE_VM_BIND_OP_UNMAP, 0, sync, num_syncs, 0, 0); } @@ -328,11 +316,10 @@ uint32_t xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t place return handle; } -uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext, bool async) +uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext) { struct drm_xe_engine_class_instance instance = { - .engine_class = async ? DRM_XE_ENGINE_CLASS_VM_BIND_ASYNC : - DRM_XE_ENGINE_CLASS_VM_BIND_SYNC, + .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND, }; struct drm_xe_exec_queue_create create = { .extensions = ext, @@ -447,8 +434,8 @@ void xe_exec_sync(int fd, uint32_t exec_queue, uint64_t addr, { struct drm_xe_exec exec = { .exec_queue_id = exec_queue, - .syncs = (uintptr_t)sync, - .num_syncs = num_syncs, + .syncs.syncs = (uintptr_t)sync, + .syncs.num_syncs = num_syncs, .address = addr, .num_batch_buffer = 1, }; diff --git a/lib/xe/xe_ioctl.h b/lib/xe/xe_ioctl.h index a302418544..b2806a680a 100644 --- a/lib/xe/xe_ioctl.h +++ b/lib/xe/xe_ioctl.h @@ -25,12 +25,6 @@ void __xe_vm_bind_assert(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, uint64_t offset, uint64_t addr, uint64_t size, uint32_t op, uint32_t flags, struct drm_xe_sync *sync, uint32_t num_syncs, uint32_t prefetch_region, uint64_t ext); -void xe_vm_bind(int fd, uint32_t vm, uint32_t bo, uint64_t offset, - uint64_t addr, uint64_t size, - struct drm_xe_sync *sync, uint32_t num_syncs); -void xe_vm_unbind(int fd, uint32_t vm, uint64_t offset, - uint64_t addr, uint64_t size, - struct drm_xe_sync *sync, uint32_t num_syncs); void xe_vm_prefetch_async(int fd, uint32_t vm, uint32_t exec_queue, uint64_t offset, uint64_t addr, uint64_t size, struct drm_xe_sync *sync, uint32_t num_syncs, @@ -78,8 +72,7 @@ uint16_t __xe_default_cpu_caching_from_placement(int fd, uint32_t placement); uint32_t xe_exec_queue_create(int fd, uint32_t vm, struct drm_xe_engine_class_instance *instance, uint64_t ext); -uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext, - bool async); +uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext); uint32_t xe_exec_queue_create_class(int fd, uint32_t vm, uint16_t class); void xe_exec_queue_destroy(int fd, uint32_t exec_queue); uint64_t xe_bo_mmap_offset(int fd, uint32_t bo); diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c index fa2b490794..2bccdb1661 100644 --- a/lib/xe/xe_query.c +++ b/lib/xe/xe_query.c @@ -311,8 +311,7 @@ bool xe_supports_faults(int fd) bool supports_faults; struct drm_xe_vm_create create = { - .flags = DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | - DRM_XE_VM_CREATE_FLAG_FAULT_MODE, + .flags = DRM_XE_VM_CREATE_FLAG_FAULT_MODE, }; supports_faults = !igt_ioctl(fd, DRM_IOCTL_XE_VM_CREATE, &create); diff --git a/lib/xe/xe_spin.c b/lib/xe/xe_spin.c index 243e970475..b478f40fc5 100644 --- a/lib/xe/xe_spin.c +++ b/lib/xe/xe_spin.c @@ -195,8 +195,8 @@ xe_spin_create(int fd, const struct igt_spin_factory *opt) }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(&sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(&sync), }; igt_assert(ahnd); @@ -293,8 +293,8 @@ void xe_cork_init(int fd, struct drm_xe_engine_class_instance *hwe, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(&sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(&sync), }; vm = xe_vm_create(fd, 0, 0); diff --git a/lib/xe/xe_util.c b/lib/xe/xe_util.c index ba8eece71f..e4c97c3a65 100644 --- a/lib/xe/xe_util.c +++ b/lib/xe/xe_util.c @@ -118,7 +118,7 @@ static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(int xe, { struct drm_xe_vm_bind_op *bind_ops, *ops; struct xe_object *obj; - uint32_t num_objects = 0, i = 0, op, flags; + uint32_t num_objects = 0, i = 0, op, flags = 0; igt_list_for_each_entry(obj, obj_list, link) num_objects++; @@ -137,11 +137,9 @@ static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(int xe, if (obj->bind_op == XE_OBJECT_BIND) { op = DRM_XE_VM_BIND_OP_MAP; - flags = DRM_XE_VM_BIND_FLAG_ASYNC; ops->obj = obj->handle; } else { op = DRM_XE_VM_BIND_OP_UNMAP; - flags = DRM_XE_VM_BIND_FLAG_ASYNC; } ops->op = op; diff --git a/tests/intel/xe_access_counter.c b/tests/intel/xe_access_counter.c index 8966bfc9c8..91367f5606 100644 --- a/tests/intel/xe_access_counter.c +++ b/tests/intel/xe_access_counter.c @@ -39,7 +39,7 @@ igt_main igt_subtest("invalid-param") { struct drm_xe_engine_class_instance instance = { - .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND_SYNC, + .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND, }; int ret; diff --git a/tests/intel/xe_ccs.c b/tests/intel/xe_ccs.c index 77d3020bc7..e9df5c2ef1 100644 --- a/tests/intel/xe_ccs.c +++ b/tests/intel/xe_ccs.c @@ -345,7 +345,7 @@ static void block_copy(int xe, uint32_t vm, exec_queue; if (config->new_ctx) { - vm = xe_vm_create(xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(xe, 0, 0); exec_queue = xe_exec_queue_create(xe, vm, &inst, 0); surf_ctx = intel_ctx_xe(xe, vm, exec_queue, 0, 0, 0); surf_ahnd = intel_allocator_open(xe, surf_ctx->vm, @@ -553,7 +553,7 @@ static void block_copy_test(int xe, copyfns[copy_function].suffix) { uint32_t sync_bind, sync_out; - vm = xe_vm_create(xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(xe, 0, 0); exec_queue = xe_exec_queue_create(xe, vm, &inst, 0); sync_bind = syncobj_create(xe, 0); sync_out = syncobj_create(xe, 0); diff --git a/tests/intel/xe_copy_basic.c b/tests/intel/xe_copy_basic.c index d9c059e4d9..1bde876cd2 100644 --- a/tests/intel/xe_copy_basic.c +++ b/tests/intel/xe_copy_basic.c @@ -137,7 +137,7 @@ static void copy_test(int fd, uint32_t size, enum blt_cmd_type cmd, uint32_t reg src_handle = xe_bo_create(fd, 0, bo_size, region, 0); dst_handle = xe_bo_create(fd, 0, bo_size, region, 0); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); exec_queue = xe_exec_queue_create(fd, vm, &inst, 0); ctx = intel_ctx_xe(fd, vm, exec_queue, 0, 0, 0); diff --git a/tests/intel/xe_create.c b/tests/intel/xe_create.c index bbdddc7c9b..c3c57d11bc 100644 --- a/tests/intel/xe_create.c +++ b/tests/intel/xe_create.c @@ -55,7 +55,7 @@ static void create_invalid_size(int fd) uint32_t handle; int ret; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); xe_for_each_mem_region(fd, memreg, region) { memregion = xe_mem_region(fd, region); @@ -141,7 +141,7 @@ static void create_execqueues(int fd, enum exec_queue_destroy ed) fd = drm_reopen_driver(fd); num_engines = xe_number_engines(fd); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); exec_queues_per_process = max_t(uint32_t, 1, MAXEXECQUEUES / nproc); igt_debug("nproc: %u, exec_queues per process: %u\n", nproc, exec_queues_per_process); @@ -208,7 +208,7 @@ static void create_massive_size(int fd) uint32_t handle; int ret; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); xe_for_each_mem_region(fd, memreg, region) { ret = __create_bo(fd, vm, -1ULL << 32, region, &handle); diff --git a/tests/intel/xe_dma_buf_sync.c b/tests/intel/xe_dma_buf_sync.c index eca3a5e95b..e81410d97a 100644 --- a/tests/intel/xe_dma_buf_sync.c +++ b/tests/intel/xe_dma_buf_sync.c @@ -150,7 +150,7 @@ test_export_dma_buf(struct drm_xe_engine_class_instance *hwe0, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .syncs = to_user_pointer(sync), + .syncs.syncs = to_user_pointer(sync), }; struct xe_spin_opts spin_opts = { .addr = addr + spin_offset, .preempt = true }; uint32_t syncobj; @@ -189,7 +189,7 @@ test_export_dma_buf(struct drm_xe_engine_class_instance *hwe0, sync[1].handle = syncobj_create(fd[1], 0); exec.exec_queue_id = exec_queue[1]; exec.address = batch_addr; - exec.num_syncs = 2; + exec.syncs.num_syncs = 2; xe_exec(fd[1], &exec); /* Verify exec blocked on spinner / prime BO */ diff --git a/tests/intel/xe_drm_fdinfo.c b/tests/intel/xe_drm_fdinfo.c index fd6c07410a..8855c580fe 100644 --- a/tests/intel/xe_drm_fdinfo.c +++ b/tests/intel/xe_drm_fdinfo.c @@ -53,8 +53,8 @@ static void test_active(int fd, struct drm_xe_engine *engine) }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; #define N_EXEC_QUEUES 2 uint32_t exec_queues[N_EXEC_QUEUES]; @@ -71,7 +71,7 @@ static void test_active(int fd, struct drm_xe_engine *engine) struct xe_spin_opts spin_opts = { .preempt = true }; int i, b, ret; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * N_EXEC_QUEUES; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -91,7 +91,7 @@ static void test_active(int fd, struct drm_xe_engine *engine) for (i = 0; i < N_EXEC_QUEUES; i++) { exec_queues[i] = xe_exec_queue_create(fd, vm, &engine->instance, 0); - bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, 0, true); + bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, 0); syncobjs[i] = syncobj_create(fd, 0); } syncobjs[N_EXEC_QUEUES] = syncobj_create(fd, 0); diff --git a/tests/intel/xe_evict.c b/tests/intel/xe_evict.c index 89dc46fae4..12a53ad539 100644 --- a/tests/intel/xe_evict.c +++ b/tests/intel/xe_evict.c @@ -43,8 +43,8 @@ test_evict(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; uint32_t syncobjs[MAX_N_EXEC_QUEUES]; @@ -63,17 +63,15 @@ test_evict(int fd, struct drm_xe_engine_class_instance *eci, fd = drm_open_driver(DRIVER_XE); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); if (flags & BIND_EXEC_QUEUE) - bind_exec_queues[0] = xe_bind_exec_queue_create(fd, vm, 0, true); + bind_exec_queues[0] = xe_bind_exec_queue_create(fd, vm, 0); if (flags & MULTI_VM) { - vm2 = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); - vm3 = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm2 = xe_vm_create(fd, 0, 0); + vm3 = xe_vm_create(fd, 0, 0); if (flags & BIND_EXEC_QUEUE) { - bind_exec_queues[1] = xe_bind_exec_queue_create(fd, vm2, - 0, true); - bind_exec_queues[2] = xe_bind_exec_queue_create(fd, vm3, - 0, true); + bind_exec_queues[1] = xe_bind_exec_queue_create(fd, vm2, 0); + bind_exec_queues[2] = xe_bind_exec_queue_create(fd, vm3, 0); } } @@ -163,8 +161,8 @@ test_evict(int fd, struct drm_xe_engine_class_instance *eci, if (i + 1 == n_execs / 2) { addr = base_addr; - exec.num_syncs = 1; - exec.syncs = to_user_pointer(sync + 1); + exec.syncs.num_syncs = 1; + exec.syncs.syncs = to_user_pointer(sync + 1); if (barrier) pthread_barrier_wait(barrier); } @@ -224,8 +222,8 @@ test_evict_cm(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; uint32_t *bo; @@ -245,16 +243,13 @@ test_evict_cm(int fd, struct drm_xe_engine_class_instance *eci, fd = drm_open_driver(DRIVER_XE); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); if (flags & BIND_EXEC_QUEUE) - bind_exec_queues[0] = xe_bind_exec_queue_create(fd, vm, 0, true); + bind_exec_queues[0] = xe_bind_exec_queue_create(fd, vm, 0); if (flags & MULTI_VM) { - vm2 = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); + vm2 = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); if (flags & BIND_EXEC_QUEUE) - bind_exec_queues[1] = xe_bind_exec_queue_create(fd, vm2, - 0, true); + bind_exec_queues[1] = xe_bind_exec_queue_create(fd, vm2, 0); } for (i = 0; i < n_exec_queues; i++) { diff --git a/tests/intel/xe_evict_ccs.c b/tests/intel/xe_evict_ccs.c index 0c775e5f4d..d182bc9535 100644 --- a/tests/intel/xe_evict_ccs.c +++ b/tests/intel/xe_evict_ccs.c @@ -227,7 +227,7 @@ static void evict_single(int fd, int child, const struct config *config) uint32_t kb_left = config->mb_per_proc * SZ_1K; uint32_t min_alloc_kb = config->param->min_size_kb; uint32_t max_alloc_kb = config->param->max_size_kb; - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + uint32_t vm = xe_vm_create(fd, 0, 0); uint64_t ahnd = intel_allocator_open(fd, vm, INTEL_ALLOCATOR_RELOC); uint8_t uc_mocs = intel_get_uc_mocs_index(fd); struct object *obj, *tmp; diff --git a/tests/intel/xe_exec_balancer.c b/tests/intel/xe_exec_balancer.c index 79ff65e891..3814fffb00 100644 --- a/tests/intel/xe_exec_balancer.c +++ b/tests/intel/xe_exec_balancer.c @@ -42,8 +42,8 @@ static void test_all_active(int fd, int gt, int class) }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_INSTANCE]; uint32_t syncobjs[MAX_INSTANCE]; @@ -66,7 +66,7 @@ static void test_all_active(int fd, int gt, int class) if (num_placements < 2) return; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * num_placements; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -181,8 +181,8 @@ test_exec(int fd, int gt, int class, int n_exec_queues, int n_execs, { .type = DRM_XE_SYNC_TYPE_SYNCOBJ, .flags = DRM_XE_SYNC_FLAG_SIGNAL, }, }; struct drm_xe_exec exec = { - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; uint32_t syncobjs[MAX_N_EXEC_QUEUES]; @@ -208,7 +208,7 @@ test_exec(int fd, int gt, int class, int n_exec_queues, int n_execs, if (num_placements < 2) return; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -406,8 +406,8 @@ test_cm(int fd, int gt, int class, int n_exec_queues, int n_execs, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; size_t bo_size; @@ -435,8 +435,7 @@ test_cm(int fd, int gt, int class, int n_exec_queues, int n_execs, if (num_placements < 2) return; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); diff --git a/tests/intel/xe_exec_basic.c b/tests/intel/xe_exec_basic.c index b20581382c..0614141207 100644 --- a/tests/intel/xe_exec_basic.c +++ b/tests/intel/xe_exec_basic.c @@ -87,8 +87,8 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint64_t addr[MAX_N_EXEC_QUEUES]; uint64_t sparse_addr[MAX_N_EXEC_QUEUES]; @@ -110,7 +110,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, igt_assert(n_vm <= MAX_N_EXEC_QUEUES); for (i = 0; i < n_vm; ++i) - vm[i] = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm[i] = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -153,8 +153,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, exec_queues[i] = xe_exec_queue_create(fd, __vm, eci, 0); if (flags & BIND_EXEC_QUEUE) bind_exec_queues[i] = xe_bind_exec_queue_create(fd, - __vm, 0, - true); + __vm, 0); else bind_exec_queues[i] = 0; syncobjs[i] = syncobj_create(fd, 0); @@ -174,7 +173,6 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, __xe_vm_bind_assert(fd, vm[i], bind_exec_queues[i], 0, 0, sparse_addr[i], bo_size, DRM_XE_VM_BIND_OP_MAP, - DRM_XE_VM_BIND_FLAG_ASYNC | DRM_XE_VM_BIND_FLAG_NULL, sync, 1, 0, 0); } @@ -319,8 +317,8 @@ static void test_zero_execs(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(sync), }; size_t bo_size; uint32_t bo = 0; @@ -334,7 +332,7 @@ static void test_zero_execs(int fd, struct drm_xe_engine_class_instance *eci, } *data; int i, b; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); diff --git a/tests/intel/xe_exec_compute_mode.c b/tests/intel/xe_exec_compute_mode.c index 7d3004d658..b51fa880ac 100644 --- a/tests/intel/xe_exec_compute_mode.c +++ b/tests/intel/xe_exec_compute_mode.c @@ -94,8 +94,8 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXECQUEUES]; uint32_t bind_exec_queues[MAX_N_EXECQUEUES]; @@ -114,8 +114,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, igt_assert(n_exec_queues <= MAX_N_EXECQUEUES); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -124,7 +123,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); if (flags & BIND_EXECQUEUE) bind_exec_queues[i] = - xe_bind_exec_queue_create(fd, vm, 0, true); + xe_bind_exec_queue_create(fd, vm, 0); else bind_exec_queues[i] = 0; }; @@ -153,7 +152,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); if (flags & BIND_EXECQUEUE) bind_exec_queues[i] = - xe_bind_exec_queue_create(fd, vm, 0, true); + xe_bind_exec_queue_create(fd, vm, 0); else bind_exec_queues[i] = 0; }; diff --git a/tests/intel/xe_exec_fault_mode.c b/tests/intel/xe_exec_fault_mode.c index ee7cbb6040..67f05c2660 100644 --- a/tests/intel/xe_exec_fault_mode.c +++ b/tests/intel/xe_exec_fault_mode.c @@ -112,8 +112,8 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; uint32_t bind_exec_queues[MAX_N_EXEC_QUEUES]; @@ -131,8 +131,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, igt_assert(n_exec_queues <= MAX_N_EXEC_QUEUES); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | - DRM_XE_VM_CREATE_FLAG_LR_MODE | + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE | DRM_XE_VM_CREATE_FLAG_FAULT_MODE, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), @@ -168,7 +167,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); if (flags & BIND_EXEC_QUEUE) bind_exec_queues[i] = - xe_bind_exec_queue_create(fd, vm, 0, true); + xe_bind_exec_queue_create(fd, vm, 0); else bind_exec_queues[i] = 0; }; diff --git a/tests/intel/xe_exec_queue_property.c b/tests/intel/xe_exec_queue_property.c index 0b578510ce..53e08fb0e6 100644 --- a/tests/intel/xe_exec_queue_property.c +++ b/tests/intel/xe_exec_queue_property.c @@ -56,7 +56,7 @@ static void test_set_property(int xe, int property_name, int property_value, int err_val) { struct drm_xe_engine_class_instance instance = { - .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND_SYNC, + .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND, }; struct drm_xe_ext_set_property ext = { .base.next_extension = 0, diff --git a/tests/intel/xe_exec_reset.c b/tests/intel/xe_exec_reset.c index edfd27fe0c..f9c0057072 100644 --- a/tests/intel/xe_exec_reset.c +++ b/tests/intel/xe_exec_reset.c @@ -35,8 +35,8 @@ static void test_spin(int fd, struct drm_xe_engine_class_instance *eci) }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queue; uint32_t syncobj; @@ -45,7 +45,7 @@ static void test_spin(int fd, struct drm_xe_engine_class_instance *eci) struct xe_spin *spin; struct xe_spin_opts spin_opts = { .addr = addr, .preempt = false }; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*spin); bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -145,8 +145,8 @@ test_balancer(int fd, int gt, int class, int n_exec_queues, int n_execs, { .type = DRM_XE_SYNC_TYPE_SYNCOBJ, .flags = DRM_XE_SYNC_FLAG_SIGNAL, }, }; struct drm_xe_exec exec = { - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXECQUEUES]; uint32_t syncobjs[MAX_N_EXECQUEUES]; @@ -177,7 +177,7 @@ test_balancer(int fd, int gt, int class, int n_exec_queues, int n_execs, if (num_placements < 2) return; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -343,8 +343,8 @@ test_legacy_mode(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXECQUEUES]; uint32_t syncobjs[MAX_N_EXECQUEUES]; @@ -364,7 +364,7 @@ test_legacy_mode(int fd, struct drm_xe_engine_class_instance *eci, if (flags & CLOSE_FD) fd = drm_open_driver(DRIVER_XE); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -509,8 +509,8 @@ test_compute_mode(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXECQUEUES]; size_t bo_size; @@ -531,8 +531,7 @@ test_compute_mode(int fd, struct drm_xe_engine_class_instance *eci, if (flags & CLOSE_FD) fd = drm_open_driver(DRIVER_XE); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -695,6 +694,8 @@ static void submit_jobs(struct gt_thread_data *t) exec.exec_queue_id = create.exec_queue_id; exec.address = addr; exec.num_batch_buffer = 1; + exec.syncs.num_syncs = 0; + exec.syncs.flags = 0; xe_exec(fd, &exec); xe_exec_queue_destroy(fd, create.exec_queue_id); } diff --git a/tests/intel/xe_exec_store.c b/tests/intel/xe_exec_store.c index dec8546a3c..50f581a268 100644 --- a/tests/intel/xe_exec_store.c +++ b/tests/intel/xe_exec_store.c @@ -60,8 +60,8 @@ static void store(int fd) }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(&sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(&sync), }; struct data *data; struct drm_xe_engine *engine; @@ -76,7 +76,7 @@ static void store(int fd) syncobj = syncobj_create(fd, 0); sync.handle = syncobj; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data); bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -129,8 +129,8 @@ static void store_cachelines(int fd, struct drm_xe_engine_class_instance *eci, struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(&sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(&sync), }; int count = flags & PAGES ? NCACHELINES + 1 : 2; @@ -145,7 +145,7 @@ static void store_cachelines(int fd, struct drm_xe_engine_class_instance *eci, size_t bo_size = 4096; bo_size = ALIGN(bo_size, xe_get_default_alignment(fd)); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); ahnd = intel_allocator_open(fd, 0, INTEL_ALLOCATOR_SIMPLE); exec_queues = xe_exec_queue_create(fd, vm, eci, 0); syncobjs = syncobj_create(fd, 0); @@ -218,8 +218,8 @@ static void store_all(int fd, int gt, int class) }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(&sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(&sync), }; struct data *data; @@ -233,7 +233,7 @@ static void store_all(int fd, int gt, int class) struct drm_xe_engine_class_instance *hwe; int i, num_placements = 0; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data); bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); diff --git a/tests/intel/xe_exec_threads.c b/tests/intel/xe_exec_threads.c index fcb9266982..31e2173e43 100644 --- a/tests/intel/xe_exec_threads.c +++ b/tests/intel/xe_exec_threads.c @@ -52,8 +52,8 @@ test_balancer(int fd, int gt, uint32_t vm, uint64_t addr, uint64_t userptr, }; struct drm_xe_sync sync_all[MAX_N_EXEC_QUEUES]; struct drm_xe_exec exec = { - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; uint32_t syncobjs[MAX_N_EXEC_QUEUES]; @@ -77,7 +77,7 @@ test_balancer(int fd, int gt, uint32_t vm, uint64_t addr, uint64_t userptr, } if (!vm) { - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); owns_vm = true; } @@ -260,8 +260,8 @@ test_compute_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(sync), }; int64_t fence_timeout; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; @@ -286,8 +286,7 @@ test_compute_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, } if (!vm) { - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); owns_vm = true; } @@ -465,8 +464,8 @@ test_legacy_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, struct drm_xe_sync sync_all[MAX_N_EXEC_QUEUES]; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; uint32_t bind_exec_queues[MAX_N_EXEC_QUEUES]; @@ -491,7 +490,7 @@ test_legacy_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, } if (!vm) { - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); owns_vm = true; } @@ -535,7 +534,7 @@ test_legacy_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); if (flags & BIND_EXEC_QUEUE) bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, - 0, true); + 0); else bind_exec_queues[i] = 0; syncobjs[i] = syncobj_create(fd, 0); @@ -1003,11 +1002,8 @@ static void threads(int fd, int flags) pthread_cond_init(&cond, 0); if (flags & SHARED_VM) { - vm_legacy_mode = xe_vm_create(fd, - DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, - 0); + vm_legacy_mode = xe_vm_create(fd, 0, 0); vm_compute_mode = xe_vm_create(fd, - DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); } diff --git a/tests/intel/xe_exercise_blt.c b/tests/intel/xe_exercise_blt.c index 655e9a3ea3..cc9060b1b1 100644 --- a/tests/intel/xe_exercise_blt.c +++ b/tests/intel/xe_exercise_blt.c @@ -280,7 +280,7 @@ static void fast_copy_test(int xe, region1 = igt_collection_get_value(regions, 0); region2 = igt_collection_get_value(regions, 1); - vm = xe_vm_create(xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(xe, 0, 0); exec_queue = xe_exec_queue_create(xe, vm, &inst, 0); ctx = intel_ctx_xe(xe, vm, exec_queue, 0, 0, 0); diff --git a/tests/intel/xe_huc_copy.c b/tests/intel/xe_huc_copy.c index 035d86ea8f..ca045c41bf 100644 --- a/tests/intel/xe_huc_copy.c +++ b/tests/intel/xe_huc_copy.c @@ -157,7 +157,7 @@ test_huc_copy(int fd) uint32_t vm; uint32_t tested_gts = 0; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); xe_for_each_engine(fd, hwe) { if (hwe->engine_class == DRM_XE_ENGINE_CLASS_VIDEO_DECODE && diff --git a/tests/intel/xe_intel_bb.c b/tests/intel/xe_intel_bb.c index 804e176ee6..d3d7a4fb69 100644 --- a/tests/intel/xe_intel_bb.c +++ b/tests/intel/xe_intel_bb.c @@ -192,7 +192,7 @@ static void simple_bb(struct buf_ops *bops, bool new_context) intel_bb_reset(ibb, true); if (new_context) { - vm = xe_vm_create(xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(xe, 0, 0); ctx = xe_exec_queue_create(xe, vm, &xe_engine(xe, 0)->instance, 0); intel_bb_destroy(ibb); diff --git a/tests/intel/xe_noexec_ping_pong.c b/tests/intel/xe_noexec_ping_pong.c index c91340784a..2aeea14d0e 100644 --- a/tests/intel/xe_noexec_ping_pong.c +++ b/tests/intel/xe_noexec_ping_pong.c @@ -64,7 +64,7 @@ static void test_ping_pong(int fd, struct drm_xe_engine *engine) * stats. */ for (i = 0; i < NUM_VMS; ++i) { - vm[i] = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); + vm[i] = xe_vm_create(fd, 0, 0); for (j = 0; j < NUM_BOS; ++j) { igt_debug("Creating bo size %lu for vm %u\n", (unsigned long) bo_size, @@ -72,8 +72,8 @@ static void test_ping_pong(int fd, struct drm_xe_engine *engine) bo[i][j] = xe_bo_create(fd, vm[i], bo_size, vram_memory(fd, 0), 0); - xe_vm_bind(fd, vm[i], bo[i][j], 0, 0x40000 + j*bo_size, - bo_size, NULL, 0); + xe_vm_bind_async(fd, vm[i], 0, bo[i][j], 0, 0x40000 + j*bo_size, + bo_size, NULL, 0); } exec_queues[i] = xe_exec_queue_create(fd, vm[i], &engine->instance, 0); diff --git a/tests/intel/xe_pat.c b/tests/intel/xe_pat.c index 8189390a8a..fafcfc2467 100644 --- a/tests/intel/xe_pat.c +++ b/tests/intel/xe_pat.c @@ -254,7 +254,7 @@ static void pat_index_blt(struct xe_pat_param *p) igt_require(blt_has_fast_copy(fd)); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); exec_queue = xe_exec_queue_create(fd, vm, &inst, 0); ctx = intel_ctx_xe(fd, vm, exec_queue, 0, 0, 0); ahnd = intel_allocator_open_full(fd, ctx->vm, 0, 0, @@ -468,7 +468,7 @@ static void pat_index_dw(struct xe_pat_param *p) break; } - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); ctx = xe_exec_queue_create(fd, vm, hwe, 0); ibb = intel_bb_create_full(fd, ctx, vm, NULL, xe_get_default_alignment(fd), diff --git a/tests/intel/xe_perf_pmu.c b/tests/intel/xe_perf_pmu.c index 42cf627291..36d1c16efb 100644 --- a/tests/intel/xe_perf_pmu.c +++ b/tests/intel/xe_perf_pmu.c @@ -86,8 +86,8 @@ static void test_any_engine_busyness(int fd, struct drm_xe_engine_class_instance }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queue; uint32_t syncobj; @@ -98,7 +98,7 @@ static void test_any_engine_busyness(int fd, struct drm_xe_engine_class_instance uint32_t pmu_fd; uint64_t count, idle; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*spin); bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -190,8 +190,8 @@ static void test_engine_group_busyness(int fd, int gt, int class, const char *na }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_INSTANCE]; uint32_t syncobjs[MAX_INSTANCE]; @@ -219,7 +219,7 @@ static void test_engine_group_busyness(int fd, int gt, int class, const char *na igt_skip_on_f(!num_placements, "Engine class:%d gt:%d not enabled on this platform\n", class, gt); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * num_placements; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); diff --git a/tests/intel/xe_pm.c b/tests/intel/xe_pm.c index c899bd67a0..8942f2f2cb 100644 --- a/tests/intel/xe_pm.c +++ b/tests/intel/xe_pm.c @@ -236,8 +236,8 @@ test_exec(device_t device, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; uint32_t bind_exec_queues[MAX_N_EXEC_QUEUES]; @@ -259,7 +259,7 @@ test_exec(device_t device, struct drm_xe_engine_class_instance *eci, if (check_rpm) igt_assert(in_d3(device, d_state)); - vm = xe_vm_create(device.fd_xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(device.fd_xe, 0, 0); if (check_rpm) igt_assert(out_of_d3(device, d_state)); diff --git a/tests/intel/xe_pm_residency.c b/tests/intel/xe_pm_residency.c index 5542f8fb44..a833f0e65a 100644 --- a/tests/intel/xe_pm_residency.c +++ b/tests/intel/xe_pm_residency.c @@ -92,8 +92,8 @@ static void exec_load(int fd, struct drm_xe_engine_class_instance *hwe, unsigned struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(&sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(&sync), }; vm = xe_vm_create(fd, 0, 0); diff --git a/tests/intel/xe_spin_batch.c b/tests/intel/xe_spin_batch.c index c75709c4e6..08e8496571 100644 --- a/tests/intel/xe_spin_batch.c +++ b/tests/intel/xe_spin_batch.c @@ -150,8 +150,8 @@ static void xe_spin_fixed_duration(int fd) }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(&sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(&sync), }; const uint64_t duration_ns = NSEC_PER_SEC / 10; /* 100ms */ uint64_t spin_addr; diff --git a/tests/intel/xe_vm.c b/tests/intel/xe_vm.c index 62bf950504..22874542e4 100644 --- a/tests/intel/xe_vm.c +++ b/tests/intel/xe_vm.c @@ -268,7 +268,7 @@ test_bind_one_bo_many_times_many_vm(int fd) static void test_partial_unbinds(int fd) { - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + uint32_t vm = xe_vm_create(fd, 0, 0); size_t bo_size = 3 * xe_get_default_alignment(fd); uint32_t bo = xe_bo_create(fd, vm, bo_size, vram_if_possible(fd, 0), 0); uint64_t unbind_size = bo_size / 3; @@ -318,7 +318,7 @@ static void unbind_all(int fd, int n_vmas) { .type = DRM_XE_SYNC_TYPE_SYNCOBJ, .flags = DRM_XE_SYNC_FLAG_SIGNAL, }, }; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo = xe_bo_create(fd, vm, bo_size, vram_if_possible(fd, 0), 0); for (i = 0; i < n_vmas; ++i) @@ -397,8 +397,8 @@ shared_pte_page(int fd, struct drm_xe_engine_class_instance *eci, int n_bo, struct drm_xe_sync sync_all[MAX_N_EXEC_QUEUES + 1]; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queues[MAX_N_EXEC_QUEUES]; uint32_t syncobjs[MAX_N_EXEC_QUEUES]; @@ -416,7 +416,7 @@ shared_pte_page(int fd, struct drm_xe_engine_class_instance *eci, int n_bo, data = malloc(sizeof(*data) * n_bo); igt_assert(data); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(struct shared_pte_page_data); bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -583,8 +583,8 @@ test_bind_execqueues_independent(int fd, struct drm_xe_engine_class_instance *ec }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; #define N_EXEC_QUEUES 2 uint32_t exec_queues[N_EXEC_QUEUES]; @@ -601,7 +601,7 @@ test_bind_execqueues_independent(int fd, struct drm_xe_engine_class_instance *ec struct xe_spin_opts spin_opts = { .preempt = true }; int i, b; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * N_EXEC_QUEUES; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -612,7 +612,7 @@ test_bind_execqueues_independent(int fd, struct drm_xe_engine_class_instance *ec for (i = 0; i < N_EXEC_QUEUES; i++) { exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); - bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, 0, true); + bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, 0); syncobjs[i] = syncobj_create(fd, 0); } syncobjs[N_EXEC_QUEUES] = syncobj_create(fd, 0); @@ -673,7 +673,7 @@ test_bind_execqueues_independent(int fd, struct drm_xe_engine_class_instance *ec sync[1].flags |= DRM_XE_SYNC_FLAG_SIGNAL; sync[1].handle = syncobjs[!i ? N_EXEC_QUEUES : e]; - exec.num_syncs = 2; + exec.syncs.num_syncs = 2; exec.exec_queue_id = exec_queues[e]; exec.address = batch_addr; xe_exec(fd, &exec); @@ -748,7 +748,7 @@ static void test_zero_binds(int fd, struct drm_xe_engine_class_instance *eci) uint32_t bo = 0; struct xe_cork cork; - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = ALIGN(xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); bo = xe_bo_create(fd, vm, bo_size, @@ -823,7 +823,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .syncs = to_user_pointer(sync), + .syncs.syncs = to_user_pointer(sync), }; uint32_t exec_queue, bind_exec_queue = 0; #define BIND_ARRAY_MAX_N_EXEC 16 @@ -839,7 +839,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, igt_assert(n_execs <= BIND_ARRAY_MAX_N_EXEC); - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = sizeof(*data) * n_execs; bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); @@ -850,7 +850,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, data = xe_bo_map(fd, bo, bo_size); if (flags & BIND_ARRAY_BIND_EXEC_QUEUE_FLAG) - bind_exec_queue = xe_bind_exec_queue_create(fd, vm, 0, true); + bind_exec_queue = xe_bind_exec_queue_create(fd, vm, 0); exec_queue = xe_exec_queue_create(fd, vm, eci, 0); for (i = 0; i < n_execs; ++i) { @@ -859,7 +859,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, bind_ops[i].range = bo_size; bind_ops[i].addr = addr; bind_ops[i].op = DRM_XE_VM_BIND_OP_MAP; - bind_ops[i].flags = DRM_XE_VM_BIND_FLAG_ASYNC; + bind_ops[i].flags = 0; bind_ops[i].prefetch_mem_region_instance = 0; bind_ops[i].pat_index = intel_get_pat_idx_wb(fd); bind_ops[i].reserved[0] = 0; @@ -890,9 +890,9 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, sync[1].flags |= DRM_XE_SYNC_FLAG_SIGNAL; if (i == n_execs - 1) { sync[1].handle = syncobj_create(fd, 0); - exec.num_syncs = 2; + exec.syncs.num_syncs = 2; } else { - exec.num_syncs = 1; + exec.syncs.num_syncs = 1; } exec.exec_queue_id = exec_queue; @@ -905,7 +905,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, for (i = 0; i < n_execs; ++i) { bind_ops[i].obj = 0; bind_ops[i].op = DRM_XE_VM_BIND_OP_UNMAP; - bind_ops[i].flags = DRM_XE_VM_BIND_FLAG_ASYNC; + bind_ops[i].flags = 0; } syncobj_reset(fd, &sync[0].handle, 1); @@ -1012,8 +1012,8 @@ test_large_binds(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint64_t addr = 0x1ull << 30, base_addr = 0x1ull << 30; uint32_t vm; @@ -1034,7 +1034,7 @@ 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, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); if (flags & LARGE_BIND_FLAG_USERPTR) { map = aligned_alloc(xe_get_default_alignment(fd), bo_size); @@ -1172,8 +1172,8 @@ static void *hammer_thread(void *tdata) }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 1, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 1, + .syncs.syncs = to_user_pointer(sync), }; struct { uint32_t batch[16]; @@ -1205,10 +1205,10 @@ static void *hammer_thread(void *tdata) exec.exec_queue_id = exec_queue; exec.address = batch_addr; if (i % 32) { - exec.num_syncs = 0; + exec.syncs.num_syncs = 0; err = __xe_exec(t->fd, &exec); } else { - exec.num_syncs = 1; + exec.syncs.num_syncs = 1; err = __xe_exec(t->fd, &exec); igt_assert(syncobj_wait(t->fd, &sync[0].handle, 1, INT64_MAX, 0, NULL)); @@ -1299,8 +1299,8 @@ test_munmap_style_unbind(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint64_t addr = 0x1a00000, base_addr = 0x1a00000; uint32_t vm; @@ -1329,7 +1329,7 @@ test_munmap_style_unbind(int fd, struct drm_xe_engine_class_instance *eci, unbind_n_page_offset *= n_page_per_2mb; } - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = page_size * bo_n_pages; if (flags & MAP_FLAG_USERPTR) { @@ -1600,8 +1600,8 @@ test_mmap_style_bind(int fd, struct drm_xe_engine_class_instance *eci, }; struct drm_xe_exec exec = { .num_batch_buffer = 1, - .num_syncs = 2, - .syncs = to_user_pointer(sync), + .syncs.num_syncs = 2, + .syncs.syncs = to_user_pointer(sync), }; uint64_t addr = 0x1a00000, base_addr = 0x1a00000; uint32_t vm; @@ -1629,7 +1629,7 @@ test_mmap_style_bind(int fd, struct drm_xe_engine_class_instance *eci, unbind_n_page_offset *= n_page_per_2mb; } - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + vm = xe_vm_create(fd, 0, 0); bo_size = page_size * bo_n_pages; if (flags & MAP_FLAG_USERPTR) { diff --git a/tests/intel/xe_waitfence.c b/tests/intel/xe_waitfence.c index 3be987954d..acd614c96a 100644 --- a/tests/intel/xe_waitfence.c +++ b/tests/intel/xe_waitfence.c @@ -94,7 +94,7 @@ waitfence(int fd, enum waittype wt) uint32_t bo_7; int64_t timeout; - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + uint32_t vm = xe_vm_create(fd, 0, 0); bo_1 = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); do_bind(fd, vm, bo_1, 0, 0x200000, 0x40000, 1); bo_2 = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); @@ -170,7 +170,7 @@ invalid_flag(int fd) .instances = 0, }; - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + uint32_t vm = xe_vm_create(fd, 0, 0); bo = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); @@ -195,7 +195,7 @@ invalid_ops(int fd) .instances = 0, }; - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + uint32_t vm = xe_vm_create(fd, 0, 0); bo = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); @@ -220,7 +220,7 @@ invalid_engine(int fd) .instances = 0, }; - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); + uint32_t vm = xe_vm_create(fd, 0, 0); bo = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); -- 2.34.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [igt-dev] [RFC PATCH 3/3] drm-uapi/xe: Uniform async vs sync handling 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 3/3] drm-uapi/xe: Uniform async vs sync handling Matthew Brost @ 2023-12-07 19:59 ` Rodrigo Vivi 0 siblings, 0 replies; 6+ messages in thread From: Rodrigo Vivi @ 2023-12-07 19:59 UTC (permalink / raw) To: Matthew Brost; +Cc: igt-dev On Wed, Dec 06, 2023 at 10:03:51PM -0800, Matthew Brost wrote: > Align with commit ("drm/xe/uapi: Uniform async vs sync handling") > > Signed-off-by: Matthew Brost <matthew.brost@intel.com> > --- > benchmarks/gem_wsim.c | 13 +++--- > include/drm-uapi/xe_drm.h | 70 +++++++++++++++++----------- > lib/igt_fb.c | 2 +- > lib/intel_batchbuffer.c | 7 ++- > lib/intel_compute.c | 2 +- > lib/intel_ctx.c | 4 +- > lib/xe/xe_ioctl.c | 57 +++++++++------------- > lib/xe/xe_ioctl.h | 9 +--- > lib/xe/xe_query.c | 3 +- > lib/xe/xe_spin.c | 8 ++-- > lib/xe/xe_util.c | 4 +- > tests/intel/xe_access_counter.c | 2 +- > tests/intel/xe_ccs.c | 4 +- > tests/intel/xe_copy_basic.c | 2 +- > tests/intel/xe_create.c | 6 +-- > tests/intel/xe_dma_buf_sync.c | 4 +- > tests/intel/xe_drm_fdinfo.c | 8 ++-- > tests/intel/xe_evict.c | 37 +++++++-------- > tests/intel/xe_evict_ccs.c | 2 +- > tests/intel/xe_exec_balancer.c | 19 ++++---- > tests/intel/xe_exec_basic.c | 16 +++---- > tests/intel/xe_exec_compute_mode.c | 11 ++--- > tests/intel/xe_exec_fault_mode.c | 9 ++-- > tests/intel/xe_exec_queue_property.c | 2 +- > tests/intel/xe_exec_reset.c | 27 +++++------ > tests/intel/xe_exec_store.c | 18 +++---- > tests/intel/xe_exec_threads.c | 26 +++++------ > tests/intel/xe_exercise_blt.c | 2 +- > tests/intel/xe_huc_copy.c | 2 +- > tests/intel/xe_intel_bb.c | 2 +- > tests/intel/xe_noexec_ping_pong.c | 6 +-- > tests/intel/xe_pat.c | 4 +- > tests/intel/xe_perf_pmu.c | 12 ++--- > tests/intel/xe_pm.c | 6 +-- > tests/intel/xe_pm_residency.c | 4 +- > tests/intel/xe_spin_batch.c | 4 +- > tests/intel/xe_vm.c | 62 ++++++++++++------------ > tests/intel/xe_waitfence.c | 8 ++-- > 38 files changed, 232 insertions(+), 252 deletions(-) > > diff --git a/benchmarks/gem_wsim.c b/benchmarks/gem_wsim.c > index e937e10279..9146149e87 100644 > --- a/benchmarks/gem_wsim.c > +++ b/benchmarks/gem_wsim.c > @@ -1760,7 +1760,7 @@ xe_alloc_step_batch(struct workload *wrk, struct w_step *w) > w->xe.exec.exec_queue_id = eq->id; > w->xe.exec.num_batch_buffer = 1; > /* always at least one out fence */ > - w->xe.exec.num_syncs = 1; > + w->xe.exec.syncs.num_syncs = 1; > /* count syncs */ > for_each_dep(dep, w->data_deps) { > int dep_idx = w->idx + dep->target; > @@ -1768,7 +1768,7 @@ xe_alloc_step_batch(struct workload *wrk, struct w_step *w) > igt_assert(dep_idx >= 0 && dep_idx < w->idx); > igt_assert(wrk->steps[dep_idx].type == BATCH); > > - w->xe.exec.num_syncs++; > + w->xe.exec.syncs.num_syncs++; > } > for_each_dep(dep, w->fence_deps) { > int dep_idx = w->idx + dep->target; > @@ -1777,9 +1777,9 @@ xe_alloc_step_batch(struct workload *wrk, struct w_step *w) > igt_assert(wrk->steps[dep_idx].type == SW_FENCE || > wrk->steps[dep_idx].type == BATCH); > > - w->xe.exec.num_syncs++; > + w->xe.exec.syncs.num_syncs++; > } > - w->xe.syncs = calloc(w->xe.exec.num_syncs, sizeof(*w->xe.syncs)); > + w->xe.syncs = calloc(w->xe.exec.syncs.num_syncs, sizeof(*w->xe.syncs)); > /* fill syncs */ > i = 0; > /* out fence */ > @@ -1801,7 +1801,7 @@ xe_alloc_step_batch(struct workload *wrk, struct w_step *w) > w->xe.syncs[i].handle = wrk->steps[dep_idx].xe.syncs[0].handle; > w->xe.syncs[i++].type = DRM_XE_SYNC_TYPE_SYNCOBJ; > } > - w->xe.exec.syncs = to_user_pointer(w->xe.syncs); > + w->xe.exec.syncs.syncs = to_user_pointer(w->xe.syncs); > } > > static bool set_priority(uint32_t ctx_id, int prio) > @@ -2037,8 +2037,7 @@ static void xe_vm_create_(struct xe_vm *vm) > uint32_t flags = 0; > > if (vm->compute_mode) > - flags |= DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > - DRM_XE_VM_CREATE_FLAG_LR_MODE; > + flags |= DRM_XE_VM_CREATE_FLAG_LR_MODE; > > vm->id = xe_vm_create(fd, flags, 0); > } > diff --git a/include/drm-uapi/xe_drm.h b/include/drm-uapi/xe_drm.h > index 590f7b7af4..fd8172fe2d 100644 > --- a/include/drm-uapi/xe_drm.h > +++ b/include/drm-uapi/xe_drm.h > @@ -3,8 +3,8 @@ > * Copyright © 2023 Intel Corporation > */ > > -#ifndef _XE_DRM_H_ > -#define _XE_DRM_H_ > +#ifndef _UAPI_XE_DRM_H_ > +#define _UAPI_XE_DRM_H_ > > #include "drm.h" > > @@ -39,7 +39,7 @@ extern "C" { > * redefine the interface more easily than an ever growing struct of > * increasing complexity, and for large parts of that interface to be > * entirely optional. The downside is more pointer chasing; chasing across > - * the boundary with pointers encapsulated inside u64. > + * the __user boundary with pointers encapsulated inside u64. Please do not copy the header directly. Instead do something like: make headers_install INSTALL_HDR_PATH=/tmp/blah cp /tmp/blah/include/drm/xe_drm.h ./include/drm-uapi/xe_drm.h with this fixed, Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> > * > * Example chaining: > * > @@ -141,8 +141,7 @@ struct drm_xe_engine_class_instance { > * Kernel only classes (not actual hardware engine class). Used for > * creating ordered queues of VM bind operations. > */ > -#define DRM_XE_ENGINE_CLASS_VM_BIND_ASYNC 5 > -#define DRM_XE_ENGINE_CLASS_VM_BIND_SYNC 6 > +#define DRM_XE_ENGINE_CLASS_VM_BIND 5 > __u16 engine_class; > > __u16 engine_instance; > @@ -660,7 +659,6 @@ struct drm_xe_vm_create { > * still enable recoverable pagefaults if supported by the device. > */ > #define DRM_XE_VM_CREATE_FLAG_LR_MODE (1 << 1) > -#define DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT (1 << 2) > /* > * DRM_XE_VM_CREATE_FLAG_FAULT_MODE requires also > * DRM_XE_VM_CREATE_FLAG_LR_MODE. It allows memory to be allocated > @@ -668,7 +666,7 @@ struct drm_xe_vm_create { > * The xe driver internally uses recoverable pagefaults to implement > * this. > */ > -#define DRM_XE_VM_CREATE_FLAG_FAULT_MODE (1 << 3) > +#define DRM_XE_VM_CREATE_FLAG_FAULT_MODE (1 << 2) > /** @flags: Flags */ > __u32 flags; > > @@ -736,6 +734,12 @@ struct drm_xe_vm_bind_op { > * > * Note: For userptr and externally imported dma-buf the kernel expects > * either 1WAY or 2WAY for the @pat_index. > + * > + * For DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions > + * on the @pat_index. For such mappings there is no actual memory being > + * mapped (the address in the PTE is invalid), so the various PAT memory > + * attributes likely do not apply. Simply leaving as zero is one > + * option (still a valid pat_index). > */ > __u16 pat_index; > > @@ -770,12 +774,11 @@ struct drm_xe_vm_bind_op { > __u32 op; > > #define DRM_XE_VM_BIND_FLAG_READONLY (1 << 0) > -#define DRM_XE_VM_BIND_FLAG_ASYNC (1 << 1) > /* > * Valid on a faulting VM only, do the MAP operation immediately rather > * than deferring the MAP to the page fault handler. > */ > -#define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 2) > +#define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 1) > /* > * When the NULL flag is set, the page tables are setup with a special > * bit which indicates writes are dropped and all reads return zero. In > @@ -783,7 +786,7 @@ struct drm_xe_vm_bind_op { > * operations, the BO handle MBZ, and the BO offset MBZ. This flag is > * intended to implement VK sparse bindings. > */ > -#define DRM_XE_VM_BIND_FLAG_NULL (1 << 3) > +#define DRM_XE_VM_BIND_FLAG_NULL (1 << 2) > /** @flags: Bind flags */ > __u32 flags; > > @@ -801,6 +804,27 @@ struct drm_xe_vm_bind_op { > __u64 reserved[3]; > }; > > +/** > + * struct drm_xe_syncs - In / out syncs for IOCTLs. > + */ > +struct drm_xe_syncs { > + /** @num_syncs: amount of syncs to wait on */ > + __u32 num_syncs; > + > + /* > + * Block in IOCTL until operation complete, num_syncs MBZ if set. > + */ > +#define DRM_XE_SYNCS_FLAG_WAIT_FOR_OP (1 << 0) > + /** @flags: Sync flags */ > + __u32 flags; > + > + /** @syncs: pointer to struct drm_xe_sync array */ > + __u64 syncs; > + > + /** @reserved: Reserved */ > + __u64 reserved[2]; > +}; > + > struct drm_xe_vm_bind { > /** @extensions: Pointer to the first extension struct, if any */ > __u64 extensions; > @@ -832,14 +856,8 @@ struct drm_xe_vm_bind { > __u64 vector_of_binds; > }; > > - /** @pad: MBZ */ > - __u32 pad2; > - > - /** @num_syncs: amount of syncs to wait on */ > - __u32 num_syncs; > - > - /** @syncs: pointer to struct drm_xe_sync array */ > - __u64 syncs; > + /** @syncs: syncs for bind */ > + struct drm_xe_syncs syncs; > > /** @reserved: Reserved */ > __u64 reserved[2]; > @@ -968,14 +986,14 @@ struct drm_xe_exec { > /** @extensions: Pointer to the first extension struct, if any */ > __u64 extensions; > > + /** @pad: MBZ */ > + __u32 pad; > + > /** @exec_queue_id: Exec queue ID for the batch buffer */ > __u32 exec_queue_id; > > - /** @num_syncs: Amount of struct drm_xe_sync in array. */ > - __u32 num_syncs; > - > - /** @syncs: Pointer to struct drm_xe_sync array. */ > - __u64 syncs; > + /** @syncs: syncs for exec */ > + struct drm_xe_syncs syncs; > > /** > * @address: address of batch buffer if num_batch_buffer == 1 or an > @@ -989,8 +1007,8 @@ struct drm_xe_exec { > */ > __u16 num_batch_buffer; > > - /** @pad: MBZ */ > - __u16 pad[3]; > + /** @pad2: MBZ */ > + __u16 pad2[3]; > > /** @reserved: Reserved */ > __u64 reserved[2]; > @@ -1117,4 +1135,4 @@ struct drm_xe_wait_user_fence { > } > #endif > > -#endif /* _XE_DRM_H_ */ > +#endif /* _UAPI_XE_DRM_H_ */ > diff --git a/lib/igt_fb.c b/lib/igt_fb.c > index 907464273c..68abe9169e 100644 > --- a/lib/igt_fb.c > +++ b/lib/igt_fb.c > @@ -2896,7 +2896,7 @@ static void blitcopy(const struct igt_fb *dst_fb, > &bb_size, > mem_region) == 0); > } else if (is_xe) { > - vm = xe_vm_create(dst_fb->fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(dst_fb->fd, 0, 0); > exec_queue = xe_exec_queue_create(dst_fb->fd, vm, &inst, 0); > xe_ctx = intel_ctx_xe(dst_fb->fd, vm, exec_queue, 0, 0, 0); > mem_region = vram_if_possible(dst_fb->fd, 0); > diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c > index 472c881298..b790d3ed9d 100644 > --- a/lib/intel_batchbuffer.c > +++ b/lib/intel_batchbuffer.c > @@ -967,7 +967,7 @@ __intel_bb_create(int fd, uint32_t ctx, uint32_t vm, const intel_ctx_cfg_t *cfg, > > if (!vm) { > igt_assert_f(!ctx, "No vm provided for engine"); > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > } > > ibb->uses_full_ppgtt = true; > @@ -1347,9 +1347,8 @@ static void __unbind_xe_objects(struct intel_bb *ibb) > if (ibb->num_objects > 1) { > struct drm_xe_vm_bind_op *bind_ops; > uint32_t op = DRM_XE_VM_BIND_OP_UNMAP; > - uint32_t flags = DRM_XE_VM_BIND_FLAG_ASYNC; > > - bind_ops = xe_alloc_bind_ops(ibb, op, flags, 0); > + bind_ops = xe_alloc_bind_ops(ibb, op, 0, 0); > xe_vm_bind_array(ibb->fd, ibb->vm_id, 0, bind_ops, > ibb->num_objects, syncs, 2); > free(bind_ops); > @@ -2395,7 +2394,7 @@ __xe_bb_exec(struct intel_bb *ibb, uint64_t flags, bool sync) > > syncs[0].handle = syncobj_create(ibb->fd, 0); > if (ibb->num_objects > 1) { > - bind_ops = xe_alloc_bind_ops(ibb, DRM_XE_VM_BIND_OP_MAP, DRM_XE_VM_BIND_FLAG_ASYNC, 0); > + bind_ops = xe_alloc_bind_ops(ibb, DRM_XE_VM_BIND_OP_MAP, 0, 0); > xe_vm_bind_array(ibb->fd, ibb->vm_id, 0, bind_ops, > ibb->num_objects, syncs, 1); > free(bind_ops); > diff --git a/lib/intel_compute.c b/lib/intel_compute.c > index 0beab471b5..b3189db2f7 100644 > --- a/lib/intel_compute.c > +++ b/lib/intel_compute.c > @@ -82,7 +82,7 @@ static void bo_execenv_create(int fd, struct bo_execenv *execenv) > else > engine_class = DRM_XE_ENGINE_CLASS_COMPUTE; > > - execenv->vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + execenv->vm = xe_vm_create(fd, 0, 0); > execenv->exec_queue = xe_exec_queue_create_class(fd, execenv->vm, > engine_class); > } > diff --git a/lib/intel_ctx.c b/lib/intel_ctx.c > index b43dd63919..0221a1d6fd 100644 > --- a/lib/intel_ctx.c > +++ b/lib/intel_ctx.c > @@ -428,8 +428,8 @@ int __intel_ctx_xe_exec(const intel_ctx_t *ctx, uint64_t ahnd, uint64_t bb_offse > }; > struct drm_xe_exec exec = { > .exec_queue_id = ctx->exec_queue, > - .syncs = (uintptr_t)syncs, > - .num_syncs = 2, > + .syncs.syncs = (uintptr_t)syncs, > + .syncs.num_syncs = 2, > .address = bb_offset, > .num_batch_buffer = 1, > }; > diff --git a/lib/xe/xe_ioctl.c b/lib/xe/xe_ioctl.c > index 761e91eb3a..cd3880cdc5 100644 > --- a/lib/xe/xe_ioctl.c > +++ b/lib/xe/xe_ioctl.c > @@ -68,7 +68,7 @@ void xe_vm_unbind_all_async(int fd, uint32_t vm, uint32_t exec_queue, > uint32_t num_syncs) > { > __xe_vm_bind_assert(fd, vm, exec_queue, bo, 0, 0, 0, > - DRM_XE_VM_BIND_OP_UNMAP_ALL, DRM_XE_VM_BIND_FLAG_ASYNC, > + DRM_XE_VM_BIND_OP_UNMAP_ALL, 0, > sync, num_syncs, 0, 0); > } > > @@ -81,8 +81,8 @@ void xe_vm_bind_array(int fd, uint32_t vm, uint32_t exec_queue, > .vm_id = vm, > .num_binds = num_bind, > .vector_of_binds = (uintptr_t)bind_ops, > - .num_syncs = num_syncs, > - .syncs = (uintptr_t)sync, > + .syncs.num_syncs = num_syncs, > + .syncs.syncs = (uintptr_t)sync, > .exec_queue_id = exec_queue, > }; > > @@ -106,8 +106,10 @@ int __xe_vm_bind(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, > .bind.op = op, > .bind.flags = flags, > .bind.prefetch_mem_region_instance = prefetch_region, > - .num_syncs = num_syncs, > - .syncs = (uintptr_t)sync, > + .syncs.num_syncs = num_syncs, > + .syncs.syncs = (uintptr_t)sync, > + .syncs.flags = num_syncs == 0 ? > + DRM_XE_SYNCS_FLAG_WAIT_FOR_OP : 0, > .exec_queue_id = exec_queue, > .bind.pat_index = (pat_index == DEFAULT_PAT_INDEX) ? > intel_get_pat_idx_wb(fd) : pat_index, > @@ -129,29 +131,13 @@ void __xe_vm_bind_assert(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, > DEFAULT_PAT_INDEX, ext), 0); > } > > -void xe_vm_bind(int fd, uint32_t vm, uint32_t bo, uint64_t offset, > - uint64_t addr, uint64_t size, > - struct drm_xe_sync *sync, uint32_t num_syncs) > -{ > - __xe_vm_bind_assert(fd, vm, 0, bo, offset, addr, size, > - DRM_XE_VM_BIND_OP_MAP, 0, sync, num_syncs, 0, 0); > -} > - > -void xe_vm_unbind(int fd, uint32_t vm, uint64_t offset, > - uint64_t addr, uint64_t size, > - struct drm_xe_sync *sync, uint32_t num_syncs) > -{ > - __xe_vm_bind_assert(fd, vm, 0, 0, offset, addr, size, > - DRM_XE_VM_BIND_OP_UNMAP, 0, sync, num_syncs, 0, 0); > -} > - > void xe_vm_prefetch_async(int fd, uint32_t vm, uint32_t exec_queue, uint64_t offset, > uint64_t addr, uint64_t size, > struct drm_xe_sync *sync, uint32_t num_syncs, > uint32_t region) > { > __xe_vm_bind_assert(fd, vm, exec_queue, 0, offset, addr, size, > - DRM_XE_VM_BIND_OP_PREFETCH, DRM_XE_VM_BIND_FLAG_ASYNC, > + DRM_XE_VM_BIND_OP_PREFETCH, 0, > sync, num_syncs, region, 0); > } > > @@ -160,7 +146,7 @@ void xe_vm_bind_async(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, > struct drm_xe_sync *sync, uint32_t num_syncs) > { > __xe_vm_bind_assert(fd, vm, exec_queue, bo, offset, addr, size, > - DRM_XE_VM_BIND_OP_MAP, DRM_XE_VM_BIND_FLAG_ASYNC, sync, > + DRM_XE_VM_BIND_OP_MAP, 0, sync, > num_syncs, 0, 0); > } > > @@ -169,8 +155,10 @@ void xe_vm_bind_zero(int fd, uint32_t vm, uint32_t exec_queue, > { > struct drm_xe_vm_bind bind = { > .vm_id = vm, > - .num_syncs = num_syncs, > - .syncs = (uintptr_t)sync, > + .syncs.num_syncs = num_syncs, > + .syncs.syncs = (uintptr_t)sync, > + .syncs.flags = num_syncs == 0 ? > + DRM_XE_SYNCS_FLAG_WAIT_FOR_OP : 0, > .exec_queue_id = exec_queue, > }; > > @@ -183,7 +171,7 @@ void xe_vm_bind_async_flags(int fd, uint32_t vm, uint32_t exec_queue, uint32_t b > uint32_t flags) > { > __xe_vm_bind_assert(fd, vm, exec_queue, bo, offset, addr, size, > - DRM_XE_VM_BIND_OP_MAP, DRM_XE_VM_BIND_FLAG_ASYNC | flags, > + DRM_XE_VM_BIND_OP_MAP, flags, > sync, num_syncs, 0, 0); > } > > @@ -192,7 +180,7 @@ void xe_vm_bind_userptr_async(int fd, uint32_t vm, uint32_t exec_queue, > struct drm_xe_sync *sync, uint32_t num_syncs) > { > __xe_vm_bind_assert(fd, vm, exec_queue, 0, userptr, addr, size, > - DRM_XE_VM_BIND_OP_MAP_USERPTR, DRM_XE_VM_BIND_FLAG_ASYNC, > + DRM_XE_VM_BIND_OP_MAP_USERPTR, 0, > sync, num_syncs, 0, 0); > } > > @@ -202,8 +190,8 @@ void xe_vm_bind_userptr_async_flags(int fd, uint32_t vm, uint32_t exec_queue, > uint32_t num_syncs, uint32_t flags) > { > __xe_vm_bind_assert(fd, vm, exec_queue, 0, userptr, addr, size, > - DRM_XE_VM_BIND_OP_MAP_USERPTR, DRM_XE_VM_BIND_FLAG_ASYNC | > - flags, sync, num_syncs, 0, 0); > + DRM_XE_VM_BIND_OP_MAP_USERPTR, flags, > + sync, num_syncs, 0, 0); > } > > void xe_vm_unbind_async(int fd, uint32_t vm, uint32_t exec_queue, > @@ -211,7 +199,7 @@ void xe_vm_unbind_async(int fd, uint32_t vm, uint32_t exec_queue, > struct drm_xe_sync *sync, uint32_t num_syncs) > { > __xe_vm_bind_assert(fd, vm, exec_queue, 0, offset, addr, size, > - DRM_XE_VM_BIND_OP_UNMAP, DRM_XE_VM_BIND_FLAG_ASYNC, sync, > + DRM_XE_VM_BIND_OP_UNMAP, 0, sync, > num_syncs, 0, 0); > } > > @@ -328,11 +316,10 @@ uint32_t xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t place > return handle; > } > > -uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext, bool async) > +uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext) > { > struct drm_xe_engine_class_instance instance = { > - .engine_class = async ? DRM_XE_ENGINE_CLASS_VM_BIND_ASYNC : > - DRM_XE_ENGINE_CLASS_VM_BIND_SYNC, > + .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND, > }; > struct drm_xe_exec_queue_create create = { > .extensions = ext, > @@ -447,8 +434,8 @@ void xe_exec_sync(int fd, uint32_t exec_queue, uint64_t addr, > { > struct drm_xe_exec exec = { > .exec_queue_id = exec_queue, > - .syncs = (uintptr_t)sync, > - .num_syncs = num_syncs, > + .syncs.syncs = (uintptr_t)sync, > + .syncs.num_syncs = num_syncs, > .address = addr, > .num_batch_buffer = 1, > }; > diff --git a/lib/xe/xe_ioctl.h b/lib/xe/xe_ioctl.h > index a302418544..b2806a680a 100644 > --- a/lib/xe/xe_ioctl.h > +++ b/lib/xe/xe_ioctl.h > @@ -25,12 +25,6 @@ void __xe_vm_bind_assert(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo, > uint64_t offset, uint64_t addr, uint64_t size, > uint32_t op, uint32_t flags, struct drm_xe_sync *sync, > uint32_t num_syncs, uint32_t prefetch_region, uint64_t ext); > -void xe_vm_bind(int fd, uint32_t vm, uint32_t bo, uint64_t offset, > - uint64_t addr, uint64_t size, > - struct drm_xe_sync *sync, uint32_t num_syncs); > -void xe_vm_unbind(int fd, uint32_t vm, uint64_t offset, > - uint64_t addr, uint64_t size, > - struct drm_xe_sync *sync, uint32_t num_syncs); > void xe_vm_prefetch_async(int fd, uint32_t vm, uint32_t exec_queue, > uint64_t offset, uint64_t addr, uint64_t size, > struct drm_xe_sync *sync, uint32_t num_syncs, > @@ -78,8 +72,7 @@ uint16_t __xe_default_cpu_caching_from_placement(int fd, uint32_t placement); > uint32_t xe_exec_queue_create(int fd, uint32_t vm, > struct drm_xe_engine_class_instance *instance, > uint64_t ext); > -uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext, > - bool async); > +uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext); > uint32_t xe_exec_queue_create_class(int fd, uint32_t vm, uint16_t class); > void xe_exec_queue_destroy(int fd, uint32_t exec_queue); > uint64_t xe_bo_mmap_offset(int fd, uint32_t bo); > diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c > index fa2b490794..2bccdb1661 100644 > --- a/lib/xe/xe_query.c > +++ b/lib/xe/xe_query.c > @@ -311,8 +311,7 @@ bool xe_supports_faults(int fd) > bool supports_faults; > > struct drm_xe_vm_create create = { > - .flags = DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > - DRM_XE_VM_CREATE_FLAG_FAULT_MODE, > + .flags = DRM_XE_VM_CREATE_FLAG_FAULT_MODE, > }; > > supports_faults = !igt_ioctl(fd, DRM_IOCTL_XE_VM_CREATE, &create); > diff --git a/lib/xe/xe_spin.c b/lib/xe/xe_spin.c > index 243e970475..b478f40fc5 100644 > --- a/lib/xe/xe_spin.c > +++ b/lib/xe/xe_spin.c > @@ -195,8 +195,8 @@ xe_spin_create(int fd, const struct igt_spin_factory *opt) > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(&sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(&sync), > }; > > igt_assert(ahnd); > @@ -293,8 +293,8 @@ void xe_cork_init(int fd, struct drm_xe_engine_class_instance *hwe, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(&sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(&sync), > }; > > vm = xe_vm_create(fd, 0, 0); > diff --git a/lib/xe/xe_util.c b/lib/xe/xe_util.c > index ba8eece71f..e4c97c3a65 100644 > --- a/lib/xe/xe_util.c > +++ b/lib/xe/xe_util.c > @@ -118,7 +118,7 @@ static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(int xe, > { > struct drm_xe_vm_bind_op *bind_ops, *ops; > struct xe_object *obj; > - uint32_t num_objects = 0, i = 0, op, flags; > + uint32_t num_objects = 0, i = 0, op, flags = 0; > > igt_list_for_each_entry(obj, obj_list, link) > num_objects++; > @@ -137,11 +137,9 @@ static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(int xe, > > if (obj->bind_op == XE_OBJECT_BIND) { > op = DRM_XE_VM_BIND_OP_MAP; > - flags = DRM_XE_VM_BIND_FLAG_ASYNC; > ops->obj = obj->handle; > } else { > op = DRM_XE_VM_BIND_OP_UNMAP; > - flags = DRM_XE_VM_BIND_FLAG_ASYNC; > } > > ops->op = op; > diff --git a/tests/intel/xe_access_counter.c b/tests/intel/xe_access_counter.c > index 8966bfc9c8..91367f5606 100644 > --- a/tests/intel/xe_access_counter.c > +++ b/tests/intel/xe_access_counter.c > @@ -39,7 +39,7 @@ igt_main > > igt_subtest("invalid-param") { > struct drm_xe_engine_class_instance instance = { > - .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND_SYNC, > + .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND, > }; > > int ret; > diff --git a/tests/intel/xe_ccs.c b/tests/intel/xe_ccs.c > index 77d3020bc7..e9df5c2ef1 100644 > --- a/tests/intel/xe_ccs.c > +++ b/tests/intel/xe_ccs.c > @@ -345,7 +345,7 @@ static void block_copy(int xe, > uint32_t vm, exec_queue; > > if (config->new_ctx) { > - vm = xe_vm_create(xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(xe, 0, 0); > exec_queue = xe_exec_queue_create(xe, vm, &inst, 0); > surf_ctx = intel_ctx_xe(xe, vm, exec_queue, 0, 0, 0); > surf_ahnd = intel_allocator_open(xe, surf_ctx->vm, > @@ -553,7 +553,7 @@ static void block_copy_test(int xe, > copyfns[copy_function].suffix) { > uint32_t sync_bind, sync_out; > > - vm = xe_vm_create(xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(xe, 0, 0); > exec_queue = xe_exec_queue_create(xe, vm, &inst, 0); > sync_bind = syncobj_create(xe, 0); > sync_out = syncobj_create(xe, 0); > diff --git a/tests/intel/xe_copy_basic.c b/tests/intel/xe_copy_basic.c > index d9c059e4d9..1bde876cd2 100644 > --- a/tests/intel/xe_copy_basic.c > +++ b/tests/intel/xe_copy_basic.c > @@ -137,7 +137,7 @@ static void copy_test(int fd, uint32_t size, enum blt_cmd_type cmd, uint32_t reg > > src_handle = xe_bo_create(fd, 0, bo_size, region, 0); > dst_handle = xe_bo_create(fd, 0, bo_size, region, 0); > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > exec_queue = xe_exec_queue_create(fd, vm, &inst, 0); > ctx = intel_ctx_xe(fd, vm, exec_queue, 0, 0, 0); > > diff --git a/tests/intel/xe_create.c b/tests/intel/xe_create.c > index bbdddc7c9b..c3c57d11bc 100644 > --- a/tests/intel/xe_create.c > +++ b/tests/intel/xe_create.c > @@ -55,7 +55,7 @@ static void create_invalid_size(int fd) > uint32_t handle; > int ret; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > > xe_for_each_mem_region(fd, memreg, region) { > memregion = xe_mem_region(fd, region); > @@ -141,7 +141,7 @@ static void create_execqueues(int fd, enum exec_queue_destroy ed) > > fd = drm_reopen_driver(fd); > num_engines = xe_number_engines(fd); > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > > exec_queues_per_process = max_t(uint32_t, 1, MAXEXECQUEUES / nproc); > igt_debug("nproc: %u, exec_queues per process: %u\n", nproc, exec_queues_per_process); > @@ -208,7 +208,7 @@ static void create_massive_size(int fd) > uint32_t handle; > int ret; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > > xe_for_each_mem_region(fd, memreg, region) { > ret = __create_bo(fd, vm, -1ULL << 32, region, &handle); > diff --git a/tests/intel/xe_dma_buf_sync.c b/tests/intel/xe_dma_buf_sync.c > index eca3a5e95b..e81410d97a 100644 > --- a/tests/intel/xe_dma_buf_sync.c > +++ b/tests/intel/xe_dma_buf_sync.c > @@ -150,7 +150,7 @@ test_export_dma_buf(struct drm_xe_engine_class_instance *hwe0, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .syncs = to_user_pointer(sync), > + .syncs.syncs = to_user_pointer(sync), > }; > struct xe_spin_opts spin_opts = { .addr = addr + spin_offset, .preempt = true }; > uint32_t syncobj; > @@ -189,7 +189,7 @@ test_export_dma_buf(struct drm_xe_engine_class_instance *hwe0, > sync[1].handle = syncobj_create(fd[1], 0); > exec.exec_queue_id = exec_queue[1]; > exec.address = batch_addr; > - exec.num_syncs = 2; > + exec.syncs.num_syncs = 2; > xe_exec(fd[1], &exec); > > /* Verify exec blocked on spinner / prime BO */ > diff --git a/tests/intel/xe_drm_fdinfo.c b/tests/intel/xe_drm_fdinfo.c > index fd6c07410a..8855c580fe 100644 > --- a/tests/intel/xe_drm_fdinfo.c > +++ b/tests/intel/xe_drm_fdinfo.c > @@ -53,8 +53,8 @@ static void test_active(int fd, struct drm_xe_engine *engine) > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > #define N_EXEC_QUEUES 2 > uint32_t exec_queues[N_EXEC_QUEUES]; > @@ -71,7 +71,7 @@ static void test_active(int fd, struct drm_xe_engine *engine) > struct xe_spin_opts spin_opts = { .preempt = true }; > int i, b, ret; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * N_EXEC_QUEUES; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -91,7 +91,7 @@ static void test_active(int fd, struct drm_xe_engine *engine) > for (i = 0; i < N_EXEC_QUEUES; i++) { > exec_queues[i] = xe_exec_queue_create(fd, vm, > &engine->instance, 0); > - bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, 0, true); > + bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, 0); > syncobjs[i] = syncobj_create(fd, 0); > } > syncobjs[N_EXEC_QUEUES] = syncobj_create(fd, 0); > diff --git a/tests/intel/xe_evict.c b/tests/intel/xe_evict.c > index 89dc46fae4..12a53ad539 100644 > --- a/tests/intel/xe_evict.c > +++ b/tests/intel/xe_evict.c > @@ -43,8 +43,8 @@ test_evict(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > uint32_t syncobjs[MAX_N_EXEC_QUEUES]; > @@ -63,17 +63,15 @@ test_evict(int fd, struct drm_xe_engine_class_instance *eci, > > fd = drm_open_driver(DRIVER_XE); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > if (flags & BIND_EXEC_QUEUE) > - bind_exec_queues[0] = xe_bind_exec_queue_create(fd, vm, 0, true); > + bind_exec_queues[0] = xe_bind_exec_queue_create(fd, vm, 0); > if (flags & MULTI_VM) { > - vm2 = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > - vm3 = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm2 = xe_vm_create(fd, 0, 0); > + vm3 = xe_vm_create(fd, 0, 0); > if (flags & BIND_EXEC_QUEUE) { > - bind_exec_queues[1] = xe_bind_exec_queue_create(fd, vm2, > - 0, true); > - bind_exec_queues[2] = xe_bind_exec_queue_create(fd, vm3, > - 0, true); > + bind_exec_queues[1] = xe_bind_exec_queue_create(fd, vm2, 0); > + bind_exec_queues[2] = xe_bind_exec_queue_create(fd, vm3, 0); > } > } > > @@ -163,8 +161,8 @@ test_evict(int fd, struct drm_xe_engine_class_instance *eci, > > if (i + 1 == n_execs / 2) { > addr = base_addr; > - exec.num_syncs = 1; > - exec.syncs = to_user_pointer(sync + 1); > + exec.syncs.num_syncs = 1; > + exec.syncs.syncs = to_user_pointer(sync + 1); > if (barrier) > pthread_barrier_wait(barrier); > } > @@ -224,8 +222,8 @@ test_evict_cm(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > uint32_t *bo; > @@ -245,16 +243,13 @@ test_evict_cm(int fd, struct drm_xe_engine_class_instance *eci, > > fd = drm_open_driver(DRIVER_XE); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > if (flags & BIND_EXEC_QUEUE) > - bind_exec_queues[0] = xe_bind_exec_queue_create(fd, vm, 0, true); > + bind_exec_queues[0] = xe_bind_exec_queue_create(fd, vm, 0); > if (flags & MULTI_VM) { > - vm2 = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > + vm2 = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > if (flags & BIND_EXEC_QUEUE) > - bind_exec_queues[1] = xe_bind_exec_queue_create(fd, vm2, > - 0, true); > + bind_exec_queues[1] = xe_bind_exec_queue_create(fd, vm2, 0); > } > > for (i = 0; i < n_exec_queues; i++) { > diff --git a/tests/intel/xe_evict_ccs.c b/tests/intel/xe_evict_ccs.c > index 0c775e5f4d..d182bc9535 100644 > --- a/tests/intel/xe_evict_ccs.c > +++ b/tests/intel/xe_evict_ccs.c > @@ -227,7 +227,7 @@ static void evict_single(int fd, int child, const struct config *config) > uint32_t kb_left = config->mb_per_proc * SZ_1K; > uint32_t min_alloc_kb = config->param->min_size_kb; > uint32_t max_alloc_kb = config->param->max_size_kb; > - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + uint32_t vm = xe_vm_create(fd, 0, 0); > uint64_t ahnd = intel_allocator_open(fd, vm, INTEL_ALLOCATOR_RELOC); > uint8_t uc_mocs = intel_get_uc_mocs_index(fd); > struct object *obj, *tmp; > diff --git a/tests/intel/xe_exec_balancer.c b/tests/intel/xe_exec_balancer.c > index 79ff65e891..3814fffb00 100644 > --- a/tests/intel/xe_exec_balancer.c > +++ b/tests/intel/xe_exec_balancer.c > @@ -42,8 +42,8 @@ static void test_all_active(int fd, int gt, int class) > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_INSTANCE]; > uint32_t syncobjs[MAX_INSTANCE]; > @@ -66,7 +66,7 @@ static void test_all_active(int fd, int gt, int class) > if (num_placements < 2) > return; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * num_placements; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); > > @@ -181,8 +181,8 @@ test_exec(int fd, int gt, int class, int n_exec_queues, int n_execs, > { .type = DRM_XE_SYNC_TYPE_SYNCOBJ, .flags = DRM_XE_SYNC_FLAG_SIGNAL, }, > }; > struct drm_xe_exec exec = { > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > uint32_t syncobjs[MAX_N_EXEC_QUEUES]; > @@ -208,7 +208,7 @@ test_exec(int fd, int gt, int class, int n_exec_queues, int n_execs, > if (num_placements < 2) > return; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); > > @@ -406,8 +406,8 @@ test_cm(int fd, int gt, int class, int n_exec_queues, int n_execs, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > size_t bo_size; > @@ -435,8 +435,7 @@ test_cm(int fd, int gt, int class, int n_exec_queues, int n_execs, > if (num_placements < 2) > return; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > diff --git a/tests/intel/xe_exec_basic.c b/tests/intel/xe_exec_basic.c > index b20581382c..0614141207 100644 > --- a/tests/intel/xe_exec_basic.c > +++ b/tests/intel/xe_exec_basic.c > @@ -87,8 +87,8 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint64_t addr[MAX_N_EXEC_QUEUES]; > uint64_t sparse_addr[MAX_N_EXEC_QUEUES]; > @@ -110,7 +110,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > igt_assert(n_vm <= MAX_N_EXEC_QUEUES); > > for (i = 0; i < n_vm; ++i) > - vm[i] = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm[i] = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -153,8 +153,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > exec_queues[i] = xe_exec_queue_create(fd, __vm, eci, 0); > if (flags & BIND_EXEC_QUEUE) > bind_exec_queues[i] = xe_bind_exec_queue_create(fd, > - __vm, 0, > - true); > + __vm, 0); > else > bind_exec_queues[i] = 0; > syncobjs[i] = syncobj_create(fd, 0); > @@ -174,7 +173,6 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > __xe_vm_bind_assert(fd, vm[i], bind_exec_queues[i], > 0, 0, sparse_addr[i], bo_size, > DRM_XE_VM_BIND_OP_MAP, > - DRM_XE_VM_BIND_FLAG_ASYNC | > DRM_XE_VM_BIND_FLAG_NULL, sync, > 1, 0, 0); > } > @@ -319,8 +317,8 @@ static void test_zero_execs(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(sync), > }; > size_t bo_size; > uint32_t bo = 0; > @@ -334,7 +332,7 @@ static void test_zero_execs(int fd, struct drm_xe_engine_class_instance *eci, > } *data; > int i, b; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > diff --git a/tests/intel/xe_exec_compute_mode.c b/tests/intel/xe_exec_compute_mode.c > index 7d3004d658..b51fa880ac 100644 > --- a/tests/intel/xe_exec_compute_mode.c > +++ b/tests/intel/xe_exec_compute_mode.c > @@ -94,8 +94,8 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXECQUEUES]; > uint32_t bind_exec_queues[MAX_N_EXECQUEUES]; > @@ -114,8 +114,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > > igt_assert(n_exec_queues <= MAX_N_EXECQUEUES); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -124,7 +123,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); > if (flags & BIND_EXECQUEUE) > bind_exec_queues[i] = > - xe_bind_exec_queue_create(fd, vm, 0, true); > + xe_bind_exec_queue_create(fd, vm, 0); > else > bind_exec_queues[i] = 0; > }; > @@ -153,7 +152,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); > if (flags & BIND_EXECQUEUE) > bind_exec_queues[i] = > - xe_bind_exec_queue_create(fd, vm, 0, true); > + xe_bind_exec_queue_create(fd, vm, 0); > else > bind_exec_queues[i] = 0; > }; > diff --git a/tests/intel/xe_exec_fault_mode.c b/tests/intel/xe_exec_fault_mode.c > index ee7cbb6040..67f05c2660 100644 > --- a/tests/intel/xe_exec_fault_mode.c > +++ b/tests/intel/xe_exec_fault_mode.c > @@ -112,8 +112,8 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > uint32_t bind_exec_queues[MAX_N_EXEC_QUEUES]; > @@ -131,8 +131,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > > igt_assert(n_exec_queues <= MAX_N_EXEC_QUEUES); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > - DRM_XE_VM_CREATE_FLAG_LR_MODE | > + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE | > DRM_XE_VM_CREATE_FLAG_FAULT_MODE, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > @@ -168,7 +167,7 @@ test_exec(int fd, struct drm_xe_engine_class_instance *eci, > exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); > if (flags & BIND_EXEC_QUEUE) > bind_exec_queues[i] = > - xe_bind_exec_queue_create(fd, vm, 0, true); > + xe_bind_exec_queue_create(fd, vm, 0); > else > bind_exec_queues[i] = 0; > }; > diff --git a/tests/intel/xe_exec_queue_property.c b/tests/intel/xe_exec_queue_property.c > index 0b578510ce..53e08fb0e6 100644 > --- a/tests/intel/xe_exec_queue_property.c > +++ b/tests/intel/xe_exec_queue_property.c > @@ -56,7 +56,7 @@ static void test_set_property(int xe, int property_name, > int property_value, int err_val) > { > struct drm_xe_engine_class_instance instance = { > - .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND_SYNC, > + .engine_class = DRM_XE_ENGINE_CLASS_VM_BIND, > }; > struct drm_xe_ext_set_property ext = { > .base.next_extension = 0, > diff --git a/tests/intel/xe_exec_reset.c b/tests/intel/xe_exec_reset.c > index edfd27fe0c..f9c0057072 100644 > --- a/tests/intel/xe_exec_reset.c > +++ b/tests/intel/xe_exec_reset.c > @@ -35,8 +35,8 @@ static void test_spin(int fd, struct drm_xe_engine_class_instance *eci) > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queue; > uint32_t syncobj; > @@ -45,7 +45,7 @@ static void test_spin(int fd, struct drm_xe_engine_class_instance *eci) > struct xe_spin *spin; > struct xe_spin_opts spin_opts = { .addr = addr, .preempt = false }; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*spin); > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -145,8 +145,8 @@ test_balancer(int fd, int gt, int class, int n_exec_queues, int n_execs, > { .type = DRM_XE_SYNC_TYPE_SYNCOBJ, .flags = DRM_XE_SYNC_FLAG_SIGNAL, }, > }; > struct drm_xe_exec exec = { > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXECQUEUES]; > uint32_t syncobjs[MAX_N_EXECQUEUES]; > @@ -177,7 +177,7 @@ test_balancer(int fd, int gt, int class, int n_exec_queues, int n_execs, > if (num_placements < 2) > return; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -343,8 +343,8 @@ test_legacy_mode(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXECQUEUES]; > uint32_t syncobjs[MAX_N_EXECQUEUES]; > @@ -364,7 +364,7 @@ test_legacy_mode(int fd, struct drm_xe_engine_class_instance *eci, > if (flags & CLOSE_FD) > fd = drm_open_driver(DRIVER_XE); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -509,8 +509,8 @@ test_compute_mode(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXECQUEUES]; > size_t bo_size; > @@ -531,8 +531,7 @@ test_compute_mode(int fd, struct drm_xe_engine_class_instance *eci, > if (flags & CLOSE_FD) > fd = drm_open_driver(DRIVER_XE); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -695,6 +694,8 @@ static void submit_jobs(struct gt_thread_data *t) > exec.exec_queue_id = create.exec_queue_id; > exec.address = addr; > exec.num_batch_buffer = 1; > + exec.syncs.num_syncs = 0; > + exec.syncs.flags = 0; > xe_exec(fd, &exec); > xe_exec_queue_destroy(fd, create.exec_queue_id); > } > diff --git a/tests/intel/xe_exec_store.c b/tests/intel/xe_exec_store.c > index dec8546a3c..50f581a268 100644 > --- a/tests/intel/xe_exec_store.c > +++ b/tests/intel/xe_exec_store.c > @@ -60,8 +60,8 @@ static void store(int fd) > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(&sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(&sync), > }; > struct data *data; > struct drm_xe_engine *engine; > @@ -76,7 +76,7 @@ static void store(int fd) > syncobj = syncobj_create(fd, 0); > sync.handle = syncobj; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data); > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -129,8 +129,8 @@ static void store_cachelines(int fd, struct drm_xe_engine_class_instance *eci, > > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(&sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(&sync), > }; > > int count = flags & PAGES ? NCACHELINES + 1 : 2; > @@ -145,7 +145,7 @@ static void store_cachelines(int fd, struct drm_xe_engine_class_instance *eci, > size_t bo_size = 4096; > > bo_size = ALIGN(bo_size, xe_get_default_alignment(fd)); > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > ahnd = intel_allocator_open(fd, 0, INTEL_ALLOCATOR_SIMPLE); > exec_queues = xe_exec_queue_create(fd, vm, eci, 0); > syncobjs = syncobj_create(fd, 0); > @@ -218,8 +218,8 @@ static void store_all(int fd, int gt, int class) > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(&sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(&sync), > }; > > struct data *data; > @@ -233,7 +233,7 @@ static void store_all(int fd, int gt, int class) > struct drm_xe_engine_class_instance *hwe; > int i, num_placements = 0; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data); > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > diff --git a/tests/intel/xe_exec_threads.c b/tests/intel/xe_exec_threads.c > index fcb9266982..31e2173e43 100644 > --- a/tests/intel/xe_exec_threads.c > +++ b/tests/intel/xe_exec_threads.c > @@ -52,8 +52,8 @@ test_balancer(int fd, int gt, uint32_t vm, uint64_t addr, uint64_t userptr, > }; > struct drm_xe_sync sync_all[MAX_N_EXEC_QUEUES]; > struct drm_xe_exec exec = { > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > uint32_t syncobjs[MAX_N_EXEC_QUEUES]; > @@ -77,7 +77,7 @@ test_balancer(int fd, int gt, uint32_t vm, uint64_t addr, uint64_t userptr, > } > > if (!vm) { > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > owns_vm = true; > } > > @@ -260,8 +260,8 @@ test_compute_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(sync), > }; > int64_t fence_timeout; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > @@ -286,8 +286,7 @@ test_compute_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, > } > > if (!vm) { > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > - DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > owns_vm = true; > } > > @@ -465,8 +464,8 @@ test_legacy_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, > struct drm_xe_sync sync_all[MAX_N_EXEC_QUEUES]; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > uint32_t bind_exec_queues[MAX_N_EXEC_QUEUES]; > @@ -491,7 +490,7 @@ test_legacy_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, > } > > if (!vm) { > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > owns_vm = true; > } > > @@ -535,7 +534,7 @@ test_legacy_mode(int fd, uint32_t vm, uint64_t addr, uint64_t userptr, > exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); > if (flags & BIND_EXEC_QUEUE) > bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, > - 0, true); > + 0); > else > bind_exec_queues[i] = 0; > syncobjs[i] = syncobj_create(fd, 0); > @@ -1003,11 +1002,8 @@ static void threads(int fd, int flags) > pthread_cond_init(&cond, 0); > > if (flags & SHARED_VM) { > - vm_legacy_mode = xe_vm_create(fd, > - DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, > - 0); > + vm_legacy_mode = xe_vm_create(fd, 0, 0); > vm_compute_mode = xe_vm_create(fd, > - DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT | > DRM_XE_VM_CREATE_FLAG_LR_MODE, > 0); > } > diff --git a/tests/intel/xe_exercise_blt.c b/tests/intel/xe_exercise_blt.c > index 655e9a3ea3..cc9060b1b1 100644 > --- a/tests/intel/xe_exercise_blt.c > +++ b/tests/intel/xe_exercise_blt.c > @@ -280,7 +280,7 @@ static void fast_copy_test(int xe, > region1 = igt_collection_get_value(regions, 0); > region2 = igt_collection_get_value(regions, 1); > > - vm = xe_vm_create(xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(xe, 0, 0); > exec_queue = xe_exec_queue_create(xe, vm, &inst, 0); > ctx = intel_ctx_xe(xe, vm, exec_queue, 0, 0, 0); > > diff --git a/tests/intel/xe_huc_copy.c b/tests/intel/xe_huc_copy.c > index 035d86ea8f..ca045c41bf 100644 > --- a/tests/intel/xe_huc_copy.c > +++ b/tests/intel/xe_huc_copy.c > @@ -157,7 +157,7 @@ test_huc_copy(int fd) > uint32_t vm; > uint32_t tested_gts = 0; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > > xe_for_each_engine(fd, hwe) { > if (hwe->engine_class == DRM_XE_ENGINE_CLASS_VIDEO_DECODE && > diff --git a/tests/intel/xe_intel_bb.c b/tests/intel/xe_intel_bb.c > index 804e176ee6..d3d7a4fb69 100644 > --- a/tests/intel/xe_intel_bb.c > +++ b/tests/intel/xe_intel_bb.c > @@ -192,7 +192,7 @@ static void simple_bb(struct buf_ops *bops, bool new_context) > intel_bb_reset(ibb, true); > > if (new_context) { > - vm = xe_vm_create(xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(xe, 0, 0); > ctx = xe_exec_queue_create(xe, vm, &xe_engine(xe, 0)->instance, > 0); > intel_bb_destroy(ibb); > diff --git a/tests/intel/xe_noexec_ping_pong.c b/tests/intel/xe_noexec_ping_pong.c > index c91340784a..2aeea14d0e 100644 > --- a/tests/intel/xe_noexec_ping_pong.c > +++ b/tests/intel/xe_noexec_ping_pong.c > @@ -64,7 +64,7 @@ static void test_ping_pong(int fd, struct drm_xe_engine *engine) > * stats. > */ > for (i = 0; i < NUM_VMS; ++i) { > - vm[i] = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE, 0); > + vm[i] = xe_vm_create(fd, 0, 0); > for (j = 0; j < NUM_BOS; ++j) { > igt_debug("Creating bo size %lu for vm %u\n", > (unsigned long) bo_size, > @@ -72,8 +72,8 @@ static void test_ping_pong(int fd, struct drm_xe_engine *engine) > > bo[i][j] = xe_bo_create(fd, vm[i], bo_size, > vram_memory(fd, 0), 0); > - xe_vm_bind(fd, vm[i], bo[i][j], 0, 0x40000 + j*bo_size, > - bo_size, NULL, 0); > + xe_vm_bind_async(fd, vm[i], 0, bo[i][j], 0, 0x40000 + j*bo_size, > + bo_size, NULL, 0); > } > exec_queues[i] = xe_exec_queue_create(fd, vm[i], > &engine->instance, 0); > diff --git a/tests/intel/xe_pat.c b/tests/intel/xe_pat.c > index 8189390a8a..fafcfc2467 100644 > --- a/tests/intel/xe_pat.c > +++ b/tests/intel/xe_pat.c > @@ -254,7 +254,7 @@ static void pat_index_blt(struct xe_pat_param *p) > > igt_require(blt_has_fast_copy(fd)); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > exec_queue = xe_exec_queue_create(fd, vm, &inst, 0); > ctx = intel_ctx_xe(fd, vm, exec_queue, 0, 0, 0); > ahnd = intel_allocator_open_full(fd, ctx->vm, 0, 0, > @@ -468,7 +468,7 @@ static void pat_index_dw(struct xe_pat_param *p) > break; > } > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > ctx = xe_exec_queue_create(fd, vm, hwe, 0); > > ibb = intel_bb_create_full(fd, ctx, vm, NULL, xe_get_default_alignment(fd), > diff --git a/tests/intel/xe_perf_pmu.c b/tests/intel/xe_perf_pmu.c > index 42cf627291..36d1c16efb 100644 > --- a/tests/intel/xe_perf_pmu.c > +++ b/tests/intel/xe_perf_pmu.c > @@ -86,8 +86,8 @@ static void test_any_engine_busyness(int fd, struct drm_xe_engine_class_instance > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queue; > uint32_t syncobj; > @@ -98,7 +98,7 @@ static void test_any_engine_busyness(int fd, struct drm_xe_engine_class_instance > uint32_t pmu_fd; > uint64_t count, idle; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*spin); > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -190,8 +190,8 @@ static void test_engine_group_busyness(int fd, int gt, int class, const char *na > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_INSTANCE]; > uint32_t syncobjs[MAX_INSTANCE]; > @@ -219,7 +219,7 @@ static void test_engine_group_busyness(int fd, int gt, int class, const char *na > igt_skip_on_f(!num_placements, "Engine class:%d gt:%d not enabled on this platform\n", > class, gt); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * num_placements; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), xe_get_default_alignment(fd)); > > diff --git a/tests/intel/xe_pm.c b/tests/intel/xe_pm.c > index c899bd67a0..8942f2f2cb 100644 > --- a/tests/intel/xe_pm.c > +++ b/tests/intel/xe_pm.c > @@ -236,8 +236,8 @@ test_exec(device_t device, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > uint32_t bind_exec_queues[MAX_N_EXEC_QUEUES]; > @@ -259,7 +259,7 @@ test_exec(device_t device, struct drm_xe_engine_class_instance *eci, > if (check_rpm) > igt_assert(in_d3(device, d_state)); > > - vm = xe_vm_create(device.fd_xe, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(device.fd_xe, 0, 0); > > if (check_rpm) > igt_assert(out_of_d3(device, d_state)); > diff --git a/tests/intel/xe_pm_residency.c b/tests/intel/xe_pm_residency.c > index 5542f8fb44..a833f0e65a 100644 > --- a/tests/intel/xe_pm_residency.c > +++ b/tests/intel/xe_pm_residency.c > @@ -92,8 +92,8 @@ static void exec_load(int fd, struct drm_xe_engine_class_instance *hwe, unsigned > > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(&sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(&sync), > }; > > vm = xe_vm_create(fd, 0, 0); > diff --git a/tests/intel/xe_spin_batch.c b/tests/intel/xe_spin_batch.c > index c75709c4e6..08e8496571 100644 > --- a/tests/intel/xe_spin_batch.c > +++ b/tests/intel/xe_spin_batch.c > @@ -150,8 +150,8 @@ static void xe_spin_fixed_duration(int fd) > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(&sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(&sync), > }; > const uint64_t duration_ns = NSEC_PER_SEC / 10; /* 100ms */ > uint64_t spin_addr; > diff --git a/tests/intel/xe_vm.c b/tests/intel/xe_vm.c > index 62bf950504..22874542e4 100644 > --- a/tests/intel/xe_vm.c > +++ b/tests/intel/xe_vm.c > @@ -268,7 +268,7 @@ test_bind_one_bo_many_times_many_vm(int fd) > > static void test_partial_unbinds(int fd) > { > - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + uint32_t vm = xe_vm_create(fd, 0, 0); > size_t bo_size = 3 * xe_get_default_alignment(fd); > uint32_t bo = xe_bo_create(fd, vm, bo_size, vram_if_possible(fd, 0), 0); > uint64_t unbind_size = bo_size / 3; > @@ -318,7 +318,7 @@ static void unbind_all(int fd, int n_vmas) > { .type = DRM_XE_SYNC_TYPE_SYNCOBJ, .flags = DRM_XE_SYNC_FLAG_SIGNAL, }, > }; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo = xe_bo_create(fd, vm, bo_size, vram_if_possible(fd, 0), 0); > > for (i = 0; i < n_vmas; ++i) > @@ -397,8 +397,8 @@ shared_pte_page(int fd, struct drm_xe_engine_class_instance *eci, int n_bo, > struct drm_xe_sync sync_all[MAX_N_EXEC_QUEUES + 1]; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queues[MAX_N_EXEC_QUEUES]; > uint32_t syncobjs[MAX_N_EXEC_QUEUES]; > @@ -416,7 +416,7 @@ shared_pte_page(int fd, struct drm_xe_engine_class_instance *eci, int n_bo, > data = malloc(sizeof(*data) * n_bo); > igt_assert(data); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(struct shared_pte_page_data); > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -583,8 +583,8 @@ test_bind_execqueues_independent(int fd, struct drm_xe_engine_class_instance *ec > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > #define N_EXEC_QUEUES 2 > uint32_t exec_queues[N_EXEC_QUEUES]; > @@ -601,7 +601,7 @@ test_bind_execqueues_independent(int fd, struct drm_xe_engine_class_instance *ec > struct xe_spin_opts spin_opts = { .preempt = true }; > int i, b; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * N_EXEC_QUEUES; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -612,7 +612,7 @@ test_bind_execqueues_independent(int fd, struct drm_xe_engine_class_instance *ec > > for (i = 0; i < N_EXEC_QUEUES; i++) { > exec_queues[i] = xe_exec_queue_create(fd, vm, eci, 0); > - bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, 0, true); > + bind_exec_queues[i] = xe_bind_exec_queue_create(fd, vm, 0); > syncobjs[i] = syncobj_create(fd, 0); > } > syncobjs[N_EXEC_QUEUES] = syncobj_create(fd, 0); > @@ -673,7 +673,7 @@ test_bind_execqueues_independent(int fd, struct drm_xe_engine_class_instance *ec > sync[1].flags |= DRM_XE_SYNC_FLAG_SIGNAL; > sync[1].handle = syncobjs[!i ? N_EXEC_QUEUES : e]; > > - exec.num_syncs = 2; > + exec.syncs.num_syncs = 2; > exec.exec_queue_id = exec_queues[e]; > exec.address = batch_addr; > xe_exec(fd, &exec); > @@ -748,7 +748,7 @@ static void test_zero_binds(int fd, struct drm_xe_engine_class_instance *eci) > uint32_t bo = 0; > struct xe_cork cork; > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = ALIGN(xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > bo = xe_bo_create(fd, vm, bo_size, > @@ -823,7 +823,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .syncs = to_user_pointer(sync), > + .syncs.syncs = to_user_pointer(sync), > }; > uint32_t exec_queue, bind_exec_queue = 0; > #define BIND_ARRAY_MAX_N_EXEC 16 > @@ -839,7 +839,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, > > igt_assert(n_execs <= BIND_ARRAY_MAX_N_EXEC); > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = sizeof(*data) * n_execs; > bo_size = ALIGN(bo_size + xe_cs_prefetch_size(fd), > xe_get_default_alignment(fd)); > @@ -850,7 +850,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, > data = xe_bo_map(fd, bo, bo_size); > > if (flags & BIND_ARRAY_BIND_EXEC_QUEUE_FLAG) > - bind_exec_queue = xe_bind_exec_queue_create(fd, vm, 0, true); > + bind_exec_queue = xe_bind_exec_queue_create(fd, vm, 0); > exec_queue = xe_exec_queue_create(fd, vm, eci, 0); > > for (i = 0; i < n_execs; ++i) { > @@ -859,7 +859,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, > bind_ops[i].range = bo_size; > bind_ops[i].addr = addr; > bind_ops[i].op = DRM_XE_VM_BIND_OP_MAP; > - bind_ops[i].flags = DRM_XE_VM_BIND_FLAG_ASYNC; > + bind_ops[i].flags = 0; > bind_ops[i].prefetch_mem_region_instance = 0; > bind_ops[i].pat_index = intel_get_pat_idx_wb(fd); > bind_ops[i].reserved[0] = 0; > @@ -890,9 +890,9 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, > sync[1].flags |= DRM_XE_SYNC_FLAG_SIGNAL; > if (i == n_execs - 1) { > sync[1].handle = syncobj_create(fd, 0); > - exec.num_syncs = 2; > + exec.syncs.num_syncs = 2; > } else { > - exec.num_syncs = 1; > + exec.syncs.num_syncs = 1; > } > > exec.exec_queue_id = exec_queue; > @@ -905,7 +905,7 @@ test_bind_array(int fd, struct drm_xe_engine_class_instance *eci, int n_execs, > for (i = 0; i < n_execs; ++i) { > bind_ops[i].obj = 0; > bind_ops[i].op = DRM_XE_VM_BIND_OP_UNMAP; > - bind_ops[i].flags = DRM_XE_VM_BIND_FLAG_ASYNC; > + bind_ops[i].flags = 0; > } > > syncobj_reset(fd, &sync[0].handle, 1); > @@ -1012,8 +1012,8 @@ test_large_binds(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint64_t addr = 0x1ull << 30, base_addr = 0x1ull << 30; > uint32_t vm; > @@ -1034,7 +1034,7 @@ 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, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > > if (flags & LARGE_BIND_FLAG_USERPTR) { > map = aligned_alloc(xe_get_default_alignment(fd), bo_size); > @@ -1172,8 +1172,8 @@ static void *hammer_thread(void *tdata) > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 1, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 1, > + .syncs.syncs = to_user_pointer(sync), > }; > struct { > uint32_t batch[16]; > @@ -1205,10 +1205,10 @@ static void *hammer_thread(void *tdata) > exec.exec_queue_id = exec_queue; > exec.address = batch_addr; > if (i % 32) { > - exec.num_syncs = 0; > + exec.syncs.num_syncs = 0; > err = __xe_exec(t->fd, &exec); > } else { > - exec.num_syncs = 1; > + exec.syncs.num_syncs = 1; > err = __xe_exec(t->fd, &exec); > igt_assert(syncobj_wait(t->fd, &sync[0].handle, 1, > INT64_MAX, 0, NULL)); > @@ -1299,8 +1299,8 @@ test_munmap_style_unbind(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint64_t addr = 0x1a00000, base_addr = 0x1a00000; > uint32_t vm; > @@ -1329,7 +1329,7 @@ test_munmap_style_unbind(int fd, struct drm_xe_engine_class_instance *eci, > unbind_n_page_offset *= n_page_per_2mb; > } > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = page_size * bo_n_pages; > > if (flags & MAP_FLAG_USERPTR) { > @@ -1600,8 +1600,8 @@ test_mmap_style_bind(int fd, struct drm_xe_engine_class_instance *eci, > }; > struct drm_xe_exec exec = { > .num_batch_buffer = 1, > - .num_syncs = 2, > - .syncs = to_user_pointer(sync), > + .syncs.num_syncs = 2, > + .syncs.syncs = to_user_pointer(sync), > }; > uint64_t addr = 0x1a00000, base_addr = 0x1a00000; > uint32_t vm; > @@ -1629,7 +1629,7 @@ test_mmap_style_bind(int fd, struct drm_xe_engine_class_instance *eci, > unbind_n_page_offset *= n_page_per_2mb; > } > > - vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + vm = xe_vm_create(fd, 0, 0); > bo_size = page_size * bo_n_pages; > > if (flags & MAP_FLAG_USERPTR) { > diff --git a/tests/intel/xe_waitfence.c b/tests/intel/xe_waitfence.c > index 3be987954d..acd614c96a 100644 > --- a/tests/intel/xe_waitfence.c > +++ b/tests/intel/xe_waitfence.c > @@ -94,7 +94,7 @@ waitfence(int fd, enum waittype wt) > uint32_t bo_7; > int64_t timeout; > > - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + uint32_t vm = xe_vm_create(fd, 0, 0); > bo_1 = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); > do_bind(fd, vm, bo_1, 0, 0x200000, 0x40000, 1); > bo_2 = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); > @@ -170,7 +170,7 @@ invalid_flag(int fd) > .instances = 0, > }; > > - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + uint32_t vm = xe_vm_create(fd, 0, 0); > > bo = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); > > @@ -195,7 +195,7 @@ invalid_ops(int fd) > .instances = 0, > }; > > - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + uint32_t vm = xe_vm_create(fd, 0, 0); > > bo = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); > > @@ -220,7 +220,7 @@ invalid_engine(int fd) > .instances = 0, > }; > > - uint32_t vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_ASYNC_DEFAULT, 0); > + uint32_t vm = xe_vm_create(fd, 0, 0); > > bo = xe_bo_create(fd, vm, 0x40000, vram_if_possible(fd, 0), 0); > > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 6+ messages in thread
* [igt-dev] ✗ CI.xeBAT: failure for Syncs vs async exec/bind uAPI change 2023-12-07 6:03 [igt-dev] [RFC PATCH 0/3] Syncs vs async exec/bind uAPI change Matthew Brost ` (2 preceding siblings ...) 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 3/3] drm-uapi/xe: Uniform async vs sync handling Matthew Brost @ 2023-12-07 7:36 ` Patchwork 3 siblings, 0 replies; 6+ messages in thread From: Patchwork @ 2023-12-07 7:36 UTC (permalink / raw) To: Matthew Brost; +Cc: igt-dev [-- Attachment #1: Type: text/plain, Size: 9189 bytes --] == Series Details == Series: Syncs vs async exec/bind uAPI change URL : https://patchwork.freedesktop.org/series/127473/ State : failure == Summary == CI Bug Log - changes from XEIGT_7626_BAT -> XEIGTPW_10363_BAT ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with XEIGTPW_10363_BAT absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in XEIGTPW_10363_BAT, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them to document this new failure mode, which will reduce false positives in CI. Participating hosts (4 -> 4) ------------------------------ No changes in participating hosts Possible new issues ------------------- Here are the unknown changes that may have been introduced in XEIGTPW_10363_BAT: ### IGT changes ### #### Possible regressions #### * igt@xe_intel_bb@offset-control: - bat-adlp-7: [PASS][1] -> [FAIL][2] +287 other tests fail [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-adlp-7/igt@xe_intel_bb@offset-control.html [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-adlp-7/igt@xe_intel_bb@offset-control.html * igt@xe_pat@pat-index-xehpc: - bat-pvc-2: [PASS][3] -> [INCOMPLETE][4] +1 other test incomplete [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-pvc-2/igt@xe_pat@pat-index-xehpc.html [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-pvc-2/igt@xe_pat@pat-index-xehpc.html * igt@xe_pat@pat-index-xehpc@blt-system-system-wc-c1-wt-single-pde: - bat-pvc-2: [PASS][5] -> [FAIL][6] +1204 other tests fail [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-pvc-2/igt@xe_pat@pat-index-xehpc@blt-system-system-wc-c1-wt-single-pde.html [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-pvc-2/igt@xe_pat@pat-index-xehpc@blt-system-system-wc-c1-wt-single-pde.html * igt@xe_pat@pat-index-xelp@render-vram01-system-uc-uc-mixed-pde: - bat-dg2-oem2: [PASS][7] -> [FAIL][8] +776 other tests fail [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-dg2-oem2/igt@xe_pat@pat-index-xelp@render-vram01-system-uc-uc-mixed-pde.html [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-dg2-oem2/igt@xe_pat@pat-index-xelp@render-vram01-system-uc-uc-mixed-pde.html * igt@xe_pat@pat-index-xelp@render-vram01-vram01-uc-wb-single-pde: - bat-atsm-2: [PASS][9] -> [FAIL][10] +718 other tests fail [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-atsm-2/igt@xe_pat@pat-index-xelp@render-vram01-vram01-uc-wb-single-pde.html [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-atsm-2/igt@xe_pat@pat-index-xelp@render-vram01-vram01-uc-wb-single-pde.html #### Warnings #### * igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size: - bat-adlp-7: [FAIL][11] ([i915#2346]) -> [FAIL][12] [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-adlp-7/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-adlp-7/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-nv12: - bat-dg2-oem2: [FAIL][13] ([Intel XE#400] / [Intel XE#616]) -> [FAIL][14] +2 other tests fail [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-dg2-oem2/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-nv12.html [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-dg2-oem2/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-nv12.html * igt@xe_evict@evict-beng-small-cm: - bat-pvc-2: [DMESG-FAIL][15] ([Intel XE#482]) -> [FAIL][16] +3 other tests fail [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-pvc-2/igt@xe_evict@evict-beng-small-cm.html [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-pvc-2/igt@xe_evict@evict-beng-small-cm.html * igt@xe_evict@evict-beng-small-external: - bat-pvc-2: [FAIL][17] ([Intel XE#1000]) -> [FAIL][18] +3 other tests fail [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-pvc-2/igt@xe_evict@evict-beng-small-external.html [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-pvc-2/igt@xe_evict@evict-beng-small-external.html * igt@xe_evict_ccs@evict-overcommit-parallel-nofree-samefd: - bat-pvc-2: [INCOMPLETE][19] ([Intel XE#392]) -> [FAIL][20] [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-pvc-2/igt@xe_evict_ccs@evict-overcommit-parallel-nofree-samefd.html [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-pvc-2/igt@xe_evict_ccs@evict-overcommit-parallel-nofree-samefd.html * igt@xe_exec_fault_mode@twice-bindexecqueue-userptr: - bat-dg2-oem2: [SKIP][21] ([Intel XE#288]) -> [FAIL][22] +32 other tests fail [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-dg2-oem2/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr.html [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-dg2-oem2/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr.html * igt@xe_exec_fault_mode@twice-userptr-invalidate-imm: - bat-atsm-2: [SKIP][23] ([Intel XE#288]) -> [FAIL][24] +32 other tests fail [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-atsm-2/igt@xe_exec_fault_mode@twice-userptr-invalidate-imm.html [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-atsm-2/igt@xe_exec_fault_mode@twice-userptr-invalidate-imm.html * igt@xe_exec_fault_mode@twice-userptr-invalidate-prefetch: - bat-adlp-7: [SKIP][25] ([Intel XE#288]) -> [FAIL][26] +32 other tests fail [25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-adlp-7/igt@xe_exec_fault_mode@twice-userptr-invalidate-prefetch.html [26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-adlp-7/igt@xe_exec_fault_mode@twice-userptr-invalidate-prefetch.html Known issues ------------ Here are the changes found in XEIGTPW_10363_BAT that come from known issues: ### IGT changes ### #### Issues hit #### * igt@xe_pat@prime-external-import-coh: - bat-adlp-7: [PASS][27] -> [FAIL][28] ([Intel XE#984]) +1 other test fail [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-adlp-7/igt@xe_pat@prime-external-import-coh.html [28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-adlp-7/igt@xe_pat@prime-external-import-coh.html - bat-dg2-oem2: [PASS][29] -> [FAIL][30] ([Intel XE#984]) +1 other test fail [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-dg2-oem2/igt@xe_pat@prime-external-import-coh.html [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-dg2-oem2/igt@xe_pat@prime-external-import-coh.html - bat-atsm-2: [PASS][31] -> [FAIL][32] ([Intel XE#984]) +1 other test fail [31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-atsm-2/igt@xe_pat@prime-external-import-coh.html [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-atsm-2/igt@xe_pat@prime-external-import-coh.html * igt@xe_pat@userptr-coh-none: - bat-pvc-2: [PASS][33] -> [FAIL][34] ([Intel XE#984]) +1 other test fail [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-pvc-2/igt@xe_pat@userptr-coh-none.html [34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-pvc-2/igt@xe_pat@userptr-coh-none.html #### Possible fixes #### * igt@xe_prime_self_import@basic-with_fd_dup: - bat-atsm-2: [FAIL][35] ([Intel XE#999]) -> [PASS][36] [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7626/bat-atsm-2/igt@xe_prime_self_import@basic-with_fd_dup.html [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/bat-atsm-2/igt@xe_prime_self_import@basic-with_fd_dup.html [Intel XE#1000]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1000 [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288 [Intel XE#392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/392 [Intel XE#400]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/400 [Intel XE#482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/482 [Intel XE#616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/616 [Intel XE#984]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/984 [Intel XE#999]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/999 [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346 Build changes ------------- * IGT: IGT_7626 -> IGTPW_10363 * Linux: xe-556-d33ebd7511c2b53c5dc006e2daa25214fc8a5921 -> xe-557-668d13abebbbc3812de86be1f8477475e1d90728 IGTPW_10363: 10363 IGT_7626: 154b7288552cd7ed3033f8ef396e88d0bd1b7646 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git xe-556-d33ebd7511c2b53c5dc006e2daa25214fc8a5921: d33ebd7511c2b53c5dc006e2daa25214fc8a5921 xe-557-668d13abebbbc3812de86be1f8477475e1d90728: 668d13abebbbc3812de86be1f8477475e1d90728 == Logs == For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10363/index.html [-- Attachment #2: Type: text/html, Size: 10559 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-12-07 19:59 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-12-07 6:03 [igt-dev] [RFC PATCH 0/3] Syncs vs async exec/bind uAPI change Matthew Brost 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 1/3] xe_vm: Add section to test zero number of VM binds Matthew Brost 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 2/3] xe_exec_basic: Add section to test zero number of BB in exec IOCTL Matthew Brost 2023-12-07 6:03 ` [igt-dev] [RFC PATCH 3/3] drm-uapi/xe: Uniform async vs sync handling Matthew Brost 2023-12-07 19:59 ` Rodrigo Vivi 2023-12-07 7:36 ` [igt-dev] ✗ CI.xeBAT: failure for Syncs vs async exec/bind uAPI change Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox