RE: [PATCH v3 08/20] iommu/sprd: Remove detach_dev callback

Tian, Kevin
2022-11-29T03:35:08Z

> From: Lu Baolu <baolu.lu@linux.intel.com>
> Sent: Monday, November 28, 2022 2:47 PM
>
> The IOMMU driver supports default domain, so the detach_dev op will never
> be called. Remove it to avoid dead code.
>
> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
> ---
> drivers/iommu/sprd-iommu.c | 16 ----------------
> 1 file changed, 16 deletions(-)
>
> diff --git a/drivers/iommu/sprd-iommu.c b/drivers/iommu/sprd-iommu.c
> index 219bfa11f7f4..ae94d74b73f4 100644
> --- a/drivers/iommu/sprd-iommu.c
> +++ b/drivers/iommu/sprd-iommu.c
> @@ -255,21 +255,6 @@ static int sprd_iommu_attach_device(struct
> iommu_domain *domain,
> return 0;
> }
>
> -static void sprd_iommu_detach_device(struct iommu_domain *domain,
> - struct device *dev)
> -{
> - struct sprd_iommu_domain *dom = to_sprd_domain(domain);
> - struct sprd_iommu_device *sdev = dom->sdev;
> - size_t pgt_size = sprd_iommu_pgt_size(domain);
> -
> - if (!sdev)
> - return;
> -
> - dma_free_coherent(sdev->dev, pgt_size, dom->pgt_va, dom-
> >pgt_pa);
> - sprd_iommu_hw_en(sdev, false);
> - dom->sdev = NULL;
> -}
> -

Looks this reveals a bug in this driver (not caused by this removal).

sprd_iommu_attach_device() doesn't check whether the device has
been already attached to a domain and do auto detach.

It's written in a way that .detach_dev() must be called to free the
dma buffer but ignores the fact that it's not called when default
domain support is claimed.

Then the dma buffer allocated for the previous domain was left
unhandled, causing memory leak.