From: Lu Baolu <baolu.lu@linux.intel.com>
To: Robin Murphy <robin.murphy@arm.com>, joro@8bytes.org, will@kernel.org
Cc: baolu.lu@linux.intel.com, iommu@lists.linux-foundation.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] iommu: Unify iova_to_phys for identity domains
Date: Thu, 15 Jul 2021 09:38:24 +0800 [thread overview]
Message-ID: <eaa44be7-5c83-6d11-5efb-5ba4707b683b@linux.intel.com> (raw)
In-Reply-To: <e701030cbf91b441f60d2d6788885f679317fad6.1626283714.git.robin.murphy@arm.com>
On 7/15/21 1:28 AM, Robin Murphy wrote:
> If people are going to insist on calling iommu_iova_to_phys()
> pointlessly and expecting it to work, we can at least do ourselves a
> favour by handling those cases in the core code, rather than repeatedly
> across an inconsistent handful of drivers.
>
> Signed-off-by: Robin Murphy <robin.murphy@arm.com>
> ---
> drivers/iommu/amd/io_pgtable.c | 3 ---
> drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 3 ---
> drivers/iommu/arm/arm-smmu/arm-smmu.c | 3 ---
> drivers/iommu/iommu.c | 6 +++++-
> 4 files changed, 5 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/iommu/amd/io_pgtable.c b/drivers/iommu/amd/io_pgtable.c
> index bb0ee5c9fde7..182c93a43efd 100644
> --- a/drivers/iommu/amd/io_pgtable.c
> +++ b/drivers/iommu/amd/io_pgtable.c
> @@ -493,9 +493,6 @@ static phys_addr_t iommu_v1_iova_to_phys(struct io_pgtable_ops *ops, unsigned lo
> unsigned long offset_mask, pte_pgsize;
> u64 *pte, __pte;
>
> - if (pgtable->mode == PAGE_MODE_NONE)
> - return iova;
> -
> pte = fetch_pte(pgtable, iova, &pte_pgsize);
>
> if (!pte || !IOMMU_PTE_PRESENT(*pte))
> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> index 3e87a9cf6da3..c9fdd0d097be 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> @@ -2481,9 +2481,6 @@ arm_smmu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
> {
> struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
>
> - if (domain->type == IOMMU_DOMAIN_IDENTITY)
> - return iova;
> -
> if (!ops)
> return 0;
>
> diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c b/drivers/iommu/arm/arm-smmu/arm-smmu.c
> index 0f181f76c31b..0d04eafa3fdb 100644
> --- a/drivers/iommu/arm/arm-smmu/arm-smmu.c
> +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c
> @@ -1317,9 +1317,6 @@ static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
> struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
> struct io_pgtable_ops *ops = smmu_domain->pgtbl_ops;
>
> - if (domain->type == IOMMU_DOMAIN_IDENTITY)
> - return iova;
> -
> if (!ops)
> return 0;
>
> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> index 43a2041d9629..7c16f977b5a6 100644
> --- a/drivers/iommu/iommu.c
> +++ b/drivers/iommu/iommu.c
> @@ -2371,7 +2371,11 @@ EXPORT_SYMBOL_GPL(iommu_detach_group);
>
> phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
> {
> - if (unlikely(domain->ops->iova_to_phys == NULL))
> + if (domain->type == IOMMU_DOMAIN_IDENTITY)
> + return iova;
> +
> + if (unlikely(domain->ops->iova_to_phys == NULL) ||
> + domain->type == IOMMU_DOMAIN_BLOCKED)
> return 0;
Nit:
Logically we only needs ops->iova_to_phys for DMA and UNMANAGED domains,
so it looks better if we have
if (domain->type == IOMMU_DOMAIN_BLOCKED ||
unlikely(domain->ops->iova_to_phys == NULL))
return 0;
Anyway,
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Best regards,
baolu
>
> return domain->ops->iova_to_phys(domain, iova);
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-07-15 1:42 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-14 17:28 [PATCH] iommu: Unify iova_to_phys for identity domains Robin Murphy
2021-07-15 1:38 ` Lu Baolu [this message]
2021-07-15 8:53 ` Robin Murphy
2021-07-26 11:34 ` Joerg Roedel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=eaa44be7-5c83-6d11-5efb-5ba4707b683b@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux-foundation.org \
--cc=joro@8bytes.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=robin.murphy@arm.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).