Commit 6b3c1791 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Bartosz Golaszewski
Browse files

gpiolib: sysfs: Move kstrtox() calls outside of the mutex lock



In a few places we perform kstrtox() operations under mutex that
do not require any locking. Move them outside of the mutex locks.

Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarBartosz Golaszewski <brgl@bgdev.pl>
parent e28747da
Loading
Loading
Loading
Loading
+12 −16
Original line number Diff line number Diff line
@@ -121,25 +121,19 @@ static ssize_t value_store(struct device *dev,
{
	struct gpiod_data *data = dev_get_drvdata(dev);
	struct gpio_desc *desc = data->desc;
	ssize_t status = 0;
	ssize_t status;
	long value;

	status = kstrtol(buf, 0, &value);

	mutex_lock(&data->mutex);

	if (!test_bit(FLAG_IS_OUT, &desc->flags)) {
		status = -EPERM;
	} else {
		long		value;

		if (size <= 2 && isdigit(buf[0]) &&
		    (size == 1 || buf[1] == '\n'))
			value = buf[0] - '0';
		else
			status = kstrtol(buf, 0, &value);
		if (status == 0) {
	} else if (status == 0) {
		gpiod_set_value_cansleep(desc, value);
		status = size;
	}
	}

	mutex_unlock(&data->mutex);

@@ -342,10 +336,12 @@ static ssize_t active_low_store(struct device *dev,
	ssize_t			status;
	long			value;

	status = kstrtol(buf, 0, &value);
	if (status)
		return status;

	mutex_lock(&data->mutex);

	status = kstrtol(buf, 0, &value);
	if (status == 0)
	status = gpio_sysfs_set_active_low(dev, value);

	mutex_unlock(&data->mutex);