Merge pull request #177 from enh/cpuinfo-arm

Fix ARM /proc/cpuinfo parsing.
This commit is contained in:
Dominic Hamon 2016-02-13 13:05:09 -08:00
commit cff1541b0c
3 changed files with 12 additions and 8 deletions

View file

@ -37,7 +37,7 @@ bool ConsoleReporter::ReportContext(const Context& context) {
if (context.cpu_scaling_enabled) { if (context.cpu_scaling_enabled) {
std::cerr << "***WARNING*** CPU scaling is enabled, the benchmark " std::cerr << "***WARNING*** CPU scaling is enabled, the benchmark "
"real time measurements may be noisy and will incure extra " "real time measurements may be noisy and will incur extra "
"overhead.\n"; "overhead.\n";
} }

View file

@ -34,7 +34,7 @@ bool CSVReporter::ReportContext(const Context& context) {
if (context.cpu_scaling_enabled) { if (context.cpu_scaling_enabled) {
std::cerr << "***WARNING*** CPU scaling is enabled, the benchmark " std::cerr << "***WARNING*** CPU scaling is enabled, the benchmark "
"real time measurements may be noisy and will incure extra " "real time measurements may be noisy and will incur extra "
"overhead.\n"; "overhead.\n";
} }

View file

@ -174,12 +174,16 @@ void InitializeSystemInfo() {
if (freqstr[1] != '\0' && *err == '\0' && bogo_clock > 0) if (freqstr[1] != '\0' && *err == '\0' && bogo_clock > 0)
saw_bogo = true; saw_bogo = true;
} }
} else if (strncasecmp(line, "processor", sizeof("processor") - 1) == 0) { } else if (strncmp(line, "processor", sizeof("processor") - 1) == 0) {
// The above comparison is case-sensitive because ARM kernels often
// include a "Processor" line that tells you about the CPU, distinct
// from the usual "processor" lines that give you CPU ids. No current
// Linux architecture is using "Processor" for CPU ids.
num_cpus++; // count up every time we see an "processor :" entry num_cpus++; // count up every time we see an "processor :" entry
const char* freqstr = strchr(line, ':'); const char* id_str = strchr(line, ':');
if (freqstr) { if (id_str) {
const long cpu_id = strtol(freqstr + 1, &err, 10); const long cpu_id = strtol(id_str + 1, &err, 10);
if (freqstr[1] != '\0' && *err == '\0' && max_cpu_id < cpu_id) if (id_str[1] != '\0' && *err == '\0' && max_cpu_id < cpu_id)
max_cpu_id = cpu_id; max_cpu_id = cpu_id;
} }
} }
@ -201,7 +205,7 @@ void InitializeSystemInfo() {
} else { } else {
if ((max_cpu_id + 1) != num_cpus) { if ((max_cpu_id + 1) != num_cpus) {
fprintf(stderr, fprintf(stderr,
"CPU ID assignments in /proc/cpuinfo seems messed up." "CPU ID assignments in /proc/cpuinfo seem messed up."
" This is usually caused by a bad BIOS.\n"); " This is usually caused by a bad BIOS.\n");
} }
cpuinfo_num_cpus = num_cpus; cpuinfo_num_cpus = num_cpus;