]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ACPI: button: Use string literals for generating netlink messages
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 1 Jun 2026 17:07:57 +0000 (19:07 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 2 Jun 2026 19:07:09 +0000 (21:07 +0200)
Instead of storing strings that never change later under
acpi_device_class(device) and using them for generating netlink
messages, use pointers to string literals with the same content.

This also allows the clearing of the acpi_device_class(device)
area during driver removal and in the probe rollback path to be
dropped.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://patch.msgid.link/2070791.usQuhbGJ8B@rafael.j.wysocki
drivers/acpi/button.c

index b1a6ec2ae8f27553dccd3fa6fcb45a289bd42165..a77e0b4eb7f8a215885a6a2dc9cedab85b17b78e 100644 (file)
 #define ACPI_BUTTON_NOTIFY_WAKE                0x02
 #define ACPI_BUTTON_NOTIFY_STATUS      0x80
 
-#define ACPI_BUTTON_SUBCLASS_POWER     "power"
+#define ACPI_BUTTON_CLASS_POWER                "button/power"
 #define ACPI_BUTTON_DEVICE_NAME_POWER  "Power Button"
 #define ACPI_BUTTON_TYPE_POWER         0x01
 
-#define ACPI_BUTTON_SUBCLASS_SLEEP     "sleep"
+#define ACPI_BUTTON_CLASS_SLEEP                "button/sleep"
 #define ACPI_BUTTON_DEVICE_NAME_SLEEP  "Sleep Button"
 #define ACPI_BUTTON_TYPE_SLEEP         0x03
 
+#define ACPI_BUTTON_CLASS_LID          "button/lid"
 #define ACPI_BUTTON_SUBCLASS_LID       "lid"
 #define ACPI_BUTTON_DEVICE_NAME_LID    "Lid Switch"
 #define ACPI_BUTTON_TYPE_LID           0x05
@@ -173,6 +174,7 @@ struct acpi_button {
        struct device *dev;             /* physical button device */
        unsigned int type;
        struct input_dev *input;
+       const char *class;              /* for netlink messages */
        char phys[32];                  /* for input device */
        unsigned long pushed;
        bool last_state;
@@ -462,8 +464,7 @@ static void acpi_button_notify(acpi_handle handle, u32 event, void *data)
        input_report_key(input, keycode, 0);
        input_sync(input);
 
-       acpi_bus_generate_netlink_event(acpi_device_class(device),
-                                       dev_name(&device->dev),
+       acpi_bus_generate_netlink_event(button->class, dev_name(&device->dev),
                                        event, ++button->pushed);
 }
 
@@ -530,7 +531,6 @@ static int acpi_button_probe(struct platform_device *pdev)
        struct acpi_button *button;
        struct input_dev *input;
        acpi_status status;
-       char *class;
        u8 button_type;
        int error = 0;
 
@@ -559,17 +559,15 @@ static int acpi_button_probe(struct platform_device *pdev)
        button->input = input;
        button->type = button_type;
 
-       class = acpi_device_class(device);
-
        switch (button_type) {
        case ACPI_BUTTON_TYPE_LID:
+               button->class = ACPI_BUTTON_CLASS_LID;
+
                input->name = ACPI_BUTTON_DEVICE_NAME_LID;
                input_set_capability(input, EV_SW, SW_LID);
                input->open = acpi_lid_input_open;
 
                handler = acpi_lid_notify;
-               sprintf(class, "%s/%s",
-                       ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_LID);
 
                error = acpi_lid_add_fs(button);
                if (error) {
@@ -579,22 +577,22 @@ static int acpi_button_probe(struct platform_device *pdev)
                break;
 
        case ACPI_BUTTON_TYPE_POWER:
+               button->class = ACPI_BUTTON_CLASS_POWER;
+
                input->name = ACPI_BUTTON_DEVICE_NAME_POWER;
                input_set_capability(input, EV_KEY, KEY_POWER);
                input_set_capability(input, EV_KEY, KEY_WAKEUP);
 
                handler = acpi_button_notify;
-               sprintf(class, "%s/%s",
-                       ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER);
                break;
 
        case ACPI_BUTTON_TYPE_SLEEP:
+               button->class = ACPI_BUTTON_CLASS_SLEEP;
+
                input->name = ACPI_BUTTON_DEVICE_NAME_SLEEP;
                input_set_capability(input, EV_KEY, KEY_SLEEP);
 
                handler = acpi_button_notify;
-               sprintf(class, "%s/%s",
-                       ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP);
                break;
 
        default:
@@ -677,7 +675,6 @@ err_remove_fs:
 
 err_free_button:
        kfree(button);
-       memset(acpi_device_class(device), 0, sizeof(acpi_device_class));
        return error;
 }
 
@@ -720,8 +717,6 @@ static void acpi_button_remove(struct platform_device *pdev)
                acpi_lid_remove_fs(button);
 
        kfree(button);
-
-       memset(acpi_device_class(adev), 0, sizeof(acpi_device_class));
 }
 
 static int param_set_lid_init_state(const char *val,