[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20221115211515.3750209-3-u.kleine-koenig@pengutronix.de>
Date: Tue, 15 Nov 2022 22:15:13 +0100
From: Uwe Kleine-König
<u.kleine-koenig@...gutronix.de>
To: Thierry Reding <thierry.reding@...il.com>
Cc: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
linux-pwm@...r.kernel.org, linux-kernel@...r.kernel.org,
kernel@...gutronix.de
Subject: [PATCH 2/4] pwm: Reduce time the pwm_lock mutex is held in pwmchip_add()
This simplifies error handling as the need for goto error handling goes
away and at the end of the function the code can be simplified as this
code isn't used in the error case any more.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@...gutronix.de>
---
drivers/pwm/core.c | 27 ++++++++++++---------------
1 file changed, 12 insertions(+), 15 deletions(-)
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index ebe06efe9de5..2338119a09d8 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -272,20 +272,21 @@ int pwmchip_add(struct pwm_chip *chip)
if (!pwm_ops_check(chip))
return -EINVAL;
+ chip->pwms = kcalloc(chip->npwm, sizeof(*pwm), GFP_KERNEL);
+ if (!chip->pwms)
+ return -ENOMEM;
+
mutex_lock(&pwm_lock);
ret = alloc_pwms(chip->npwm);
- if (ret < 0)
- goto out;
+ if (ret < 0) {
+ mutex_unlock(&pwm_lock);
+ kfree(chip->pwms);
+ return ret;
+ }
chip->base = ret;
- chip->pwms = kcalloc(chip->npwm, sizeof(*pwm), GFP_KERNEL);
- if (!chip->pwms) {
- ret = -ENOMEM;
- goto out;
- }
-
for (i = 0; i < chip->npwm; i++) {
pwm = &chip->pwms[i];
@@ -301,18 +302,14 @@ int pwmchip_add(struct pwm_chip *chip)
INIT_LIST_HEAD(&chip->list);
list_add(&chip->list, &pwm_chips);
- ret = 0;
+ mutex_unlock(&pwm_lock);
if (IS_ENABLED(CONFIG_OF))
of_pwmchip_add(chip);
-out:
- mutex_unlock(&pwm_lock);
-
- if (!ret)
- pwmchip_sysfs_export(chip);
+ pwmchip_sysfs_export(chip);
- return ret;
+ return 0;
}
EXPORT_SYMBOL_GPL(pwmchip_add);
--
2.38.1
Powered by blists - more mailing lists