@@ -2564,9 +2564,10 @@ static ssize_t smu_v13_0_6_get_xcp_metrics(struct smu_context *smu, int xcp_id,
25642564 const u8 num_jpeg_rings = AMDGPU_MAX_JPEG_RINGS_4_0_3 ;
25652565 int version = smu_v13_0_6_get_metrics_version (smu );
25662566 struct smu_v13_0_6_partition_metrics * xcp_metrics ;
2567- MetricsTableV0_t * metrics_v0 __free ( kfree ) = NULL ;
2567+ struct smu_table_context * smu_table = & smu -> smu_table ;
25682568 struct amdgpu_device * adev = smu -> adev ;
25692569 int ret , inst , i , j , k , idx ;
2570+ MetricsTableV0_t * metrics_v0 ;
25702571 MetricsTableV1_t * metrics_v1 ;
25712572 MetricsTableV2_t * metrics_v2 ;
25722573 struct amdgpu_xcp * xcp ;
@@ -2586,22 +2587,20 @@ static ssize_t smu_v13_0_6_get_xcp_metrics(struct smu_context *smu, int xcp_id,
25862587 xcp_metrics = (struct smu_v13_0_6_partition_metrics * )table ;
25872588 smu_v13_0_6_partition_metrics_init (xcp_metrics , 1 , 1 );
25882589
2589- metrics_v0 = kzalloc (METRICS_TABLE_SIZE , GFP_KERNEL );
2590- if (!metrics_v0 )
2591- return - ENOMEM ;
2592-
2593- ret = smu_v13_0_6_get_metrics_table (smu , metrics_v0 , false);
2590+ ret = smu_v13_0_6_get_metrics_table (smu , NULL , false);
25942591 if (ret )
25952592 return ret ;
25962593
2594+ metrics_v0 = (MetricsTableV0_t * )smu_table -> metrics_table ;
2595+
25972596 if (amdgpu_ip_version (smu -> adev , MP1_HWIP , 0 ) ==
25982597 IP_VERSION (13 , 0 , 12 ) &&
25992598 smu_v13_0_6_cap_supported (smu , SMU_CAP (STATIC_METRICS )))
26002599 return smu_v13_0_12_get_xcp_metrics (smu , xcp , table ,
26012600 metrics_v0 );
26022601
2603- metrics_v1 = (MetricsTableV1_t * )metrics_v0 ;
2604- metrics_v2 = (MetricsTableV2_t * )metrics_v0 ;
2602+ metrics_v1 = (MetricsTableV1_t * )smu_table -> metrics_table ;
2603+ metrics_v2 = (MetricsTableV2_t * )smu_table -> metrics_table ;
26052604
26062605 per_inst = smu_v13_0_6_cap_supported (smu , SMU_CAP (PER_INST_METRICS ));
26072606
@@ -2677,21 +2676,21 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table
26772676{
26782677 struct smu_v13_0_6_gpu_metrics * gpu_metrics ;
26792678 int version = smu_v13_0_6_get_metrics_version (smu );
2680- MetricsTableV0_t * metrics_v0 __free ( kfree ) = NULL ;
2679+ struct smu_table_context * smu_table = & smu -> smu_table ;
26812680 struct amdgpu_device * adev = smu -> adev ;
26822681 int ret = 0 , xcc_id , inst , i , j ;
2682+ MetricsTableV0_t * metrics_v0 ;
26832683 MetricsTableV1_t * metrics_v1 ;
26842684 MetricsTableV2_t * metrics_v2 ;
26852685 u16 link_width_level ;
26862686 u8 num_jpeg_rings ;
26872687 bool per_inst ;
26882688
2689- metrics_v0 = kzalloc (METRICS_TABLE_SIZE , GFP_KERNEL );
2690- ret = smu_v13_0_6_get_metrics_table (smu , metrics_v0 , false);
2689+ ret = smu_v13_0_6_get_metrics_table (smu , NULL , false);
26912690 if (ret )
26922691 return ret ;
26932692
2694- metrics_v2 = (MetricsTableV2_t * )metrics_v0 ;
2693+ metrics_v0 = (MetricsTableV0_t * )smu_table -> metrics_table ;
26952694 gpu_metrics = (struct smu_v13_0_6_gpu_metrics * )smu_driver_table_ptr (
26962695 smu , SMU_DRIVER_TABLE_GPU_METRICS );
26972696
@@ -2702,8 +2701,8 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table
27022701 goto fill ;
27032702 }
27042703
2705- metrics_v1 = (MetricsTableV1_t * )metrics_v0 ;
2706- metrics_v2 = (MetricsTableV2_t * )metrics_v0 ;
2704+ metrics_v1 = (MetricsTableV1_t * )smu_table -> metrics_table ;
2705+ metrics_v2 = (MetricsTableV2_t * )smu_table -> metrics_table ;
27072706
27082707 gpu_metrics -> temperature_hotspot =
27092708 SMUQ10_ROUND (GET_METRIC_FIELD (MaxSocketTemperature , version ));
0 commit comments