platform/x86: asus-armoury: use cleanup.h to manage tunables

Convert init_rog_tunables() to use the cleanup infrastructure to
automatically free ac_rog_tunables if dc_rog_tunables allocation fails.

By declaring local pointers with the __free(kfree) attribute, the
manual kfree() in the error path can be removed. Upon successful
initialization, the ownership is transferred to the global struct
using no_free_ptr().

Assisted-by: Antigravity:gemini-3.5-flash
Signed-off-by: Marco Scardovi <scardracs@disroot.org>
Link: https://patch.msgid.link/20260707213741.6515-3-scardracs@disroot.org
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
Marco Scardovi
2026-07-07 23:36:12 +02:00
committed by Ilpo Järvinen
parent 76708233b4
commit 7952692dce

View File

@@ -16,6 +16,7 @@
#include <linux/acpi.h>
#include <linux/array_size.h>
#include <linux/bitfield.h>
#include <linux/cleanup.h>
#include <linux/device.h>
#include <linux/dmi.h>
#include <linux/err.h>
@@ -1010,7 +1011,8 @@ static int asus_fw_attr_add(void)
static int init_rog_tunables(void)
{
const struct power_limits *ac_limits, *dc_limits;
struct rog_tunables *ac_rog_tunables = NULL, *dc_rog_tunables = NULL;
struct rog_tunables *ac_rog_tunables __free(kfree) = NULL;
struct rog_tunables *dc_rog_tunables __free(kfree) = NULL;
const struct power_data *power_data;
const struct dmi_system_id *dmi_id;
@@ -1080,10 +1082,8 @@ static int init_rog_tunables(void)
dc_limits = power_data->dc_data;
if (dc_limits) {
dc_rog_tunables = kzalloc_obj(*dc_rog_tunables);
if (!dc_rog_tunables) {
kfree(ac_rog_tunables);
if (!dc_rog_tunables)
return -ENOMEM;
}
dc_rog_tunables->power_limits = dc_limits;
@@ -1124,8 +1124,8 @@ static int init_rog_tunables(void)
pr_debug("No DC PPT limits defined\n");
}
asus_armoury.rog_tunables[ASUS_ROG_TUNABLE_AC] = ac_rog_tunables;
asus_armoury.rog_tunables[ASUS_ROG_TUNABLE_DC] = dc_rog_tunables;
asus_armoury.rog_tunables[ASUS_ROG_TUNABLE_AC] = no_free_ptr(ac_rog_tunables);
asus_armoury.rog_tunables[ASUS_ROG_TUNABLE_DC] = no_free_ptr(dc_rog_tunables);
return 0;
}