]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
platform/x86/amd: Use scope-based cleanup for wbrf_record()
authorZilin Guan <zilin@seu.edu.cn>
Tue, 6 Jan 2026 09:13:18 +0000 (09:13 +0000)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 26 Jan 2026 13:46:32 +0000 (15:46 +0200)
Simplify resource management in wbrf_record() by using the scope-based
cleanup helper __free(). This ensures that the tmp and obj are
automatically freed when they go out of scope, eliminating the need for
explicit error handling labels and manual freeing.

Suggested-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Suggested-by: Markus Elfring <Markus.Elfring@web.de>
Co-developed-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
Link: https://patch.msgid.link/20260106091318.747019-2-zilin@seu.edu.cn
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/amd/wbrf.c

index 0f58d252b620afdb40a18aa46e1b189eb18c4f87..dc10d12bc80d672ed898d2071ed8bb2780a5134e 100644 (file)
@@ -42,8 +42,6 @@ static BLOCKING_NOTIFIER_HEAD(wbrf_chain_head);
 static int wbrf_record(struct acpi_device *adev, uint8_t action, struct wbrf_ranges_in_out *in)
 {
        union acpi_object argv4;
-       union acpi_object *tmp;
-       union acpi_object *obj;
        u32 num_of_ranges = 0;
        u32 num_of_elements;
        u32 arg_idx = 0;
@@ -74,7 +72,7 @@ static int wbrf_record(struct acpi_device *adev, uint8_t action, struct wbrf_ran
         */
        num_of_elements = 2 * num_of_ranges + 2;
 
-       tmp = kcalloc(num_of_elements, sizeof(*tmp), GFP_KERNEL);
+       union acpi_object *tmp __free(kfree) = kcalloc(num_of_elements, sizeof(*tmp), GFP_KERNEL);
        if (!tmp)
                return -ENOMEM;
 
@@ -101,26 +99,19 @@ static int wbrf_record(struct acpi_device *adev, uint8_t action, struct wbrf_ran
                tmp[arg_idx++].integer.value = in->band_list[i].end;
        }
 
-       obj = acpi_evaluate_dsm(adev->handle, &wifi_acpi_dsm_guid,
-                               WBRF_REVISION, WBRF_RECORD, &argv4);
+       union acpi_object *obj __free(kfree) =
+               acpi_evaluate_dsm(adev->handle, &wifi_acpi_dsm_guid,
+                                 WBRF_REVISION, WBRF_RECORD, &argv4);
 
-       if (!obj) {
-               kfree(tmp);
+       if (!obj)
                return -EINVAL;
-       }
 
-       if (obj->type != ACPI_TYPE_INTEGER) {
-               ret = -EINVAL;
-               goto out;
-       }
+       if (obj->type != ACPI_TYPE_INTEGER)
+               return -EINVAL;
 
        ret = obj->integer.value;
        if (ret)
-               ret = -EINVAL;
-
-out:
-       ACPI_FREE(obj);
-       kfree(tmp);
+               return -EINVAL;
 
        return ret;
 }