drivers/gpio/gpiolib-devres.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
devm_gpiod_put_array() is meant to undo the effects of
devm_gpiod_get_array() - in particular, it should release the GPIOs
contained in the array acquired with the latter. It is meant to be the
resource-managed version of gpiod_put_array(), and it should behave
similar to the non-array version devm_gpiod_put().
Since commit d1d52c6622a6 ("gpiolib: devres: Finish the conversion to
use devm_add_action()") it doesn't do that anymore, it just removes the
devres action and frees associated memory, but it doesn't actually
release the GPIOs.
Fix by switching from devm_remove_action() to devm_release_action(),
which will in addition invoke the action to release the GPIOs.
Fixes: d1d52c6622a6 ("gpiolib: devres: Finish the conversion to use devm_add_action()")
Signed-off-by: André Draszik <andre.draszik@linaro.org>
---
drivers/gpio/gpiolib-devres.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpiolib-devres.c b/drivers/gpio/gpiolib-devres.c
index 4d5f83b17624eed04039b94ca6d095fea293e5cc..72422c5db3641e5609759e82ac2ab532fab81783 100644
--- a/drivers/gpio/gpiolib-devres.c
+++ b/drivers/gpio/gpiolib-devres.c
@@ -319,7 +319,7 @@ EXPORT_SYMBOL_GPL(devm_gpiod_unhinge);
*/
void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs)
{
- devm_remove_action(dev, devm_gpiod_release_array, descs);
+ devm_release_action(dev, devm_gpiod_release_array, descs);
}
EXPORT_SYMBOL_GPL(devm_gpiod_put_array);
---
base-commit: 58ba80c4740212c29a1cf9b48f588e60a7612209
change-id: 20250715-gpiolib-devres-put-array-fix-d6b365dad018
Best regards,
--
André Draszik <andre.draszik@linaro.org>
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> On Tue, 15 Jul 2025 17:00:20 +0100, André Draszik wrote: > devm_gpiod_put_array() is meant to undo the effects of > devm_gpiod_get_array() - in particular, it should release the GPIOs > contained in the array acquired with the latter. It is meant to be the > resource-managed version of gpiod_put_array(), and it should behave > similar to the non-array version devm_gpiod_put(). > > Since commit d1d52c6622a6 ("gpiolib: devres: Finish the conversion to > use devm_add_action()") it doesn't do that anymore, it just removes the > devres action and frees associated memory, but it doesn't actually > release the GPIOs. > > [...] Thanks for catching it, I queued it for v6.16-rc7. [1/1] gpiolib: devres: release GPIOs in devm_gpiod_put_array() https://git.kernel.org/brgl/linux/c/ff20798820e08af0fe757c756914b4aa51993ccb Best regards, -- Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
On Wed, Jul 16, 2025 at 11:09:31AM +0200, Bartosz Golaszewski wrote: > On Tue, 15 Jul 2025 17:00:20 +0100, André Draszik wrote: > > devm_gpiod_put_array() is meant to undo the effects of > > devm_gpiod_get_array() - in particular, it should release the GPIOs > > contained in the array acquired with the latter. It is meant to be the > > resource-managed version of gpiod_put_array(), and it should behave > > similar to the non-array version devm_gpiod_put(). > > > > Since commit d1d52c6622a6 ("gpiolib: devres: Finish the conversion to > > use devm_add_action()") it doesn't do that anymore, it just removes the > > devres action and frees associated memory, but it doesn't actually > > release the GPIOs. [...] > Thanks for catching it, I queued it for v6.16-rc7. Yeah, I used the release function in parameter, but not changed the call. Thanks for a good catch! -- With Best Regards, Andy Shevchenko
On Tue, 2025-07-15 at 17:00 +0100, André Draszik wrote: > devm_gpiod_put_array() is meant to undo the effects of > devm_gpiod_get_array() - in particular, it should release the GPIOs > contained in the array acquired with the latter. It is meant to be the > resource-managed version of gpiod_put_array(), and it should behave > similar to the non-array version devm_gpiod_put(). > > Since commit d1d52c6622a6 ("gpiolib: devres: Finish the conversion to > use devm_add_action()") it doesn't do that anymore, it just removes the > devres action and frees associated memory, but it doesn't actually > release the GPIOs. > > Fix by switching from devm_remove_action() to devm_release_action(), > which will in addition invoke the action to release the GPIOs. > > Fixes: d1d52c6622a6 ("gpiolib: devres: Finish the conversion to use devm_add_action()") The culprit only exists in 6.16-rc for now, and it shouldn't be backported to older kernels, hence I didn't add CC: stable, hoping the patch can make it into the 6.16 release Please let me know if that is unlikely and I shall send a v2 with Cc: stable instead. Cheers, Andre'
© 2016 - 2025 Red Hat, Inc.