2024-03-04 12:05:58

by Robin Murphy

[permalink] [raw]
Subject: [PATCH] iommu/dma: Document min_align_mask assumption

iommu-dma does not explicitly reference min_align_mask since we already
assume that that will be less than or equal to any typical IOVA granule.
We wouldn't realistically expect to see the case where it is larger, and
that would be non-trivial to support, however for the sake of reasoning
(particularly around the interaction with SWIOTLB), let's clearly
enforce the assumption.

Signed-off-by: Robin Murphy <[email protected]>
---
drivers/iommu/dma-iommu.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index 50ccc4f1ef81..b58f5a3311c3 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -859,6 +859,11 @@ static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
iommu_deferred_attach(dev, domain))
return DMA_MAPPING_ERROR;

+ /* If anyone ever wants this we'd need support in the IOVA allocator */
+ if (dev_WARN_ONCE(dev, dma_get_min_align_mask(dev) > iova_mask(iovad),
+ "Unsupported alignment constraint\n"))
+ return DMA_MAPPING_ERROR;
+
size = iova_align(iovad, size + iova_off);

iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev);
--
2.39.2.101.g768bb238c484.dirty



2024-03-04 14:41:19

by Petr Tesařík

[permalink] [raw]
Subject: Re: [PATCH] iommu/dma: Document min_align_mask assumption

On Mon, 4 Mar 2024 12:05:42 +0000
Robin Murphy <[email protected]> wrote:

> iommu-dma does not explicitly reference min_align_mask since we already
> assume that that will be less than or equal to any typical IOVA granule.
> We wouldn't realistically expect to see the case where it is larger, and
> that would be non-trivial to support, however for the sake of reasoning
> (particularly around the interaction with SWIOTLB), let's clearly
> enforce the assumption.
>
> Signed-off-by: Robin Murphy <[email protected]>

Looks good to me.

Reviewed-by: Petr Tesarik <[email protected]>

Thank you!

Petr T

> ---
> drivers/iommu/dma-iommu.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index 50ccc4f1ef81..b58f5a3311c3 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
> @@ -859,6 +859,11 @@ static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
> iommu_deferred_attach(dev, domain))
> return DMA_MAPPING_ERROR;
>
> + /* If anyone ever wants this we'd need support in the IOVA allocator */
> + if (dev_WARN_ONCE(dev, dma_get_min_align_mask(dev) > iova_mask(iovad),
> + "Unsupported alignment constraint\n"))
> + return DMA_MAPPING_ERROR;
> +
> size = iova_align(iovad, size + iova_off);
>
> iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev);


2024-03-04 15:50:54

by Michael Kelley

[permalink] [raw]
Subject: RE: [PATCH] iommu/dma: Document min_align_mask assumption

From: Robin Murphy <[email protected]> Sent: Monday, March 4, 2024 4:06 AM
>
> iommu-dma does not explicitly reference min_align_mask since we already
> assume that that will be less than or equal to any typical IOVA granule.
> We wouldn't realistically expect to see the case where it is larger, and
> that would be non-trivial to support, however for the sake of reasoning
> (particularly around the interaction with SWIOTLB), let's clearly
> enforce the assumption.
>
> Signed-off-by: Robin Murphy <[email protected]>
> ---
> drivers/iommu/dma-iommu.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index 50ccc4f1ef81..b58f5a3311c3 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
> @@ -859,6 +859,11 @@ static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
> iommu_deferred_attach(dev, domain))
> return DMA_MAPPING_ERROR;
>
> + /* If anyone ever wants this we'd need support in the IOVA allocator */
> + if (dev_WARN_ONCE(dev, dma_get_min_align_mask(dev) > iova_mask(iovad),
> + "Unsupported alignment constraint\n"))
> + return DMA_MAPPING_ERROR;
> +
> size = iova_align(iovad, size + iova_off);
>
> iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev);
> --
> 2.39.2.101.g768bb238c484.dirty

Reviewed-by: Michael Kelley <[email protected]>


2024-03-05 13:46:25

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] iommu/dma: Document min_align_mask assumption

Looks good:

Reviewed-by: Christoph Hellwig <[email protected]>

2024-03-06 16:40:44

by Joerg Roedel

[permalink] [raw]
Subject: Re: [PATCH] iommu/dma: Document min_align_mask assumption

On Mon, Mar 04, 2024 at 12:05:42PM +0000, Robin Murphy wrote:
> iommu-dma does not explicitly reference min_align_mask since we already
> assume that that will be less than or equal to any typical IOVA granule.
> We wouldn't realistically expect to see the case where it is larger, and
> that would be non-trivial to support, however for the sake of reasoning
> (particularly around the interaction with SWIOTLB), let's clearly
> enforce the assumption.
>
> Signed-off-by: Robin Murphy <[email protected]>
> ---
> drivers/iommu/dma-iommu.c | 5 +++++
> 1 file changed, 5 insertions(+)

Applied, thanks Robin.