diff mbox series

ACPI: platform_profile: Optimize _aggregate_choices()

Message ID 20250322-pprof-opt-v1-1-105455879a82@gmail.com (mailing list archive)
State Superseded, archived
Headers show
Series ACPI: platform_profile: Optimize _aggregate_choices() | expand

Commit Message

Kurt Borja March 22, 2025, 9:03 p.m. UTC
Choices aggregates passed to _aggregate_choices() are already filled
with ones, therefore we can avoid copying a new bitmap on the first
iteration.

This makes setting the PLATFORM_PROFILE_LAST bit on aggregates
unnecessary, so drop it as well.

While at it, add a couple empty lines to improve style.

Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
 drivers/acpi/platform_profile.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)


---
base-commit: 9a43102daf64dd0d172d8b39836dbc1dba4da1ea
change-id: 20250322-pprof-opt-caa7f7f349b8

Best regards,

Comments

Mario Limonciello March 24, 2025, 2:25 p.m. UTC | #1
On 3/22/2025 16:03, Kurt Borja wrote:
> Choices aggregates passed to _aggregate_choices() are already filled
> with ones, therefore we can avoid copying a new bitmap on the first
> iteration.
> 
> This makes setting the PLATFORM_PROFILE_LAST bit on aggregates
> unnecessary, so drop it as well.
> 
> While at it, add a couple empty lines to improve style.
> 
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>

Good find!  This optimization is valid because of the changes in

