On Mon, Dec 09, 2019 at 01:08:32PM +0000, Robin Murphy wrote:
> It makes little sense for dma_limit to be a dma_addr_t when we only use
> it to pass u64 arguments, and combine it with another u64 along the way.
> Just make it u64, and head off any possible size mismatches.
>
> Signed-off-by: Robin Murphy <[email protected]>
> ---
> drivers/iommu/dma-iommu.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index 0cc702a70a96..4acc4199a740 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
> @@ -399,7 +399,7 @@ static int dma_info_to_prot(enum dma_data_direction dir,
> bool coherent,
> }
>
> static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain,
> - size_t size, dma_addr_t dma_limit, struct device *dev)
> + size_t size, u64 dma_limit, struct device *dev)
> {
> struct iommu_dma_cookie *cookie = domain->iova_cookie;
> struct iova_domain *iovad = &cookie->iovad;
Just wondering, maybe you should do the same for:
static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
size_t size, int prot, dma_addr_t dma_mask)
since that passes on the dma_mask as dma_addr_t instead of u64?
Also FYI, this fixes the warning on arm32 reported by Nathan [1],
but introduces another similar warning on the min() macro below:
In file included from ../include/linux/list.h:9,
from ../include/linux/kobject.h:19,
from ../include/linux/of.h:17,
from ../include/linux/irqdomain.h:35,
from ../include/linux/acpi.h:13,
from ../include/linux/acpi_iort.h:10,
from ../drivers/iommu/dma-iommu.c:11:
../drivers/iommu/dma-iommu.c: In function 'iommu_dma_alloc_iova':
../include/linux/kernel.h:844:29: warning: comparison of distinct pointer types
lacks a cast
844 | (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
| ^~
../include/linux/kernel.h:858:4: note: in expansion of macro '__typecheck'
858 | (__typecheck(x, y) && __no_side_effects(x, y))
| ^~~~~~~~~~~
../include/linux/kernel.h:868:24: note: in expansion of macro '__safe_cmp'
868 | __builtin_choose_expr(__safe_cmp(x, y), \
| ^~~~~~~~~~
../include/linux/kernel.h:877:19: note: in expansion of macro '__careful_cmp'
877 | #define min(x, y) __careful_cmp(x, y, <)
| ^~~~~~~~~~~~~
../drivers/iommu/dma-iommu.c:427:15: note: in expansion of macro 'min'
427 | dma_limit = min(dma_limit, domain->geometry.aperture_end);
| ^~~
min_t(u64, dma_limit, domain->geometry.aperture_end) seems to fix it,
but not sure if that is correct.
Thanks,
Stephan
[1]:
https://lore.kernel.org/linux-iommu/20191123165108.GA15306@ubuntu-x2-xlarge-x86/
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu