diff --git a/hypervisor/src/cpu.rs b/hypervisor/src/cpu.rs index fa0984c56..710780e82 100644 --- a/hypervisor/src/cpu.rs +++ b/hypervisor/src/cpu.rs @@ -299,7 +299,7 @@ pub enum HypervisorCpuError { /// Failed to initialize PMU /// #[error("Failed to initialize PMU")] - InitializePmu, + InitializePmu(#[source] anyhow::Error), #[cfg(target_arch = "x86_64")] /// /// Error getting TSC frequency diff --git a/hypervisor/src/kvm/mod.rs b/hypervisor/src/kvm/mod.rs index 466c97625..11540a50d 100644 --- a/hypervisor/src/kvm/mod.rs +++ b/hypervisor/src/kvm/mod.rs @@ -28,6 +28,8 @@ use std::sync::Mutex; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, RwLock}; +#[cfg(target_arch = "x86_64")] +use anyhow::Context; use anyhow::anyhow; #[cfg(feature = "sev_snp")] use kvm_bindings::kvm_create_guest_memfd; @@ -2198,7 +2200,8 @@ impl cpu::Vcpu for KvmVcpu { let cpuid: Vec = cpuid.iter().map(|e| (*e).into()).collect(); let kvm_cpuid = ::from_entries(&cpuid) - .map_err(|_| cpu::HypervisorCpuError::SetCpuid(anyhow!("failed to create CpuId")))?; + .context("failed to create CpuId") + .map_err(cpu::HypervisorCpuError::SetCpuid)?; self.fd .set_cpuid2(&kvm_cpuid) @@ -3338,10 +3341,10 @@ impl cpu::Vcpu for KvmVcpu { }; self.fd .set_device_attr(&cpu_attr_irq) - .map_err(|_| cpu::HypervisorCpuError::InitializePmu)?; + .map_err(|e| cpu::HypervisorCpuError::InitializePmu(e.into()))?; self.fd .set_device_attr(&cpu_attr) - .map_err(|_| cpu::HypervisorCpuError::InitializePmu) + .map_err(|e| cpu::HypervisorCpuError::InitializePmu(e.into())) } #[cfg(target_arch = "x86_64")] diff --git a/hypervisor/src/mshv/mod.rs b/hypervisor/src/mshv/mod.rs index 59151b535..c7725b4c8 100644 --- a/hypervisor/src/mshv/mod.rs +++ b/hypervisor/src/mshv/mod.rs @@ -9,6 +9,8 @@ use std::collections::HashMap; use std::num::NonZeroUsize; use std::sync::{Arc, RwLock}; +#[cfg(target_arch = "x86_64")] +use anyhow::Context; use anyhow::anyhow; #[cfg(target_arch = "x86_64")] use arc_swap::ArcSwap; @@ -1427,7 +1429,8 @@ impl cpu::Vcpu for MshvVcpu { fn set_cpuid2(&self, cpuid: &[CpuIdEntry]) -> cpu::Result<()> { let cpuid: Vec = cpuid.iter().map(|e| (*e).into()).collect(); let mshv_cpuid = ::from_entries(&cpuid) - .map_err(|_| cpu::HypervisorCpuError::SetCpuid(anyhow!("failed to create CpuId")))?; + .context("failed to create CpuId") + .map_err(cpu::HypervisorCpuError::SetCpuid)?; self.fd .register_intercept_result_cpuid(&mshv_cpuid)