Struct devices::vfio::VfioContainerManager
source · pub struct VfioContainerManager {
no_iommu_container: Option<Arc<Mutex<VfioContainer>>>,
iommu_containers: Vec<Arc<Mutex<VfioContainer>>>,
coiommu_container: Option<Arc<Mutex<VfioContainer>>>,
pkvm_iommu_container: Option<Arc<Mutex<VfioContainer>>>,
}
Expand description
A helper struct for managing VFIO containers
Fields§
§no_iommu_container: Option<Arc<Mutex<VfioContainer>>>
One VFIO container shared by all VFIO devices that don’t attach to any IOMMU device.
iommu_containers: Vec<Arc<Mutex<VfioContainer>>>
For IOMMU enabled devices, all VFIO groups that share the same IOVA space are managed by one VFIO container.
coiommu_container: Option<Arc<Mutex<VfioContainer>>>
One VFIO container shared by all VFIO devices that attach to the CoIOMMU device.
pkvm_iommu_container: Option<Arc<Mutex<VfioContainer>>>
One VFIO container shared by all VFIO devices that attach to pKVM.
Implementations§
source§impl VfioContainerManager
impl VfioContainerManager
pub fn new() -> Self
sourcepub fn get_container<P: AsRef<Path>>(
&mut self,
iommu_type: IommuDevType,
sysfspath: Option<P>,
) -> Result<Arc<Mutex<VfioContainer>>, VfioError>
pub fn get_container<P: AsRef<Path>>( &mut self, iommu_type: IommuDevType, sysfspath: Option<P>, ) -> Result<Arc<Mutex<VfioContainer>>, VfioError>
The single place to create a VFIO container for a PCI endpoint.
The policy to determine whether an individual or a shared VFIO container will be created for this device is governed by the physical PCI topology, and the argument iommu_type.
§Arguments
sysfspath
- the path to the PCI device, e.g. /sys/bus/pci/devices/0000:02:00.0iommu_type
- which type of IOMMU is enabled on this device
Trait Implementations§
source§impl Default for VfioContainerManager
impl Default for VfioContainerManager
source§fn default() -> VfioContainerManager
fn default() -> VfioContainerManager
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for VfioContainerManager
impl RefUnwindSafe for VfioContainerManager
impl Send for VfioContainerManager
impl Sync for VfioContainerManager
impl Unpin for VfioContainerManager
impl UnwindSafe for VfioContainerManager
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.