> From: valmiki [mailto:valmikibow@xxxxxxxxx] > Sent: Saturday, August 12, 2017 8:11 PM > > On 8/7/2017 4:01 PM, Jean-Philippe Brucker wrote: > > On 05/08/17 06:14, valmiki wrote: > > [...] > >> Hi Jean, Thanks a lot, now i understood the flow. From vfio kernel > >> documentation we fill vaddr and iova in struct > vfio_iommu_type1_dma_map > >> and pass them to VFIO. But if we use dynamic allocation in application > >> (say malloc), do we need to use dma API to get iova and then call > >> VFIO_IOMMU_MAP ioctl ? > >> If application needs multiple such dynamic allocations, then it need to > >> allocate large chunk and program it via VFIO_IOMMU_MAP ioctl and > then > >> manage rest allocations requirements from this buffer ? > > > > Yes, without SVM, the application allocates large buffers, allocates IOVAs > > itself, and maps them with VFIO_IOMMU_MAP. Userspace doesn't rely > on the > > DMA API at all, it manages IOVAs as it wants. Sizes passed to > > VFIO_IOMMU_MAP have to be multiples of the MMU or IOMMU page > granularity > > (that is at least 4kB), and both iova and vaddr have to be aligned on that > > granularity as well. So malloc isn't really suitable in this case, you'll > > need mmap. The application can then implement a small allocator to > manage > > the DMA pool created with VFIO_IOMMU_MAP. > > Thanks Jean, I have a confusion allocate IOVA's in userspace means, how > can user application decide IOVA address, can user application pick any > random IOVA address ? > yes, any address. In this mode the whole IOVA address space is owned by application, which just needs to use VFIO_IOMMU_MAP to setup IOVA->PA mapping in IOMMU (As Jean pointed out, input paramters are iova and vaddr. VFIO will figure out pa corresponding to vaddr). Thanks Kevin