Unverified Commit 2ee83230 authored by Zilin Guan's avatar Zilin Guan Committed by Ilpo Järvinen
Browse files

platform/x86/amd: Use scope-based cleanup for wbrf_record()



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: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Suggested-by: default avatarMarkus Elfring <Markus.Elfring@web.de>
Co-developed-by: default avatarJianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: default avatarJianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: default avatarZilin Guan <zilin@seu.edu.cn>
Link: https://patch.msgid.link/20260106091318.747019-2-zilin@seu.edu.cn


Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent 6343e067
Loading
Loading
Loading
Loading
+8 −17
Original line number Diff line number Diff line
@@ -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,
	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;
}