From c9fdfae334af4d5b8d31c8ae532d7a0ee32ba14c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Tue, 14 Feb 2023 09:25:28 -0800 Subject: [PATCH] iris: Implement the function to destroy VM in Xe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: José Roberto de Souza Reviewed-by: Lionel Landwerlin Part-of: --- src/gallium/drivers/iris/iris_bufmgr.c | 24 +++++++++++++++++++++++ src/gallium/drivers/iris/iris_bufmgr.h | 1 + src/gallium/drivers/iris/xe/iris_bufmgr.c | 10 ++++++++++ src/gallium/drivers/iris/xe/iris_bufmgr.h | 1 + 4 files changed, 36 insertions(+) diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index f00e3ca9d48..d7429c80bc1 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -1617,6 +1617,21 @@ iris_bo_wait_rendering(struct iris_bo *bo) iris_bo_wait(bo, -1); } +static void +iris_bufmgr_destroy_global_vm(struct iris_bufmgr *bufmgr) +{ + switch (bufmgr->devinfo.kmd_type) { + case INTEL_KMD_TYPE_I915: + /* Nothing to do in i915 */ + break; + case INTEL_KMD_TYPE_XE: + iris_xe_destroy_global_vm(bufmgr); + break; + default: + unreachable("missing"); + } +} + static void iris_bufmgr_destroy(struct iris_bufmgr *bufmgr) { @@ -1677,6 +1692,8 @@ iris_bufmgr_destroy(struct iris_bufmgr *bufmgr) for (int z = 0; z < IRIS_MEMZONE_COUNT; z++) util_vma_heap_finish(&bufmgr->vma_allocator[z]); + iris_bufmgr_destroy_global_vm(bufmgr); + close(bufmgr->fd); simple_mtx_unlock(&bufmgr->lock); @@ -2372,6 +2389,7 @@ error_slabs_init: pb_slabs_deinit(&bufmgr->bo_slabs[i]); } + iris_bufmgr_destroy_global_vm(bufmgr); error_init_vm: error_engine_info: close(bufmgr->fd); @@ -2497,3 +2515,9 @@ iris_bufmgr_get_kernel_driver_backend(struct iris_bufmgr *bufmgr) { return bufmgr->kmd_backend; } + +uint32_t +iris_bufmgr_get_global_vm_id(struct iris_bufmgr *bufmgr) +{ + return bufmgr->global_vm_id; +} diff --git a/src/gallium/drivers/iris/iris_bufmgr.h b/src/gallium/drivers/iris/iris_bufmgr.h index e9fe711463b..b70bb95346c 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.h +++ b/src/gallium/drivers/iris/iris_bufmgr.h @@ -584,6 +584,7 @@ uint64_t iris_bufmgr_sram_size(struct iris_bufmgr *bufmgr); const struct intel_device_info *iris_bufmgr_get_device_info(struct iris_bufmgr *bufmgr); const struct iris_kmd_backend * iris_bufmgr_get_kernel_driver_backend(struct iris_bufmgr *bufmgr); +uint32_t iris_bufmgr_get_global_vm_id(struct iris_bufmgr *bufmgr); enum iris_madvice { IRIS_MADVICE_WILL_NEED = 0, diff --git a/src/gallium/drivers/iris/xe/iris_bufmgr.c b/src/gallium/drivers/iris/xe/iris_bufmgr.c index 4af9a46f513..893420fb608 100644 --- a/src/gallium/drivers/iris/xe/iris_bufmgr.c +++ b/src/gallium/drivers/iris/xe/iris_bufmgr.c @@ -39,3 +39,13 @@ iris_xe_init_global_vm(struct iris_bufmgr *bufmgr, uint32_t *vm_id) *vm_id = create.vm_id; return true; } + +bool +iris_xe_destroy_global_vm(struct iris_bufmgr *bufmgr) +{ + struct drm_xe_vm_destroy destroy = { + .vm_id = iris_bufmgr_get_global_vm_id(bufmgr), + }; + return intel_ioctl(iris_bufmgr_get_fd(bufmgr), DRM_IOCTL_XE_VM_DESTROY, + &destroy) == 0; +} diff --git a/src/gallium/drivers/iris/xe/iris_bufmgr.h b/src/gallium/drivers/iris/xe/iris_bufmgr.h index 67ee58eab2d..ae24a98bd68 100644 --- a/src/gallium/drivers/iris/xe/iris_bufmgr.h +++ b/src/gallium/drivers/iris/xe/iris_bufmgr.h @@ -28,3 +28,4 @@ struct iris_bufmgr; bool iris_xe_init_global_vm(struct iris_bufmgr *bufmgr, uint32_t *vm_id); +bool iris_xe_destroy_global_vm(struct iris_bufmgr *bufmgr);