@@ -229,7 +229,8 @@ static int allocate_power(struct thermal_zone_device *tz,
229
229
struct thermal_instance * instance ;
230
230
struct power_allocator_params * params = tz -> governor_data ;
231
231
u32 * req_power , * max_power , * granted_power , * extra_actor_power ;
232
- u32 total_req_power , max_allocatable_power ;
232
+ u32 * weighted_req_power ;
233
+ u32 total_req_power , max_allocatable_power , total_weighted_req_power ;
233
234
u32 total_granted_power , power_range ;
234
235
int i , num_actors , total_weight , ret = 0 ;
235
236
int trip_max_desired_temperature = params -> trip_max_desired_temperature ;
@@ -247,16 +248,17 @@ static int allocate_power(struct thermal_zone_device *tz,
247
248
}
248
249
249
250
/*
250
- * We need to allocate three arrays of the same size:
251
- * req_power, max_power and granted_power. They are going to
252
- * be needed until this function returns. Allocate them all
253
- * in one go to simplify the allocation and deallocation
254
- * logic.
251
+ * We need to allocate five arrays of the same size:
252
+ * req_power, max_power, granted_power, extra_actor_power and
253
+ * weighted_req_power. They are going to be needed until this
254
+ * function returns. Allocate them all in one go to simplify
255
+ * the allocation and deallocation logic.
255
256
*/
256
257
BUILD_BUG_ON (sizeof (* req_power ) != sizeof (* max_power ));
257
258
BUILD_BUG_ON (sizeof (* req_power ) != sizeof (* granted_power ));
258
259
BUILD_BUG_ON (sizeof (* req_power ) != sizeof (* extra_actor_power ));
259
- req_power = devm_kcalloc (& tz -> device , num_actors * 4 ,
260
+ BUILD_BUG_ON (sizeof (* req_power ) != sizeof (* weighted_req_power ));
261
+ req_power = devm_kcalloc (& tz -> device , num_actors * 5 ,
260
262
sizeof (* req_power ), GFP_KERNEL );
261
263
if (!req_power ) {
262
264
ret = - ENOMEM ;
@@ -266,8 +268,10 @@ static int allocate_power(struct thermal_zone_device *tz,
266
268
max_power = & req_power [num_actors ];
267
269
granted_power = & req_power [2 * num_actors ];
268
270
extra_actor_power = & req_power [3 * num_actors ];
271
+ weighted_req_power = & req_power [4 * num_actors ];
269
272
270
273
i = 0 ;
274
+ total_weighted_req_power = 0 ;
271
275
total_req_power = 0 ;
272
276
max_allocatable_power = 0 ;
273
277
@@ -289,22 +293,24 @@ static int allocate_power(struct thermal_zone_device *tz,
289
293
else
290
294
weight = instance -> weight ;
291
295
292
- req_power [i ] = frac_to_int (weight * req_power [i ]);
296
+ weighted_req_power [i ] = frac_to_int (weight * req_power [i ]);
293
297
294
298
if (power_actor_get_max_power (cdev , tz , & max_power [i ]))
295
299
continue ;
296
300
297
301
total_req_power += req_power [i ];
298
302
max_allocatable_power += max_power [i ];
303
+ total_weighted_req_power += weighted_req_power [i ];
299
304
300
305
i ++ ;
301
306
}
302
307
303
308
power_range = pid_controller (tz , current_temp , control_temp ,
304
309
max_allocatable_power );
305
310
306
- divvy_up_power (req_power , max_power , num_actors , total_req_power ,
307
- power_range , granted_power , extra_actor_power );
311
+ divvy_up_power (weighted_req_power , max_power , num_actors ,
312
+ total_weighted_req_power , power_range , granted_power ,
313
+ extra_actor_power );
308
314
309
315
total_granted_power = 0 ;
310
316
i = 0 ;
0 commit comments