]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mfd: mt6360: Use scoped variables with memory allocators to simplify error paths
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Sun, 7 Jul 2024 11:48:22 +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-1-krzysztof.kozlowski@linaro.org
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/mfd/mt6360-core.c

index 2685efa5c9e2d374a885a066c49f89acd0eca67c..b9b1036c8ff463d61325a292161f1c147d2283f7 100644 (file)
@@ -5,6 +5,7 @@
  * Author: Gene Chen <gene_chen@richtek.com>
  */
 
+#include <linux/cleanup.h>
 #include <linux/crc8.h>
 #include <linux/i2c.h>
 #include <linux/init.h>
@@ -404,7 +405,6 @@ static int mt6360_regmap_read(void *context, const void *reg, size_t reg_size,
        u8 reg_addr = *(u8 *)(reg + 1);
        struct i2c_client *i2c;
        bool crc_needed = false;
-       u8 *buf;
        int buf_len = MT6360_ALLOC_READ_SIZE(val_size);
        int read_size = val_size;
        u8 crc;
@@ -423,7 +423,7 @@ static int mt6360_regmap_read(void *context, const void *reg, size_t reg_size,
                read_size += MT6360_CRC_CRC8_SIZE;
        }
 
-       buf = kzalloc(buf_len, GFP_KERNEL);
+       u8 *buf __free(kfree) = kzalloc(buf_len, GFP_KERNEL);
        if (!buf)
                return -ENOMEM;
 
@@ -433,24 +433,19 @@ static int mt6360_regmap_read(void *context, const void *reg, size_t reg_size,
        ret = i2c_smbus_read_i2c_block_data(i2c, reg_addr, read_size,
                                            buf + MT6360_CRC_PREDATA_OFFSET);
        if (ret < 0)
-               goto out;
-       else if (ret != read_size) {
-               ret = -EIO;
-               goto out;
-       }
+               return ret;
+       else if (ret != read_size)
+               return -EIO;
 
        if (crc_needed) {
                crc = crc8(ddata->crc8_tbl, buf, val_size + MT6360_CRC_PREDATA_OFFSET, 0);
-               if (crc != buf[val_size + MT6360_CRC_PREDATA_OFFSET]) {
-                       ret = -EIO;
-                       goto out;
-               }
+               if (crc != buf[val_size + MT6360_CRC_PREDATA_OFFSET])
+                       return -EIO;
        }
 
        memcpy(val, buf + MT6360_CRC_PREDATA_OFFSET, val_size);
-out:
-       kfree(buf);
-       return (ret < 0) ? ret : 0;
+
+       return 0;
 }
 
 static int mt6360_regmap_write(void *context, const void *val, size_t val_size)