Skip to content

Commit edc9d17

Browse files
Lijo Lazaralexdeucher
authored andcommitted
drm/amd/pm: Make use of __free for cleanup
Use __free(kfree) for memory alloc cleanups in SMUv13.0.6 Signed-off-by: Lijo Lazar <lijo.lazar@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 9c04422 commit edc9d17

1 file changed

Lines changed: 25 additions & 38 deletions

File tree

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

Lines changed: 25 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,9 @@ static int smu_v13_0_6_tables_init(struct smu_context *smu)
538538
{
539539
struct smu_table_context *smu_table = &smu->smu_table;
540540
struct smu_table *tables = smu_table->tables;
541+
void *gpu_metrics_table __free(kfree) = NULL;
542+
void *driver_pptable __free(kfree) = NULL;
543+
void *metrics_table __free(kfree) = NULL;
541544
struct amdgpu_device *adev = smu->adev;
542545
int gpu_metrcs_size = METRICS_TABLE_SIZE;
543546
int ret;
@@ -556,37 +559,32 @@ static int smu_v13_0_6_tables_init(struct smu_context *smu)
556559
PAGE_SIZE,
557560
AMDGPU_GEM_DOMAIN_VRAM | AMDGPU_GEM_DOMAIN_GTT);
558561

559-
smu_table->metrics_table = kzalloc(METRICS_TABLE_SIZE, GFP_KERNEL);
560-
if (!smu_table->metrics_table)
562+
metrics_table = kzalloc(METRICS_TABLE_SIZE, GFP_KERNEL);
563+
if (!metrics_table)
561564
return -ENOMEM;
562565
smu_table->metrics_time = 0;
563566

564567
smu_table->gpu_metrics_table_size = sizeof(struct gpu_metrics_v1_8);
565-
smu_table->gpu_metrics_table =
568+
gpu_metrics_table =
566569
kzalloc(smu_table->gpu_metrics_table_size, GFP_KERNEL);
567-
if (!smu_table->gpu_metrics_table) {
568-
kfree(smu_table->metrics_table);
570+
if (!gpu_metrics_table)
569571
return -ENOMEM;
570-
}
571572

572-
smu_table->driver_pptable =
573-
kzalloc(sizeof(struct PPTable_t), GFP_KERNEL);
574-
if (!smu_table->driver_pptable) {
575-
kfree(smu_table->metrics_table);
576-
kfree(smu_table->gpu_metrics_table);
573+
driver_pptable = kzalloc(sizeof(struct PPTable_t), GFP_KERNEL);
574+
if (!driver_pptable)
577575
return -ENOMEM;
578-
}
579576

580577
if (amdgpu_ip_version(smu->adev, MP1_HWIP, 0) ==
581578
IP_VERSION(13, 0, 12)) {
582579
ret = smu_v13_0_12_tables_init(smu);
583-
if (ret) {
584-
kfree(smu_table->metrics_table);
585-
kfree(smu_table->gpu_metrics_table);
580+
if (ret)
586581
return ret;
587-
}
588582
}
589583

584+
smu_table->gpu_metrics_table = no_free_ptr(gpu_metrics_table);
585+
smu_table->metrics_table = no_free_ptr(metrics_table);
586+
smu_table->driver_pptable = no_free_ptr(driver_pptable);
587+
590588
return 0;
591589
}
592590

