mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
iommufd/iova_bitmap: Cache mapped length in iova_bitmap_map struct
The amount of IOVA mapped will be used more often in iova_bitmap_set() in preparation to dynamically iterate the bitmap. Cache said length to avoid having to calculate it all the time. Link: https://lore.kernel.org/r/20240627110105.62325-8-joao.m.martins@oracle.com Signed-off-by: Joao Martins <joao.m.martins@oracle.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Tested-by: Matt Ochs <mochs@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
792583656f
commit
a84c690e10
|
|
@ -35,6 +35,9 @@ struct iova_bitmap_map {
|
|||
/* base IOVA representing bit 0 of the first page */
|
||||
unsigned long iova;
|
||||
|
||||
/* mapped length */
|
||||
unsigned long length;
|
||||
|
||||
/* page size order that each bit granules to */
|
||||
unsigned long pgshift;
|
||||
|
||||
|
|
@ -156,6 +159,8 @@ static unsigned long iova_bitmap_mapped_iova(struct iova_bitmap *bitmap)
|
|||
return bitmap->iova + iova_bitmap_index_to_offset(bitmap, skip);
|
||||
}
|
||||
|
||||
static unsigned long iova_bitmap_mapped_length(struct iova_bitmap *bitmap);
|
||||
|
||||
/*
|
||||
* Pins the bitmap user pages for the current range window.
|
||||
* This is internal to IOVA bitmap and called when advancing the
|
||||
|
|
@ -206,6 +211,7 @@ static int iova_bitmap_get(struct iova_bitmap *bitmap)
|
|||
* aligned.
|
||||
*/
|
||||
mapped->pgoff = offset_in_page(addr);
|
||||
mapped->length = iova_bitmap_mapped_length(bitmap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user