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 | |
| 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')
| -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;  } | 
