VFIO 虚拟设备¶
支持的设备类型
KVM_DEV_TYPE_VFIO
每个虚拟机只能创建一个 VFIO 实例。创建的设备跟踪虚拟机使用的 VFIO 文件(组或设备)以及对虚拟机的正确性和加速至关重要的这些组/设备的特性。当组/设备被启用和禁用以供虚拟机使用时,应更新 KVM 关于它们的存在。当向 KVM 注册时,KVM 会保存对 VFIO 文件的引用。
- 组
- KVM_DEV_VFIO_FILE
别名:KVM_DEV_VFIO_GROUP
- KVM_DEV_VFIO_FILE 属性
- KVM_DEV_VFIO_FILE_ADD: 将 VFIO 文件(组/设备)添加到 VFIO-KVM 设备
跟踪
kvm_device_attr.addr 指向 VFIO 文件的 int32_t 文件描述符。
- KVM_DEV_VFIO_FILE_DEL: 从 VFIO-KVM 中删除 VFIO 文件(组/设备)
设备跟踪
kvm_device_attr.addr 指向 VFIO 文件的 int32_t 文件描述符。
- KVM_DEV_VFIO_GROUP(传统的 kvm 设备组,仅限于处理 VFIO 组 fd)
KVM_DEV_VFIO_GROUP_ADD:与 KVM_DEV_VFIO_FILE_ADD 相同,仅适用于组 fd
KVM_DEV_VFIO_GROUP_DEL:与 KVM_DEV_VFIO_FILE_DEL 相同,仅适用于组 fd
- KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE:附加一个访客可见的 TCE 表
由 sPAPR KVM 分配。kvm_device_attr.addr 指向一个结构体
struct kvm_vfio_spapr_tce { __s32 groupfd; __s32 tablefd; };
其中
@groupfd 是 VFIO 组的文件描述符;
@tablefd 是通过 KVM_CREATE_SPAPR_TCE 分配的 TCE 表的文件描述符。
上面的 FILE/GROUP_ADD 操作应在通过 VFIO_GROUP_GET_DEVICE_FD 访问设备文件描述符之前调用,以支持需要在其 .open_device() 回调中设置 kvm 指针的驱动程序。对于通过字符设备打开获取设备访问权限(通过 VFIO_DEVICE_BIND_IOMMUFD)的设备文件描述符也是如此。对于此类文件描述符,应在 VFIO_DEVICE_BIND_IOMMUFD 之前调用 FILE_ADD,以支持上一句中提到的驱动程序。