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 之前调用,以支持前一句中提到的驱动程序。