aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBurt P <pburt0@gmail.com>2017-05-24 14:08:06 -0500
committerLeandro A. F. Pereira <leandro@hardinfo.org>2017-06-02 12:50:14 -0700
commit8ea596e450353e948235b92de786c7c42be53913 (patch)
tree5b5c91a07a5329b2e25ad7a07a7af7b8bd6ca998
parent4a755a36f0e8410ce9fe5ed7f9640b3923f9f12e (diff)
arm: bug fix in mode detection
Changed code arrangement to fix a problem where only the last processor's mode was correct. This also separates the /proc/cpuinfo data from the other data in a logical way. Signed-off-by: Burt P <pburt0@gmail.com>
-rw-r--r--modules/devices/arm/processor.c45
1 files changed, 26 insertions, 19 deletions
diff --git a/modules/devices/arm/processor.c b/modules/devices/arm/processor.c
index 512a6c58..444b3f39 100644
--- a/modules/devices/arm/processor.c
+++ b/modules/devices/arm/processor.c
@@ -143,6 +143,7 @@ processor_scan(void)
FILE *cpuinfo;
gchar buffer[128];
gchar *tmpfreq_str = NULL;
+ GSList *pi = NULL;
cpuinfo = fopen("/proc/cpuinfo", "r");
if (!cpuinfo)
@@ -160,15 +161,6 @@ processor_scan(void)
//get_int("processor", processor->id);
processor->id = processor_number;
processor_number++;
-
- /* freq */
- processor->cpukhz_cur = get_cpu_int("cpufreq/scaling_cur_freq", processor->id);
- processor->cpukhz_min = get_cpu_int("cpufreq/scaling_min_freq", processor->id);
- processor->cpukhz_max = get_cpu_int("cpufreq/scaling_max_freq", processor->id);
- if (processor->cpukhz_max)
- processor->cpu_mhz = processor->cpukhz_max / 1000;
- else
- processor->cpu_mhz = 0.0f;
}
if (processor && tmp[0] && tmp[1]) {
@@ -186,16 +178,6 @@ processor_scan(void)
get_str("CPU variant", processor->cpu_variant);
get_str("CPU part", processor->cpu_part);
get_str("CPU revision", processor->cpu_revision);
-
- processor->mode = ARM_A32;
- if ( processor_has_flag(processor->flags, "pmull")
- || processor_has_flag(processor->flags, "crc32") ) {
-#ifdef __aarch64__
- processor->mode = ARM_A64;
-#else
- processor->mode = ARM_A32_ON_A64;
-#endif
- }
}
g_strfreev(tmp);
}
@@ -205,6 +187,31 @@ processor_scan(void)
fclose(cpuinfo);
+ /* data not from /proc/cpuinfo */
+ for (pi = procs; pi; pi = pi->next) {
+ processor = (Processor *) pi->data;
+
+ /* freq */
+ processor->cpukhz_cur = get_cpu_int("cpufreq/scaling_cur_freq", processor->id);
+ processor->cpukhz_min = get_cpu_int("cpufreq/scaling_min_freq", processor->id);
+ processor->cpukhz_max = get_cpu_int("cpufreq/scaling_max_freq", processor->id);
+ if (processor->cpukhz_max)
+ processor->cpu_mhz = processor->cpukhz_max / 1000;
+ else
+ processor->cpu_mhz = 0.0f;
+
+ /* mode */
+ processor->mode = ARM_A32;
+ if ( processor_has_flag(processor->flags, "pmull")
+ || processor_has_flag(processor->flags, "crc32") ) {
+#ifdef __aarch64__
+ processor->mode = ARM_A64;
+#else
+ processor->mode = ARM_A32_ON_A64;
+#endif
+ }
+ }
+
return procs;
}