From a5c57b9af772cdba1efde175f7190e6ec8bdfb24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Tue, 28 Mar 2023 08:49:30 -0700 Subject: [PATCH] iris: Fix vm bind of imported bos from other GPUs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The imported buffer may be created in a device with different memory alignment and this can cause vm bind to fail because bo size is smaller than vm bind range aligned. Signed-off-by: José Roberto de Souza Reviewed-by: Lionel Landwerlin Part-of: --- src/gallium/drivers/iris/xe/iris_kmd_backend.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/iris/xe/iris_kmd_backend.c b/src/gallium/drivers/iris/xe/iris_kmd_backend.c index 12ec74abe9c..cb8c4d10f5c 100644 --- a/src/gallium/drivers/iris/xe/iris_kmd_backend.c +++ b/src/gallium/drivers/iris/xe/iris_kmd_backend.c @@ -99,7 +99,13 @@ xe_gem_vm_bind_op(struct iris_bo *bo, uint32_t op) }; uint32_t handle = op == XE_VM_BIND_OP_UNMAP ? 0 : bo->gem_handle; - uint64_t obj_offset = 0; + uint64_t range, obj_offset = 0; + + if (iris_bo_is_imported(bo)) + range = bo->size; + else + range = align64(bo->size, + iris_bufmgr_get_device_info(bo->bufmgr)->mem_alignment); if (bo->real.userptr) { handle = 0; @@ -113,8 +119,7 @@ xe_gem_vm_bind_op(struct iris_bo *bo, uint32_t op) .num_binds = 1, .bind.obj = handle, .bind.obj_offset = obj_offset, - .bind.range = align64(bo->size, - iris_bufmgr_get_device_info(bo->bufmgr)->mem_alignment), + .bind.range = range, .bind.addr = intel_48b_address(bo->address), .bind.op = op, .num_syncs = 1,