pvmfw: DRY vcpufreq error path & prevent panic am: 8ba89801e0
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Virtualization/+/2963846
Change-Id: Ib21d925caed37e6d63a4523f0116dd80b65c176a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/pvmfw/src/fdt.rs b/pvmfw/src/fdt.rs
index dfc9ad1..65b46c0 100644
--- a/pvmfw/src/fdt.rs
+++ b/pvmfw/src/fdt.rs
@@ -63,7 +63,9 @@
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Self::InvalidCpuCount(num_cpus) => write!(f, "Invalid CPU count: {num_cpus}"),
- Self::InvalidVcpufreq(addr, size) => write!(f, "Invalid vcpufreq regs: {addr}, {size}"),
+ Self::InvalidVcpufreq(addr, size) => {
+ write!(f, "Invalid vcpufreq region: ({addr:#x}, {size:#x})")
+ }
}
}
}
@@ -240,8 +242,9 @@
let mut regs = node.reg()?.ok_or(FdtError::NotFound)?;
let reg = regs.next().ok_or(FdtError::NotFound)?;
+ let size = reg.size.ok_or(FdtError::NotFound)?;
- Ok(Some(VcpufreqInfo { addr: reg.addr, size: reg.size.unwrap() }))
+ Ok(Some(VcpufreqInfo { addr: reg.addr, size }))
}
fn validate_vcpufreq_info(
@@ -249,19 +252,15 @@
cpus: &[CpuInfo],
) -> Result<(), FdtValidationError> {
const VCPUFREQ_BASE_ADDR: u64 = 0x1040000;
- const VCPUFREQ_SIZE: u64 = 0x8;
+ const VCPUFREQ_SIZE_PER_CPU: u64 = 0x8;
let base = vcpufreq_info.addr;
let size = vcpufreq_info.size;
- if base != VCPUFREQ_BASE_ADDR {
- error!("vcpufreq base address {:#x} is not {:#x}", base, VCPUFREQ_BASE_ADDR);
+ let expected_size = VCPUFREQ_SIZE_PER_CPU * cpus.len() as u64;
+
+ if (base, size) != (VCPUFREQ_BASE_ADDR, expected_size) {
return Err(FdtValidationError::InvalidVcpufreq(base, size));
- };
- let expected_size = VCPUFREQ_SIZE * cpus.len() as u64;
- if size != expected_size {
- error!("vcpufreq reg size {:#x} is not {:#x}", size, expected_size);
- return Err(FdtValidationError::InvalidVcpufreq(base, size));
- };
+ }
Ok(())
}
@@ -288,6 +287,7 @@
while let Some(current) = next_subnode {
next_subnode = current.delete_and_next_subnode()?;
}
+
Ok(())
}