On Wed, Jul 02, 2025 at 09:45:26AM +0000, Tian, Kevin wrote:
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.
I don't quite follow this...
Do you suggest to move this xa_for_each to iopt_unmap_iova_range?
What's that local flag used for?
Thanks Nicolin