Re: [PATCH] iommu: Clear iommu-dma ops on cleanup

From: Chen-Yu Tsai
Date: Thu Apr 10 2025 - 23:55:31 EST


On Thu, Apr 10, 2025 at 7:24 PM Robin Murphy <robin.murphy@xxxxxxx> wrote:
>
> If iommu_device_register() encounters an error, it can end up tearing
> down already-configured groups and default domains, however this
> currently still leaves devices hooked up to iommu-dma (and even
> historically the behaviour in this area was at best inconsistent across
> architectures/drivers...) Although in the case that an IOMMU is present
> whose driver has failed to probe, users cannot necessarily expect DMA to
> work anyway, it's still arguable that we should do our best to put
> things back as if the IOMMU driver was never there at all, and certainly
> the potential for crashing in iommu-dma itself is undesirable. Make sure
> we clean up the dev->dma_iommu flag along with everything else.
>
> Reported-by: Chen-Yu Tsai <wenst@xxxxxxxxxxxx>

Closes: https://lore.kernel.org/all/CAGXv+5HJpTYmQ2h-GD7GjyeYT7bL9EBCvu0mz5LgpzJZtzfW0w@xxxxxxxxxxxxxx/

Tested-by: Chen-Yu Tsai <wenst@xxxxxxxxxxxx>

> Signed-off-by: Robin Murphy <robin.murphy@xxxxxxx>
> ---
> drivers/iommu/iommu.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> index c8033ca66377..095f9e9afe8c 100644
> --- a/drivers/iommu/iommu.c
> +++ b/drivers/iommu/iommu.c
> @@ -538,6 +538,9 @@ static void iommu_deinit_device(struct device *dev)
> dev->iommu_group = NULL;
> module_put(ops->owner);
> dev_iommu_free(dev);
> +#ifdef CONFIG_IOMMU_DMA
> + dev->dma_iommu = false;
> +#endif
> }
>
> static struct iommu_domain *pasid_array_entry_to_domain(void *entry)
> --
> 2.39.2.101.g768bb238c484.dirty
>