Skip to content

Commit 9785921

Browse files
Asad Kamalalexdeucher
authored andcommitted
drm/amd/pm: Optimize get gpu metrics data function
Optimize get gpu metrics data function for smu_v13_0_12 to allocate metrics structure only once v2: Free and alloc moved to same function(Kevin) Signed-off-by: Asad Kamal <[email protected]> Reviewed-by: Yang Wang <[email protected]> Reviewed-by: Lijo Lazar <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 4d2f6b4 commit 9785921

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ ssize_t smu_v13_0_12_get_xcp_metrics(struct smu_context *smu, struct amdgpu_xcp
378378
return sizeof(*xcp_metrics);
379379
}
380380

381-
ssize_t smu_v13_0_12_get_gpu_metrics(struct smu_context *smu, void **table)
381+
ssize_t smu_v13_0_12_get_gpu_metrics(struct smu_context *smu, void **table, void *smu_metrics)
382382
{
383383
struct smu_table_context *smu_table = &smu->smu_table;
384384
struct gpu_metrics_v1_8 *gpu_metrics =
@@ -390,8 +390,7 @@ ssize_t smu_v13_0_12_get_gpu_metrics(struct smu_context *smu, void **table)
390390
struct amdgpu_xcp *xcp;
391391
u32 inst_mask;
392392

393-
metrics = kzalloc(sizeof(MetricsTable_t), GFP_KERNEL);
394-
memcpy(metrics, smu_table->metrics_table, sizeof(MetricsTable_t));
393+
metrics = (MetricsTable_t *)smu_metrics;
395394

396395
smu_cmn_init_soft_gpu_metrics(gpu_metrics, 1, 8);
397396

@@ -533,7 +532,6 @@ ssize_t smu_v13_0_12_get_gpu_metrics(struct smu_context *smu, void **table)
533532
gpu_metrics->firmware_timestamp = metrics->Timestamp;
534533

535534
*table = (void *)gpu_metrics;
536-
kfree(metrics);
537535

538536
return sizeof(*gpu_metrics);
539537
}

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2669,6 +2669,7 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table
26692669
MetricsTableV2_t *metrics_v2;
26702670
struct amdgpu_xcp *xcp;
26712671
u16 link_width_level;
2672+
ssize_t num_bytes;
26722673
u8 num_jpeg_rings;
26732674
u32 inst_mask;
26742675
bool per_inst;
@@ -2681,8 +2682,11 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table
26812682
}
26822683

26832684
if (amdgpu_ip_version(smu->adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 12) &&
2684-
smu_v13_0_6_cap_supported(smu, SMU_CAP(STATIC_METRICS)))
2685-
return smu_v13_0_12_get_gpu_metrics(smu, table);
2685+
smu_v13_0_6_cap_supported(smu, SMU_CAP(STATIC_METRICS))) {
2686+
num_bytes = smu_v13_0_12_get_gpu_metrics(smu, table, metrics_v0);
2687+
kfree(metrics_v0);
2688+
return num_bytes;
2689+
}
26862690

26872691
metrics_v1 = (MetricsTableV1_t *)metrics_v0;
26882692
metrics_v2 = (MetricsTableV2_t *)metrics_v0;

drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ int smu_v13_0_12_get_max_metrics_size(void);
8080
int smu_v13_0_12_setup_driver_pptable(struct smu_context *smu);
8181
int smu_v13_0_12_get_smu_metrics_data(struct smu_context *smu,
8282
MetricsMember_t member, uint32_t *value);
83-
ssize_t smu_v13_0_12_get_gpu_metrics(struct smu_context *smu, void **table);
83+
ssize_t smu_v13_0_12_get_gpu_metrics(struct smu_context *smu, void **table, void *smu_metrics);
8484
ssize_t smu_v13_0_12_get_xcp_metrics(struct smu_context *smu,
8585
struct amdgpu_xcp *xcp, void *table,
8686
void *smu_metrics);

0 commit comments

Comments
 (0)