Refactor for supporting multiple VFIO interfaces: both legacy mode and cdev mode using iommufd #106
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary of the PR
To support advanced hardware features, the vfio subsystem now supports multiple modes, e.g. the legacy vfio mode using container and groups, and the new vfio cdev mode (#92).
The current design and implementation of
vfio-ioctls
crate only supports legacy mode. Here is a proposal to refactor its design to support both modes.Refactor internal data structure and APIs
struct VfioCommon
to hold common data structure used by both mode;struct VfioDevice
andstruct VfioDeviceInfo
mode agnostic (decoupling specifics of vfio container and groups);Redefine public APIs (exposed to user-space)
The public APIs exposed to user-space (say VMM) now are defined via a public trait:
Adopt the new public APIs
Each mode defines its own data structure as the vfio device wrapper, which uses different kernel uAPIs to realize the same public APIs.
For example, with legacy vfio mode, the data strcuture for vfio device wrapper (e.g. refactored
struct VfioContainer
) keeps using vfio container and groups while implementingpub trait VfioOps
to provide common public APIs for user space.Dependencies
This PR requires upgrading vfio-bindings to use kernel v6.6.0 (#104).
Requirements
Before submitting your PR, please make sure you addressed the following
requirements:
git commit -s
), and the commit message has max 60 characters for thesummary and max 75 characters for each description line.
test.
Release" section of CHANGELOG.md (if no such section exists, please create one).
unsafe
code is properly documented.