vfio-ioctls
Design
The VFIO driver framework provides unified APIs for direct device access. It is an IOMMU/device-agnostic framework for exposing direct device access to user space in a secure, IOMMU-protected environment. This framework is used for multiple devices, such as GPUs, network adapters, and compute accelerators. With direct device access, virtual machines or user space applications have direct access to the physical device.
The VFIO framework is originally developed on Linux system, and later Microsoft HyperVisor technology provides a compatible implementation. Therefore the VFIO framework is supported by both Linux and Microsoft HyperVisor.
The vfio-ioctls crate is a safe wrapper over the VFIO APIs. It provides three classes of structs:
VfioContainer: a safe wrapper over a VFIO container object, and acts a container object to associateVfioDeviceobjects with IOMMU domains.VfioDevice: a wrapper over a VFIO device object, provide methods to access the underlying hardware device.VfioIrq/VfioRegion: describes capabilities/resources about aVfioDeviceobject.
Usage
The vfio-ioctls crate may be used to support following usage scenarios:
- Direct device assignment to virtual machine based on Linux KVM, with default features.
- Direct device assignment to virtual machine based on Microsoft HyperVisor, with
--no-default-features --features=mshv. - User mode device drivers, with
--no-default-features.
First, add the following to your Cargo.toml:
= "0.1"
Next, add this to your crate root:
extern crate vfio_ioctls;
By default vfio-ioctls has the kvm feature enabled. You may turn off the default features by
default-features = false. To enable feature mshv,
= { = "0.1", = false, = ["mshv"]}
Examples
To create VFIO device object for user mode drivers,
use Arc;
use ;
License
This code is licensed under Apache-2.0 or BSD-3-Clause.