RE: [PATCH v7 10/28] iommufd/access: Bypass access->ops->unmap for internal use

From: Tian, Kevin
Date: Wed Jul 02 2025 - 05:48:53 EST


> From: Nicolin Chen <nicolinc@xxxxxxxxxx>
> Sent: Friday, June 27, 2025 3:35 AM
>
> +int iommufd_access_notify_unmap(struct io_pagetable *iopt, unsigned long
> iova,
> + unsigned long length)
> {
> struct iommufd_ioas *ioas =
> container_of(iopt, struct iommufd_ioas, iopt);
> struct iommufd_access *access;
> unsigned long index;
> + int ret = 0;
>
> xa_lock(&ioas->iopt.access_list);
> + /* Bypass any unmap if there is an internal access */
> + xa_for_each(&ioas->iopt.access_list, index, access) {
> + if (iommufd_access_is_internal(access)) {
> + ret = -EBUSY;
> + goto unlock;
> + }
> + }
> +

hmm all those checks are per iopt. Could do one-off check in
iopt_unmap_iova_range() and store the result in a local flag.

Then use that flag to decide whether to return -EBUSY if
area->num_accesses is true in the loop.

Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>