]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mfd: syscon: Use scoped variables with memory allocators to simplify error paths
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Sun, 7 Jul 2024 11:48:23 +0000 (13:48 +0200)
committerLee Jones <lee@kernel.org>
Fri, 30 Aug 2024 08:40:13 +0000 (09:40 +0100)
Allocate the memory with scoped/cleanup.h to reduce error handling and
make the code a bit simpler.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20240707114823.9175-2-krzysztof.kozlowski@linaro.org
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/mfd/syscon.c

index 33f1e07ab24dc27a36a607aa11e1df4e70643685..2ce15f60eb1071102f12c5a2b2c73be962ac7dae 100644 (file)
@@ -8,6 +8,7 @@
  * Author: Dong Aisheng <dong.aisheng@linaro.org>
  */
 
+#include <linux/cleanup.h>
 #include <linux/clk.h>
 #include <linux/err.h>
 #include <linux/hwspinlock.h>
@@ -45,7 +46,6 @@ static const struct regmap_config syscon_regmap_config = {
 static struct syscon *of_syscon_register(struct device_node *np, bool check_res)
 {
        struct clk *clk;
-       struct syscon *syscon;
        struct regmap *regmap;
        void __iomem *base;
        u32 reg_io_width;
@@ -54,20 +54,16 @@ static struct syscon *of_syscon_register(struct device_node *np, bool check_res)
        struct resource res;
        struct reset_control *reset;
 
-       syscon = kzalloc(sizeof(*syscon), GFP_KERNEL);
+       struct syscon *syscon __free(kfree) = kzalloc(sizeof(*syscon), GFP_KERNEL);
        if (!syscon)
                return ERR_PTR(-ENOMEM);
 
-       if (of_address_to_resource(np, 0, &res)) {
-               ret = -ENOMEM;
-               goto err_map;
-       }
+       if (of_address_to_resource(np, 0, &res))
+               return ERR_PTR(-ENOMEM);
 
        base = of_iomap(np, 0);
-       if (!base) {
-               ret = -ENOMEM;
-               goto err_map;
-       }
+       if (!base)
+               return ERR_PTR(-ENOMEM);
 
        /* Parse the device's DT node for an endianness specification */
        if (of_property_read_bool(np, "big-endian"))
@@ -152,7 +148,7 @@ static struct syscon *of_syscon_register(struct device_node *np, bool check_res)
        list_add_tail(&syscon->list, &syscon_list);
        spin_unlock(&syscon_list_slock);
 
-       return syscon;
+       return_ptr(syscon);
 
 err_reset:
        reset_control_put(reset);
@@ -163,8 +159,6 @@ err_clk:
        regmap_exit(regmap);
 err_regmap:
        iounmap(base);
-err_map:
-       kfree(syscon);
        return ERR_PTR(ret);
 }