[PATCH 2/5] ACPI: sysfs: use device lifecycle for _STR result

From: Thomas Weißschuh
Date: Thu Jun 13 2024 - 16:15:52 EST


The string assigned to dev->pnp.str effectively shares the lifetime of
the device. Use devm_-APIs to avoid a manual cleanup path.

This will be useful when the attributes themselves will be managed by
the device core.

Signed-off-by: Thomas Weißschuh <linux@xxxxxxxxxxxxxx>
---
drivers/acpi/device_sysfs.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/acpi/device_sysfs.c b/drivers/acpi/device_sysfs.c
index 4bedbe8f57ed..d0ca159d93e1 100644
--- a/drivers/acpi/device_sysfs.c
+++ b/drivers/acpi/device_sysfs.c
@@ -494,7 +494,7 @@ static ssize_t status_show(struct device *dev, struct device_attribute *attr,
}
static DEVICE_ATTR_RO(status);

-static const char *acpi_device_str(struct acpi_device *dev)
+static const char *devm_acpi_device_str(struct acpi_device *dev)
{
struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
union acpi_object *str_obj;
@@ -522,7 +522,7 @@ static const char *acpi_device_str(struct acpi_device *dev)
buf, sizeof(buf) - 1);
buf[result++] = '\0';

- ret = kstrdup(buf, GFP_KERNEL);
+ ret = devm_kstrdup(&dev->dev, buf, GFP_KERNEL);
kfree(buffer.pointer);

return ret;
@@ -558,7 +558,7 @@ int acpi_device_setup_files(struct acpi_device *dev)
/*
* If device has _STR, 'description' file is created
*/
- dev->pnp.str = acpi_device_str(dev);
+ dev->pnp.str = devm_acpi_device_str(dev);
if (dev->pnp.str) {
result = device_create_file(&dev->dev, &dev_attr_description);
if (result)
@@ -632,10 +632,8 @@ void acpi_device_remove_files(struct acpi_device *dev)
/*
* If device has _STR, remove 'description' file
*/
- if (acpi_has_method(dev->handle, "_STR")) {
- kfree(dev->pnp.str);
+ if (acpi_has_method(dev->handle, "_STR"))
device_remove_file(&dev->dev, &dev_attr_description);
- }
/*
* If device has _EJ0, remove 'eject' file.
*/

--
2.45.2