[PATCH 04/11] cpu/cpufreq: Add test for duplicate entries in cpufreq tables
Jeremy Kerr
jk at ozlabs.org
Thu May 21 09:34:27 UTC 2015
Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
---
src/cpu/cpufreq/cpufreq.c | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/src/cpu/cpufreq/cpufreq.c b/src/cpu/cpufreq/cpufreq.c
index 517c750..4adb58c 100644
--- a/src/cpu/cpufreq/cpufreq.c
+++ b/src/cpu/cpufreq/cpufreq.c
@@ -671,6 +671,41 @@ static int cpufreq_test_consistency(fwts_framework *fw)
return FWTS_OK;
}
+static int cpufreq_test_duplicates(fwts_framework *fw)
+{
+ struct cpu *cpu0 = &cpus[0];
+ bool dup = false;
+ uint64_t freq;
+ int i;
+
+ /* the frequency list is sorted, so we can do this in one pass */
+ for (i = 0; i < cpu0->n_freqs - 1; i++) {
+
+ freq = cpu0->freqs[i].Hz;
+
+ if (cpu0->freqs[i+1].Hz != freq)
+ continue;
+
+ dup = true;
+ fwts_log_error(fw, "duplicate cpu frequency %" PRIx64,
+ freq);
+
+ /* don't report further duplicates for this entry */
+ for (i++; i < cpu0->n_freqs - 1; i++)
+ if (cpu0->freqs[i].Hz != freq)
+ break;
+ }
+
+ if (dup) {
+ fwts_failed(fw, LOG_LEVEL_MEDIUM, "CPUFreqDuplicate",
+ "duplicates found in CPU frequency table");
+ } else {
+ fwts_passed(fw, "No duplicates in CPU frequency table");
+ }
+
+ return FWTS_OK;
+}
+
static int cpu_freq_compare(const void *v1, const void *v2)
{
const fwts_cpu_freq *f1 = v1;
@@ -761,6 +796,7 @@ static int cpufreq_deinit(fwts_framework *fw)
static fwts_framework_minor_test cpufreq_tests[] = {
{ cpufreq_test_consistency, "CPU frequency table consistency" },
+ { cpufreq_test_duplicates, "CPU frequency table duplicates" },
#ifdef FWTS_ARCH_INTEL
{ cpufreq_test1, "CPU P-State tests." },
#else
More information about the fwts-devel
mailing list