完成dma映射后,通过VFIO_DEVICE_GET_INFO获取设备的信息(主要是pci的bar个数信息及中断信息)。 获取到pci的bar个数信息后,先通过pci_vfio_get_region_info获取每个bar region的地址偏移及大小信息,然后再通过pci_vfio_mmap_bar将其映射到用户空间,并将映射后的bar地址信息存放在rte_pci_device->mem_resource。 接...
static const struct vfio_device_ops vfio_pci_ops = { .name = "vfio-pci", .open = vfio_pci_open, .release = vfio_pci_release, .ioctl = vfio_pci_ioctl, .read = vfio_pci_read, .write = vfio_pci_write, .mmap = vfio_pci_mmap, .request = vfio_pci_request, }; 3 module init m...
if(vfio_pci_is_denylisted(pdev))return-EINVAL;//为此pci设备分配一个vfio_pci_core_device结构体,并初始化其包含的vfio_device成员,//vfio_device中包含了vfio_pci_ops,通过group_fd获取的device_fd最终会指向vfio_dev.vdev=vfio_alloc_device(vfio_pci_core_device,vdev,&pdev->dev,&vfio_pci_ops);/...
* easily mmap it when using VFIO) */ret=pci_vfio_get_msix_bar(vfio_dev_fd,&vfio_res->msix_table); 1.1.3 pci_vfio_get_region_info & pci_vfio_mmap_bar 获取设备的BAR REGION(寄存器,中断等信息),并完成寄存器的mmap映射,让用户态程序能够直接访问PCI设备的寄存器。 1.1.4 pci_rte_vfio_setup_...
The vfio_iommu_type1 driver will fault in the entire DMA mapped range through fixup_user_fault(). In synthetic testing, this improves the time required to walk a PCI BAR mapping from userspace by roughly 1/3rd. This is likely an interim solution until vmf_insert_pfn_{pmd,pud}() gain...
读取的方法是通过上一步取得的设备句柄,获取msix的配置信息。并保存到vfio_res结构体中。获取设备的BAR REGION(寄存器,中断等信息),并完成寄存器的mmap映射,让用户态程序能够直接访问PCI设备的寄存器。这个函数首先设置中断,将第一个中断添加到系统的中断轮训链表去。然后设置开启设备,并对设备复位。
+ vfio_pci_bar_page_aligned())) info.flags |= VFIO_REGION_INFO_FLAG_MMAP; break; case VFIO_PCI_ROM_REGION_INDEX: @@ -855,6 +859,10 @@ static int vfio_pci_mmap(void *device_data, struct vm_area_struct *vma) return -EINVAL; ...
首先需要插入igb_uio/vfio-pci这两个驱动中的一个,接下来会以igb_uio为例讲解(因为简单...vfio还是有点复杂的...vfio的解析会放在以后的文章中放出)。 其次需要运行dpdk-devbinds.py这个dpdk官方给出的py脚本,以此来完成内核驱动到igb_uio/vfio的接管。接管之后,再次运行dpdk-devbinds可以很明显的看到驱动从ixg...
首先需要插入igb_uio/vfio-pci这两个驱动中的一个,接下来会以igb_uio为例讲解(因为简单...vfio还是有点复杂的...vfio的解析会放在以后的文章中放出)。 其次需要运行dpdk-devbinds.py这个dpdk官方给出的py脚本,以此来完成内核驱动到igb_uio/vfio的接管。接管之后,再次运行dpdk-devbinds可以很明显的看到驱动从ixg...
PMD 包含 PMD 应用程序(DPDK程序) + PMD KMOD(pmd kmod: 比如:igb_uio/uio_pci_generic/vfio_pci) PMD应用程序「DPDK程序」在用户态调用API 接口对网卡进行配置,获取统计,收发包。 用户态部分实现真正的业务处理,内核态部分主要是接管硬件资源提供给用户态部分使用。