我正在研究使用 SPDK/VFIO API 进行 dma 访问的用户空间 PCI 驱动程序。
目前对于每个 DMA 分配请求,我需要填充结构,spdk_vfio_dma_map
然后调用系统调用ioctl(fd, VFIO_IOMMU_MAP_DMA, &dma_map)
以通过 IOMMU 映射 DMA 区域。然后稍后调用ioctl(fd, VFIO_IOMMU_UNMAP_DMA, &dma_map)
以取消映射 IOMMU 映射。
到目前为止,这一切正常,看起来就像 SPDK 示例正在使用的那样。但是我想知道是否有一种方法可以预先分配用户空间中的所有内存缓冲区,然后在每个 DMA 分配请求中只使用预先分配的内存而不是ioctl
每次都调用?
任何想法都值得赞赏。