]> www.infradead.org Git - users/jedix/linux-maple.git/commit
vfio/type1: Use mapping page mask for pfnmaps
authorAlex Williamson <alex.williamson@redhat.com>
Tue, 18 Feb 2025 22:22:06 +0000 (15:22 -0700)
committerAlex Williamson <alex.williamson@redhat.com>
Thu, 27 Feb 2025 18:55:54 +0000 (11:55 -0700)
commit0fd06844de5d063cb384384e06a11ec7141a35d5
tree8d52e8eb85fb1fca1f89b296ff53816d17792981
parent62fb8adc43afad5fa1c9cadc6f3a8e9fb72af194
vfio/type1: Use mapping page mask for pfnmaps

vfio-pci supports huge_fault for PCI MMIO BARs and will insert pud and
pmd mappings for well aligned mappings.  follow_pfnmap_start() walks the
page table and therefore knows the page mask of the level where the
address is found and returns this through follow_pfnmap_args.addr_mask.
Subsequent pfns from this address until the end of the mapping page are
necessarily consecutive.  Use this information to retrieve a range of
pfnmap pfns in a single pass.

With optimal mappings and alignment on systems with 1GB pud and 4KB
page size, this reduces iterations for DMA mapping PCI BARs by a
factor of 256K.  In real world testing, the overhead of iterating
pfns for a VM DMA mapping a 32GB PCI BAR is reduced from ~1s to
sub-millisecond overhead.

Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Mitchell Augustin <mitchell.augustin@canonical.com>
Tested-by: Mitchell Augustin <mitchell.augustin@canonical.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/20250218222209.1382449-7-alex.williamson@redhat.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
drivers/vfio/vfio_iommu_type1.c