Module: Mesa
Branch: main
Commit: 94ce6540d8c8c46c285d3877af4a56f5b59e5d80
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=94ce6540d8c8c46c285d3877af4a56f5b59e5d80

Author: Samuel Pitoiset <[email protected]>
Date:   Mon Apr 24 14:13:40 2023 +0200

ac/sqtt: add helpers for initializing ac_thread_trace_data

This is common between RADV and RadeonSI.

Signed-off-by: Samuel Pitoiset <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22594>

---

 src/amd/common/ac_sqtt.c               | 26 ++++++++++++++++++++++++++
 src/amd/common/ac_sqtt.h               |  6 ++++++
 src/amd/vulkan/radv_sqtt.c             | 18 ++----------------
 src/gallium/drivers/radeonsi/si_sqtt.c | 14 +++-----------
 4 files changed, 37 insertions(+), 27 deletions(-)

diff --git a/src/amd/common/ac_sqtt.c b/src/amd/common/ac_sqtt.c
index a80b268b58d..5cc88e6a2cf 100644
--- a/src/amd/common/ac_sqtt.c
+++ b/src/amd/common/ac_sqtt.c
@@ -62,6 +62,32 @@ ac_thread_trace_get_data_va(const struct radeon_info 
*rad_info,
    return va + ac_thread_trace_get_data_offset(rad_info, data, se);
 }
 
+void
+ac_thread_trace_init(struct ac_thread_trace_data *data)
+{
+   list_inithead(&data->rgp_pso_correlation.record);
+   simple_mtx_init(&data->rgp_pso_correlation.lock, mtx_plain);
+
+   list_inithead(&data->rgp_loader_events.record);
+   simple_mtx_init(&data->rgp_loader_events.lock, mtx_plain);
+
+   list_inithead(&data->rgp_code_object.record);
+   simple_mtx_init(&data->rgp_code_object.lock, mtx_plain);
+}
+
+void
+ac_thread_trace_finish(struct ac_thread_trace_data *data)
+{
+   assert(data->rgp_pso_correlation.record_count == 0);
+   simple_mtx_destroy(&data->rgp_pso_correlation.lock);
+
+   assert(data->rgp_loader_events.record_count == 0);
+   simple_mtx_destroy(&data->rgp_loader_events.lock);
+
+   assert(data->rgp_code_object.record_count == 0);
+   simple_mtx_destroy(&data->rgp_code_object.lock);
+}
+
 bool
 ac_is_thread_trace_complete(struct radeon_info *rad_info,
                             const struct ac_thread_trace_data *data,
diff --git a/src/amd/common/ac_sqtt.h b/src/amd/common/ac_sqtt.h
index 364d0144e0f..2bce418ab08 100644
--- a/src/amd/common/ac_sqtt.h
+++ b/src/amd/common/ac_sqtt.h
@@ -99,6 +99,12 @@ uint64_t
 ac_thread_trace_get_data_va(const struct radeon_info *rad_info,
                             const struct ac_thread_trace_data *data, uint64_t 
va, unsigned se);
 
+void
+ac_thread_trace_init(struct ac_thread_trace_data *data);
+
+void
+ac_thread_trace_finish(struct ac_thread_trace_data *data);
+
 bool
 ac_is_thread_trace_complete(struct radeon_info *rad_info,
                             const struct ac_thread_trace_data *data,
diff --git a/src/amd/vulkan/radv_sqtt.c b/src/amd/vulkan/radv_sqtt.c
index 04356a36617..eeacdf2b723 100644
--- a/src/amd/vulkan/radv_sqtt.c
+++ b/src/amd/vulkan/radv_sqtt.c
@@ -571,14 +571,7 @@ radv_thread_trace_init(struct radv_device *device)
    if (!radv_device_acquire_performance_counters(device))
       return false;
 
-   list_inithead(&thread_trace_data->rgp_pso_correlation.record);
-   simple_mtx_init(&thread_trace_data->rgp_pso_correlation.lock, mtx_plain);
-
-   list_inithead(&thread_trace_data->rgp_loader_events.record);
-   simple_mtx_init(&thread_trace_data->rgp_loader_events.lock, mtx_plain);
-
-   list_inithead(&thread_trace_data->rgp_code_object.record);
-   simple_mtx_init(&thread_trace_data->rgp_code_object.lock, mtx_plain);
+   ac_thread_trace_init(thread_trace_data);
 
    return true;
 }
@@ -600,14 +593,7 @@ radv_thread_trace_finish(struct radv_device *device)
          ws->cs_destroy(device->thread_trace.stop_cs[i]);
    }
 
-   assert(thread_trace_data->rgp_pso_correlation.record_count == 0);
-   simple_mtx_destroy(&thread_trace_data->rgp_pso_correlation.lock);
-
-   assert(thread_trace_data->rgp_loader_events.record_count == 0);
-   simple_mtx_destroy(&thread_trace_data->rgp_loader_events.lock);
-
-   assert(thread_trace_data->rgp_code_object.record_count == 0);
-   simple_mtx_destroy(&thread_trace_data->rgp_code_object.lock);
+   ac_thread_trace_finish(thread_trace_data);
 }
 
 static bool
diff --git a/src/gallium/drivers/radeonsi/si_sqtt.c 
b/src/gallium/drivers/radeonsi/si_sqtt.c
index 31cc68508f1..3bbf3dcea40 100644
--- a/src/gallium/drivers/radeonsi/si_sqtt.c
+++ b/src/gallium/drivers/radeonsi/si_sqtt.c
@@ -720,14 +720,7 @@ si_init_thread_trace(struct si_context *sctx)
    if (!si_thread_trace_init_bo(sctx))
       return false;
 
-   list_inithead(&sctx->thread_trace->rgp_pso_correlation.record);
-   simple_mtx_init(&sctx->thread_trace->rgp_pso_correlation.lock, mtx_plain);
-
-   list_inithead(&sctx->thread_trace->rgp_loader_events.record);
-   simple_mtx_init(&sctx->thread_trace->rgp_loader_events.lock, mtx_plain);
-
-   list_inithead(&sctx->thread_trace->rgp_code_object.record);
-   simple_mtx_init(&sctx->thread_trace->rgp_code_object.lock, mtx_plain);
+   ac_thread_trace_init(sctx->thread_trace);
 
    if (sctx->gfx_level >= GFX10 &&
        debug_get_bool_option("AMD_THREAD_TRACE_SPM", sctx->gfx_level < GFX11)) 
{
@@ -764,14 +757,12 @@ si_destroy_thread_trace(struct si_context *sctx)
       list_del(&record->list);
       free(record);
    }
-   simple_mtx_destroy(&sctx->thread_trace->rgp_pso_correlation.lock);
 
    list_for_each_entry_safe(struct rgp_loader_events_record, record,
                             &loader_events->record, list) {
       list_del(&record->list);
       free(record);
    }
-   simple_mtx_destroy(&sctx->thread_trace->rgp_loader_events.lock);
 
    list_for_each_entry_safe(struct rgp_code_object_record, record,
              &code_object->record, list) {
@@ -786,7 +777,8 @@ si_destroy_thread_trace(struct si_context *sctx)
       list_del(&record->list);
       free(record);
    }
-   simple_mtx_destroy(&sctx->thread_trace->rgp_code_object.lock);
+
+   ac_thread_trace_finish(sctx->thread_trace);
 
    hash_table_foreach(sctx->thread_trace->pipeline_bos->table, entry) {
       struct si_sqtt_fake_pipeline *pipeline = (struct si_sqtt_fake_pipeline 
*)entry->data;

Reply via email to