Thread (42 messages) 42 messages, 5 authors, 2025-07-17

Re: [PATCH v9 17/29] iommufd: Add mmap interface

From: "Arnd Bergmann" <arnd@arndb.de>
Date: 2025-07-14 06:08:46
Also in: linux-arm-kernel, linux-iommu, linux-kselftest, linux-patches, linux-tegra, lkml

On Thu, Jul 10, 2025, at 07:59, Nicolin Chen wrote:
 EXPORT_SYMBOL_NS_GPL(_iommufd_object_undepend, "IOMMUFD");

+/*
+ * Allocate an @offset to return to user space to use for an mmap() 
syscall
+ *
+ * Driver should use a per-structure helper in include/linux/iommufd.h
+ */
+int _iommufd_alloc_mmap(struct iommufd_ctx *ictx, struct 
iommufd_object *owner,
+			phys_addr_t mmio_addr, size_t length,
+			unsigned long *offset)
+{
...
+
+	/* Skip the first page to ease caller identifying the returned offset 
*/
+	rc = mtree_alloc_range(&ictx->mt_mmap, &startp, immap, immap->length,
+			       PAGE_SIZE, PHYS_ADDR_MAX, GFP_KERNEL);

This produces a warning on 32-bit targets with a 64-bit phys_addr_t,
in practice this would be ARM Cortex-A15 or -A17 systems:

In file included from include/linux/overflow.h:6,
                 ...
                 from drivers/iommu/iommufd/driver.c:4:
drivers/iommu/iommufd/driver.c: In function '_iommufd_alloc_mmap':
include/linux/limits.h:11:25: error: conversion from 'long long unsigned int' to 'long unsigned int' changes value from '18446744073709551615' to '4294967295' [-Werror=overflow]
   11 | #define PHYS_ADDR_MAX   (~(phys_addr_t)0)
      |                         ^~~~~~~~~~~~~~~~~
drivers/iommu/iommufd/driver.c:61:43: note: in expansion of macro 'PHYS_ADDR_MAX'
   61 |                                PAGE_SIZE, PHYS_ADDR_MAX, GFP_KERNEL);
      |                                           ^~~~~~~~~~~~~


The mtree_alloc_range() interface explicitly operates on 'unsigned long'
address values, so I don't see an immediate workaround for this that would
make it work on these machines. On the other hand, 

At the moment, the only drivers that select CONFIG_IOMMUFD_DRIVER
on 32-bit Arm systems are CONFIG_PDS_VFIO_PCI and CONFIG_MLX5_VFIO_PCI.
It's probably fine to make all three symbols "depends on 64BIT" for
now, but I don't know if there may be more drivers like this in the
future that actually could make sense on embedded systems.

     Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help