From ccffcec03ecebb15c9baa313732feab50397b0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Tue, 14 Feb 2023 11:49:17 -0800 Subject: [PATCH] iris: Handle allocation of exported buffers in Xe kmd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bos that will be exported need to be allocated with vm_id = 0 in Xe, so don't try to get a bo from cache that was allocated with a valid vm_id. Signed-off-by: José Roberto de Souza Reviewed-by: Lionel Landwerlin Part-of: --- src/gallium/drivers/iris/iris_bufmgr.c | 8 ++++++-- src/gallium/drivers/iris/xe/iris_kmd_backend.c | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index 64224386d90..f5511193378 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -313,8 +313,12 @@ static struct bo_cache_bucket * bucket_for_size(struct iris_bufmgr *bufmgr, uint64_t size, enum iris_heap heap, unsigned flags) { - /* Protected bo needs special handling during allocation */ - if (flags & BO_ALLOC_PROTECTED) + + /* Protected bo needs special handling during allocation. + * Exported bo also need special handling during allocation in Xe KMD + */ + if ((flags & BO_ALLOC_PROTECTED) || + ((flags & BO_ALLOC_SHARED) && bufmgr->devinfo.kmd_type == INTEL_KMD_TYPE_XE)) return NULL; /* Calculating the pages and rounding up to the page size. */ diff --git a/src/gallium/drivers/iris/xe/iris_kmd_backend.c b/src/gallium/drivers/iris/xe/iris_kmd_backend.c index 7cff750280c..eff69c1357a 100644 --- a/src/gallium/drivers/iris/xe/iris_kmd_backend.c +++ b/src/gallium/drivers/iris/xe/iris_kmd_backend.c @@ -42,8 +42,11 @@ xe_gem_create(struct iris_bufmgr *bufmgr, if (alloc_flags & BO_ALLOC_PROTECTED) return -EINVAL; + uint32_t vm_id = iris_bufmgr_get_global_vm_id(bufmgr); + vm_id = alloc_flags & BO_ALLOC_SHARED ? 0 : vm_id; + struct drm_xe_gem_create gem_create = { - .vm_id = iris_bufmgr_get_global_vm_id(bufmgr), + .vm_id = vm_id, .size = align64(size, iris_bufmgr_get_device_info(bufmgr)->mem_alignment), }; for (uint16_t i = 0; i < regions_count; i++)