On Thu, Oct 31, 2024, at 12:09 AM, Mario Limonciello wrote: > If for any reason multiple profile handlers don't agree on the profile > report the custom profile to userspace. > > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> > --- > drivers/acpi/platform_profile.c | 39 +++++++++++++++++++++++++++------ > 1 file changed, 32 insertions(+), 7 deletions(-) > > diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c > index 3128bd16615b6..5baac1f9a9c0e 100644 > --- a/drivers/acpi/platform_profile.c > +++ b/drivers/acpi/platform_profile.c > @@ -51,6 +51,36 @@ static unsigned long platform_profile_get_choices(void) > return aggregate; > } > > +static int platform_profile_get_active(enum platform_profile_option *profile) > +{ > + struct platform_profile_handler *handler; > + enum platform_profile_option active = PLATFORM_PROFILE_LAST; > + enum platform_profile_option val; > + int err; > + > + lockdep_assert_held(&profile_lock); > + list_for_each_entry(handler, &platform_profile_handler_list, list) { > + err = handler->profile_get(handler, &val); > + if (err) { > + pr_err("Failed to get profile for handler %s\n", handler->name); > + return err; > + } > + > + if (WARN_ON(val >= PLATFORM_PROFILE_LAST)) > + return -EINVAL; > + > + if (active != val && active != PLATFORM_PROFILE_LAST) { > + *profile = PLATFORM_PROFILE_CUSTOM; > + return 0; > + } > + active = val; > + } > + > + *profile = active; > + > + return 0; > +} > + > static ssize_t platform_profile_choices_show(struct device *dev, > struct device_attribute *attr, > char *buf) > @@ -81,18 +111,13 @@ static ssize_t platform_profile_show(struct device *dev, > int err; > > scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) { > - if (!cur_profile) > + if (!platform_profile_is_registered()) > return -ENODEV; > - > - err = cur_profile->profile_get(cur_profile, &profile); > + err = platform_profile_get_active(&profile); > if (err) > return err; > } > > - /* Check that profile is valid index */ > - if (WARN_ON((profile < 0) || (profile >= ARRAY_SIZE(profile_names)))) > - return -EIO; > - > return sysfs_emit(buf, "%s\n", profile_names[profile]); > } > > -- > 2.43.0 Looks good to me. Reviewed-by: Mark Pearson <mpearson-lenovo@xxxxxxxxx> Mark