[PATCH 0/2] vfio: Align mmaps

Alex Williamson posted 2 patches 1 month ago
hw/vfio/helpers.c | 66 +++++++++++++++++++++++++++++++++--------------
1 file changed, 47 insertions(+), 19 deletions(-)
[PATCH 0/2] vfio: Align mmaps
Posted by Alex Williamson 1 month ago
As described in patch /2, newer kernels may support pfnmap with PMD or
PUD sized mappings.  Mappings must be aligned in order to see the full
benefit of this support.  We're largely able to get PMD alignment for
free from mmap, but PUD alignment requires some effort.  Further, we
don't actually have an easy way to determine PMD or PUD alignment,
therefore we align all mmaps to the nearest power-of-two relative to the
region size, up to the maximum PUD size known the be currently available.

Enabling debug prints in the kernel shows that this exclusively enables
1GiB mappings for a GPU with a multi-gigabyte BAR whereas previously the
BAR is mapped with a combination of 2MiB and 1GiB mappings, only using
1GiB when opportunistically crossing an alignment boundary.

If there are ways to determine discrete alignment intervals or better
ways to generate a properly aligned address value for mmap, please share.
Thanks,

Alex

Alex Williamson (2):
  vfio/helpers: Refactor vfio_region_mmap() error handling
  vfio/helpers: Align mmaps

 hw/vfio/helpers.c | 66 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 47 insertions(+), 19 deletions(-)

-- 
2.46.2
Re: [PATCH 0/2] vfio: Align mmaps
Posted by Cédric Le Goater 1 month ago
On 10/22/24 22:08, Alex Williamson wrote:
> As described in patch /2, newer kernels may support pfnmap with PMD or
> PUD sized mappings.  Mappings must be aligned in order to see the full
> benefit of this support.  We're largely able to get PMD alignment for
> free from mmap, but PUD alignment requires some effort.  Further, we
> don't actually have an easy way to determine PMD or PUD alignment,
> therefore we align all mmaps to the nearest power-of-two relative to the
> region size, up to the maximum PUD size known the be currently available.
> 
> Enabling debug prints in the kernel shows that this exclusively enables
> 1GiB mappings for a GPU with a multi-gigabyte BAR whereas previously the
> BAR is mapped with a combination of 2MiB and 1GiB mappings, only using
> 1GiB when opportunistically crossing an alignment boundary.
> 
> If there are ways to determine discrete alignment intervals or better
> ways to generate a properly aligned address value for mmap, please share.
> Thanks,
> 
> Alex
> 
> Alex Williamson (2):
>    vfio/helpers: Refactor vfio_region_mmap() error handling
>    vfio/helpers: Align mmaps
> 
>   hw/vfio/helpers.c | 66 +++++++++++++++++++++++++++++++++--------------
>   1 file changed, 47 insertions(+), 19 deletions(-)
> 


Applied to vfio-next.

Thanks,

C.