diff mbox series

[v4,13/20] ACPI: platform_profile: Notify change events on register and unregister

Message ID 20241105153316.378-14-mario.limonciello@amd.com (mailing list archive)
State Superseded, archived
Headers show
Series Add support for binding ACPI platform profile to multiple drivers | expand

Commit Message

Mario Limonciello Nov. 5, 2024, 3:33 p.m. UTC
As multiple platform profile handlers may come and go, send a notification
to userspace each time that a platform profile handler is registered or
unregistered.

Tested-by: Matthew Schwartz <matthew.schwartz@linux.dev>
Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/acpi/platform_profile.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Armin Wolf Nov. 6, 2024, 7:40 p.m. UTC | #1
Am 05.11.24 um 16:33 schrieb Mario Limonciello:

> As multiple platform profile handlers may come and go, send a notification
> to userspace each time that a platform profile handler is registered or
> unregistered.
>
> Tested-by: Matthew Schwartz <matthew.schwartz@linux.dev>
> Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
>   drivers/acpi/platform_profile.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index 79083d0bb22e3..c9917daf683cb 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -404,6 +404,7 @@ int platform_profile_register(struct platform_profile_handler *pprof)
>   	if (IS_ERR(pprof->class_dev))
>   		return PTR_ERR(pprof->class_dev);
>   	dev_set_drvdata(pprof->class_dev, pprof);
> +	sysfs_notify(acpi_kobj, NULL, "platform_profile");
>
>   	cur_profile = pprof;
>   	return 0;
> @@ -419,7 +420,9 @@ int platform_profile_remove(struct platform_profile_handler *pprof)
>   {
>   	guard(mutex)(&profile_lock);
>
> -	sysfs_remove_group(acpi_kobj, &platform_profile_group);

When do we remove platform_profile_group now?

Thanks,
Armin Wolf

> +	cur_profile = NULL;
> +
> +	sysfs_notify(acpi_kobj, NULL, "platform_profile");
>
>   	device_destroy(&platform_profile_class, MKDEV(0, pprof->minor));
>
Mario Limonciello Nov. 6, 2024, 7:44 p.m. UTC | #2
On 11/6/2024 13:40, Armin Wolf wrote:
> Am 05.11.24 um 16:33 schrieb Mario Limonciello:
> 
>> As multiple platform profile handlers may come and go, send a 
>> notification
>> to userspace each time that a platform profile handler is registered or
>> unregistered.
>>
>> Tested-by: Matthew Schwartz <matthew.schwartz@linux.dev>
>> Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>> ---
>>   drivers/acpi/platform_profile.c | 5 ++++-
>>   1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/ 
>> platform_profile.c
>> index 79083d0bb22e3..c9917daf683cb 100644
>> --- a/drivers/acpi/platform_profile.c
>> +++ b/drivers/acpi/platform_profile.c
>> @@ -404,6 +404,7 @@ int platform_profile_register(struct 
>> platform_profile_handler *pprof)
>>       if (IS_ERR(pprof->class_dev))
>>           return PTR_ERR(pprof->class_dev);
>>       dev_set_drvdata(pprof->class_dev, pprof);
>> +    sysfs_notify(acpi_kobj, NULL, "platform_profile");
>>
>>       cur_profile = pprof;
>>       return 0;
>> @@ -419,7 +420,9 @@ int platform_profile_remove(struct 
>> platform_profile_handler *pprof)
>>   {
>>       guard(mutex)(&profile_lock);
>>
>> -    sysfs_remove_group(acpi_kobj, &platform_profile_group);
> 
> When do we remove platform_profile_group now?
> 

When incorporating your other feedback I noticed this was still there 
and it will be removed for the next revision.

The idea will be as soon as a class registers the legacy interface is 
created and will stay for the lifetime of the boot.

If all drivers are unloaded it will return -EINVAL until a new driver is 
loaded.

> Thanks,
> Armin Wolf
> 
>> +    cur_profile = NULL;
>> +
>> +    sysfs_notify(acpi_kobj, NULL, "platform_profile");
>>
>>       device_destroy(&platform_profile_class, MKDEV(0, pprof->minor));
>>
Armin Wolf Nov. 6, 2024, 8:58 p.m. UTC | #3
Am 06.11.24 um 20:44 schrieb Mario Limonciello:

> On 11/6/2024 13:40, Armin Wolf wrote:
>> Am 05.11.24 um 16:33 schrieb Mario Limonciello:
>>
>>> As multiple platform profile handlers may come and go, send a
>>> notification
>>> to userspace each time that a platform profile handler is registered or
>>> unregistered.
>>>
>>> Tested-by: Matthew Schwartz <matthew.schwartz@linux.dev>
>>> Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
>>> ---
>>>   drivers/acpi/platform_profile.c | 5 ++++-
>>>   1 file changed, 4 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/
>>> platform_profile.c
>>> index 79083d0bb22e3..c9917daf683cb 100644
>>> --- a/drivers/acpi/platform_profile.c
>>> +++ b/drivers/acpi/platform_profile.c
>>> @@ -404,6 +404,7 @@ int platform_profile_register(struct
>>> platform_profile_handler *pprof)
>>>       if (IS_ERR(pprof->class_dev))
>>>           return PTR_ERR(pprof->class_dev);
>>>       dev_set_drvdata(pprof->class_dev, pprof);
>>> +    sysfs_notify(acpi_kobj, NULL, "platform_profile");
>>>
>>>       cur_profile = pprof;
>>>       return 0;
>>> @@ -419,7 +420,9 @@ int platform_profile_remove(struct
>>> platform_profile_handler *pprof)
>>>   {
>>>       guard(mutex)(&profile_lock);
>>>
>>> -    sysfs_remove_group(acpi_kobj, &platform_profile_group);
>>
>> When do we remove platform_profile_group now?
>>
>
> When incorporating your other feedback I noticed this was still there
> and it will be removed for the next revision.
>
> The idea will be as soon as a class registers the legacy interface is
> created and will stay for the lifetime of the boot.
>
> If all drivers are unloaded it will return -EINVAL until a new driver
> is loaded.

And what happens when the platform profile core itself is unloaded?

Thanks,
Armin Wolf

>
>> Thanks,
>> Armin Wolf
>>
>>> +    cur_profile = NULL;
>>> +
>>> +    sysfs_notify(acpi_kobj, NULL, "platform_profile");
>>>
>>>       device_destroy(&platform_profile_class, MKDEV(0, pprof->minor));
>>>
>
>
diff mbox series

Patch

diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index 79083d0bb22e3..c9917daf683cb 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -404,6 +404,7 @@  int platform_profile_register(struct platform_profile_handler *pprof)
 	if (IS_ERR(pprof->class_dev))
 		return PTR_ERR(pprof->class_dev);
 	dev_set_drvdata(pprof->class_dev, pprof);
+	sysfs_notify(acpi_kobj, NULL, "platform_profile");
 
 	cur_profile = pprof;
 	return 0;
@@ -419,7 +420,9 @@  int platform_profile_remove(struct platform_profile_handler *pprof)
 {
 	guard(mutex)(&profile_lock);
 
-	sysfs_remove_group(acpi_kobj, &platform_profile_group);
+	cur_profile = NULL;
+
+	sysfs_notify(acpi_kobj, NULL, "platform_profile");
 
 	device_destroy(&platform_profile_class, MKDEV(0, pprof->minor));