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");