From 0fd50430aea223847f2abcc41225318936ac7aaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Fri, 26 May 2023 07:12:40 -0700 Subject: [PATCH] intel: Fix support of kernel versions without DRM_I915_QUERY_ENGINE_INFO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As Matt Turner pointed out, the commit here fixed breaks in Iris and ANV in kernel versions without support for DRM_I915_QUERY_ENGINE_INFO. As compute engines are only present in gfx12 and newer, and support for DRM_I915_QUERY_ENGINE_INFO was added before any gfx12 platform, we can check for gfx version before trying to get engine info. For ANV, this is done by checking if engine_info is not NULL, like in other places in the ANV source code. Fixes: a364f23a6cfa ("intel: Make gen12 URB space reservation dependent on compute engine presence") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/9099 Signed-off-by: José Roberto de Souza Tested-by: Matt Turner Reviewed-by: Matt Turner Reviewed-by: Marcin Ślusarz Part-of: (cherry picked from commit 42f707e4596f1c6cdbeec2bbbf2a0470080315df) --- .pick_status.json | 2 +- src/gallium/drivers/iris/iris_bufmgr.c | 6 ++---- src/intel/vulkan/anv_device.c | 3 ++- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 9d2479bc4ed5..ba580c49a8a9 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -229,7 +229,7 @@ "description": "intel: Fix support of kernel versions without DRM_I915_QUERY_ENGINE_INFO", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "a364f23a6cfa28e1843ef1e64dce56b4cef5a71e" }, diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index f844055c8136..e788305ae802 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -2240,9 +2240,8 @@ iris_bufmgr_create(struct intel_device_info *devinfo, int fd, bool bo_reuse) struct intel_query_engine_info *engine_info; engine_info = intel_engine_get_info(bufmgr->fd, bufmgr->devinfo.kmd_type); - if (!engine_info) - goto error_engine_info; - bufmgr->devinfo.has_compute_engine = intel_engines_count(engine_info, + bufmgr->devinfo.has_compute_engine = engine_info && + intel_engines_count(engine_info, INTEL_ENGINE_CLASS_COMPUTE); free(engine_info); @@ -2338,7 +2337,6 @@ iris_bufmgr_create(struct intel_device_info *devinfo, int fd, bool bo_reuse) } iris_bufmgr_destroy_global_vm(bufmgr); error_init_vm: -error_engine_info: close(bufmgr->fd); error_dup: free(bufmgr); diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 19cd8fd81b26..b8bb5a85b6ce 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -995,7 +995,8 @@ anv_physical_device_try_create(struct vk_instance *vk_instance, device->master_fd = master_fd; device->engine_info = intel_engine_get_info(fd, device->info.kmd_type); - device->info.has_compute_engine = intel_engines_count(device->engine_info, + device->info.has_compute_engine = device->engine_info && + intel_engines_count(device->engine_info, INTEL_ENGINE_CLASS_COMPUTE); anv_physical_device_init_queue_families(device);