hypervisor: improve error chain

On-behalf-of: SAP philipp.schuster@sap.com
Signed-off-by: Philipp Schuster <philipp.schuster@cyberus-technology.de>
This commit is contained in:
Philipp Schuster
2026-06-02 06:37:57 +02:00
committed by Rob Bradford
parent aa898db8d7
commit b4c37def26
3 changed files with 11 additions and 5 deletions

View File

@@ -299,7 +299,7 @@ pub enum HypervisorCpuError {
/// Failed to initialize PMU /// Failed to initialize PMU
/// ///
#[error("Failed to initialize PMU")] #[error("Failed to initialize PMU")]
InitializePmu, InitializePmu(#[source] anyhow::Error),
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
/// ///
/// Error getting TSC frequency /// Error getting TSC frequency

View File

@@ -28,6 +28,8 @@ use std::sync::Mutex;
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
#[cfg(target_arch = "x86_64")]
use anyhow::Context;
use anyhow::anyhow; use anyhow::anyhow;
#[cfg(feature = "sev_snp")] #[cfg(feature = "sev_snp")]
use kvm_bindings::kvm_create_guest_memfd; use kvm_bindings::kvm_create_guest_memfd;
@@ -2198,7 +2200,8 @@ impl cpu::Vcpu for KvmVcpu {
let cpuid: Vec<kvm_bindings::kvm_cpuid_entry2> = let cpuid: Vec<kvm_bindings::kvm_cpuid_entry2> =
cpuid.iter().map(|e| (*e).into()).collect(); cpuid.iter().map(|e| (*e).into()).collect();
let kvm_cpuid = <CpuId>::from_entries(&cpuid) let kvm_cpuid = <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 self.fd
.set_cpuid2(&kvm_cpuid) .set_cpuid2(&kvm_cpuid)
@@ -3338,10 +3341,10 @@ impl cpu::Vcpu for KvmVcpu {
}; };
self.fd self.fd
.set_device_attr(&cpu_attr_irq) .set_device_attr(&cpu_attr_irq)
.map_err(|_| cpu::HypervisorCpuError::InitializePmu)?; .map_err(|e| cpu::HypervisorCpuError::InitializePmu(e.into()))?;
self.fd self.fd
.set_device_attr(&cpu_attr) .set_device_attr(&cpu_attr)
.map_err(|_| cpu::HypervisorCpuError::InitializePmu) .map_err(|e| cpu::HypervisorCpuError::InitializePmu(e.into()))
} }
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]

View File

@@ -9,6 +9,8 @@ use std::collections::HashMap;
use std::num::NonZeroUsize; use std::num::NonZeroUsize;
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
#[cfg(target_arch = "x86_64")]
use anyhow::Context;
use anyhow::anyhow; use anyhow::anyhow;
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
use arc_swap::ArcSwap; use arc_swap::ArcSwap;
@@ -1427,7 +1429,8 @@ impl cpu::Vcpu for MshvVcpu {
fn set_cpuid2(&self, cpuid: &[CpuIdEntry]) -> cpu::Result<()> { fn set_cpuid2(&self, cpuid: &[CpuIdEntry]) -> cpu::Result<()> {
let cpuid: Vec<mshv_bindings::hv_cpuid_entry> = cpuid.iter().map(|e| (*e).into()).collect(); let cpuid: Vec<mshv_bindings::hv_cpuid_entry> = cpuid.iter().map(|e| (*e).into()).collect();
let mshv_cpuid = <CpuId>::from_entries(&cpuid) let mshv_cpuid = <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 self.fd
.register_intercept_result_cpuid(&mshv_cpuid) .register_intercept_result_cpuid(&mshv_cpuid)