From 0698bc9e5a804976269161e99626404cc869f15c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Tue, 18 Jul 2023 11:53:46 -0700 Subject: [PATCH] iris: Move iris_bufmgr_bo_close() to kmd backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The next patch will need a special handling when closing userptr bos in Xe KMD, so here moving iris_bufmgr_bo_close() to kmd backend and changing the gem_handle parameter to iris_bo. There still one DRM_IOCTL_GEM_CLOSE call left in iris_bufmgr, that is used to close exported gem handles. iris_bufmgr_get_for_fd() could be used to get the iris_bufmgr but we would still have problems with bo_export != iris_bo, so leaving as is until a better solution is found. Signed-off-by: José Roberto de Souza Reviewed-by: Marcin Ślusarz Reviewed-by: Lionel Landwerlin Part-of: --- src/gallium/drivers/iris/i915/iris_kmd_backend.c | 10 ++++++++++ src/gallium/drivers/iris/iris_bufmgr.c | 15 ++++++--------- src/gallium/drivers/iris/iris_kmd_backend.h | 1 + src/gallium/drivers/iris/xe/iris_kmd_backend.c | 10 ++++++++++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/iris/i915/iris_kmd_backend.c b/src/gallium/drivers/iris/i915/iris_kmd_backend.c index 207c88b077e..131c6a97b4d 100644 --- a/src/gallium/drivers/iris/i915/iris_kmd_backend.c +++ b/src/gallium/drivers/iris/i915/iris_kmd_backend.c @@ -412,10 +412,20 @@ i915_gem_vm_unbind(struct iris_bo *bo) return true; } +static int +i915_gem_close(struct iris_bufmgr *bufmgr, struct iris_bo *bo) +{ + struct drm_gem_close close = { + .handle = bo->gem_handle, + }; + return intel_ioctl(iris_bufmgr_get_fd(bufmgr), DRM_IOCTL_GEM_CLOSE, &close); +} + const struct iris_kmd_backend *i915_get_backend(void) { static const struct iris_kmd_backend i915_backend = { .gem_create = i915_gem_create, + .gem_close = i915_gem_close, .bo_madvise = i915_bo_madvise, .bo_set_caching = i915_bo_set_caching, .gem_mmap = i915_gem_mmap, diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index 316d09f2ed2..4c2f78c70c8 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -1272,12 +1272,6 @@ iris_bo_close(int fd, uint32_t gem_handle) return intel_ioctl(fd, DRM_IOCTL_GEM_CLOSE, &close); } -static int -iris_bufmgr_bo_close(struct iris_bufmgr *bufmgr, uint32_t gem_handle) -{ - return iris_bo_close(bufmgr->fd, gem_handle); -} - static enum iris_mmap_mode iris_bo_create_userptr_get_mmap_mode(struct iris_bufmgr *bufmgr) { @@ -1345,7 +1339,7 @@ iris_bo_create_userptr(struct iris_bufmgr *bufmgr, const char *name, return bo; err_close: - iris_bufmgr_bo_close(bufmgr, bo->gem_handle); + bufmgr->kmd_backend->gem_close(bufmgr, bo); err_free: free(bo); return NULL; @@ -1415,7 +1409,10 @@ iris_bo_gem_create_from_name(struct iris_bufmgr *bufmgr, bo = bo_calloc(); if (!bo) { - iris_bufmgr_bo_close(bufmgr, open_arg.handle); + struct iris_bo close_bo = { + .gem_handle = open_arg.handle, + }; + bufmgr->kmd_backend->gem_close(bufmgr, &close_bo); goto out; } @@ -1500,7 +1497,7 @@ bo_close(struct iris_bo *bo) close(bo->real.prime_fd); /* Close this object */ - if (iris_bufmgr_bo_close(bufmgr, bo->gem_handle) != 0) { + if (bufmgr->kmd_backend->gem_close(bufmgr, bo) != 0) { DBG("DRM_IOCTL_GEM_CLOSE %d failed (%s): %s\n", bo->gem_handle, bo->name, strerror(errno)); } diff --git a/src/gallium/drivers/iris/iris_kmd_backend.h b/src/gallium/drivers/iris/iris_kmd_backend.h index f47837abcea..b3095f4eb2b 100644 --- a/src/gallium/drivers/iris/iris_kmd_backend.h +++ b/src/gallium/drivers/iris/iris_kmd_backend.h @@ -39,6 +39,7 @@ struct iris_kmd_backend { const struct intel_memory_class_instance **regions, uint16_t regions_count, uint64_t size, enum iris_heap heap_flags, unsigned alloc_flags); + int (*gem_close)(struct iris_bufmgr *bufmgr, struct iris_bo *bo); bool (*bo_madvise)(struct iris_bo *bo, enum iris_madvice state); int (*bo_set_caching)(struct iris_bo *bo, bool cached); void *(*gem_mmap)(struct iris_bufmgr *bufmgr, struct iris_bo *bo); diff --git a/src/gallium/drivers/iris/xe/iris_kmd_backend.c b/src/gallium/drivers/iris/xe/iris_kmd_backend.c index f11e5183b7b..356acab885d 100644 --- a/src/gallium/drivers/iris/xe/iris_kmd_backend.c +++ b/src/gallium/drivers/iris/xe/iris_kmd_backend.c @@ -427,10 +427,20 @@ error_implicit_sync_import: return ret; } +static int +xe_gem_close(struct iris_bufmgr *bufmgr, struct iris_bo *bo) +{ + struct drm_gem_close close = { + .handle = bo->gem_handle, + }; + return intel_ioctl(iris_bufmgr_get_fd(bufmgr), DRM_IOCTL_GEM_CLOSE, &close); +} + const struct iris_kmd_backend *xe_get_backend(void) { static const struct iris_kmd_backend xe_backend = { .gem_create = xe_gem_create, + .gem_close = xe_gem_close, .gem_mmap = xe_gem_mmap, .gem_vm_bind = xe_gem_vm_bind, .gem_vm_unbind = xe_gem_vm_unbind,