diff --git a/src/procfs.rs b/src/procfs.rs index 1147bca..541e7a4 100644 --- a/src/procfs.rs +++ b/src/procfs.rs @@ -49,6 +49,7 @@ pub fn get_memtotal_kib(fs: &dyn procfsapi::ProcfsAPI) -> Result pub fn get_cpu_info(fs: &dyn procfsapi::ProcfsAPI) -> Result<(String, i32, i32, i32), String> { let mut physids = HashMap::::new(); + let mut processors = HashSet::::new(); let mut cores_per_socket = 0i32; let mut siblings = 0i32; let cpuinfo = fs.read_to_string("cpuinfo")?; @@ -58,8 +59,12 @@ pub fn get_cpu_info(fs: &dyn procfsapi::ProcfsAPI) -> Result<(String, i32, i32, let mut model_major = 0i32; let mut model_minor = 0i32; for l in cpuinfo.split('\n') { + // "processor" could be either kind of CPU, so don't commit + if l.starts_with("processor") { + processors.insert(i32_field(l)?); + } // model name, physical id, siblings, cpu cores are x86_64 - if l.starts_with("model name") { + else if l.starts_with("model name") { amd64 = true; model_name = text_field(l)?; } else if l.starts_with("physical id") { @@ -72,11 +77,8 @@ pub fn get_cpu_info(fs: &dyn procfsapi::ProcfsAPI) -> Result<(String, i32, i32, amd64 = true; cores_per_socket = i32_field(l)?; } - // processor, CPU architecture, CPU variant are aarch64 - else if l.starts_with("processor") { - aarch64 = true; - physids.insert(i32_field(l)?, true); - } else if l.starts_with("CPU architecture") { + // CPU architecture, CPU variant are aarch64 + else if l.starts_with("CPU architecture") { aarch64 = true; model_major = i32_field(l)?; } else if l.starts_with("CPU variant") { @@ -95,7 +97,7 @@ pub fn get_cpu_info(fs: &dyn procfsapi::ProcfsAPI) -> Result<(String, i32, i32, Ok(( format!("ARMv{model_major}.{model_minor}"), 1, - physids.len() as i32, + processors.len() as i32, 1, )) } else {