iommu/io-pgtable-arm: Simplify bounds checks
authorRobin Murphy <robin.murphy@arm.com>
Fri, 25 Oct 2019 18:08:32 +0000 (19:08 +0100)
committerWill Deacon <will@kernel.org>
Mon, 4 Nov 2019 19:34:31 +0000 (19:34 +0000)
We're merely checking that the relevant upper bits of each address
are all zero, so there are cheaper ways to achieve that.

Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
drivers/iommu/io-pgtable-arm.c

index abe7945..5da3cbd 100644 (file)
@@ -491,8 +491,7 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova,
        if (WARN_ON(!size || (size & cfg->pgsize_bitmap) != size))
                return -EINVAL;
 
-       if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias) ||
-                   paddr >= (1ULL << data->iop.cfg.oas)))
+       if (WARN_ON(iova >> data->iop.cfg.ias || paddr >> data->iop.cfg.oas))
                return -ERANGE;
 
        prot = arm_lpae_prot_to_pte(data, iommu_prot);
@@ -663,7 +662,7 @@ static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova,
        if (WARN_ON(!size || (size & cfg->pgsize_bitmap) != size))
                return 0;
 
-       if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias)))
+       if (WARN_ON(iova >> data->iop.cfg.ias))
                return 0;
 
        return __arm_lpae_unmap(data, gather, iova, size, lvl, ptep);