Module: Mesa Branch: main Commit: a5e4be45c08d0ed877f34b9de129e7d9beb23ce9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a5e4be45c08d0ed877f34b9de129e7d9beb23ce9
Author: Sagar Ghuge <sagar.gh...@intel.com> Date: Thu May 25 11:35:39 2023 -0700 intel: Pass virtual memory address space ID while creating context In future patches, we will be creating a separate companion RCS engine and each engine is created with it's own address space, and we really don't want. CCS and RCS engine writes should be visible to each other in order to get the wait/signal mechanism working. v2: - Move drm_i915_gem_context_create_ext_setparam out of if block (Lionel) Signed-off-by: Sagar Ghuge <sagar.gh...@intel.com> Reviewed-by: José Roberto de Souza <jose.so...@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23661> --- src/gallium/drivers/iris/i915/iris_batch.c | 2 +- src/intel/common/i915/intel_gem.c | 13 +++++++++++++ src/intel/common/i915/intel_gem.h | 1 + src/intel/common/intel_gem.c | 3 ++- src/intel/common/intel_gem.h | 1 + src/intel/vulkan/i915/anv_device.c | 1 + src/intel/vulkan_hasvk/anv_device.c | 1 + 7 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/iris/i915/iris_batch.c b/src/gallium/drivers/iris/i915/iris_batch.c index b923bfefba5..bcefb75b51d 100644 --- a/src/gallium/drivers/iris/i915/iris_batch.c +++ b/src/gallium/drivers/iris/i915/iris_batch.c @@ -191,7 +191,7 @@ iris_create_engines_context(struct iris_context *ice) uint32_t engines_ctx; if (!intel_gem_create_context_engines(fd, flags, engines_info, num_batches, - engine_classes, &engines_ctx)) { + engine_classes, 0, &engines_ctx)) { free(engines_info); return -1; } diff --git a/src/intel/common/i915/intel_gem.c b/src/intel/common/i915/intel_gem.c index 2b37ef75294..f1b829e0897 100644 --- a/src/intel/common/i915/intel_gem.c +++ b/src/intel/common/i915/intel_gem.c @@ -52,6 +52,7 @@ i915_gem_create_context_engines(int fd, enum intel_gem_create_context_flags flags, const struct intel_query_engine_info *info, int num_engines, enum intel_engine_class *engine_classes, + uint32_t vm_id, uint32_t *context_id) { assert(info != NULL); @@ -137,6 +138,12 @@ i915_gem_create_context_engines(int fd, struct drm_i915_gem_context_create_ext create = { .flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS, }; + struct drm_i915_gem_context_create_ext_setparam vm_param = { + .param = { + .param = I915_CONTEXT_PARAM_VM, + .value = vm_id, + }, + }; intel_i915_gem_add_ext(&create.extensions, I915_CONTEXT_CREATE_EXT_SETPARAM, @@ -145,6 +152,12 @@ i915_gem_create_context_engines(int fd, I915_CONTEXT_CREATE_EXT_SETPARAM, &recoverable_param.base); + if (vm_id != 0) { + intel_i915_gem_add_ext(&create.extensions, + I915_CONTEXT_CREATE_EXT_SETPARAM, + &vm_param.base); + } + if (flags & INTEL_GEM_CREATE_CONTEXT_EXT_PROTECTED_FLAG) { intel_i915_gem_add_ext(&create.extensions, I915_CONTEXT_CREATE_EXT_SETPARAM, diff --git a/src/intel/common/i915/intel_gem.h b/src/intel/common/i915/intel_gem.h index f78ce38c645..cb82e38c17a 100644 --- a/src/intel/common/i915/intel_gem.h +++ b/src/intel/common/i915/intel_gem.h @@ -36,6 +36,7 @@ bool i915_gem_create_context_engines(int fd, enum intel_gem_create_context_flags flags, const struct intel_query_engine_info *info, int num_engines, enum intel_engine_class *engine_classes, + uint32_t vm_id, uint32_t *context_id); bool i915_gem_set_context_param(int fd, uint32_t context, uint32_t param, uint64_t value); diff --git a/src/intel/common/intel_gem.c b/src/intel/common/intel_gem.c index 14dd76ee1ff..0bf1b296466 100644 --- a/src/intel/common/intel_gem.c +++ b/src/intel/common/intel_gem.c @@ -79,10 +79,11 @@ intel_gem_create_context_engines(int fd, enum intel_gem_create_context_flags flags, const struct intel_query_engine_info *info, int num_engines, enum intel_engine_class *engine_classes, + uint32_t vm_id, uint32_t *context_id) { return i915_gem_create_context_engines(fd, flags, info, num_engines, - engine_classes, context_id); + engine_classes, vm_id, context_id); } bool diff --git a/src/intel/common/intel_gem.h b/src/intel/common/intel_gem.h index 4cbd3c76157..8c25aa9d0e2 100644 --- a/src/intel/common/intel_gem.h +++ b/src/intel/common/intel_gem.h @@ -103,6 +103,7 @@ intel_gem_create_context_engines(int fd, enum intel_gem_create_context_flags flags, const struct intel_query_engine_info *info, int num_engines, enum intel_engine_class *engine_classes, + uint32_t vm_id, uint32_t *context_id); bool intel_gem_set_context_param(int fd, uint32_t context, uint32_t param, diff --git a/src/intel/vulkan/i915/anv_device.c b/src/intel/vulkan/i915/anv_device.c index dd02e46817b..e6e3a9e8825 100644 --- a/src/intel/vulkan/i915/anv_device.c +++ b/src/intel/vulkan/i915/anv_device.c @@ -232,6 +232,7 @@ anv_i915_device_setup_context(struct anv_device *device, if (!intel_gem_create_context_engines(device->fd, 0 /* flags */, physical_device->engine_info, engine_count, engine_classes, + 0 /* vm_id */, (uint32_t *)&device->context_id)) result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED, "kernel context creation failed"); diff --git a/src/intel/vulkan_hasvk/anv_device.c b/src/intel/vulkan_hasvk/anv_device.c index e25beba1985..8aed6d55818 100644 --- a/src/intel/vulkan_hasvk/anv_device.c +++ b/src/intel/vulkan_hasvk/anv_device.c @@ -2629,6 +2629,7 @@ anv_device_setup_context(struct anv_device *device, if (!intel_gem_create_context_engines(device->fd, 0 /* flags */, physical_device->engine_info, engine_count, engine_classes, + 0 /* vm_id */, (uint32_t *)&device->context_id)) result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED, "kernel context creation failed");