From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Hans de Goede <hansg@kernel.org>
Cc: Bartosz Golaszewski <brgl@kernel.org>,
Arnd Bergmann <arnd@arndb.de>, Andy Shevchenko <andy@kernel.org>,
Linus Walleij <linusw@kernel.org>,
linux-input@vger.kernel.org, linux-gpio@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH 2/3] Input: soc_button_array - use __free() cleanup facilities to free memory
Date: Tue, 20 Oct 2026 18:50:00 -0700 [thread overview]
Message-ID: <20261021015004.1537738-2-dmitry.torokhov@gmail.com> (raw)
In-Reply-To: <20261021015004.1537738-1-dmitry.torokhov@gmail.com>
Switch to using __free(kfree) cleanup facilities instead of doing manual
cleanup or abusing devm for allocations that are only needed during
probing.
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/input/misc/soc_button_array.c | 52 ++++++++++++---------------
1 file changed, 23 insertions(+), 29 deletions(-)
diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c
index d4dc4e7116a7..8d782ef4f78b 100644
--- a/drivers/input/misc/soc_button_array.c
+++ b/drivers/input/misc/soc_button_array.c
@@ -366,10 +366,10 @@ static const u8 btns_desc_uuid[16] = {
static struct soc_button_info *soc_button_get_button_info(struct device *dev)
{
struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER };
- const union acpi_object *desc, *el0, *uuid, *btns_desc = NULL;
- struct soc_button_info *button_info;
+ const union acpi_object *el0, *uuid, *btns_desc = NULL;
acpi_status status;
int i, btn, collection_uid = -1;
+ int error;
status = acpi_evaluate_object_typed(ACPI_HANDLE(dev), "_DSD", NULL,
&buf, ACPI_TYPE_PACKAGE);
@@ -378,8 +378,9 @@ static struct soc_button_info *soc_button_get_button_info(struct device *dev)
return ERR_PTR(-ENODEV);
}
+ const union acpi_object *desc __free(kfree) = buf.pointer;
+
/* Look for the Button Descriptors UUID */
- desc = buf.pointer;
for (i = 0; (i + 1) < desc->package.count; i += 2) {
uuid = &desc->package.elements[i];
@@ -397,8 +398,7 @@ static struct soc_button_info *soc_button_get_button_info(struct device *dev)
if (!btns_desc || !btns_desc->package.count) {
dev_err(dev, "ACPI Button Descriptors not found\n");
- button_info = ERR_PTR(-ENODEV);
- goto out;
+ return ERR_PTR(-ENODEV);
}
/* The first package describes the collection */
@@ -414,32 +414,26 @@ static struct soc_button_info *soc_button_get_button_info(struct device *dev)
}
if (collection_uid == -1) {
dev_err(dev, "Invalid Button Collection Descriptor\n");
- button_info = ERR_PTR(-ENODEV);
- goto out;
+ return ERR_PTR(-ENODEV);
}
/* There are package.count - 1 buttons + 1 terminating empty entry */
- button_info = devm_kcalloc(dev, btns_desc->package.count,
- sizeof(*button_info), GFP_KERNEL);
- if (!button_info) {
- button_info = ERR_PTR(-ENOMEM);
- goto out;
- }
+ struct soc_button_info *button_info __free(kfree) =
+ kzalloc_objs(*button_info, btns_desc->package.count);
+ if (!button_info)
+ return ERR_PTR(-ENOMEM);
/* Parse the button descriptors */
for (i = 1, btn = 0; i < btns_desc->package.count; i++, btn++) {
- if (soc_button_parse_btn_desc(dev,
- &btns_desc->package.elements[i],
- collection_uid,
- &button_info[btn])) {
- button_info = ERR_PTR(-ENODEV);
- goto out;
- }
+ error = soc_button_parse_btn_desc(dev,
+ &btns_desc->package.elements[i],
+ collection_uid,
+ &button_info[btn]);
+ if (error)
+ return ERR_PTR(error);
}
-out:
- kfree(buf.pointer);
- return button_info;
+ return_ptr(button_info);
}
static void soc_button_remove(struct platform_device *pdev)
@@ -458,6 +452,7 @@ static int soc_button_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev;
const struct soc_device_data *device_data;
const struct soc_button_info *button_info;
+ const struct soc_button_info *dynamic_button_info __free(kfree) = NULL;
struct soc_button_data *priv;
struct platform_device *pd;
int i;
@@ -473,9 +468,11 @@ static int soc_button_probe(struct platform_device *pdev)
if (device_data && device_data->button_info) {
button_info = device_data->button_info;
} else {
- button_info = soc_button_get_button_info(dev);
- if (IS_ERR(button_info))
- return PTR_ERR(button_info);
+ dynamic_button_info = soc_button_get_button_info(dev);
+ if (IS_ERR(dynamic_button_info))
+ return PTR_ERR(dynamic_button_info);
+
+ button_info = dynamic_button_info;
}
error = gpiod_count(dev, NULL);
@@ -507,9 +504,6 @@ static int soc_button_probe(struct platform_device *pdev)
if (!priv->children[0] && !priv->children[1])
return -ENODEV;
- if (!device_data || !device_data->button_info)
- devm_kfree(dev, button_info);
-
return 0;
}
--
2.56.0.212.g129ede20d9-goog
next prev parent reply other threads:[~2026-10-21 1:50 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-21 1:49 [PATCH 1/3] Input: soc_button_array - use resources to set up IRQ info for gpio-keys Dmitry Torokhov
2026-10-21 1:50 ` Dmitry Torokhov [this message]
2026-10-21 10:06 ` [PATCH 2/3] Input: soc_button_array - use __free() cleanup facilities to free memory Bartosz Golaszewski
2026-10-21 17:05 ` Andy Shevchenko
2026-10-21 17:15 ` Dmitry Torokhov
2026-10-21 17:43 ` Andy Shevchenko
2026-10-21 17:53 ` Dmitry Torokhov
2026-10-21 18:21 ` Andy Shevchenko
2026-10-21 1:50 ` [PATCH 3/3] Input: soc_button_array - convert to software nodes Dmitry Torokhov
2026-10-21 10:11 ` Bartosz Golaszewski
2026-10-21 16:56 ` Dmitry Torokhov
2026-10-21 17:02 ` Arnd Bergmann
2026-10-21 17:16 ` Dmitry Torokhov
2026-10-21 17:13 ` Andy Shevchenko
2026-10-21 17:23 ` Dmitry Torokhov
2026-10-21 1:59 ` [PATCH 1/3] Input: soc_button_array - use resources to set up IRQ info for gpio-keys sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261021015004.1537738-2-dmitry.torokhov@gmail.com \
--to=dmitry.torokhov@gmail.com \
--cc=andy@kernel.org \
--cc=arnd@arndb.de \
--cc=brgl@kernel.org \
--cc=hansg@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.