mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 09:01:36 -04:00
iommu/io-pgtable-arm: Add self test for the last page in the IAS
Add a case in the selftests that can detect some bugs with concatenated page tables, where it maps the biggest supported page size at the end of the IAS, this test would fail without the previous fix. Signed-off-by: Mostafa Saleh <smostafa@google.com> Link: https://lore.kernel.org/r/20241024162516.2005652-3-smostafa@google.com Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
committed by
Will Deacon
parent
d71fa842d3
commit
d64c805337
@@ -1394,6 +1394,23 @@ static int __init arm_lpae_run_tests(struct io_pgtable_cfg *cfg)
|
||||
iova += SZ_1G;
|
||||
}
|
||||
|
||||
/*
|
||||
* Map/unmap the last largest supported page of the IAS, this can
|
||||
* trigger corner cases in the concatednated page tables.
|
||||
*/
|
||||
mapped = 0;
|
||||
size = 1UL << __fls(cfg->pgsize_bitmap);
|
||||
iova = (1UL << cfg->ias) - size;
|
||||
if (ops->map_pages(ops, iova, iova, size, 1,
|
||||
IOMMU_READ | IOMMU_WRITE |
|
||||
IOMMU_NOEXEC | IOMMU_CACHE,
|
||||
GFP_KERNEL, &mapped))
|
||||
return __FAIL(ops, i);
|
||||
if (mapped != size)
|
||||
return __FAIL(ops, i);
|
||||
if (ops->unmap_pages(ops, iova, size, 1, NULL) != size)
|
||||
return __FAIL(ops, i);
|
||||
|
||||
free_io_pgtable_ops(ops);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user