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;