ac/sqtt: add helpers for initializing ac_thread_trace_data

This is common between RADV and RadeonSI.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22594>
This commit is contained in:
Samuel Pitoiset
2023-04-24 14:13:40 +02:00
committed by Marge Bot
parent 23f3aa3491
commit 94ce6540d8
4 changed files with 37 additions and 27 deletions

View File

@@ -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); 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 bool
ac_is_thread_trace_complete(struct radeon_info *rad_info, ac_is_thread_trace_complete(struct radeon_info *rad_info,
const struct ac_thread_trace_data *data, const struct ac_thread_trace_data *data,

View File

@@ -99,6 +99,12 @@ uint64_t
ac_thread_trace_get_data_va(const struct radeon_info *rad_info, ac_thread_trace_get_data_va(const struct radeon_info *rad_info,
const struct ac_thread_trace_data *data, uint64_t va, unsigned se); 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 bool
ac_is_thread_trace_complete(struct radeon_info *rad_info, ac_is_thread_trace_complete(struct radeon_info *rad_info,
const struct ac_thread_trace_data *data, const struct ac_thread_trace_data *data,

View File

@@ -571,14 +571,7 @@ radv_thread_trace_init(struct radv_device *device)
if (!radv_device_acquire_performance_counters(device)) if (!radv_device_acquire_performance_counters(device))
return false; return false;
list_inithead(&thread_trace_data->rgp_pso_correlation.record); ac_thread_trace_init(thread_trace_data);
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);
return true; return true;
} }
@@ -600,14 +593,7 @@ radv_thread_trace_finish(struct radv_device *device)
ws->cs_destroy(device->thread_trace.stop_cs[i]); ws->cs_destroy(device->thread_trace.stop_cs[i]);
} }
assert(thread_trace_data->rgp_pso_correlation.record_count == 0); ac_thread_trace_finish(thread_trace_data);
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);
} }
static bool static bool

View File

@@ -720,14 +720,7 @@ si_init_thread_trace(struct si_context *sctx)
if (!si_thread_trace_init_bo(sctx)) if (!si_thread_trace_init_bo(sctx))
return false; return false;
list_inithead(&sctx->thread_trace->rgp_pso_correlation.record); ac_thread_trace_init(sctx->thread_trace);
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);
if (sctx->gfx_level >= GFX10 && if (sctx->gfx_level >= GFX10 &&
debug_get_bool_option("AMD_THREAD_TRACE_SPM", sctx->gfx_level < GFX11)) { 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); list_del(&record->list);
free(record); free(record);
} }
simple_mtx_destroy(&sctx->thread_trace->rgp_pso_correlation.lock);
list_for_each_entry_safe(struct rgp_loader_events_record, record, list_for_each_entry_safe(struct rgp_loader_events_record, record,
&loader_events->record, list) { &loader_events->record, list) {
list_del(&record->list); list_del(&record->list);
free(record); free(record);
} }
simple_mtx_destroy(&sctx->thread_trace->rgp_loader_events.lock);
list_for_each_entry_safe(struct rgp_code_object_record, record, list_for_each_entry_safe(struct rgp_code_object_record, record,
&code_object->record, list) { &code_object->record, list) {
@@ -786,7 +777,8 @@ si_destroy_thread_trace(struct si_context *sctx)
list_del(&record->list); list_del(&record->list);
free(record); 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) { hash_table_foreach(sctx->thread_trace->pipeline_bos->table, entry) {
struct si_sqtt_fake_pipeline *pipeline = (struct si_sqtt_fake_pipeline *)entry->data; struct si_sqtt_fake_pipeline *pipeline = (struct si_sqtt_fake_pipeline *)entry->data;