Skip to content

Commit

Permalink
thermal: gov_power_allocator: Simplify checks for valid power actor
Browse files Browse the repository at this point in the history
There is a need to check if the cooling device in the thermal zone
supports IPA callback and is set for control trip point.
Refactor the code which validates the power actor capabilities and
make it more consistent in all places.

No intentional functional impact.

Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Lukasz Luba authored and Rafael J. Wysocki committed Dec 29, 2023
1 parent 912e97c commit e3ecd57
Showing 1 changed file with 17 additions and 23 deletions.
40 changes: 17 additions & 23 deletions drivers/thermal/gov_power_allocator.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,13 @@ struct power_allocator_params {
struct power_actor *power;
};

static bool power_actor_is_valid(struct power_allocator_params *params,
struct thermal_instance *instance)
{
return (instance->trip == params->trip_max &&
cdev_is_power_actor(instance->cdev));
}

/**
* estimate_sustainable_power() - Estimate the sustainable power of a thermal zone
* @tz: thermal zone we are operating in
Expand All @@ -113,14 +120,10 @@ static u32 estimate_sustainable_power(struct thermal_zone_device *tz)
u32 min_power;

list_for_each_entry(instance, &tz->thermal_instances, tz_node) {
cdev = instance->cdev;

if (instance->trip != params->trip_max)
continue;

if (!cdev_is_power_actor(cdev))
if (!power_actor_is_valid(params, instance))
continue;

cdev = instance->cdev;
if (cdev->ops->state2power(cdev, instance->upper, &min_power))
continue;

Expand Down Expand Up @@ -409,8 +412,7 @@ static int allocate_power(struct thermal_zone_device *tz, int control_temp)
return -ENODEV;

list_for_each_entry(instance, &tz->thermal_instances, tz_node)
if ((instance->trip == params->trip_max) &&
cdev_is_power_actor(instance->cdev))
if (power_actor_is_valid(params, instance))
total_weight += instance->weight;

/* Clean all buffers for new power estimations */
Expand All @@ -419,13 +421,10 @@ static int allocate_power(struct thermal_zone_device *tz, int control_temp)
list_for_each_entry(instance, &tz->thermal_instances, tz_node) {
struct power_actor *pa = &power[i];

cdev = instance->cdev;

if (instance->trip != params->trip_max)
if (!power_actor_is_valid(params, instance))
continue;

if (!cdev_is_power_actor(cdev))
continue;
cdev = instance->cdev;

ret = cdev->ops->get_requested_power(cdev, &pa->req_power);
if (ret)
Expand Down Expand Up @@ -459,10 +458,7 @@ static int allocate_power(struct thermal_zone_device *tz, int control_temp)
list_for_each_entry(instance, &tz->thermal_instances, tz_node) {
struct power_actor *pa = &power[i];

if (instance->trip != params->trip_max)
continue;

if (!cdev_is_power_actor(instance->cdev))
if (!power_actor_is_valid(params, instance))
continue;

power_actor_set_power(instance->cdev, instance,
Expand Down Expand Up @@ -548,12 +544,11 @@ static void allow_maximum_power(struct thermal_zone_device *tz, bool update)
u32 req_power;

list_for_each_entry(instance, &tz->thermal_instances, tz_node) {
cdev = instance->cdev;

if (instance->trip != params->trip_max ||
!cdev_is_power_actor(instance->cdev))
if (!power_actor_is_valid(params, instance))
continue;

cdev = instance->cdev;

instance->target = 0;
mutex_lock(&cdev->lock);
/*
Expand Down Expand Up @@ -648,8 +643,7 @@ static void power_allocator_update_tz(struct thermal_zone_device *tz,
case THERMAL_TZ_BIND_CDEV:
case THERMAL_TZ_UNBIND_CDEV:
list_for_each_entry(instance, &tz->thermal_instances, tz_node)
if ((instance->trip == params->trip_max) &&
cdev_is_power_actor(instance->cdev))
if (power_actor_is_valid(params, instance))
num_actors++;

if (num_actors == params->num_actors)
Expand Down

0 comments on commit e3ecd57

Please sign in to comment.