OSDN Git Service

iommu/arm-smmu: Pass the correct size to be unmapped
authorNeeti Desai <neetid@codeaurora.org>
Wed, 19 Aug 2015 22:19:25 +0000 (15:19 -0700)
committerDavid Keitel <dkeitel@codeaurora.org>
Tue, 22 Mar 2016 18:13:59 +0000 (11:13 -0700)
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>
drivers/iommu/io-pgtable-arm.c

index 582e858..83cd01d 100644 (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)