Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ACPI: platform-profile: call sysfs_notify() from platform_profile_store()

Drivers like thinkpad_acpi and ideapad_laptop call the
platform_profile_notify() helper when the profile is changed by hardware
(the embedded-controller/EC) in response to an EC handled hotkey.

This allows userspace to monitor for such changes by polling for POLLPRI
on the platform_profile sysfs file. But the profile can also be changed
underneath a userspace program monitoring it by anonther userspace program
storing a new value.

Add a sysfs_notify() call to platform_profile_store(), so that userspace
programs monitoring for changes also get notified in this case.

Also update the documentation to document that POLLPRI polling can be
used to watch for changes.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

authored by

Hans de Goede and committed by
Rafael J. Wysocki
b25d5a1c 7c60610d

+10
+7
Documentation/ABI/testing/sysfs-platform_profile
··· 26 26 Description: Reading this file gives the current selected profile for this 27 27 device. Writing this file with one of the strings from 28 28 platform_profile_choices changes the profile to the new value. 29 + 30 + This file can be monitored for changes by polling for POLLPRI, 31 + POLLPRI will be signalled on any changes, independent of those 32 + changes coming from a userspace write; or coming from another 33 + source such as e.g. a hotkey triggered profile change handled 34 + either directly by the embedded-controller or fully handled 35 + inside the kernel.
+3
drivers/acpi/platform_profile.c
··· 106 106 } 107 107 108 108 err = cur_profile->profile_set(cur_profile, i); 109 + if (!err) 110 + sysfs_notify(acpi_kobj, NULL, "platform_profile"); 111 + 109 112 mutex_unlock(&profile_lock); 110 113 if (err) 111 114 return err;