hwmon: Report attribute name with udev events
authorGuenter Roeck <linux@roeck-us.net>
Mon, 10 Jan 2022 22:56:25 +0000 (14:56 -0800)
committerGuenter Roeck <linux@roeck-us.net>
Mon, 28 Feb 2022 01:03:16 +0000 (17:03 -0800)
Up to now udev events only report the affected hwmon device if an alert
is reported. This requires userspace to read all attributes if it wants
to know what triggered the event. Provide the attribute name with the
NAME property to help userspace find the attribute causing the event.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/hwmon.c

index 3ae961986fc312eb7334161eadb4e505ff2f2767..0b79c4e1bf99f13e87643c74679e575ba79eaa29 100644 (file)
@@ -625,7 +625,9 @@ static const int __templates_size[] = {
 int hwmon_notify_event(struct device *dev, enum hwmon_sensor_types type,
                       u32 attr, int channel)
 {
+       char event[MAX_SYSFS_ATTR_NAME_LENGTH + 5];
        char sattr[MAX_SYSFS_ATTR_NAME_LENGTH];
+       char *envp[] = { event, NULL };
        const char * const *templates;
        const char *template;
        int base;
@@ -641,8 +643,9 @@ int hwmon_notify_event(struct device *dev, enum hwmon_sensor_types type,
        base = hwmon_attr_base(type);
 
        scnprintf(sattr, MAX_SYSFS_ATTR_NAME_LENGTH, template, base + channel);
+       scnprintf(event, sizeof(event), "NAME=%s", sattr);
        sysfs_notify(&dev->kobj, NULL, sattr);
-       kobject_uevent(&dev->kobj, KOBJ_CHANGE);
+       kobject_uevent_env(&dev->kobj, KOBJ_CHANGE, envp);
 
        if (type == hwmon_temp)
                hwmon_thermal_notify(dev, channel);