[PATCH] cpuidle: Simplify cpuidle_register_device() with guard()

Huisong Li posted 1 patch 2 months, 1 week ago
drivers/cpuidle/cpuidle.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
[PATCH] cpuidle: Simplify cpuidle_register_device() with guard()
Posted by Huisong Li 2 months, 1 week ago
Use guard() macro for mutex to simplify the control flow in
cpuidle_register_device().

Signed-off-by: Huisong Li <lihuisong@huawei.com>
---
 drivers/cpuidle/cpuidle.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index c7876e9e024f..8c037db46792 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -679,16 +679,16 @@ int cpuidle_register_device(struct cpuidle_device *dev)
 	if (!dev)
 		return -EINVAL;
 
-	mutex_lock(&cpuidle_lock);
+	guard(mutex)(&cpuidle_lock);
 
 	if (dev->registered)
-		goto out_unlock;
+		return ret;
 
 	__cpuidle_device_init(dev);
 
 	ret = __cpuidle_register_device(dev);
 	if (ret)
-		goto out_unlock;
+		return ret;
 
 	ret = cpuidle_add_sysfs(dev);
 	if (ret)
@@ -700,16 +700,14 @@ int cpuidle_register_device(struct cpuidle_device *dev)
 
 	cpuidle_install_idle_handler();
 
-out_unlock:
-	mutex_unlock(&cpuidle_lock);
-
 	return ret;
 
 out_sysfs:
 	cpuidle_remove_sysfs(dev);
 out_unregister:
 	__cpuidle_unregister_device(dev);
-	goto out_unlock;
+
+	return ret;
 }
 
 EXPORT_SYMBOL_GPL(cpuidle_register_device);
-- 
2.33.0
Re: [PATCH] cpuidle: Simplify cpuidle_register_device() with guard()
Posted by Rafael J. Wysocki 2 months, 1 week ago
On Fri, Apr 3, 2026 at 10:45 AM Huisong Li <lihuisong@huawei.com> wrote:
>
> Use guard() macro for mutex to simplify the control flow in
> cpuidle_register_device().
>
> Signed-off-by: Huisong Li <lihuisong@huawei.com>
> ---
>  drivers/cpuidle/cpuidle.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
> index c7876e9e024f..8c037db46792 100644
> --- a/drivers/cpuidle/cpuidle.c
> +++ b/drivers/cpuidle/cpuidle.c
> @@ -679,16 +679,16 @@ int cpuidle_register_device(struct cpuidle_device *dev)
>         if (!dev)
>                 return -EINVAL;
>
> -       mutex_lock(&cpuidle_lock);
> +       guard(mutex)(&cpuidle_lock);
>
>         if (dev->registered)
> -               goto out_unlock;
> +               return ret;
>
>         __cpuidle_device_init(dev);
>
>         ret = __cpuidle_register_device(dev);
>         if (ret)
> -               goto out_unlock;
> +               return ret;
>
>         ret = cpuidle_add_sysfs(dev);
>         if (ret)
> @@ -700,16 +700,14 @@ int cpuidle_register_device(struct cpuidle_device *dev)
>
>         cpuidle_install_idle_handler();
>
> -out_unlock:
> -       mutex_unlock(&cpuidle_lock);
> -
>         return ret;
>
>  out_sysfs:
>         cpuidle_remove_sysfs(dev);
>  out_unregister:
>         __cpuidle_unregister_device(dev);
> -       goto out_unlock;
> +
> +       return ret;
>  }
>
>  EXPORT_SYMBOL_GPL(cpuidle_register_device);
> --

Applied as 7.1 material, thanks!