Re: [PATCH v2 6/7] iommu/dma: Centralise iommu_setup_dma_ops()

From: Jason Gunthorpe
Date: Sun Dec 17 2023 - 08:07:04 EST


On Thu, Dec 14, 2023 at 06:22:49PM +0000, Robin Murphy wrote:

> Taking yet another look, there's not actually one single place we can do
> this right now which will work in a manageable way for all cases.

The dma ops should be set after changing the translation and there is
only one place that attachs the domain? What prevents putting it
there?

> @@ -3217,18 +3220,9 @@ static ssize_t iommu_group_store_type(struct iommu_group *group,
> if (ret)
> goto out_unlock;
> - /*
> - * Release the mutex here because ops->probe_finalize() call-back of
> - * some vendor IOMMU drivers calls arm_iommu_attach_device() which
> - * in-turn might call back into IOMMU core code, where it tries to take
> - * group->mutex, resulting in a deadlock.
> - */
> - mutex_unlock(&group->mutex);
> -
> /* Make sure dma_ops is appropriatley set */
> for_each_group_device(group, gdev)
> - iommu_group_do_probe_finalize(gdev->dev);
> - return count;

If we are turning this into something that only works for the ARM DMA
then the remaining caller should be guarded by an IS_ENABLED

Jason