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++)