From ce4a7e7d40a777c0551d6c6eefefb4ecd63abf65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Wed, 5 Oct 2022 08:20:07 -0700 Subject: [PATCH] intel: Refactor intel_gem_create_context_engines() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This function was returning a int but there was no meaninfull errno code being returned, also context_id is a uint32_t what would be problematic if i915 even returned 2147483648(-1). So here changing the return type and add context_id pointer parameter. Signed-off-by: José Roberto de Souza Reviewed-by: Lionel Landwerlin Part-of: --- src/gallium/drivers/iris/iris_batch.c | 8 +++----- src/intel/common/intel_gem.c | 17 +++++++++-------- src/intel/common/intel_gem.h | 8 +++++--- src/intel/vulkan/anv_device.c | 12 ++++++++---- src/intel/vulkan_hasvk/anv_device.c | 12 ++++++++---- 5 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/gallium/drivers/iris/iris_batch.c b/src/gallium/drivers/iris/iris_batch.c index 6e41896367b..850d008f56d 100644 --- a/src/gallium/drivers/iris/iris_batch.c +++ b/src/gallium/drivers/iris/iris_batch.c @@ -296,11 +296,9 @@ iris_create_engines_context(struct iris_context *ice, int priority) intel_engines_count(engines_info, INTEL_ENGINE_CLASS_COMPUTE) > 0) engine_classes[IRIS_BATCH_COMPUTE] = INTEL_ENGINE_CLASS_COMPUTE; - int engines_ctx = - intel_gem_create_context_engines(fd, engines_info, num_batches, - engine_classes); - - if (engines_ctx < 0) { + uint32_t engines_ctx; + if (!intel_gem_create_context_engines(fd, engines_info, num_batches, + engine_classes, &engines_ctx)) { free(engines_info); return -1; } diff --git a/src/intel/common/intel_gem.c b/src/intel/common/intel_gem.c index ea0b7b8a17b..3768d6ef0df 100644 --- a/src/intel/common/intel_gem.c +++ b/src/intel/common/intel_gem.c @@ -58,10 +58,11 @@ intel_gem_supports_syncobj_wait(int fd) return ret == -1 && errno == ETIME; } -int +bool intel_gem_create_context_engines(int fd, const struct intel_query_engine_info *info, - int num_engines, enum intel_engine_class *engine_classes) + int num_engines, enum intel_engine_class *engine_classes, + uint32_t *context_id) { assert(info != NULL); assert(num_engines <= 64); @@ -95,7 +96,7 @@ intel_gem_create_context_engines(int fd, engine_class == INTEL_ENGINE_CLASS_COPY || engine_class == INTEL_ENGINE_CLASS_COMPUTE); if (engine_counts[engine_class] <= 0) - return -1; + return false; /* Run through the engines reported by the kernel looking for the next * matching instance. We loop in case we want to create multiple @@ -111,9 +112,8 @@ intel_gem_create_context_engines(int fd, break; } } - if (engine_instance < 0) { - return -1; - } + if (engine_instance < 0) + return false; engines_param.engines[i].engine_class = intel_engine_class_to_i915(engine_class); engines_param.engines[i].engine_instance = engine_instance; @@ -136,9 +136,10 @@ intel_gem_create_context_engines(int fd, .extensions = (uintptr_t)&set_engines, }; if (intel_ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &create) == -1) - return -1; + return false; - return create.ctx_id; + *context_id = create.ctx_id; + return true; } diff --git a/src/intel/common/intel_gem.h b/src/intel/common/intel_gem.h index eb40172ed94..ddaeb718b5a 100644 --- a/src/intel/common/intel_gem.h +++ b/src/intel/common/intel_gem.h @@ -159,9 +159,11 @@ intel_i915_query_alloc(int fd, uint64_t query_id, int32_t *query_length) bool intel_gem_supports_syncobj_wait(int fd); -int intel_gem_create_context_engines(int fd, - const struct intel_query_engine_info *info, - int num_engines, enum intel_engine_class *engine_classes); +bool +intel_gem_create_context_engines(int fd, + const struct intel_query_engine_info *info, + int num_engines, enum intel_engine_class *engine_classes, + uint32_t *context_id); bool intel_gem_read_render_timestamp(int fd, uint64_t *value); diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index ee28426c297..bf76bd25f51 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -3155,15 +3155,19 @@ anv_device_setup_context(struct anv_device *device, for (uint32_t j = 0; j < queueCreateInfo->queueCount; j++) engine_classes[engine_count++] = queue_family->engine_class; } - device->context_id = - intel_gem_create_context_engines(device->fd, - physical_device->engine_info, - engine_count, engine_classes); + if (!intel_gem_create_context_engines(device->fd, + physical_device->engine_info, + engine_count, engine_classes, + (uint32_t *)&device->context_id)) + result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED, + "kernel context creation failed"); } else { assert(num_queues == 1); device->context_id = anv_gem_create_context(device); } + if (result != VK_SUCCESS) + return result; if (device->context_id == -1) { result = vk_error(device, VK_ERROR_INITIALIZATION_FAILED); return result; diff --git a/src/intel/vulkan_hasvk/anv_device.c b/src/intel/vulkan_hasvk/anv_device.c index c514c020445..46a50b6ca80 100644 --- a/src/intel/vulkan_hasvk/anv_device.c +++ b/src/intel/vulkan_hasvk/anv_device.c @@ -2804,15 +2804,19 @@ anv_device_setup_context(struct anv_device *device, for (uint32_t j = 0; j < queueCreateInfo->queueCount; j++) engine_classes[engine_count++] = queue_family->engine_class; } - device->context_id = - intel_gem_create_context_engines(device->fd, - physical_device->engine_info, - engine_count, engine_classes); + if (!intel_gem_create_context_engines(device->fd, + physical_device->engine_info, + engine_count, engine_classes, + (uint32_t *)&device->context_id)) + result = vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED, + "kernel context creation failed"); } else { assert(num_queues == 1); device->context_id = anv_gem_create_context(device); } + if (result != VK_SUCCESS) + return result; if (device->context_id == -1) { result = vk_error(device, VK_ERROR_INITIALIZATION_FAILED); return result;