Skip to the content.

通过 kvm_vfio_ops 来理解 kvm_device_ops

virt/kvm/vfio.c 就是定义了一个 kvm_vfio_ops 了而已,主要是资源释放?

只有 kvm_vfio_ops 被 kvm_device_ioctl 使用过:

static struct kvm_device_ops kvm_vfio_ops = {
	.name = "kvm-vfio",
	.create = kvm_vfio_create,
	.destroy = kvm_vfio_destroy,
	.set_attr = kvm_vfio_set_attr,
	.has_attr = kvm_vfio_has_attr,
};

在 qemu 侧的使用:

attr 一共三种行为:

#define   KVM_DEV_VFIO_GROUP_ADD			1
#define   KVM_DEV_VFIO_GROUP_DEL			2
#define   KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE		3

主要就是 GROUP_ADD 和 GROUP_DEL 了:

感觉最后就是: kvm_vfio_update_coherency ,这个感知不强:

第一个关键作用,关机的时候来释放 vfio 相关资源:

通过 KVM_DEV_VFIO_GROUP_ADD 动作,调用 kvm_vfio_file_add ,之后这个直通的设备就是和 这个 vfio device 关联的。

@[
        kvm_vfio_release+5
        kvm_device_release+105
        __fput+227
        task_work_run+89
        do_exit+483
        do_group_exit+48
        get_signal+2063
        arch_do_signal_or_restart+58
        exit_to_user_mode_loop+144
        do_syscall_64+431
        entry_SYSCALL_64_after_hwframe+118
]: 1

看看 arm 的 gic 架构继续了解一下 kvm_device_ops 的作用吧,感觉 vfio 这个例子也不是非常合理的。

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。