@@ -2622,9 +2620,9 @@ static ssize_t smu_v13_0_6_get_xcp_metrics(struct smu_context *smu, int xcp_id,
26222620
const u8 num_jpeg_rings = AMDGPU_MAX_JPEG_RINGS_4_0_3;
26232621
int version = smu_v13_0_6_get_metrics_version(smu);
26242622
struct amdgpu_partition_metrics_v1_0 *xcp_metrics;
2623+
MetricsTableV0_t *metrics_v0 __free(kfree) = NULL;
26252624
struct amdgpu_device *adev = smu->adev;
26262625
int ret, inst, i, j, k, idx;
2627-
MetricsTableV0_t *metrics_v0;
26282626
MetricsTableV1_t *metrics_v1;
26292627
MetricsTableV2_t *metrics_v2;
26302628
struct amdgpu_xcp *xcp;
@@ -2649,17 +2647,14 @@ static ssize_t smu_v13_0_6_get_xcp_metrics(struct smu_context *smu, int xcp_id,
26492647
return -ENOMEM;
26502648

26512649
ret = smu_v13_0_6_get_metrics_table(smu, metrics_v0, false);
2652-
if (ret) {
2653-
kfree(metrics_v0);
2650+
if (ret)
26542651
return ret;
2655-
}
26562652

26572653
if (amdgpu_ip_version(smu->adev, MP1_HWIP, 0) ==
26582654
IP_VERSION(13, 0, 12) &&
2659-
smu_v13_0_6_cap_supported(smu, SMU_CAP(STATIC_METRICS))) {
2660-
ret = smu_v13_0_12_get_xcp_metrics(smu, xcp, table, metrics_v0);
2661-
goto out;
2662-
}
2655+
smu_v13_0_6_cap_supported(smu, SMU_CAP(STATIC_METRICS)))
2656+
return smu_v13_0_12_get_xcp_metrics(smu, xcp, table,
2657+
metrics_v0);
26632658

26642659
metrics_v1 = (MetricsTableV1_t *)metrics_v0;
26652660
metrics_v2 = (MetricsTableV2_t *)metrics_v0;
@@ -2730,8 +2725,6 @@ static ssize_t smu_v13_0_6_get_xcp_metrics(struct smu_context *smu, int xcp_id,
27302725
idx++;
27312726
}
27322727
}
2733-
out:
2734-
kfree(metrics_v0);
27352728

27362729
return sizeof(*xcp_metrics);
27372730
}
@@ -2742,31 +2735,26 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table
27422735
struct gpu_metrics_v1_8 *gpu_metrics =
27432736
(struct gpu_metrics_v1_8 *)smu_table->gpu_metrics_table;
27442737
int version = smu_v13_0_6_get_metrics_version(smu);
2738+
MetricsTableV0_t *metrics_v0 __free(kfree) = NULL;
27452739
int ret = 0, xcc_id, inst, i, j, k, idx;
27462740
struct amdgpu_device *adev = smu->adev;
2747-
MetricsTableV0_t *metrics_v0;
27482741
MetricsTableV1_t *metrics_v1;
27492742
MetricsTableV2_t *metrics_v2;
27502743
struct amdgpu_xcp *xcp;
27512744
u16 link_width_level;
2752-
ssize_t num_bytes;
27532745
u8 num_jpeg_rings;
27542746
u32 inst_mask;
27552747
bool per_inst;
27562748

27572749
metrics_v0 = kzalloc(METRICS_TABLE_SIZE, GFP_KERNEL);
27582750
ret = smu_v13_0_6_get_metrics_table(smu, metrics_v0, false);
2759-
if (ret) {
2760-
kfree(metrics_v0);
2751+
if (ret)
27612752
return ret;
2762-
}
27632753

2764-
if (amdgpu_ip_version(smu->adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 12) &&
2765-
smu_v13_0_6_cap_supported(smu, SMU_CAP(STATIC_METRICS))) {
2766-
num_bytes = smu_v13_0_12_get_gpu_metrics(smu, table, metrics_v0);
2767-
kfree(metrics_v0);
2768-
return num_bytes;
2769-
}
2754+
if (amdgpu_ip_version(smu->adev, MP1_HWIP, 0) ==
2755+
IP_VERSION(13, 0, 12) &&
2756+
smu_v13_0_6_cap_supported(smu, SMU_CAP(STATIC_METRICS)))
2757+
return smu_v13_0_12_get_gpu_metrics(smu, table, metrics_v0);
27702758

27712759
metrics_v1 = (MetricsTableV1_t *)metrics_v0;
27722760
metrics_v2 = (MetricsTableV2_t *)metrics_v0;
@@ -2952,7 +2940,6 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table
29522940
gpu_metrics->firmware_timestamp = GET_METRIC_FIELD(Timestamp, version);
29532941

29542942
*table = (void *)gpu_metrics;
2955-
kfree(metrics_v0);
29562943

29572944
return sizeof(*gpu_metrics);
29582945
}

0 commit comments

Comments
 (0)