On Wed, Oct 22, 2025 at 12:10:35AM -0700, Christoph Hellwig wrote:
On Mon, Oct 20, 2025 at 09:58:54AM -0300, Jason Gunthorpe wrote:
I explained it in detail in the message you are repling to. If something is not clear can you please be more specific??
Is it the mmap in VFIO perhaps that is causing these questions?
VFIO uses a PFNMAP VMA, so you can't pin_user_page() it. It uses unmap_mapping_range() during its remove() path to get rid of the VMA PTEs.
This all needs to g• into the explanation.
Instead the DMABUF FD is used to pass the MMIO pages between VFIO and another driver. DMABUF has a built in invalidation mechanism that VFIO triggers before remove(). The invalidation removes access from the other driver.
This is different than NVMe which has no invalidation. NVMe does unmap_mapping_range() on the VMA and waits for all the short lived pgmap references to clear. We don't need anything like that because DMABUF invalidation is synchronous.
Please add documentation for this model to the source tree.
Okay, Lets see what we can come up with. I think explaining the dmabuf model with respect to the p2p provider in the new common dmabuf mapping API code would make sense.
Jason