[vfio-users] IOMMU page table of QEMU vfio device passthrough
Huaicheng Li
huaicheng at cs.uchicago.edu
Wed Jun 6 05:23:14 UTC 2018
Hi Alex,
This is why we have an IOMMU. The guest drivers and the device operate
> in the guest physical address space, the IOMMU handles the translation
> to the host physical address space.
Thanks. I guess this is the answer I need. I will check the code to have a
better understanding.
Again, thank you!
Best,
Huaicheng
On Tue, Jun 5, 2018 at 9:59 PM Alex Williamson <alex.williamson at redhat.com>
wrote:
> On Tue, 5 Jun 2018 18:52:43 -0700
> Huaicheng Li <huaicheng at cs.uchicago.edu> wrote:
>
> > Hi Alex,
> >
> > VFIO does not setup
> > > mappings per DMA buffer, it maps all of guest physical memory through
> > > the IOMMU so that the device can DMA to any GPA and it's already
> > > mapped. We call this transparent assignment, the guest can perform DMA
> > > without any knowledge of or interaction with the host IOMMU.
> >
> >
> > Could you briefly explain how all of guest physical memory is mapped
> > through IOMMU.
> > I do see a ``vfio_dma_map`` call with `size` almost equal to my guest
> > memory size, is
> > this the place where IOMMU is instructed to enable such transparent
> > assignment you
> > mentioned?
>
> I don't know that I have a brief explanation for this, you'll need to
> look at the code. The entry point to vfio is the MemoryListener (which
> calls vfio_dma_map) attached to the device AddressSpace, which is the
> system memory address space when a guest IOMMU is not present.
> RAMBlocks are mapped through MemoryRegions and sections of those come
> in through the MemoryListner to be populated through the IOMMU.
>
> > Since the guest driver is issuing IOs with GPA, how does the
> > device do
> > DMA to the corresponding physical DMA address?
>
> This is why we have an IOMMU. The guest drivers and the device operate
> in the guest physical address space, the IOMMU handles the translation
> to the host physical address space.
>
> > Is the GPA->HPA a static
> > mapping
> > so the HPA can be calculated instead of walking the page tables (which
> > those DMA APIs
> > do)?
>
> Without a guest IOMMU, the translations are almost entirely static, for
> instance the RAM in your computer doesn't spontaneously decide to
> relocate itself in the physical address space of your system, neither
> does RAM in a VM. All of guest physical memory is pinned in the host
> and mapped through the IOMMU. Regardless of this, there is no page
> table walking to create these mappings. Each RAMBlock is just a range
> of memory with a start and end offset in the guest physical address
> space. Thanks,
>
> Alex
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/vfio-users/attachments/20180605/02cbad92/attachment.htm>
More information about the vfio-users
mailing list