@@ -1075,15 +1075,14 @@ int cppc_get_perf_caps(int cpunum, struct cppc_perf_caps *perf_caps)
1075
1075
* low_freq_reg = NULL , * nom_freq_reg = NULL ;
1076
1076
u64 high , low , nom , min_nonlinear , low_f = 0 , nom_f = 0 ;
1077
1077
int pcc_ss_id = per_cpu (cpu_pcc_subspace_idx , cpunum );
1078
- struct cppc_pcc_data * pcc_ss_data ;
1078
+ struct cppc_pcc_data * pcc_ss_data = NULL ;
1079
1079
int ret = 0 , regs_in_pcc = 0 ;
1080
1080
1081
- if (!cpc_desc || pcc_ss_id < 0 ) {
1081
+ if (!cpc_desc ) {
1082
1082
pr_debug ("No CPC descriptor for CPU:%d\n" , cpunum );
1083
1083
return - ENODEV ;
1084
1084
}
1085
1085
1086
- pcc_ss_data = pcc_data [pcc_ss_id ];
1087
1086
highest_reg = & cpc_desc -> cpc_regs [HIGHEST_PERF ];
1088
1087
lowest_reg = & cpc_desc -> cpc_regs [LOWEST_PERF ];
1089
1088
lowest_non_linear_reg = & cpc_desc -> cpc_regs [LOW_NON_LINEAR_PERF ];
@@ -1095,6 +1094,11 @@ int cppc_get_perf_caps(int cpunum, struct cppc_perf_caps *perf_caps)
1095
1094
if (CPC_IN_PCC (highest_reg ) || CPC_IN_PCC (lowest_reg ) ||
1096
1095
CPC_IN_PCC (lowest_non_linear_reg ) || CPC_IN_PCC (nominal_reg ) ||
1097
1096
CPC_IN_PCC (low_freq_reg ) || CPC_IN_PCC (nom_freq_reg )) {
1097
+ if (pcc_ss_id < 0 ) {
1098
+ pr_debug ("Invalid pcc_ss_id\n" );
1099
+ return - ENODEV ;
1100
+ }
1101
+ pcc_ss_data = pcc_data [pcc_ss_id ];
1098
1102
regs_in_pcc = 1 ;
1099
1103
down_write (& pcc_ss_data -> pcc_lock );
1100
1104
/* Ring doorbell once to update PCC subspace */
@@ -1150,16 +1154,15 @@ int cppc_get_perf_ctrs(int cpunum, struct cppc_perf_fb_ctrs *perf_fb_ctrs)
1150
1154
struct cpc_register_resource * delivered_reg , * reference_reg ,
1151
1155
* ref_perf_reg , * ctr_wrap_reg ;
1152
1156
int pcc_ss_id = per_cpu (cpu_pcc_subspace_idx , cpunum );
1153
- struct cppc_pcc_data * pcc_ss_data ;
1157
+ struct cppc_pcc_data * pcc_ss_data = NULL ;
1154
1158
u64 delivered , reference , ref_perf , ctr_wrap_time ;
1155
1159
int ret = 0 , regs_in_pcc = 0 ;
1156
1160
1157
- if (!cpc_desc || pcc_ss_id < 0 ) {
1161
+ if (!cpc_desc ) {
1158
1162
pr_debug ("No CPC descriptor for CPU:%d\n" , cpunum );
1159
1163
return - ENODEV ;
1160
1164
}
1161
1165
1162
- pcc_ss_data = pcc_data [pcc_ss_id ];
1163
1166
delivered_reg = & cpc_desc -> cpc_regs [DELIVERED_CTR ];
1164
1167
reference_reg = & cpc_desc -> cpc_regs [REFERENCE_CTR ];
1165
1168
ref_perf_reg = & cpc_desc -> cpc_regs [REFERENCE_PERF ];
@@ -1175,6 +1178,11 @@ int cppc_get_perf_ctrs(int cpunum, struct cppc_perf_fb_ctrs *perf_fb_ctrs)
1175
1178
/* Are any of the regs PCC ?*/
1176
1179
if (CPC_IN_PCC (delivered_reg ) || CPC_IN_PCC (reference_reg ) ||
1177
1180
CPC_IN_PCC (ctr_wrap_reg ) || CPC_IN_PCC (ref_perf_reg )) {
1181
+ if (pcc_ss_id < 0 ) {
1182
+ pr_debug ("Invalid pcc_ss_id\n" );
1183
+ return - ENODEV ;
1184
+ }
1185
+ pcc_ss_data = pcc_data [pcc_ss_id ];
1178
1186
down_write (& pcc_ss_data -> pcc_lock );
1179
1187
regs_in_pcc = 1 ;
1180
1188
/* Ring doorbell once to update PCC subspace */
@@ -1225,15 +1233,14 @@ int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls)
1225
1233
struct cpc_desc * cpc_desc = per_cpu (cpc_desc_ptr , cpu );
1226
1234
struct cpc_register_resource * desired_reg ;
1227
1235
int pcc_ss_id = per_cpu (cpu_pcc_subspace_idx , cpu );
1228
- struct cppc_pcc_data * pcc_ss_data ;
1236
+ struct cppc_pcc_data * pcc_ss_data = NULL ;
1229
1237
int ret = 0 ;
1230
1238
1231
- if (!cpc_desc || pcc_ss_id < 0 ) {
1239
+ if (!cpc_desc ) {
1232
1240
pr_debug ("No CPC descriptor for CPU:%d\n" , cpu );
1233
1241
return - ENODEV ;
1234
1242
}
1235
1243
1236
- pcc_ss_data = pcc_data [pcc_ss_id ];
1237
1244
desired_reg = & cpc_desc -> cpc_regs [DESIRED_PERF ];
1238
1245
1239
1246
/*
@@ -1244,6 +1251,11 @@ int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls)
1244
1251
* achieve that goal here
1245
1252
*/
1246
1253
if (CPC_IN_PCC (desired_reg )) {
1254
+ if (pcc_ss_id < 0 ) {
1255
+ pr_debug ("Invalid pcc_ss_id\n" );
1256
+ return - ENODEV ;
1257
+ }
1258
+ pcc_ss_data = pcc_data [pcc_ss_id ];
1247
1259
down_read (& pcc_ss_data -> pcc_lock ); /* BEGIN Phase-I */
1248
1260
if (pcc_ss_data -> platform_owns_pcc ) {
1249
1261
ret = check_pcc_chan (pcc_ss_id , false);
0 commit comments