diff options
author | Joao Martins <joao.m.martins@oracle.com> | 2024-06-27 14:01:02 +0300 |
---|---|---|
committer | Jason Gunthorpe <jgg@nvidia.com> | 2024-06-28 19:12:23 +0300 |
commit | 781bc08797a2146400332acf2d7706793b51e20f (patch) | |
tree | d195068a2a17fb418aed9db4cb94c1ec19a87f49 | |
parent | a84c690e10ae03f1cddec908ac7f5068ceed67a8 (diff) | |
download | linux-781bc08797a2146400332acf2d7706793b51e20f.tar.xz |
iommufd/iova_bitmap: Move initial pinning to iova_bitmap_for_each()
The pinned pages are only relevant when it starts iterating the bitmap so
defer that into iova_bitmap_for_each().
Link: https://lore.kernel.org/r/20240627110105.62325-9-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>
-rw-r--r-- | drivers/iommu/iommufd/iova_bitmap.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/iommu/iommufd/iova_bitmap.c b/drivers/iommu/iommufd/iova_bitmap.c index 2b87ea16ad66..b94636b7977e 100644 --- a/drivers/iommu/iommufd/iova_bitmap.c +++ b/drivers/iommu/iommufd/iova_bitmap.c @@ -269,9 +269,6 @@ struct iova_bitmap *iova_bitmap_alloc(unsigned long iova, size_t length, goto err; } - rc = iova_bitmap_get(bitmap); - if (rc) - goto err; return bitmap; err: @@ -425,6 +422,10 @@ int iova_bitmap_for_each(struct iova_bitmap *bitmap, void *opaque, { int ret = 0; + ret = iova_bitmap_get(bitmap); + if (ret) + return ret; + for (; !iova_bitmap_done(bitmap) && !ret; ret = iova_bitmap_advance(bitmap)) { ret = fn(bitmap, iova_bitmap_mapped_iova(bitmap), |