Use devm_add_action_or_reset to avoid the situation where the release
function is not called when devm_add_action returns an error.

Signed-off-by: Tian Tao <tiant...@hisilicon.com>
---
v2:
repositioning devm_add_action_or_reset in the function
arm_smmu_setup_msis, and check the return value.
---
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c 
b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
index 2ddf5ec..b4d3b7d 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
@@ -2680,7 +2680,8 @@ static int arm_smmu_cmdq_init(struct arm_smmu_device 
*smmu)
                ret = -ENOMEM;
        } else {
                cmdq->valid_map = bitmap;
-               devm_add_action(smmu->dev, arm_smmu_cmdq_free_bitmap, bitmap);
+               ret = devm_add_action_or_reset(smmu->dev,
+                                              arm_smmu_cmdq_free_bitmap, 
bitmap);
        }
 
        return ret;
@@ -2921,6 +2922,13 @@ static void arm_smmu_setup_msis(struct arm_smmu_device 
*smmu)
                return;
        }
 
+       /* Add callback to free MSIs on teardown */
+       ret = devm_add_action_or_reset(dev, arm_smmu_free_msis, dev);
+       if (ret) {
+               dev_warn(dev, "failed to add callback to free MSIs on 
teardown\n");
+               return;
+       }
+
        for_each_msi_entry(desc, dev) {
                switch (desc->platform.msi_index) {
                case EVTQ_MSI_INDEX:
@@ -2936,9 +2944,6 @@ static void arm_smmu_setup_msis(struct arm_smmu_device 
*smmu)
                        continue;
                }
        }
-
-       /* Add callback to free MSIs on teardown */
-       devm_add_action(dev, arm_smmu_free_msis, dev);
 }
 
 static void arm_smmu_setup_unique_irqs(struct arm_smmu_device *smmu)
-- 
2.7.4

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to