[PATCH] cpufreq: skip frequency claimed maximum test with intel_pstate

Alex Hung alex.hung at canonical.com
Fri Apr 15 07:25:18 UTC 2016


On SandyBridge+, intel_pstate is used and it will not provide
scaling_available_frequencies[1]. As a result, comparison fails
with following errors:

"cpu 0 has claimed frequency of 3200000, higher than max freq of 0".

[1] https://bugzilla.kernel.org/show_bug.cgi?id=57141

Signed-off-by: Alex Hung <alex.hung at canonical.com>
---
 src/cpu/cpufreq/cpufreq.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/src/cpu/cpufreq/cpufreq.c b/src/cpu/cpufreq/cpufreq.c
index a1cb78a..8ab5292 100644
--- a/src/cpu/cpufreq/cpufreq.c
+++ b/src/cpu/cpufreq/cpufreq.c
@@ -712,6 +712,9 @@ static int cpufreq_test_claimed_max(fwts_framework *fw)
 		if (!max)
 			continue;
 
+		if (!cpu->n_freqs)
+			continue;
+
 		present = true;
 
 		if (max > cpu->freqs[cpu->n_freqs-1].Hz) {
@@ -778,21 +781,23 @@ static int parse_cpu_info(fwts_framework *fw,
 	cpu_mkpath(path, sizeof(path), cpu, "scaling_available_frequencies");
 	str = fwts_get(path);
 
-	for (tmp = str, i = 0; ; tmp = NULL) {
-		char *tok = strtok(tmp, " ");
-		if (!tok)
-			break;
-		if (!isdigit(tok[0]))
-			continue;
-		cpu->freqs[i++].Hz = strtoull(tok, NULL, 10);
+	/* cpu driver like intel_pstate has no scaling_available_frequencies */
+	if (str != NULL) {
+		for (tmp = str, i = 0; ; 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);
 
-	cpu->n_freqs = i;
-	qsort(cpu->freqs, cpu->n_freqs, sizeof(cpu->freqs[0]),
-			cpu_freq_compare);
-
 	return FWTS_OK;
 }
 
-- 
2.5.0




More information about the fwts-devel mailing list