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 组文件描述符)
KVM_DEV_VFIO_GROUP_ADD: 与 KVM_DEV_VFIO_FILE_ADD 相同,仅适用于组文件描述符
KVM_DEV_VFIO_GROUP_DEL: 与 KVM_DEV_VFIO_FILE_DEL 相同,仅适用于组文件描述符
- 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)的设备文件描述符也是如此。对于此类文件描述符,FILE_ADD 也应在 VFIO_DEVICE_BIND_IOMMUFD 之前调用,以支持前一句中提到的驱动程序。