Commit d5f83109 authored by Javi Merino's avatar Javi Merino Committed by Eduardo Valentin

thermal: power_allocator: trace the real requested power

The power allocator governor uses ftrace to output a bunch of internal
data for debugging and tuning.  Currently, the requested power it
outputs is the "weighted" requested power, that is, what each cooling
device has requested multiplied by the cooling device weight.  It is
more useful to trace the real request, without any weight being
applied.

This commit only affects the data traced, there is no functional change.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Eduardo Valentin <edubezval@gmail.com>
Signed-off-by: default avatarJavi Merino <javi.merino@arm.com>
Signed-off-by: default avatarEduardo Valentin <edubezval@gmail.com>
parent 528464ea
...@@ -229,7 +229,8 @@ static int allocate_power(struct thermal_zone_device *tz, ...@@ -229,7 +229,8 @@ static int allocate_power(struct thermal_zone_device *tz,
struct thermal_instance *instance; struct thermal_instance *instance;
struct power_allocator_params *params = tz->governor_data; struct power_allocator_params *params = tz->governor_data;
u32 *req_power, *max_power, *granted_power, *extra_actor_power; u32 *req_power, *max_power, *granted_power, *extra_actor_power;
u32 total_req_power, max_allocatable_power; u32 *weighted_req_power;
u32 total_req_power, max_allocatable_power, total_weighted_req_power;
u32 total_granted_power, power_range; u32 total_granted_power, power_range;
int i, num_actors, total_weight, ret = 0; int i, num_actors, total_weight, ret = 0;
int trip_max_desired_temperature = params->trip_max_desired_temperature; int trip_max_desired_temperature = params->trip_max_desired_temperature;
...@@ -247,16 +248,17 @@ static int allocate_power(struct thermal_zone_device *tz, ...@@ -247,16 +248,17 @@ static int allocate_power(struct thermal_zone_device *tz,
} }
/* /*
* We need to allocate three arrays of the same size: * We need to allocate five arrays of the same size:
* req_power, max_power and granted_power. They are going to * req_power, max_power, granted_power, extra_actor_power and
* be needed until this function returns. Allocate them all * weighted_req_power. They are going to be needed until this
* in one go to simplify the allocation and deallocation * function returns. Allocate them all in one go to simplify
* logic. * the allocation and deallocation logic.
*/ */
BUILD_BUG_ON(sizeof(*req_power) != sizeof(*max_power)); BUILD_BUG_ON(sizeof(*req_power) != sizeof(*max_power));
BUILD_BUG_ON(sizeof(*req_power) != sizeof(*granted_power)); BUILD_BUG_ON(sizeof(*req_power) != sizeof(*granted_power));
BUILD_BUG_ON(sizeof(*req_power) != sizeof(*extra_actor_power)); BUILD_BUG_ON(sizeof(*req_power) != sizeof(*extra_actor_power));
req_power = devm_kcalloc(&tz->device, num_actors * 4, BUILD_BUG_ON(sizeof(*req_power) != sizeof(*weighted_req_power));
req_power = devm_kcalloc(&tz->device, num_actors * 5,
sizeof(*req_power), GFP_KERNEL); sizeof(*req_power), GFP_KERNEL);
if (!req_power) { if (!req_power) {
ret = -ENOMEM; ret = -ENOMEM;
...@@ -266,8 +268,10 @@ static int allocate_power(struct thermal_zone_device *tz, ...@@ -266,8 +268,10 @@ static int allocate_power(struct thermal_zone_device *tz,
max_power = &req_power[num_actors]; max_power = &req_power[num_actors];
granted_power = &req_power[2 * num_actors]; granted_power = &req_power[2 * num_actors];
extra_actor_power = &req_power[3 * num_actors]; extra_actor_power = &req_power[3 * num_actors];
weighted_req_power = &req_power[4 * num_actors];
i = 0; i = 0;
total_weighted_req_power = 0;
total_req_power = 0; total_req_power = 0;
max_allocatable_power = 0; max_allocatable_power = 0;
...@@ -289,13 +293,14 @@ static int allocate_power(struct thermal_zone_device *tz, ...@@ -289,13 +293,14 @@ static int allocate_power(struct thermal_zone_device *tz,
else else
weight = instance->weight; weight = instance->weight;
req_power[i] = frac_to_int(weight * req_power[i]); weighted_req_power[i] = frac_to_int(weight * req_power[i]);
if (power_actor_get_max_power(cdev, tz, &max_power[i])) if (power_actor_get_max_power(cdev, tz, &max_power[i]))
continue; continue;
total_req_power += req_power[i]; total_req_power += req_power[i];
max_allocatable_power += max_power[i]; max_allocatable_power += max_power[i];
total_weighted_req_power += weighted_req_power[i];
i++; i++;
} }
...@@ -303,8 +308,9 @@ static int allocate_power(struct thermal_zone_device *tz, ...@@ -303,8 +308,9 @@ static int allocate_power(struct thermal_zone_device *tz,
power_range = pid_controller(tz, current_temp, control_temp, power_range = pid_controller(tz, current_temp, control_temp,
max_allocatable_power); max_allocatable_power);
divvy_up_power(req_power, max_power, num_actors, total_req_power, divvy_up_power(weighted_req_power, max_power, num_actors,
power_range, granted_power, extra_actor_power); total_weighted_req_power, power_range, granted_power,
extra_actor_power);
total_granted_power = 0; total_granted_power = 0;
i = 0; i = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment