Hi Neo, On Fri, Mar 4, 2016 at 3:00 PM, Neo Jia <cjia@xxxxxxxxxx> wrote: > On Wed, Mar 02, 2016 at 04:38:34PM +0800, Jike Song wrote: >> On 02/24/2016 12:24 AM, Kirti Wankhede wrote: >> > + vgpu_dma->size = map->size; >> > + >> > + vgpu_link_dma(vgpu_iommu, vgpu_dma); >> >> Hi Kirti & Neo, >> >> seems that no one actually setup mappings for IOMMU here? >> > > Hi Jike, > > Yes. > > The actual mapping should be done by the host kernel driver after calling the > translation/pinning API vgpu_dma_do_translate. Thanks for the reply. I mis-deleted the mail in my intel account, so reply with private mail account, sorry for that. In vgpu_dma_do_translate(): for (i = 0; i < count; i++) { {snip} dma_addr_t iova = gfn_buffer[i] << PAGE_SHIFT; vgpu_dma = vgpu_find_dma(vgpu_iommu, iova, 0 /* size */); remote_vaddr = vgpu_dma->vaddr + iova - vgpu_dma->iova; if (get_user_pages_unlocked(NULL, mm, remote_vaddr, 1, 1, 0, page) == 1) { pfn = page_to_pfn(page[0]); } gfn_buffer[i] = pfn; } If I understand correctly, the purpose of above code, is given an array of gfns, try to pin & return associated pfns. There is still no IOMMU mappings here. Is it supposed to be the caller who should set up IOMMU by DMA api such as dma_map_page(), after calling vgpu_dma_do_translate()? -- Thanks, Jike -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html