From 5d747f334c779bdcdbb898c48b925c6d938cf9be Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Thu, 19 Jan 2023 19:59:24 +0100 Subject: [PATCH] tu/kgsl: do not use kgsl_command_object::offset offset field in kgsl_command_object is NOT used by KGSL, so we should offset directly to iova. Fixes weird hangs on KGSL. E.g. fixes the hang in: dEQP-VK.memory.pipeline_barrier.transfer_dst_storage_texel_buffer.1024 cc: mesa-stable Signed-off-by: Danylo Piliaiev Part-of: (cherry picked from commit 926f626b95a3fab3992361c0120a73b047d24717) --- .pick_status.json | 2 +- src/freedreno/vulkan/tu_kgsl.c | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index c3971ccdc25..f988d2d4611 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2308,7 +2308,7 @@ "description": "tu/kgsl: do not use kgsl_command_object::offset", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/freedreno/vulkan/tu_kgsl.c b/src/freedreno/vulkan/tu_kgsl.c index ec1ae05b6b4..66992729479 100644 --- a/src/freedreno/vulkan/tu_kgsl.c +++ b/src/freedreno/vulkan/tu_kgsl.c @@ -447,8 +447,8 @@ tu_QueueSubmit2(VkQueue _queue, &cmdbuf->device->perfcntrs_pass_cs_entries[perf_info->counterPassIndex]; cmds[entry_idx++] = (struct kgsl_command_object) { - .offset = perf_cs_entry->offset, - .gpuaddr = perf_cs_entry->bo->iova, + .offset = 0, // KGSL doesn't use offset + .gpuaddr = perf_cs_entry->bo->iova + perf_cs_entry->offset, .size = perf_cs_entry->size, .flags = KGSL_CMDLIST_IB, .id = perf_cs_entry->bo->gem_handle, @@ -457,8 +457,8 @@ tu_QueueSubmit2(VkQueue _queue, for (unsigned k = 0; k < cs->entry_count; k++) { cmds[entry_idx++] = (struct kgsl_command_object) { - .offset = cs->entries[k].offset, - .gpuaddr = cs->entries[k].bo->iova, + .offset = 0, // KGSL doesn't use offset + .gpuaddr = cs->entries[k].bo->iova + cs->entries[k].offset, .size = cs->entries[k].size, .flags = KGSL_CMDLIST_IB, .id = cs->entries[k].bo->gem_handle, @@ -473,8 +473,9 @@ tu_QueueSubmit2(VkQueue _queue, cmd_buffers, cmdbuf_count); cmds[entry_idx++] = (struct kgsl_command_object) { - .offset = autotune_cs->entries[0].offset, - .gpuaddr = autotune_cs->entries[0].bo->iova, + .offset = 0, // KGSL doesn't use offset + .gpuaddr = autotune_cs->entries[0].bo->iova + + autotune_cs->entries[0].offset, .size = autotune_cs->entries[0].size, .flags = KGSL_CMDLIST_IB, .id = autotune_cs->entries[0].bo->gem_handle,