Message ID | 20241025193055.2235-7-mario.limonciello@amd.com |
---|---|
State | Superseded |
Headers | show |
Series | Add support for binding ACPI platform profile to multiple drivers | expand |
Hi, On 25-Oct-24 9:30 PM, Mario Limonciello wrote: > As multiple handlers may register for ACPI platform profile handler, > only remove the sysfs group when the last one unregisters. > > Tested-by: Matthew Schwartz <matthew.schwartz@linux.dev> > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Thanks, patch looks good to me: Reviewed-by: Hans de Goede <hdegoede@redhat.com> Regards, Hans > --- > drivers/acpi/platform_profile.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c > index 81928adccfade..091ca6941a925 100644 > --- a/drivers/acpi/platform_profile.c > +++ b/drivers/acpi/platform_profile.c > @@ -23,6 +23,15 @@ static const char * const profile_names[] = { > }; > static_assert(ARRAY_SIZE(profile_names) == PLATFORM_PROFILE_LAST); > > +static bool platform_profile_is_registered(void) > +{ > + struct list_head *pos; > + int count = 0; > + list_for_each(pos, &platform_profile_handler_list) > + count++; > + return count > 0; > +} > + > static ssize_t platform_profile_choices_show(struct device *dev, > struct device_attribute *attr, > char *buf) > @@ -206,8 +215,10 @@ int platform_profile_remove(struct platform_profile_handler *pprof) > > list_del(&pprof->list); > > - sysfs_remove_group(acpi_kobj, &platform_profile_group); > cur_profile = NULL; > + if (!platform_profile_is_registered()) > + sysfs_remove_group(acpi_kobj, &platform_profile_group); > + > return 0; > } > EXPORT_SYMBOL_GPL(platform_profile_remove);
On Fri, Oct 25, 2024, at 3:30 PM, Mario Limonciello wrote: > As multiple handlers may register for ACPI platform profile handler, > only remove the sysfs group when the last one unregisters. > > Tested-by: Matthew Schwartz <matthew.schwartz@linux.dev> > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > --- > drivers/acpi/platform_profile.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c > index 81928adccfade..091ca6941a925 100644 > --- a/drivers/acpi/platform_profile.c > +++ b/drivers/acpi/platform_profile.c > @@ -23,6 +23,15 @@ static const char * const profile_names[] = { > }; > static_assert(ARRAY_SIZE(profile_names) == PLATFORM_PROFILE_LAST); > > +static bool platform_profile_is_registered(void) > +{ > + struct list_head *pos; > + int count = 0; > + list_for_each(pos, &platform_profile_handler_list) > + count++; > + return count > 0; > +} > + > static ssize_t platform_profile_choices_show(struct device *dev, > struct device_attribute *attr, > char *buf) > @@ -206,8 +215,10 @@ int platform_profile_remove(struct > platform_profile_handler *pprof) > > list_del(&pprof->list); > > - sysfs_remove_group(acpi_kobj, &platform_profile_group); > cur_profile = NULL; > + if (!platform_profile_is_registered()) > + sysfs_remove_group(acpi_kobj, &platform_profile_group); > + > return 0; > } > EXPORT_SYMBOL_GPL(platform_profile_remove); > -- > 2.43.0 Looks good to me. Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca> Mark
diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c index 81928adccfade..091ca6941a925 100644 --- a/drivers/acpi/platform_profile.c +++ b/drivers/acpi/platform_profile.c @@ -23,6 +23,15 @@ static const char * const profile_names[] = { }; static_assert(ARRAY_SIZE(profile_names) == PLATFORM_PROFILE_LAST); +static bool platform_profile_is_registered(void) +{ + struct list_head *pos; + int count = 0; + list_for_each(pos, &platform_profile_handler_list) + count++; + return count > 0; +} + static ssize_t platform_profile_choices_show(struct device *dev, struct device_attribute *attr, char *buf) @@ -206,8 +215,10 @@ int platform_profile_remove(struct platform_profile_handler *pprof) list_del(&pprof->list); - sysfs_remove_group(acpi_kobj, &platform_profile_group); cur_profile = NULL; + if (!platform_profile_is_registered()) + sysfs_remove_group(acpi_kobj, &platform_profile_group); + return 0; } EXPORT_SYMBOL_GPL(platform_profile_remove);