linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Shilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com>
To: Preeti U Murthy <preeti@linux.vnet.ibm.com>,
	linuxppc-dev@ozlabs.org, linux-kernel@vger.kernel.org
Cc: viresh.kumar@linaro.org, rjw@rjwysocki.net, linux-pm@vger.kernel.org
Subject: Re: [PATCH v3 1/6] cpufreq: poowernv: Handle throttling due to Pmax capping at chip level
Date: Tue, 05 May 2015 11:36:33 +0530	[thread overview]
Message-ID: <55485DE9.4070609@linux.vnet.ibm.com> (raw)
In-Reply-To: <55483E4B.4080405@linux.vnet.ibm.com>

Hi Preeti,

On 05/05/2015 09:21 AM, Preeti U Murthy wrote:
> Hi Shilpa,
> 
> On 05/04/2015 02:24 PM, Shilpasri G Bhat wrote:
>> The On-Chip-Controller(OCC) can throttle cpu frequency by reducing the
>> max allowed frequency for that chip if the chip exceeds its power or
>> temperature limits. As Pmax capping is a chip level condition report
>> this throttling behavior at chip level and also do not set the global
>> 'throttled' on Pmax capping instead set the per-chip throttled
>> variable. Report unthrottling if Pmax is restored after throttling.
>>
>> This patch adds a structure to store chip id and throttled state of
>> the chip.
>>
>> Signed-off-by: Shilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com>
>> ---
>>  drivers/cpufreq/powernv-cpufreq.c | 59 ++++++++++++++++++++++++++++++++++++---
>>  1 file changed, 55 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c
>> index ebef0d8..d0c18c9 100644
>> --- a/drivers/cpufreq/powernv-cpufreq.c
>> +++ b/drivers/cpufreq/powernv-cpufreq.c
>> @@ -27,6 +27,7 @@
>>  #include <linux/smp.h>
>>  #include <linux/of.h>
>>  #include <linux/reboot.h>
>> +#include <linux/slab.h>
>>
>>  #include <asm/cputhreads.h>
>>  #include <asm/firmware.h>
>> @@ -42,6 +43,13 @@
>>  static struct cpufreq_frequency_table powernv_freqs[POWERNV_MAX_PSTATES+1];
>>  static bool rebooting, throttled;
>>
>> +static struct chip {
>> +	unsigned int id;
>> +	bool throttled;
>> +} *chips;
>> +
>> +static int nr_chips;
>> +
>>  /*
>>   * Note: The set of pstates consists of contiguous integers, the
>>   * smallest of which is indicated by powernv_pstate_info.min, the
>> @@ -301,22 +309,33 @@ static inline unsigned int get_nominal_index(void)
>>  static void powernv_cpufreq_throttle_check(unsigned int cpu)
>>  {
>>  	unsigned long pmsr;
>> -	int pmsr_pmax, pmsr_lp;
>> +	int pmsr_pmax, pmsr_lp, i;
>>
>>  	pmsr = get_pmspr(SPRN_PMSR);
>>
>> +	for (i = 0; i < nr_chips; i++)
>> +		if (chips[i].id == cpu_to_chip_id(cpu))
>> +			break;
>> +
>>  	/* Check for Pmax Capping */
>>  	pmsr_pmax = (s8)PMSR_MAX(pmsr);
>>  	if (pmsr_pmax != powernv_pstate_info.max) {
>> -		throttled = true;
>> -		pr_info("CPU %d Pmax is reduced to %d\n", cpu, pmsr_pmax);
>> -		pr_info("Max allowed Pstate is capped\n");
>> +		if (chips[i].throttled)
>> +			goto next;
>> +		chips[i].throttled = true;
>> +		pr_info("CPU %d on Chip %u has Pmax reduced to %d\n", cpu,
>> +			chips[i].id, pmsr_pmax);
>> +	} else if (chips[i].throttled) {
>> +		chips[i].throttled = false;
> 
> Is this check on pmax sufficient to indicate that the chip is unthrottled ?

Unthrottling due to Pmax uncapping here is specific to a chip. So it is
sufficient to decide throttling/unthrottling when OCC is active for that chip.

> 
>> +		pr_info("CPU %d on Chip %u has Pmax restored to %d\n", cpu,
>> +			chips[i].id, pmsr_pmax);
>>  	}
>>
>>  	/*
>>  	 * Check for Psafe by reading LocalPstate
>>  	 * or check if Psafe_mode_active is set in PMSR.
>>  	 */
>> +next:
>>  	pmsr_lp = (s8)PMSR_LP(pmsr);
>>  	if ((pmsr_lp < powernv_pstate_info.min) ||
>>  				(pmsr & PMSR_PSAFE_ENABLE)) {
>> @@ -414,6 +433,33 @@ static struct cpufreq_driver powernv_cpufreq_driver = {
>>  	.attr		= powernv_cpu_freq_attr,
> 
> What about the situation where although occ is active, this particular
> chip has been throttled and we end up repeatedly reporting "pstate set
> to safe" and "frequency control disabled from OS" ? Should we not have a
> check on (chips[i].throttled) before reporting an anomaly for these two
> scenarios as well just like you have for pmsr_pmax ?

We will not have "Psafe" and "frequency control disabled" repeatedly printed
because of global variable 'throttled', which is set to true on passing any of
these two conditions.

It is quite unlikely behavior to have only one chip in "Psafe" or "frequency
control disabled" state. These two conditions are most likely to happen during
an OCC reset cycle which will occur across all chips.

Thanks and Regards,
Shilpa

  reply	other threads:[~2015-05-05  6:06 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-04  8:54 [PATCH v3 0/6] powernv: cpufreq: Report frequency throttle by OCC Shilpasri G Bhat
2015-05-04  8:54 ` [PATCH v3 1/6] cpufreq: poowernv: Handle throttling due to Pmax capping at chip level Shilpasri G Bhat
2015-05-05  3:51   ` Preeti U Murthy
2015-05-05  6:06     ` Shilpasri G Bhat [this message]
2015-05-05  8:38       ` Preeti U Murthy
2015-05-07 10:35         ` Shilpasri G Bhat
2015-05-07 12:15           ` Preeti U Murthy
2015-05-04  8:54 ` [PATCH v3 2/6] powerpc/powernv: Add definition of OPAL_MSG_OCC message type Shilpasri G Bhat
2015-05-04  8:54 ` [PATCH v3 3/6] cpufreq: powernv: Register for OCC related opal_message notification Shilpasri G Bhat
2015-05-05  3:42   ` Preeti U Murthy
2015-05-04  8:54 ` [PATCH v3 4/6] cpufreq: powernv: Call throttle_check() on receiving OCC_THROTTLE Shilpasri G Bhat
2015-05-05  4:00   ` Preeti U Murthy
2015-05-05  6:33     ` Shilpasri G Bhat
2015-05-05  8:41       ` Preeti U Murthy
2015-05-07 12:19         ` Preeti U Murthy
2015-05-07 20:59           ` Rafael J. Wysocki
2015-05-08  3:46             ` Preeti U Murthy
2015-05-08 14:11               ` Rafael J. Wysocki
2015-05-04  8:54 ` [PATCH v3 5/6] cpufreq: powernv: Report Psafe only if PMSR.psafe_mode_active bit is set Shilpasri G Bhat
2015-05-05  3:46   ` Preeti U Murthy
2015-05-04  8:54 ` [PATCH v3 6/6] cpufreq: powernv: Restore cpu frequency to policy->cur on unthrottling Shilpasri G Bhat
2015-05-05  9:39   ` Preeti U Murthy
2015-05-08  5:12 ` [PATCH v3 0/6] powernv: cpufreq: Report frequency throttle by OCC Viresh Kumar

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=55485DE9.4070609@linux.vnet.ibm.com \
    --to=shilpa.bhat@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=preeti@linux.vnet.ibm.com \
    --cc=rjw@rjwysocki.net \
    --cc=viresh.kumar@linaro.org \
    /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;
as well as URLs for NNTP newsgroup(s).