commit 778b94d7ac17b ("ACPI: platform_profile: Add support for hidden 
choices")

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

> ---
>   drivers/acpi/platform_profile.c | 10 +++-------
>   1 file changed, 3 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index ef9444482db1982b19d2a17884e1c3ab0e5cb55c..b5b24b075af6dfa612d56eb95342c6af87a60d3e 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -256,12 +256,10 @@ static int _aggregate_choices(struct device *dev, void *arg)
>   	struct platform_profile_handler *handler;
>   
>   	lockdep_assert_held(&profile_lock);
> +
>   	handler = to_pprof_handler(dev);
>   	bitmap_or(tmp, handler->choices, handler->hidden_choices, PLATFORM_PROFILE_LAST);
> -	if (test_bit(PLATFORM_PROFILE_LAST, data->aggregate))
> -		bitmap_copy(data->aggregate, tmp, PLATFORM_PROFILE_LAST);
> -	else
> -		bitmap_and(data->aggregate, tmp, data->aggregate, PLATFORM_PROFILE_LAST);
> +	bitmap_and(data->aggregate, tmp, data->aggregate, PLATFORM_PROFILE_LAST);
>   	data->count++;
>   
>   	return 0;
> @@ -305,7 +303,6 @@ static ssize_t platform_profile_choices_show(struct device *dev,
>   	};
>   	int err;
>   
> -	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
>   	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
>   		err = class_for_each_device(&platform_profile_class, NULL,
>   					    &data, _aggregate_choices);
> @@ -422,7 +419,7 @@ static ssize_t platform_profile_store(struct device *dev,
>   	i = sysfs_match_string(profile_names, buf);
>   	if (i < 0 || i == PLATFORM_PROFILE_CUSTOM)
>   		return -EINVAL;
> -	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
> +
>   	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
>   		ret = class_for_each_device(&platform_profile_class, NULL,
>   					    &data, _aggregate_choices);
> @@ -502,7 +499,6 @@ int platform_profile_cycle(void)
>   	enum platform_profile_option profile = PLATFORM_PROFILE_LAST;
>   	int err;
>   
> -	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
>   	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
>   		err = class_for_each_device(&platform_profile_class, NULL,
>   					    &profile, _aggregate_profiles);
> 
> ---
> base-commit: 9a43102daf64dd0d172d8b39836dbc1dba4da1ea
> change-id: 20250322-pprof-opt-caa7f7f349b8
> 
> Best regards,
Armin Wolf March 25, 2025, 7:36 p.m. UTC | #2
Am 22.03.25 um 22:03 schrieb Kurt Borja:

> Choices aggregates passed to _aggregate_choices() are already filled
> with ones, therefore we can avoid copying a new bitmap on the first
> iteration.
>
> This makes setting the PLATFORM_PROFILE_LAST bit on aggregates
> unnecessary, so drop it as well.
>
> While at it, add a couple empty lines to improve style.
>
Please add a comment to signal future developers that the bitmap needs to be filled with ones
before being passed to _aggregate_choices().

With this being addressed:

Reviewed-by: Armin Wolf <W_Armin@gmx.de>

> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
> ---
>   drivers/acpi/platform_profile.c | 10 +++-------
>   1 file changed, 3 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index ef9444482db1982b19d2a17884e1c3ab0e5cb55c..b5b24b075af6dfa612d56eb95342c6af87a60d3e 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -256,12 +256,10 @@ static int _aggregate_choices(struct device *dev, void *arg)
>   	struct platform_profile_handler *handler;
>
>   	lockdep_assert_held(&profile_lock);
> +
>   	handler = to_pprof_handler(dev);
>   	bitmap_or(tmp, handler->choices, handler->hidden_choices, PLATFORM_PROFILE_LAST);
> -	if (test_bit(PLATFORM_PROFILE_LAST, data->aggregate))
> -		bitmap_copy(data->aggregate, tmp, PLATFORM_PROFILE_LAST);
> -	else
> -		bitmap_and(data->aggregate, tmp, data->aggregate, PLATFORM_PROFILE_LAST);
> +	bitmap_and(data->aggregate, tmp, data->aggregate, PLATFORM_PROFILE_LAST);
>   	data->count++;
>
>   	return 0;
> @@ -305,7 +303,6 @@ static ssize_t platform_profile_choices_show(struct device *dev,
>   	};
>   	int err;
>
> -	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
>   	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
>   		err = class_for_each_device(&platform_profile_class, NULL,
>   					    &data, _aggregate_choices);
> @@ -422,7 +419,7 @@ static ssize_t platform_profile_store(struct device *dev,
>   	i = sysfs_match_string(profile_names, buf);
>   	if (i < 0 || i == PLATFORM_PROFILE_CUSTOM)
>   		return -EINVAL;
> -	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
> +
>   	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
>   		ret = class_for_each_device(&platform_profile_class, NULL,
>   					    &data, _aggregate_choices);
> @@ -502,7 +499,6 @@ int platform_profile_cycle(void)
>   	enum platform_profile_option profile = PLATFORM_PROFILE_LAST;
>   	int err;
>
> -	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
>   	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
>   		err = class_for_each_device(&platform_profile_class, NULL,
>   					    &profile, _aggregate_profiles);
>
> ---
> base-commit: 9a43102daf64dd0d172d8b39836dbc1dba4da1ea
> change-id: 20250322-pprof-opt-caa7f7f349b8
>
> Best regards,
Kurt Borja March 25, 2025, 8:06 p.m. UTC | #3
On Tue Mar 25, 2025 at 4:36 PM -03, Armin Wolf wrote:
> Am 22.03.25 um 22:03 schrieb Kurt Borja:
>
>> Choices aggregates passed to _aggregate_choices() are already filled
>> with ones, therefore we can avoid copying a new bitmap on the first
>> iteration.
>>
>> This makes setting the PLATFORM_PROFILE_LAST bit on aggregates
>> unnecessary, so drop it as well.
>>
>> While at it, add a couple empty lines to improve style.
>>
> Please add a comment to signal future developers that the bitmap needs to be filled with ones
> before being passed to _aggregate_choices().

Sure, I'll mention it in the kernel-doc for v2.

>
> With this being addressed:
>
> Reviewed-by: Armin Wolf <W_Armin@gmx.de>

Thank you Mario and Armin for the reviews!
diff mbox series

Patch

diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index ef9444482db1982b19d2a17884e1c3ab0e5cb55c..b5b24b075af6dfa612d56eb95342c6af87a60d3e 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -256,12 +256,10 @@  static int _aggregate_choices(struct device *dev, void *arg)
 	struct platform_profile_handler *handler;
 
 	lockdep_assert_held(&profile_lock);
+
 	handler = to_pprof_handler(dev);
 	bitmap_or(tmp, handler->choices, handler->hidden_choices, PLATFORM_PROFILE_LAST);
-	if (test_bit(PLATFORM_PROFILE_LAST, data->aggregate))
-		bitmap_copy(data->aggregate, tmp, PLATFORM_PROFILE_LAST);
-	else
-		bitmap_and(data->aggregate, tmp, data->aggregate, PLATFORM_PROFILE_LAST);
+	bitmap_and(data->aggregate, tmp, data->aggregate, PLATFORM_PROFILE_LAST);
 	data->count++;
 
 	return 0;
@@ -305,7 +303,6 @@  static ssize_t platform_profile_choices_show(struct device *dev,
 	};
 	int err;
 
-	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
 	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
 		err = class_for_each_device(&platform_profile_class, NULL,
 					    &data, _aggregate_choices);
@@ -422,7 +419,7 @@  static ssize_t platform_profile_store(struct device *dev,
 	i = sysfs_match_string(profile_names, buf);
 	if (i < 0 || i == PLATFORM_PROFILE_CUSTOM)
 		return -EINVAL;
-	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
+
 	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
 		ret = class_for_each_device(&platform_profile_class, NULL,
 					    &data, _aggregate_choices);
@@ -502,7 +499,6 @@  int platform_profile_cycle(void)
 	enum platform_profile_option profile = PLATFORM_PROFILE_LAST;
 	int err;
 
-	set_bit(PLATFORM_PROFILE_LAST, data.aggregate);
 	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
 		err = class_for_each_device(&platform_profile_class, NULL,
 					    &profile, _aggregate_profiles);