Messages in this thread | | | Subject | Re: [PATCH v2] iommu: Defer the early return in arm_(v7s/lpae)_map | From | Robin Murphy <> | Date | Tue, 8 Dec 2020 14:20:27 +0000 |
| |
On 2020-12-07 11:57, Keqian Zhu wrote: > Although handling a mapping request with no permissions is a > trivial no-op, defer the early return until after the size/range > checks so that we are consistent with other mapping requests.
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
> Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com> > --- > drivers/iommu/io-pgtable-arm-v7s.c | 8 ++++---- > drivers/iommu/io-pgtable-arm.c | 8 ++++---- > 2 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c > index a688f22cbe3b..359b96b0fa3e 100644 > --- a/drivers/iommu/io-pgtable-arm-v7s.c > +++ b/drivers/iommu/io-pgtable-arm-v7s.c > @@ -522,14 +522,14 @@ static int arm_v7s_map(struct io_pgtable_ops *ops, unsigned long iova, > struct io_pgtable *iop = &data->iop; > int ret; > > - /* If no access, then nothing to do */ > - if (!(prot & (IOMMU_READ | IOMMU_WRITE))) > - return 0; > - > if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias) || > paddr >= (1ULL << data->iop.cfg.oas))) > return -ERANGE; > > + /* If no access, then nothing to do */ > + if (!(prot & (IOMMU_READ | IOMMU_WRITE))) > + return 0; > + > ret = __arm_v7s_map(data, iova, paddr, size, prot, 1, data->pgd, gfp); > /* > * Synchronise all PTE updates for the new mapping before there's > diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c > index a7a9bc08dcd1..8ade72adab31 100644 > --- a/drivers/iommu/io-pgtable-arm.c > +++ b/drivers/iommu/io-pgtable-arm.c > @@ -444,10 +444,6 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova, > arm_lpae_iopte prot; > long iaext = (s64)iova >> cfg->ias; > > - /* If no access, then nothing to do */ > - if (!(iommu_prot & (IOMMU_READ | IOMMU_WRITE))) > - return 0; > - > if (WARN_ON(!size || (size & cfg->pgsize_bitmap) != size)) > return -EINVAL; > > @@ -456,6 +452,10 @@ static int arm_lpae_map(struct io_pgtable_ops *ops, unsigned long iova, > if (WARN_ON(iaext || paddr >> cfg->oas)) > return -ERANGE; > > + /* If no access, then nothing to do */ > + if (!(iommu_prot & (IOMMU_READ | IOMMU_WRITE))) > + return 0; > + > prot = arm_lpae_prot_to_pte(data, iommu_prot); > ret = __arm_lpae_map(data, iova, paddr, size, prot, lvl, ptep, gfp); > /* >
| |