From: Nicolin Chen nicolinc@nvidia.com 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@intel.com