Fix getting cache info on aarch64

This commit is contained in:
Speedy_Lex 2025-04-11 19:54:52 +02:00 committed by BitSyndicate
parent 676a42f923
commit 33abe562fd
Signed by: bitsyndicate
GPG key ID: 443E4198D6BBA6DE

View file

@ -382,38 +382,45 @@ impl CPU {
let logical_cores = cpu_opt.map(|_| sys.cpus().len() as u8);
let physical_cores = System::physical_core_count().map(|pc| pc as u8);
let cpuid = CpuId::new();
let mut l1_cache = None;
let mut l2_cache = None;
let mut l3_cache = None;
if let Some(iter) = cpuid.get_cache_parameters() {
for cache in iter {
match cache.level() {
1 => {
let size = cache.physical_line_partitions()
* cache.coherency_line_size()
* cache.associativity();
if size > 0 {
l1_cache = Some(Memory::from_bytes(size.try_into().unwrap()));
#[cfg(any(
all(target_arch = "x86", not(target_env = "sgx"), target_feature = "sse"),
all(target_arch = "x86_64", not(target_env = "sgx"))
))]
{
let cpuid = CpuId::new();
if let Some(iter) = cpuid.get_cache_parameters() {
for cache in iter {
match cache.level() {
1 => {
let size = cache.physical_line_partitions()
* cache.coherency_line_size()
* cache.associativity();
if size > 0 {
l1_cache = Some(Memory::from_bytes(size.try_into().unwrap()));
}
}
}
2 => {
let size = cache.physical_line_partitions()
* cache.coherency_line_size()
* cache.associativity();
if size > 0 {
l2_cache = Some(Memory::from_bytes(size.try_into().unwrap()));
2 => {
let size = cache.physical_line_partitions()
* cache.coherency_line_size()
* cache.associativity();
if size > 0 {
l2_cache = Some(Memory::from_bytes(size.try_into().unwrap()));
}
}
}
3 => {
let size = (cache.physical_line_partitions() as u64)
* (cache.coherency_line_size() as u64)
* (cache.associativity() as u64);
if size > 0 {
l3_cache = Some(Memory::from_bytes(size));
3 => {
let size = (cache.physical_line_partitions() as u64)
* (cache.coherency_line_size() as u64)
* (cache.associativity() as u64);
if size > 0 {
l3_cache = Some(Memory::from_bytes(size));
}
}
_ => {}
}
_ => {}
}
}
}