MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / create_vfio_ops

Method create_vfio_ops

vmm/src/device_manager.rs:3777–3812  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

3775 }
3776
3777 fn create_vfio_ops(&self) -> DeviceManagerResult<Arc<dyn VfioOps>> {
3778 let passthrough_device = self
3779 .passthrough_device
3780 .as_ref()
3781 .ok_or(DeviceManagerError::NoDevicePassthroughSupport)?;
3782
3783 let dup = passthrough_device
3784 .try_clone()
3785 .map_err(DeviceManagerError::VfioCreate)?;
3786
3787 let iommufd = self
3788 .config
3789 .lock()
3790 .unwrap()
3791 .platform
3792 .as_ref()
3793 .is_some_and(|p| p.iommufd);
3794
3795 if iommufd {
3796 #[cfg(feature = "kvm")]
3797 {
3798 info!("Using vfio cdev mode with iommufd.");
3799 let iommufd = IommuFd::new().map_err(DeviceManagerError::IommufdCreate)?;
3800 let vfio_iommufd = VfioIommufd::new(Arc::new(iommufd), None, Some(Arc::new(dup)))
3801 .map_err(DeviceManagerError::VfioCreate)?;
3802 Ok(Arc::new(vfio_iommufd))
3803 }
3804 #[cfg(not(feature = "kvm"))]
3805 Err(DeviceManagerError::IommufdNotSupported)
3806 } else {
3807 info!("Using vfio legacy mode with vfio container/group.");
3808 Ok(Arc::new(
3809 VfioContainer::new(Some(Arc::new(dup))).map_err(DeviceManagerError::VfioCreate)?,
3810 ))
3811 }
3812 }
3813
3814 fn add_vfio_device(
3815 &mut self,

Callers 1

add_vfio_deviceMethod · 0.80

Calls 2

newFunction · 0.85
try_cloneMethod · 0.45

Tested by

no test coverage detected