]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
soc: qcom: wcnss: simplify with cleanup.h
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Wed, 3 Jul 2024 09:42:40 +0000 (11:42 +0200)
committerBjorn Andersson <andersson@kernel.org>
Sat, 6 Jul 2024 17:56:50 +0000 (12:56 -0500)
Allocate the memory with scoped/cleanup.h to reduce error handling (less
error paths) and make the code a bit simpler.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20240703-thermal-const-v1-5-6e59e139c65d@linaro.org
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
drivers/soc/qcom/wcnss_ctrl.c

index 148bcbac332dd3b478d5ea86e175c57404eed87f..62b424e90d908d1979a870e55b7e9e91ee47e5ff 100644 (file)
@@ -3,6 +3,7 @@
  * Copyright (c) 2016, Linaro Ltd.
  * Copyright (c) 2015, Sony Mobile Communications Inc.
  */
+#include <linux/cleanup.h>
 #include <linux/firmware.h>
 #include <linux/module.h>
 #include <linux/slab.h>
@@ -198,7 +199,6 @@ static int wcnss_request_version(struct wcnss_ctrl *wcnss)
  */
 static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
 {
-       struct wcnss_download_nv_req *req;
        const struct firmware *fw;
        struct device *dev = wcnss->dev;
        const char *nvbin = NVBIN_FILE;
@@ -206,18 +206,19 @@ static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
        ssize_t left;
        int ret;
 
-       req = kzalloc(sizeof(*req) + NV_FRAGMENT_SIZE, GFP_KERNEL);
+       struct wcnss_download_nv_req *req __free(kfree) = kzalloc(sizeof(*req) + NV_FRAGMENT_SIZE,
+                                                                 GFP_KERNEL);
        if (!req)
                return -ENOMEM;
 
        ret = of_property_read_string(dev->of_node, "firmware-name", &nvbin);
        if (ret < 0 && ret != -EINVAL)
-               goto free_req;
+               return ret;
 
        ret = request_firmware(&fw, nvbin, dev);
        if (ret < 0) {
                dev_err(dev, "Failed to load nv file %s: %d\n", nvbin, ret);
-               goto free_req;
+               return ret;
        }
 
        data = fw->data;
@@ -263,8 +264,6 @@ static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
 
 release_fw:
        release_firmware(fw);
-free_req:
-       kfree(req);
 
        return ret;
 }