]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpiolib: clear requested flag if line is invalid
authorBarnabás Pőcze <pobrn@protonmail.com>
Tue, 10 Mar 2026 20:44:03 +0000 (20:44 +0000)
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Wed, 11 Mar 2026 08:47:25 +0000 (09:47 +0100)
If `gpiochip_line_is_valid()` fails, then `-EINVAL` is returned, but
`desc->flags` will have `GPIOD_FLAG_REQUESTED` set, which will result
in subsequent calls misleadingly returning `-EBUSY`.

Fix that by clearing the flag in case of failure.

Fixes: a501624864f3 ("gpio: Respect valid_mask when requesting GPIOs")
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
Link: https://patch.msgid.link/20260310204359.1202451-1-pobrn@protonmail.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
drivers/gpio/gpiolib.c

index ada572aaebd69d3098ab1b617b43431416ff4f82..9550500e1690beb95fa1f702ebd9bc83f052eada 100644 (file)
@@ -2465,8 +2465,10 @@ int gpiod_request_commit(struct gpio_desc *desc, const char *label)
                return -EBUSY;
 
        offset = gpiod_hwgpio(desc);
-       if (!gpiochip_line_is_valid(guard.gc, offset))
-               return -EINVAL;
+       if (!gpiochip_line_is_valid(guard.gc, offset)) {
+               ret = -EINVAL;
+               goto out_clear_bit;
+       }
 
        /* NOTE:  gpio_request() can be called in early boot,
         * before IRQs are enabled, for non-sleeping (SOC) GPIOs.