> From: Nicolin Chen <nicolinc@xxxxxxxxxx> > Sent: Thursday, September 15, 2022 3:56 PM > > The clock is not symmetrically disabled in the error-out routines. > > Fixes: 109bd48ea2e1 ("iommu/msm: Add DT adaptation") > Cc: stable@xxxxxxxxxxxxxxx > Cc: Sricharan R <sricharan@xxxxxxxxxxxxxx> > Cc: Andy Gross <agross@xxxxxxxxxx> > Cc: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> > Cc: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxx> > Signed-off-by: Nicolin Chen <nicolinc@xxxxxxxxxx> > --- > drivers/iommu/msm_iommu.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c > index 6a24aa804ea3..a7d41ba4a47b 100644 > --- a/drivers/iommu/msm_iommu.c > +++ b/drivers/iommu/msm_iommu.c > @@ -418,6 +418,7 @@ static int msm_iommu_attach_dev(struct > iommu_domain *domain, struct device *dev) > list_for_each_entry(master, &iommu->ctx_list, list) { > if (master->num) { > dev_err(dev, "domain already > attached"); > + __disable_clocks(iommu); > ret = -EEXIST; > goto fail; > } > @@ -425,6 +426,7 @@ static int msm_iommu_attach_dev(struct > iommu_domain *domain, struct device *dev) > msm_iommu_alloc_ctx(iommu- > >context_map, > 0, iommu->ncb); > if (IS_ERR_VALUE(master->num)) { > + __disable_clocks(iommu); also need to free_ctx() for already walked nodes. btw it's a bit weird that although here is coded based on a list in reality there is at most one node per list. According to insert_iommu_master() a master object is allocated and inserted to the ctx_list only if the ctx_list is currently empty... > ret = -ENODEV; > goto fail; > } > -- > 2.17.1