]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mtd: rawnand: mtk: Factorize out the logic cleaning mtk chips
authorMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 26 Aug 2024 15:30:18 +0000 (17:30 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 Oct 2024 14:29:07 +0000 (16:29 +0200)
[ Upstream commit 81cb3be3261e766a1f8efab9e3154a4f4fd9d03d ]

There are some un-freed resources in one of the error path which would
benefit from a helper going through all the registered mtk chips one by
one and perform all the necessary cleanup. This is precisely what the
remove path does, so let's extract the logic in a helper.

There is no functional change.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Pratyush Yadav <pratyush@kernel.org>
Reviewed-by: Matthias Brugger <matthias.bgg@kernel.org>
Link: https://lore.kernel.org/linux-mtd/20240826153019.67106-1-miquel.raynal@bootlin.com
Stable-dep-of: 2073ae37d550 ("mtd: rawnand: mtk: Fix init error path")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/mtd/nand/raw/mtk_nand.c

index c4ef4eae5da233e3ff830d76d55ff56078d8cf5e..3fb32a59fdf61e07e07487f8d1ffc0968d151bc2 100644 (file)
@@ -1429,6 +1429,23 @@ static int mtk_nfc_nand_chip_init(struct device *dev, struct mtk_nfc *nfc,
        return 0;
 }
 
+static void mtk_nfc_nand_chips_cleanup(struct mtk_nfc *nfc)
+{
+       struct mtk_nfc_nand_chip *mtk_chip;
+       struct nand_chip *chip;
+       int ret;
+
+       while (!list_empty(&nfc->chips)) {
+               mtk_chip = list_first_entry(&nfc->chips,
+                                           struct mtk_nfc_nand_chip, node);
+               chip = &mtk_chip->nand;
+               ret = mtd_device_unregister(nand_to_mtd(chip));
+               WARN_ON(ret);
+               nand_cleanup(chip);
+               list_del(&mtk_chip->node);
+       }
+}
+
 static int mtk_nfc_nand_chips_init(struct device *dev, struct mtk_nfc *nfc)
 {
        struct device_node *np = dev->of_node;
@@ -1567,20 +1584,8 @@ release_ecc:
 static void mtk_nfc_remove(struct platform_device *pdev)
 {
        struct mtk_nfc *nfc = platform_get_drvdata(pdev);
-       struct mtk_nfc_nand_chip *mtk_chip;
-       struct nand_chip *chip;
-       int ret;
-
-       while (!list_empty(&nfc->chips)) {
-               mtk_chip = list_first_entry(&nfc->chips,
-                                           struct mtk_nfc_nand_chip, node);
-               chip = &mtk_chip->nand;
-               ret = mtd_device_unregister(nand_to_mtd(chip));
-               WARN_ON(ret);
-               nand_cleanup(chip);
-               list_del(&mtk_chip->node);
-       }
 
+       mtk_nfc_nand_chips_cleanup(nfc);
        mtk_ecc_release(nfc->ecc);
 }