anv: Add gem_close to kmd backend
authorJosé Roberto de Souza <jose.souza@intel.com>
Thu, 9 Feb 2023 14:05:54 +0000 (06:05 -0800)
committerMarge Bot <emma+marge@anholt.net>
Wed, 15 Feb 2023 23:30:58 +0000 (23:30 +0000)
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21255>

src/intel/vulkan/anv_allocator.c
src/intel/vulkan/anv_gem.c
src/intel/vulkan/anv_gem_stubs.c
src/intel/vulkan/anv_kmd_backend.h
src/intel/vulkan/anv_private.h
src/intel/vulkan/i915/anv_kmd_backend.c

index aef11a7..f84f0ee 100644 (file)
@@ -1381,7 +1381,7 @@ anv_bo_finish(struct anv_device *device, struct anv_bo *bo)
       anv_device_unmap_bo(device, bo, bo->map, bo->size);
 
    assert(bo->gem_handle != 0);
-   anv_gem_close(device, bo->gem_handle);
+   device->kmd_backend->gem_close(device, bo->gem_handle);
 }
 
 static VkResult
@@ -1505,7 +1505,7 @@ anv_device_alloc_bo(struct anv_device *device,
       VkResult result = anv_device_map_bo(device, &new_bo, 0, size,
                                           0 /* gem_flags */, &new_bo.map);
       if (unlikely(result != VK_SUCCESS)) {
-         anv_gem_close(device, new_bo.gem_handle);
+         device->kmd_backend->gem_close(device, new_bo.gem_handle);
          return result;
       }
    }
@@ -1768,7 +1768,7 @@ anv_device_import_bo(struct anv_device *device,
    } else {
       off_t size = lseek(fd, 0, SEEK_END);
       if (size == (off_t)-1) {
-         anv_gem_close(device, gem_handle);
+         device->kmd_backend->gem_close(device, gem_handle);
          pthread_mutex_unlock(&cache->mutex);
          return vk_error(device, VK_ERROR_INVALID_EXTERNAL_HANDLE);
       }
index 87a4df2..e705af3 100644 (file)
 #include "anv_private.h"
 #include "common/intel_gem.h"
 
-void
-anv_gem_close(struct anv_device *device, uint32_t gem_handle)
-{
-   struct drm_gem_close close = {
-      .handle = gem_handle,
-   };
-
-   intel_ioctl(device->fd, DRM_IOCTL_GEM_CLOSE, &close);
-}
-
 /**
  * Wrapper around DRM_IOCTL_I915_GEM_MMAP. Returns MAP_FAILED on error.
  */
index b3f3901..943513d 100644 (file)
@@ -27,8 +27,8 @@
 #include "util/anon_file.h"
 #include "anv_private.h"
 
-void
-anv_gem_close(struct anv_device *device, uint32_t gem_handle)
+static void
+stub_gem_close(struct anv_device *device, uint32_t gem_handle)
 {
    close(gem_handle);
 }
@@ -122,6 +122,7 @@ const struct anv_kmd_backend *anv_stub_kmd_backend_get(void)
 {
    static const struct anv_kmd_backend stub_backend = {
       .gem_create = stub_gem_create,
+      .gem_close = stub_gem_close,
    };
    return &stub_backend;
 }
index 02fdf69..c8d01b6 100644 (file)
@@ -40,6 +40,7 @@ struct anv_kmd_backend {
                           const struct intel_memory_class_instance **regions,
                           uint16_t num_regions, uint64_t size,
                           enum anv_bo_alloc_flags alloc_flags);
+   void (*gem_close)(struct anv_device *device, uint32_t handle);
 };
 
 const struct anv_kmd_backend *anv_kmd_backend_get(enum intel_kmd_type type);
index 8e90e42..78b956f 100644 (file)
@@ -1352,7 +1352,6 @@ VkResult anv_queue_submit_simple_batch(struct anv_queue *queue,
 void* anv_gem_mmap(struct anv_device *device, struct anv_bo *bo,
                    uint64_t offset, uint64_t size, uint32_t flags);
 void anv_gem_munmap(struct anv_device *device, void *p, uint64_t size);
-void anv_gem_close(struct anv_device *device, uint32_t gem_handle);
 uint32_t anv_gem_userptr(struct anv_device *device, void *mem, size_t size);
 int anv_gem_wait(struct anv_device *device, uint32_t gem_handle, int64_t *timeout_ns);
 int anv_gem_set_tiling(struct anv_device *device, uint32_t gem_handle,
index 87b9ee9..892cdeb 100644 (file)
@@ -74,11 +74,22 @@ i915_gem_create(struct anv_device *device,
    return gem_create.handle;
 }
 
+static void
+i915_gem_close(struct anv_device *device, uint32_t handle)
+{
+   struct drm_gem_close close = {
+      .handle = handle,
+   };
+
+   intel_ioctl(device->fd, DRM_IOCTL_GEM_CLOSE, &close);
+}
+
 const struct anv_kmd_backend *
 anv_i915_kmd_backend_get(void)
 {
    static const struct anv_kmd_backend i915_backend = {
       .gem_create = i915_gem_create,
+      .gem_close = i915_gem_close,
    };
    return &i915_backend;
 }