Linux Power Management development
 help / color / mirror / Atom feed
From: Javi Merino <javi.merino@arm.com>
To: "linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>
Cc: Zhang Rui <rui.zhang@intel.com>, Eduardo Valentin <edubezval@gmail.com>
Subject: Re: [PATCH RESEND] thermal: power_allocator: trace the real requested power
Date: Mon, 13 Jul 2015 12:55:17 +0100	[thread overview]
Message-ID: <20150713115516.GA2809@e104805> (raw)
In-Reply-To: <1435915473-7407-1-git-send-email-javi.merino@arm.com>

On Fri, Jul 03, 2015 at 10:24:33AM +0100, Javi Merino wrote:
> 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: Javi Merino <javi.merino@arm.com>
> ---
>  drivers/thermal/power_allocator.c | 26 ++++++++++++++++----------
>  1 file changed, 16 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/thermal/power_allocator.c b/drivers/thermal/power_allocator.c
> index 4672250b329f..63a448f9d93b 100644
> --- a/drivers/thermal/power_allocator.c
> +++ b/drivers/thermal/power_allocator.c
> @@ -229,7 +229,8 @@ static int allocate_power(struct thermal_zone_device *tz,
>  	struct thermal_instance *instance;
>  	struct power_allocator_params *params = tz->governor_data;
>  	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;
>  	int i, num_actors, total_weight, ret = 0;
>  	int trip_max_desired_temperature = params->trip_max_desired_temperature;
> @@ -247,16 +248,17 @@ static int allocate_power(struct thermal_zone_device *tz,
>  	}
>  
>  	/*
> -	 * We need to allocate three arrays of the same size:
> -	 * req_power, max_power and granted_power.  They are going to
> -	 * be needed until this function returns.  Allocate them all
> -	 * in one go to simplify the allocation and deallocation
> -	 * logic.
> +	 * We need to allocate five arrays of the same size:
> +	 * req_power, max_power, granted_power, extra_actor_power and
> +	 * weighted_req_power.  They are going to be needed until this
> +	 * function returns.  Allocate them all in one go to simplify
> +	 * the allocation and deallocation logic.
>  	 */
>  	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(*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);
>  	if (!req_power) {
>  		ret = -ENOMEM;
> @@ -266,8 +268,10 @@ static int allocate_power(struct thermal_zone_device *tz,
>  	max_power = &req_power[num_actors];
>  	granted_power = &req_power[2 * num_actors];
>  	extra_actor_power = &req_power[3 * num_actors];
> +	weighted_req_power = &req_power[4 * num_actors];
>  
>  	i = 0;
> +	total_weighted_req_power = 0;
>  	total_req_power = 0;
>  	max_allocatable_power = 0;
>  
> @@ -289,13 +293,14 @@ static int allocate_power(struct thermal_zone_device *tz,
>  		else
>  			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]))
>  			continue;
>  
>  		total_req_power += req_power[i];
>  		max_allocatable_power += max_power[i];
> +		total_weighted_req_power += weighted_req_power[i];
>  
>  		i++;
>  	}
> @@ -303,8 +308,9 @@ static int allocate_power(struct thermal_zone_device *tz,
>  	power_range = pid_controller(tz, current_temp, control_temp,
>  				     max_allocatable_power);
>  
> -	divvy_up_power(req_power, max_power, num_actors, total_req_power,
> -		       power_range, granted_power, extra_actor_power);
> +	divvy_up_power(weighted_req_power, max_power, num_actors,
> +		       total_weighted_req_power, power_range, granted_power,
> +		       extra_actor_power);
>  
>  	total_granted_power = 0;
>  	i = 0;

Gentle ping

  reply	other threads:[~2015-07-13 11:55 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-03  9:24 [PATCH RESEND] thermal: power_allocator: trace the real requested power Javi Merino
2015-07-13 11:55 ` Javi Merino [this message]
2015-07-24  8:50   ` Punit Agrawal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150713115516.GA2809@e104805 \
    --to=javi.merino@arm.com \
    --cc=edubezval@gmail.com \
    --cc=linux-pm@vger.kernel.org \
    --cc=rui.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox