> From: Bharat Kumar Gogada [mailto:bharatku@xxxxxxxxxx] > Sent: Monday, August 28, 2017 9:10 PM > > > Subject: RE: Support SVM without PASID > > > > > 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). > > > Hi Kevin, I have a doubt in this case, what if someone assigns mmap > returned virtual address as iova address, then > EP will assume it is generating request on IOVA but in reality we are using > application allocated virtual address, then > it looks like we are working with application virtual address directly without > PASID. Is this valid ? > IOMMU doesn't care what an address in the DMA transaction from a device is. It cares only whether the DMA transaction has PASID tagged or not, and then pursue different structure to walk corresponding I/O page table to get a translated address. Each I/O page table hosts a standalone virtual address space. An application can implement a new allocator to manage the address space (iova != vaddr), or simply reuse malloc-ed virtual address (iova == vaddr), which is not what hardware really cares about. Thanks Kevin