diff options
author | Burt P <pburt0@gmail.com> | 2017-05-24 14:08:06 -0500 |
---|---|---|
committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2017-06-02 12:50:14 -0700 |
commit | 8ea596e450353e948235b92de786c7c42be53913 (patch) | |
tree | 5b5c91a07a5329b2e25ad7a07a7af7b8bd6ca998 /modules/devices/arm | |
parent | 4a755a36f0e8410ce9fe5ed7f9640b3923f9f12e (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>
Diffstat (limited to 'modules/devices/arm')
-rw-r--r-- | modules/devices/arm/processor.c | 45 |
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; } |