[PATCH v6 11/25] iommufd/driver: Add iommufd_hw_queue_depend/undepend() helpers
Jason Gunthorpe
jgg at nvidia.com
Mon Jun 16 07:06:08 PDT 2025
On Sat, Jun 14, 2025 at 12:14:36AM -0700, Nicolin Chen wrote:
> NVIDIA Virtual Command Queue is one of the iommufd users exposing vIOMMU
> features to user space VMs. Its hardware has a strict rule when mapping
> and unmapping multiple global CMDQVs to/from a VM-owned VINTF, requiring
> mappings in ascending order and unmappings in descending order.
>
> The tegra241-cmdqv driver can apply the rule for a mapping in the LVCMDQ
> allocation handler. However, it can't do the same for an unmapping since
> user space could start random destroy calls breaking the rule, while the
> destroy op in the driver level can't reject a destroy call as it returns
> void.
>
> Add iommufd_hw_queue_depend/undepend for-driver helpers, allowing LVCMDQ
> allocator to refcount_inc() a sibling LVCMDQ object and LVCMDQ destroyer
> to refcount_dec(), so that iommufd core will help block a random destroy
> call that breaks the rule.
>
> This is a bit of compromise, because a driver might end up with abusing
> the API that deadlocks the objects. So restrict the API to a dependency
> between two driver-allocated objects of the same type, as iommufd would
> unlikely build any core-level dependency in this case. And encourage to
> use the macro version that currently supports the HW QUEUE objects only.
>
> Reviewed-by: Lu Baolu <baolu.lu at linux.intel.com>
> Reviewed-by: Pranjal Shrivastava <praan at google.com>
> Signed-off-by: Nicolin Chen <nicolinc at nvidia.com>
> ---
> include/linux/iommufd.h | 44 ++++++++++++++++++++++++++++++++++
> drivers/iommu/iommufd/driver.c | 28 ++++++++++++++++++++++
> 2 files changed, 72 insertions(+)
Reviewed-by: Jason Gunthorpe <jgg at nvidia.com>
Jason
More information about the linux-arm-kernel
mailing list