diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2020-10-21 14:25:37 +0300 |
---|---|---|
committer | Bartosz Golaszewski <bgolaszewski@baylibre.com> | 2020-10-26 15:43:41 +0100 |
commit | 95d9f84fca1ef1bbbc2be6313e29181c7f0de99f (patch) | |
tree | 28eddc55a14ec9fccd3bf3e562295e6fa00835c6 | |
parent | 8bbff39c6c6c86405fe023ccf50eeb44feacbde9 (diff) | |
download | linux-stable-95d9f84fca1ef1bbbc2be6313e29181c7f0de99f.tar.gz linux-stable-95d9f84fca1ef1bbbc2be6313e29181c7f0de99f.tar.bz2 linux-stable-95d9f84fca1ef1bbbc2be6313e29181c7f0de99f.zip |
gpiolib: split error path in gpiod_request_commit()
For better maintenance and micro optimization split error path
in the gpiod_request_commit().
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
-rw-r--r-- | drivers/gpio/gpiolib.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 20e3eb74b5cb..a72d6293435f 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1968,11 +1968,9 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label) if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) { desc_set_label(desc, label ? : "?"); - ret = 0; } else { - kfree_const(label); ret = -EBUSY; - goto done; + goto out_free_unlock; } if (gc->request) { @@ -1987,9 +1985,8 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label) if (ret) { desc_set_label(desc, NULL); - kfree_const(label); clear_bit(FLAG_REQUESTED, &desc->flags); - goto done; + goto out_free_unlock; } } if (gc->get_direction) { @@ -1998,8 +1995,12 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label) gpiod_get_direction(desc); spin_lock_irqsave(&gpio_lock, flags); } -done: spin_unlock_irqrestore(&gpio_lock, flags); + return 0; + +out_free_unlock: + spin_unlock_irqrestore(&gpio_lock, flags); + kfree_const(label); return ret; } |