From 8ea596e450353e948235b92de786c7c42be53913 Mon Sep 17 00:00:00 2001 From: Burt P Date: Wed, 24 May 2017 14:08:06 -0500 Subject: 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 --- modules/devices/arm/processor.c | 45 ++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 19 deletions(-) (limited to 'modules/devices') 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; } -- cgit v1.2.3