From fc0acf6d9019eec93ee1d00b544f69acef936e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Mon, 4 Sep 2023 10:14:23 -0700 Subject: [PATCH] anv: Move i915 specific gem_set_caching to backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: José Roberto de Souza Reviewed-by: Sagar Ghuge Part-of: --- src/intel/vulkan/anv_allocator.c | 20 ---------------- src/intel/vulkan/anv_gem.c | 18 -------------- src/intel/vulkan/anv_gem_stubs.c | 7 ------ src/intel/vulkan/anv_private.h | 1 - src/intel/vulkan/i915/anv_kmd_backend.c | 31 +++++++++++++++++++++++++ 5 files changed, 31 insertions(+), 46 deletions(-) diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c index 2108f9c8201..2c97af83a32 100644 --- a/src/intel/vulkan/anv_allocator.c +++ b/src/intel/vulkan/anv_allocator.c @@ -1534,26 +1534,6 @@ anv_device_alloc_bo(struct anv_device *device, } } - if (alloc_flags & ANV_BO_ALLOC_SNOOPED) { - assert(alloc_flags & ANV_BO_ALLOC_MAPPED); - /* We don't want to change these defaults if it's going to be shared - * with another process. - */ - assert(!(alloc_flags & ANV_BO_ALLOC_EXTERNAL)); - - /* Regular objects are created I915_CACHING_CACHED on LLC platforms and - * I915_CACHING_NONE on non-LLC platforms. For many internal state - * objects, we'd rather take the snooping overhead than risk forgetting - * a CLFLUSH somewhere. Userptr objects are always created as - * I915_CACHING_CACHED, which on non-LLC means snooped so there's no - * need to do this there. - */ - if (device->info->has_caching_uapi && !device->info->has_llc) { - anv_gem_set_caching(device, new_bo.gem_handle, - I915_CACHING_CACHED); - } - } - VkResult result = anv_bo_vma_alloc_or_close(device, &new_bo, alloc_flags, explicit_address); diff --git a/src/intel/vulkan/anv_gem.c b/src/intel/vulkan/anv_gem.c index ec4932b0c52..9c7720f9797 100644 --- a/src/intel/vulkan/anv_gem.c +++ b/src/intel/vulkan/anv_gem.c @@ -55,24 +55,6 @@ anv_gem_munmap(struct anv_device *device, void *p, uint64_t size) munmap(p, size); } -int -anv_gem_set_caching(struct anv_device *device, - uint32_t gem_handle, uint32_t caching) -{ - /* Guard by has_caching_uapi */ - if (unlikely(device->info->kmd_type != INTEL_KMD_TYPE_I915)) { - assert(!"Missing implementation of anv_gem_set_caching\n"); - return -1; - } - - struct drm_i915_gem_caching gem_caching = { - .handle = gem_handle, - .caching = caching, - }; - - return intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_SET_CACHING, &gem_caching); -} - /** * On error, \a timeout_ns holds the remaining time. */ diff --git a/src/intel/vulkan/anv_gem_stubs.c b/src/intel/vulkan/anv_gem_stubs.c index 74acc38d1cd..99905c0e9a4 100644 --- a/src/intel/vulkan/anv_gem_stubs.c +++ b/src/intel/vulkan/anv_gem_stubs.c @@ -132,13 +132,6 @@ anv_gem_get_tiling(struct anv_device *device, uint32_t gem_handle) return 0; } -int -anv_gem_set_caching(struct anv_device *device, uint32_t gem_handle, - uint32_t caching) -{ - return 0; -} - int anv_gem_handle_to_fd(struct anv_device *device, uint32_t gem_handle) { diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 244908adc60..6265d2ffce9 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1791,7 +1791,6 @@ int anv_gem_set_tiling(struct anv_device *device, uint32_t gem_handle, int anv_gem_get_tiling(struct anv_device *device, uint32_t gem_handle); int anv_gem_handle_to_fd(struct anv_device *device, uint32_t gem_handle); uint32_t anv_gem_fd_to_handle(struct anv_device *device, int fd); -int anv_gem_set_caching(struct anv_device *device, uint32_t gem_handle, uint32_t caching); int anv_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value); diff --git a/src/intel/vulkan/i915/anv_kmd_backend.c b/src/intel/vulkan/i915/anv_kmd_backend.c index 3ba2ca2c234..f1b565d6430 100644 --- a/src/intel/vulkan/i915/anv_kmd_backend.c +++ b/src/intel/vulkan/i915/anv_kmd_backend.c @@ -30,6 +30,18 @@ #include "drm-uapi/i915_drm.h" #include "intel/common/i915/intel_gem.h" +static int +i915_gem_set_caching(struct anv_device *device, + uint32_t gem_handle, uint32_t caching) +{ + struct drm_i915_gem_caching gem_caching = { + .handle = gem_handle, + .caching = caching, + }; + + return intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_SET_CACHING, &gem_caching); +} + static uint32_t i915_gem_create(struct anv_device *device, const struct intel_memory_class_instance **regions, @@ -94,6 +106,25 @@ i915_gem_create(struct anv_device *device, return 0; *actual_size = gem_create.size; + + if (alloc_flags & ANV_BO_ALLOC_SNOOPED) { + assert(alloc_flags & ANV_BO_ALLOC_MAPPED); + /* We don't want to change these defaults if it's going to be shared + * with another process. + */ + assert(!(alloc_flags & ANV_BO_ALLOC_EXTERNAL)); + + /* Regular objects are created I915_CACHING_CACHED on LLC platforms and + * I915_CACHING_NONE on non-LLC platforms. For many internal state + * objects, we'd rather take the snooping overhead than risk forgetting + * a CLFLUSH somewhere. Userptr objects are always created as + * I915_CACHING_CACHED, which on non-LLC means snooped so there's no + * need to do this there. + */ + if (device->info->has_caching_uapi && !device->info->has_llc) + i915_gem_set_caching(device, gem_create.handle, I915_CACHING_CACHED); + } + return gem_create.handle; }