[qemu+kvm]: vfio调用流程
透传pcie设备全流程QEMU测vfio_realize--vfio_get_group-open(/dev/vfio/group id)-进入内核态-vfio_group_fops_open//分配group filep-private_data group;注意/dev/vfio/group id 对应vfio_group_fops 设置groups/dev/vfio/vfio 对应vfio_fops,设置container vfio_device_fops是对应device的需要通过group获取fd;ioctl(group-fd,VFIO_GROUP_GET_STATUS,status)--进入内核态-vfio_group_fops_unl_ioctl-//判断multifunc设备是否所有设备在一个groupvfio_connect_container--首次进入设置containeropen(/dev/vfio/vfio)-进入内核态--vfio_fops_open// 申请、标记container为file私有数据ioctl(fd,VFIO_GET_API_VERSION)-进入内核态--vfio_fops_unl_ioctl//检查API version在这里插入代码片vfio_init_container-vfio_get_iommu_type-ioctl(container-fd,VFIO_CHECK_EXTENSION,iommu_types[i])-进入内核态--vfio_fops_unl_ioctl//首次返回NULL 因为此时vfio_iommu_driver还没注册ioctl(group_fd,VFIO_GROUP_SET_CONTAINER-进入内核态--vfio_group_fops_unl_ioctl-//将group 加入container完成两者绑定-attach_group--vfio_iommu_driver_ops_type1--vfio_iommu_type1_attach_group-//为group的vfio_domain申请iommu_domain将group加入iommu domain-iommu_domain_alloc--arm_smmu_domain_alloc-iommu_domain_set_attr-iommu_domain_set_attr//设置arm_smmu_domain stage为nesting-vfio_iommu_attach_group-arm_smmu_attach_dev//将dev对应的sid stage 2 stage 1 的smmu表项初始化注意此时已有master master是host上电iommu bus创建的稍后讲解。-做一些special操作等具体不讲解-iommu_domain_get_attr-msi.....ioctl(container-fd,VFIO_SET_IOMMU-进入内核态--vfio_fops_unl_ioctl--vfio_iommu_type1_open-分配vfio_iommu-和上面的流程一样 二选一-ioctl(group-fd,VFIO_GROUP_GET_DEVICE_FD)获取具体设备的fd-进入内核态--vfio_group_get_device_fd,返回一个fd并且fd和vfio_device_fops绑定-ioctl(fd,VFIO_DEVICE_GET_INFO,dev_info);-进入内核态-vfio_pci_ioctl//获取region、irq信息vfio_region_setup(--ioctl(vbasedev-fd,VFIO_DEVICE_GET_REGION_INFO)-vfio_pci_ioctl//获取region信息-vfio_populate_vga//对dc特殊处理-vfio_init_fault_regions//对fault region特殊处理fault region 是纯软件规划的region-ioctl(vdev-vbasedev.fd,VFIO_DEVICE_GET_IRQ_INFO)// 获取irq信息-pread(vdev-vbasedev.fd,vdev-pdev.config 读取config空间 qemu留一份备份
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2632505.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!