diff options
| author | Uwe Kleine-König <u.kleine-koenig@baylibre.com> | 2024-06-27 22:31:19 +0200 | 
|---|---|---|
| committer | Uwe Kleine-König <ukleinek@kernel.org> | 2024-07-10 17:53:51 +0200 | 
| commit | 650af6c0833a7274a755f5ed4bae29e53bbae4fc (patch) | |
| tree | e50ed74d1fbbe8f337b0d01f1f55818f3a4d1c4d | |
| parent | 44ee95184e785c64e301498dec112bb1582bffd2 (diff) | |
pwm: Use guards for pwm_lock instead of explicity mutex_lock + mutex_unlock
With the compiler caring for unlocking the mutex several functions can
be simplified. Benefit from that.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/2102fe8189bdf1f02ff3785b551a69be27a65af4.1719520143.git.u.kleine-koenig@baylibre.com
Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
| -rw-r--r-- | drivers/pwm/core.c | 52 | 
1 files changed, 15 insertions, 37 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 84ca846120a2..bce42fbbe2c3 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -293,19 +293,15 @@ EXPORT_SYMBOL_GPL(pwm_adjust_config);  int pwm_capture(struct pwm_device *pwm, struct pwm_capture *result,  		unsigned long timeout)  { -	int err; -  	if (!pwm || !pwm->chip->ops)  		return -EINVAL;  	if (!pwm->chip->ops->capture)  		return -ENOSYS; -	mutex_lock(&pwm_lock); -	err = pwm->chip->ops->capture(pwm->chip, pwm, result, timeout); -	mutex_unlock(&pwm_lock); +	guard(mutex)(&pwm_lock); -	return err; +	return pwm->chip->ops->capture(pwm->chip, pwm, result, timeout);  }  EXPORT_SYMBOL_GPL(pwm_capture); @@ -317,19 +313,15 @@ static struct pwm_chip *pwmchip_find_by_name(const char *name)  	if (!name)  		return NULL; -	mutex_lock(&pwm_lock); +	guard(mutex)(&pwm_lock);  	idr_for_each_entry_ul(&pwm_chips, chip, tmp, id) {  		const char *chip_name = dev_name(pwmchip_parent(chip)); -		if (chip_name && strcmp(chip_name, name) == 0) { -			mutex_unlock(&pwm_lock); +		if (chip_name && strcmp(chip_name, name) == 0)  			return chip; -		}  	} -	mutex_unlock(&pwm_lock); -  	return NULL;  } @@ -406,14 +398,14 @@ static struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip,  	if (!chip || index >= chip->npwm)  		return ERR_PTR(-EINVAL); -	mutex_lock(&pwm_lock); +	guard(mutex)(&pwm_lock); +  	pwm = &chip->pwms[index];  	err = pwm_device_request(pwm, label);  	if (err < 0) -		pwm = ERR_PTR(err); +		return ERR_PTR(err); -	mutex_unlock(&pwm_lock);  	return pwm;  } @@ -1102,11 +1094,11 @@ int __pwmchip_add(struct pwm_chip *chip, struct module *owner)  	chip->owner = owner; -	mutex_lock(&pwm_lock); +	guard(mutex)(&pwm_lock);  	ret = idr_alloc(&pwm_chips, chip, 0, 0, GFP_KERNEL);  	if (ret < 0) -		goto err_idr_alloc; +		return ret;  	chip->id = ret; @@ -1119,8 +1111,6 @@ int __pwmchip_add(struct pwm_chip *chip, struct module *owner)  	if (ret)  		goto err_device_add; -	mutex_unlock(&pwm_lock); -  	return 0;  err_device_add: @@ -1128,9 +1118,6 @@ err_device_add:  		of_pwmchip_remove(chip);  	idr_remove(&pwm_chips, chip->id); -err_idr_alloc: - -	mutex_unlock(&pwm_lock);  	return ret;  } @@ -1149,11 +1136,8 @@ void pwmchip_remove(struct pwm_chip *chip)  	if (IS_ENABLED(CONFIG_OF))  		of_pwmchip_remove(chip); -	mutex_lock(&pwm_lock); - -	idr_remove(&pwm_chips, chip->id); - -	mutex_unlock(&pwm_lock); +	scoped_guard(mutex, &pwm_lock) +		idr_remove(&pwm_chips, chip->id);  	device_del(&chip->dev);  } @@ -1209,15 +1193,11 @@ static struct pwm_chip *fwnode_to_pwmchip(struct fwnode_handle *fwnode)  	struct pwm_chip *chip;  	unsigned long id, tmp; -	mutex_lock(&pwm_lock); +	guard(mutex)(&pwm_lock);  	idr_for_each_entry_ul(&pwm_chips, chip, tmp, id) -		if (pwmchip_parent(chip) && device_match_fwnode(pwmchip_parent(chip), fwnode)) { -			mutex_unlock(&pwm_lock); +		if (pwmchip_parent(chip) && device_match_fwnode(pwmchip_parent(chip), fwnode))  			return chip; -		} - -	mutex_unlock(&pwm_lock);  	return ERR_PTR(-EPROBE_DEFER);  } @@ -1532,11 +1512,11 @@ void pwm_put(struct pwm_device *pwm)  	chip = pwm->chip; -	mutex_lock(&pwm_lock); +	guard(mutex)(&pwm_lock);  	if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) {  		pr_warn("PWM device already freed\n"); -		goto out; +		return;  	}  	if (chip->ops->free) @@ -1547,8 +1527,6 @@ void pwm_put(struct pwm_device *pwm)  	put_device(&chip->dev);  	module_put(chip->owner); -out: -	mutex_unlock(&pwm_lock);  }  EXPORT_SYMBOL_GPL(pwm_put);  | 
