iommu/arm-smmu: Pass the correct size to be unmapped

For all but the last level of the page tables, we
need to call unmap with supported IOMMU pages sizes.
However currently to get the maximum page size that can be
unmapped, we are passing the original size parameter,
instead of the remaining size to be unmapped, and that can
end up unmapping more than what is intended.

Fix this by passing the remaining size parameter to
find the correct IOMMU page size.

Change-Id: Id4bd188ff6a3b4b7d34ba43ae6a61efb3c65b281
Signed-off-by: Neeti Desai <neetid@codeaurora.org>
This commit is contained in:
Neeti Desai 2015-08-19 15:19:25 -07:00 committed by David Keitel
parent 528af1e1ce
commit e9f7462305

View file

@ -711,7 +711,8 @@ static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
remaining = (size - unmapped);
size_to_unmap = remaining < SZ_2M
? remaining
: iommu_pgsize(data->iop.cfg.pgsize_bitmap, iova, size);
: iommu_pgsize(data->iop.cfg.pgsize_bitmap, iova,
remaining);
ret = __arm_lpae_unmap(data, iova, size_to_unmap, lvl, ptep,
NULL);
if (ret == 0)