[PATCH] cpufreq: Add support to read boost frequencies
Shilpasri G Bhat
shilpa.bhat at linux.vnet.ibm.com
Thu Apr 5 05:43:07 UTC 2018
Hi,
On 04/04/2018 10:24 PM, Alex Hung wrote:
> On 2018-04-04 01:55 AM, Shilpasri G Bhat wrote:
>> POWER8+ and POWER9 have boost frequencies given by the cpufreq sysfs
>> file 'scaling_boost_frequencies'. These frequencies are greater than
>> the 'scaling_available_frequencies'. So re-compute the max frequency
>> when boost frequencies are available and add the boost frequencies to
>> the list of supported frequencies.
>>
>> Signed-off-by: Shilpasri G Bhat <shilpa.bhat at linux.vnet.ibm.com>
>> ---
>> src/cpu/cpufreq/cpufreq.c | 24 +++++++++++++++++++++---
>> src/cpu/maxfreq/maxfreq.c | 14 +++++++++++++-
>> 2 files changed, 34 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/cpu/cpufreq/cpufreq.c b/src/cpu/cpufreq/cpufreq.c
>> index 8bee1dd..6cd7014 100644
>> --- a/src/cpu/cpufreq/cpufreq.c
>> +++ b/src/cpu/cpufreq/cpufreq.c
>> @@ -749,7 +749,7 @@ static int parse_cpu_info(fwts_framework *fw,
>> {
>> char *end, path[PATH_MAX+1], *str, *tmp;
>> struct stat statbuf;
>> - int rc;
>> + int rc, i = 0;
>> strcpy(cpu->sysfs_path, dir->d_name);
>> cpu->idx = strtoul(cpu->sysfs_path + strlen("cpu"), &end, 10);
>> @@ -783,8 +783,6 @@ static int parse_cpu_info(fwts_framework *fw,
>> /* cpu driver like intel_pstate has no scaling_available_frequencies */
>> if (str != NULL) {
>> - int i = 0;
>> -
>> for (tmp = str; ; tmp = NULL) {
>> char *tok = strtok(tmp, " ");
>> if (!tok)
>> @@ -800,6 +798,26 @@ static int parse_cpu_info(fwts_framework *fw,
>> free(str);
>> + /* parse boost frequencies */
>> + cpu_mkpath(path, sizeof(path), cpu, "scaling_boost_frequencies");
>> + str = fwts_get(path);
>> +
>> + if (str) {
>> + for (tmp = str; ; tmp = NULL) {
>> + char *tok = strtok(tmp, " ");
>> +
>> + if (!tok)
>> + break;
>> + if (!isdigit(tok[0]))
>> + continue;
>> + cpu->freqs[i++].Hz = strtoull(tok, NULL, 10);
>> + }
>> + cpu->n_freqs = i;
>> + qsort(cpu->freqs, cpu->n_freqs, sizeof(cpu->freqs[0]),
>> + cpu_freq_compare);
>> + }
>> +
>> + free(str);
>> return FWTS_OK;
>> }
>> diff --git a/src/cpu/maxfreq/maxfreq.c b/src/cpu/maxfreq/maxfreq.c
>> index 4aab257..ff913a2 100644
>> --- a/src/cpu/maxfreq/maxfreq.c
>> +++ b/src/cpu/maxfreq/maxfreq.c
>> @@ -131,7 +131,7 @@ static int maxfreq_test1(fwts_framework *fw)
>> do {
>> char path[PATH_MAX];
>> char *data;
>> - double maxfreq, maxfreq_ghz, cpufreq_ghz;
>> + double maxfreq, maxfreq_ghz, cpufreq_ghz, boost_maxfreq;
>> int cpunum;
>> entry = readdir(dir);
>> @@ -148,6 +148,18 @@ static int maxfreq_test1(fwts_framework *fw)
>> maxfreq = maxfreq_max(data);
>> free(data);
>> + snprintf(path, sizeof(path),
>> + CPU_FREQ_PATH "/%s/cpufreq/scaling_boost_frequencies",
>> + entry->d_name);
>> + data = fwts_get(path);
>> + if (data) {
>> + boost_maxfreq = maxfreq_max(data);
>> + free(data);
>> + }
>> +
>> + if (maxfreq > boost_maxfreq)
>> + max_freq = boost_max_freq;
>
> Compile errors because max_freq & boot_max_freq are declared. Should be maxfreq
> & boost_maxfreq instead?
>
> After boost_maxfreq is used, compiler also warns "error: ‘boost_maxfreq’ may be
> used uninitialized in this function".
Really sorry for the compiler errors.
maxfreq.c is compiled in FWTS_ARCH_INTEL and these changes may not be relevant
for x86.
Will send a V2 with cpufreq.c specific changes.
(I did not compile this in x86 so I did not hit this error)
Thanks and Regards,
Shilpa
>
>
>> +
>> cpunum = atoi(entry->d_name + 3);
>> if (maxfreq < 0.0) {
>> fwts_failed(fw, LOG_LEVEL_MEDIUM,
>>
>
>
More information about the fwts-devel
mailing list