内核在接收这个参数后调用vfio_dma_do_map(),vfio_dma_do_unmap()完成对内存的映射/解映射。这里以dma 映射为例说明,解映射过程可以参考内核代码。 static int vfio_dma_do_map(struct vfio_iommu *iommu,struct vfio_iommu_type1_dma_map *map) { dma_addr_t i
vfio_dma_bitmap_alloc //判断dirty_page_tracking若为1,说明此时dma logging正在进行,故此时iova映射完成后 //立马把其对应的vfio_dma->bitmap也分配了 //vfio_dma_do_map的形参如下 struct vfio_iommu_type1_dma_map { __u32 argsz; __u32 flags; #define VFIO_DMA_MAP_FLAG_READ (1 << 0) /*...
dma_map.size = 1024 * 1024; dma_map.iova = 0; /* 1MB starting at 0x0 from device view */ dma_map.flags = VFIO_DMA_MAP_FLAG_READ | VFIO_DMA_MAP_FLAG_WRITE; /* intel平台在内核中使用函数vfio_iommu_type1_ioctl处理, * 其调用函数vfio_dma_do_map完成具体工作,过程分两步: * 1. ...
vfio_dma_do_map: vfio_pin_map_dmawhile(size) {/* Pin a contiguous chunk of memory */npage = vfio_pin_pages_remote(dma, vaddr + dma- >size,size> > PAGE_SHIFT, &pfn, limit);/* Map it! */vfio_iommu_map(iommu, iova + dma- >size, pfn, npage, dma- >prot); list_for_each...
(void__user *)arg, minsz))80return-EFAULT;8182if(map.argsz < minsz || map.flags & ~mask)83return-EINVAL;8485returnvfio_dma_do_map(iommu, &map);8687}elseif(cmd ==VFIO_IOMMU_UNMAP_DMA) {88structvfio_iommu_type1_dma_unmap unmap;89longret;9091minsz = offsetofend(structvfio_iommu_...
问使用libvirt通过GPU时出现vfio_dma_map错误EN在以非root用户身份运行VFIO时遇到了同样的问题,因为这里...
VFIO_IOMMU_MAP_DMA:指定设备端看到的IO地址到进程的虚拟地址之间的映射 第二个层面,group的操作是通过打开/dev/vifo/<group_id>文件, 对其执行ioctl操作,主要的操作有: VFIO_GROUP_GET_STATUS:获取group 的状态信息 VFIO_GROUP_SET_CONTAINER:设置group 和container 之间的绑定关系 ...
vfio_iommu_driver:为vfio提供了IOMMU重映射驱动,即向用户空间暴露DMA操作,如container的ioctl选项VFIO_IOMMU_MAP_DMA即由vfio containter设备文件对应的 file_operations 的ioctl转发到vfio_iommu_driver的ioctl实现,已实现的vfio_iommu_driver包括vfio_iommu_type1、vfio_spapr_eeh等,这里重点分析vfio_iommu_type1。
printk("===vfio_iommu_type1_ioctl cmd VFIO_IOMMU_MAP_DMA iova %llx vaddr %llx size %llx\n",map.iova,map.vaddr,map.size); if (map.argsz < minsz || map.flags & ~mask) return -EINVAL; return vfio_dma_do_map(iommu, &map); ...
支持新PCI设备DMA map/unmap API 支持多端口InfiniBand设备 内核控制excessive memory pinning 次级进程支持DMA内存寄存器 支持每进程设备寄存器;不再需要保留相同的VA空间 支持对E-Switch和网卡的跳跃动作 支持网卡steering中的多rte_flow组 重新设计的流程引擎支持大范围部署,包括: ...