[RFC v3 2/3] virtio: Introduce Vdmabuf driver
Gerd Hoffmann
kraxel at redhat.com
Fri Feb 12 10:14:33 UTC 2021
Hi,
> This is because of the fundamental concept of DMA-buf that the exporter
> needs to setup mappings (both CPU page tables as well as stuff like IOMMU).
> When the guest exports something it would mean that you give the guest
> control over the IOMMU and/or host page tables. And that is not something
> you can do as far as I can see.
Correct.
> You can only export stuff the other way around so that the host is providing
> the memory and the guest is consuming it. If I understand it correctly
> that's exactly what Gerd is suggesting here.
It can also work the other way around (guest allocating and host
consuming). That is just an implementation detail. The /important/
thing is that the driver which exports the dma-buf (and thus handles the
mappings) must be aware of the virtualization so it can properly
coordinate things with the host side.
So vdmabuf allocating and exporting dma-bufs works.
But vdmabuf importing dma-bufs doesn't because you can't ask the
exporter to create *host* mappings as Christian outlined above. Sure,
you can try to sidestep the exporter, fish the list of pages out of the
scatter list and run with that. That will explode as soon as you meet a
dma-buf which is not backed by pages in the first place. And even for
page-backed dma-bufs you can run into trouble, for example due to
mapping pages with the wrong caching attributes. Alternatively you can
double-buffer and copy data from the imported dma-buf to some
host-shared memory, but I guess you don't want that for performance
reasons ...
take care,
Gerd
More information about the dri-devel
mailing list