[PATCH v3 10/22] ACPI: platform_profile: Use `scoped_cond_guard` for platform_profile_show()

Mario Limonciello posted 22 patches 3 weeks, 3 days ago
There is a newer version of this series
[PATCH v3 10/22] ACPI: platform_profile: Use `scoped_cond_guard` for platform_profile_show()
Posted by Mario Limonciello 3 weeks, 3 days ago
Migrate away from using an interruptible mutex to scoped_cond_guard.
Also move the sysfs string match out of the mutex as it's not needed.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/acpi/platform_profile.c | 36 ++++++++++++---------------------
 1 file changed, 13 insertions(+), 23 deletions(-)

diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
index b48dd34301f13..63a5f5ac33898 100644
--- a/drivers/acpi/platform_profile.c
+++ b/drivers/acpi/platform_profile.c
@@ -75,35 +75,25 @@ static ssize_t platform_profile_store(struct device *dev,
 {
 	int err, i;
 
-	err = mutex_lock_interruptible(&profile_lock);
-	if (err)
-		return err;
-
-	if (!cur_profile) {
-		mutex_unlock(&profile_lock);
-		return -ENODEV;
-	}
-
 	/* Scan for a matching profile */
 	i = sysfs_match_string(profile_names, buf);
-	if (i < 0) {
-		mutex_unlock(&profile_lock);
+	if (i < 0)
 		return -EINVAL;
-	}
 
-	/* Check that platform supports this profile choice */
-	if (!test_bit(i, cur_profile->choices)) {
-		mutex_unlock(&profile_lock);
-		return -EOPNOTSUPP;
-	}
+	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
+		if (!cur_profile)
+			return -ENODEV;
 
-	err = cur_profile->profile_set(cur_profile, i);
-	if (!err)
-		sysfs_notify(acpi_kobj, NULL, "platform_profile");
+		/* Check that platform supports this profile choice */
+		if (!test_bit(i, cur_profile->choices))
+			return -EOPNOTSUPP;
 
-	mutex_unlock(&profile_lock);
-	if (err)
-		return err;
+		err = cur_profile->profile_set(cur_profile, i);
+		if (err)
+			return err;
+	}
+
+	sysfs_notify(acpi_kobj, NULL, "platform_profile");
 	return count;
 }
 
-- 
2.43.0
Re: [PATCH v3 10/22] ACPI: platform_profile: Use `scoped_cond_guard` for platform_profile_show()
Posted by Ilpo Järvinen 3 weeks, 3 days ago
On Wed, 30 Oct 2024, Mario Limonciello wrote:

> Migrate away from using an interruptible mutex to scoped_cond_guard.
> Also move the sysfs string match out of the mutex as it's not needed.
> 
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>

I'd have expected all the mutex_lock_interruptible() -> 
scoped_cond_guard() changes in the same patch. Although this also moves 
the sysfs stuff out which in this smaller form is kind of okay but if it's 
part of larger patch merging all scoped guard conversions, it should be 
in a different change.

-- 
 i.

> ---
>  drivers/acpi/platform_profile.c | 36 ++++++++++++---------------------
>  1 file changed, 13 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c
> index b48dd34301f13..63a5f5ac33898 100644
> --- a/drivers/acpi/platform_profile.c
> +++ b/drivers/acpi/platform_profile.c
> @@ -75,35 +75,25 @@ static ssize_t platform_profile_store(struct device *dev,
>  {
>  	int err, i;
>  
> -	err = mutex_lock_interruptible(&profile_lock);
> -	if (err)
> -		return err;
> -
> -	if (!cur_profile) {
> -		mutex_unlock(&profile_lock);
> -		return -ENODEV;
> -	}
> -
>  	/* Scan for a matching profile */
>  	i = sysfs_match_string(profile_names, buf);
> -	if (i < 0) {
> -		mutex_unlock(&profile_lock);
> +	if (i < 0)
>  		return -EINVAL;
> -	}
>  
> -	/* Check that platform supports this profile choice */
> -	if (!test_bit(i, cur_profile->choices)) {
> -		mutex_unlock(&profile_lock);
> -		return -EOPNOTSUPP;
> -	}
> +	scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &profile_lock) {
> +		if (!cur_profile)
> +			return -ENODEV;
>  
> -	err = cur_profile->profile_set(cur_profile, i);
> -	if (!err)
> -		sysfs_notify(acpi_kobj, NULL, "platform_profile");
> +		/* Check that platform supports this profile choice */
> +		if (!test_bit(i, cur_profile->choices))
> +			return -EOPNOTSUPP;
>  
> -	mutex_unlock(&profile_lock);
> -	if (err)
> -		return err;
> +		err = cur_profile->profile_set(cur_profile, i);
> +		if (err)
> +			return err;
> +	}
> +
> +	sysfs_notify(acpi_kobj, NULL, "platform_profile");
>  	return count;
>  }
>  
>
Re: [PATCH v3 10/22] ACPI: platform_profile: Use `scoped_cond_guard` for platform_profile_show()
Posted by Mario Limonciello 3 weeks, 3 days ago
On 10/31/2024 05:15, Ilpo Järvinen wrote:
> On Wed, 30 Oct 2024, Mario Limonciello wrote:
> 
>> Migrate away from using an interruptible mutex to scoped_cond_guard.
>> Also move the sysfs string match out of the mutex as it's not needed.
>>
>> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> 
> I'd have expected all the mutex_lock_interruptible() ->
> scoped_cond_guard() changes in the same patch. Although this also moves
> the sysfs stuff out which in this smaller form is kind of okay but if it's
> part of larger patch merging all scoped guard conversions, it should be
> in a different change.
> 

OK for the next version I'll merge all the mutex changes to the same 
patch but split the sysfs change to it's own.