hypervisor: allow downcasting to KVM / MSHV device fd

Signed-off-by: Wei Liu <liuwe@microsoft.com>
This commit is contained in:
Wei Liu 2022-07-09 11:09:33 +00:00 committed by Rob Bradford
parent 28683b8471
commit ddad5f3510
3 changed files with 17 additions and 0 deletions

View File

@ -10,6 +10,7 @@
//
use crate::DeviceAttr;
use std::any::Any;
use std::os::unix::io::AsRawFd;
use thiserror::Error;
@ -44,4 +45,6 @@ pub trait Device: Send + Sync + AsRawFd {
fn set_device_attr(&self, attr: &DeviceAttr) -> Result<()>;
/// Get device attribute.
fn get_device_attr(&self, attr: &mut DeviceAttr) -> Result<()>;
/// Provide a way to downcast to the device fd.
fn as_any(&self) -> &dyn Any;
}

View File

@ -26,6 +26,7 @@ use crate::vm::{self, InterruptSourceConfig, VmOps};
use crate::{arm64_core_reg_id, offset__of};
use kvm_ioctls::{NoDatamatch, VcpuFd, VmFd};
use serde::{Deserialize, Serialize};
use std::any::Any;
use std::collections::HashMap;
#[cfg(target_arch = "aarch64")]
use std::convert::TryInto;
@ -2004,6 +2005,12 @@ impl device::Device for KvmDevice {
.get_device_attr(attr)
.map_err(|e| device::HypervisorDeviceError::GetDeviceAttribute(e.into()))
}
///
/// Cast to the underlying KVM device fd
///
fn as_any(&self) -> &dyn Any {
self
}
}
impl AsRawFd for KvmDevice {

View File

@ -16,6 +16,7 @@ pub use mshv_bindings::*;
pub use mshv_ioctls::IoEventAddress;
use mshv_ioctls::{set_registers_64, Mshv, NoDatamatch, VcpuFd, VmFd};
use serde::{Deserialize, Serialize};
use std::any::Any;
use std::collections::HashMap;
use std::sync::{Arc, RwLock};
use vm::DataMatch;
@ -687,6 +688,12 @@ impl device::Device for MshvDevice {
.get_device_attr(attr)
.map_err(|e| device::HypervisorDeviceError::GetDeviceAttribute(e.into()))
}
///
/// Cast to the underlying MSHV device fd
///
fn as_any(&self) -> &dyn Any {
self
}
}
impl AsRawFd for MshvDevice {