Message ID | 20210816113007.88902-1-hdegoede@redhat.com |
---|---|
State | Accepted |
Commit | b25d5a1cd19896bb87b399d6e24896cf6f854d44 |
Headers | show |
Series | ACPI: platform-profile: call sysfs_notify() from platform_profile_store() | expand |
On Mon, Aug 16, 2021 at 1:30 PM Hans de Goede <hdegoede@redhat.com> wrote: > > 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> > --- > Documentation/ABI/testing/sysfs-platform_profile | 7 +++++++ > drivers/acpi/platform_profile.c | 3 +++ > 2 files changed, 10 insertions(+) > > diff --git a/Documentation/ABI/testing/sysfs-platform_profile b/Documentation/ABI/testing/sysfs-platform_profile > index dae9c8941905..baf1d125f9f8 100644 > --- a/Documentation/ABI/testing/sysfs-platform_profile > +++ b/Documentation/ABI/testing/sysfs-platform_profile > @@ -26,3 +26,10 @@ Contact: Hans de Goede <hdegoede@redhat.com> > Description: Reading this file gives the current selected profile for this > device. Writing this file with one of the strings from > platform_profile_choices changes the profile to the new value. > + > + This file can be monitored for changes by polling for POLLPRI, > + POLLPRI will be signalled on any changes, independent of those > + changes coming from a userspace write; or coming from another > + source such as e.g. a hotkey triggered profile change handled > + either directly by the embedded-controller or fully handled > + inside the kernel. > diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c > index dd2fbf38e414..d418462ab791 100644 > --- a/drivers/acpi/platform_profile.c > +++ b/drivers/acpi/platform_profile.c > @@ -106,6 +106,9 @@ static ssize_t platform_profile_store(struct device *dev, > } > > err = cur_profile->profile_set(cur_profile, i); > + if (!err) > + sysfs_notify(acpi_kobj, NULL, "platform_profile"); > + > mutex_unlock(&profile_lock); > if (err) > return err; > -- Applied as 5.15 material, thanks!
diff --git a/Documentation/ABI/testing/sysfs-platform_profile b/Documentation/ABI/testing/sysfs-platform_profile index dae9c8941905..baf1d125f9f8 100644 --- a/Documentation/ABI/testing/sysfs-platform_profile +++ b/Documentation/ABI/testing/sysfs-platform_profile @@ -26,3 +26,10 @@ Contact: Hans de Goede <hdegoede@redhat.com> Description: Reading this file gives the current selected profile for this device. Writing this file with one of the strings from platform_profile_choices changes the profile to the new value. + + This file can be monitored for changes by polling for POLLPRI, + POLLPRI will be signalled on any changes, independent of those + changes coming from a userspace write; or coming from another + source such as e.g. a hotkey triggered profile change handled + either directly by the embedded-controller or fully handled + inside the kernel. diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c index dd2fbf38e414..d418462ab791 100644 --- a/drivers/acpi/platform_profile.c +++ b/drivers/acpi/platform_profile.c @@ -106,6 +106,9 @@ static ssize_t platform_profile_store(struct device *dev, } err = cur_profile->profile_set(cur_profile, i); + if (!err) + sysfs_notify(acpi_kobj, NULL, "platform_profile"); + mutex_unlock(&profile_lock); if (err) return err;
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> --- Documentation/ABI/testing/sysfs-platform_profile | 7 +++++++ drivers/acpi/platform_profile.c | 3 +++ 2 files changed, 10 insertions(+)