]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommufd/selftest: Do not record head iova to better match iommu drivers
authorJoao Martins <joao.m.martins@oracle.com>
Thu, 27 Jun 2024 11:00:59 +0000 (12:00 +0100)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 28 Jun 2024 16:12:22 +0000 (13:12 -0300)
Do not set a hugepage-aligned IOVA for incrementing an IOVA, to better
match current IOMMU driver implementations. Keep the logic of clearing all
IOPTE dirty bits for a whole hugepage, even if the range being dirtied
starts from part of the hugepage. This is also similar to AMD driver (iommu
v1 format) where IOMMU uses various subpage PTE data for dirty tracking
(for non-standard page sizes).

Link: https://lore.kernel.org/r/20240627110105.62325-6-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>
drivers/iommu/iommufd/selftest.c

index 654ed33390957916669f59b9b892bf4219d8d2a7..7a70a3e0fee6a0decaa3fa33a73d542c84cbf102 100644 (file)
@@ -266,8 +266,8 @@ static int mock_domain_read_and_clear_dirty(struct iommu_domain *domain,
 
                /* Clear dirty */
                if (mock_test_and_clear_dirty(mock, head, pgsize, flags))
-                       iommu_dirty_bitmap_record(dirty, head, pgsize);
-               iova = head + pgsize;
+                       iommu_dirty_bitmap_record(dirty, iova, pgsize);
+               iova += pgsize;
        } while (iova < end);
 
        return 0;