hypervisor: allow downcasting to hypervisor VM types

Signed-off-by: Wei Liu <liuwe@microsoft.com>
This commit is contained in:
Wei Liu 2022-07-20 12:52:06 +00:00 committed by Liu Wei
parent f84ddedb1a
commit b5270e0b45
3 changed files with 12 additions and 1 deletions

View File

@ -837,6 +837,10 @@ impl vm::Vm for KvmVm {
) )
.map_err(vm::HypervisorVmError::InitMemRegionTdx) .map_err(vm::HypervisorVmError::InitMemRegionTdx)
} }
/// Downcast to the underlying KvmVm type
fn as_any(&self) -> &dyn Any {
self
}
} }
#[cfg(feature = "tdx")] #[cfg(feature = "tdx")]

View File

@ -1212,4 +1212,8 @@ impl vm::Vm for MshvVm {
fn set_clock(&self, _data: &ClockData) -> vm::Result<()> { fn set_clock(&self, _data: &ClockData) -> vm::Result<()> {
Ok(()) Ok(())
} }
/// Downcast to the underlying MshvVm type
fn as_any(&self) -> &dyn Any {
self
}
} }

View File

@ -23,6 +23,7 @@ use crate::UserMemoryRegion;
use crate::{IoEventAddress, IrqRoutingEntry}; use crate::{IoEventAddress, IrqRoutingEntry};
#[cfg(feature = "kvm")] #[cfg(feature = "kvm")]
use kvm_ioctls::Cap; use kvm_ioctls::Cap;
use std::any::Any;
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
use std::fs::File; use std::fs::File;
use std::sync::Arc; use std::sync::Arc;
@ -260,7 +261,7 @@ pub enum InterruptSourceConfig {
/// ///
/// This crate provides a hypervisor-agnostic interfaces for Vm /// This crate provides a hypervisor-agnostic interfaces for Vm
/// ///
pub trait Vm: Send + Sync { pub trait Vm: Send + Sync + Any {
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
/// Sets the address of the one-page region in the VM's address space. /// Sets the address of the one-page region in the VM's address space.
fn set_identity_map_address(&self, address: u64) -> Result<()>; fn set_identity_map_address(&self, address: u64) -> Result<()>;
@ -355,6 +356,8 @@ pub trait Vm: Send + Sync {
size: u64, size: u64,
measure: bool, measure: bool,
) -> Result<()>; ) -> Result<()>;
/// Downcast to the underlying hypervisor VM type
fn as_any(&self) -> &dyn Any;
} }
pub trait VmOps: Send + Sync { pub trait VmOps: Send + Sync {