mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 07:01:32 +00:00
gpio fixes for v6.5-rc6
- fix a regression in the sysfs interface - fix a reference counting bug that's been around for years - MAINTAINERS update -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEFp3rbAvDxGAT0sefEacuoBRx13IFAmTftRUACgkQEacuoBRx 13IGjhAAoYc+s0YjdKki5g3IEvo163uhophnTywxU8EL6hNCTNn8f1JCiIVVJgro VuBXywozUPsPAJ8gszEEffNpJHLiFJzK2KAmYVf8diuUDkB1G4h5nfFBftXM7z5W Yf58I48WsY/Hd4SsThvARJQ8vPVsefwDo13grNGVVBA8mRBpMT1IbidEfLZfkygR DjXUP+UUoL2l2bd8wAcvc/HAS1sL86ckq/Fh/YGDezeFo0ukr1JIJ5fLa0u+9Gxu XpW7G2NVkEP2weP4UcqRJagM6iFlLN0/w9V/pj9BXSleA8zuWIcAV4bv689ckRu2 fczMdLVMoj/H/uIFB+kRUXfTxbQH35XwlelrV9S7ih2Ku7a+Y0kJ/4FsubO69nD+ tbJ9Ur9EOXSm2cKfklsZWFhMGxXQdSo8eqAQusoBgGqbzhUmK7d2FBMUcCyRejXj qPP+7otn+GbccYrZKuOqaj1hXfVtryWLEkazVrCnXpCWolx0722loav1EWnW/CVL 6s4Lbr+SdVe715m7AyhPCHr294BTyrWik13pjCoVJqD2IAklhcJa6GdEV6pxcLmP 7zyIix/5pqk0ICtIDw2yu18UhcHhKOjRCKgeL2SxD/U0a6Cz8g65OAc6ERorarbN f7MPmB5JHP5J3fColpnb9sTLgPKcTcBfYGi3rJZD7Ni6MprIkBY= =FSvM -----END PGP SIGNATURE----- Merge tag 'gpio-fixes-for-v6.5-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux Pull gpio fixes from Bartosz Golaszewski: - fix a regression in the sysfs interface - fix a reference counting bug that's been around for years - MAINTAINERS update * tag 'gpio-fixes-for-v6.5-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux: gpiolib: fix reference leaks when removing GPIO chips still in use gpiolib: sysfs: Do unexport GPIO when user asks for it MAINTAINERS: add content regex for gpio-regmap
This commit is contained in:
commit
3e13eee105
@ -8812,6 +8812,7 @@ R: Michael Walle <michael@walle.cc>
|
||||
S: Maintained
|
||||
F: drivers/gpio/gpio-regmap.c
|
||||
F: include/linux/gpio/regmap.h
|
||||
K: (devm_)?gpio_regmap_(un)?register
|
||||
|
||||
GPIO SUBSYSTEM
|
||||
M: Linus Walleij <linus.walleij@linaro.org>
|
||||
|
@ -515,8 +515,9 @@ static ssize_t unexport_store(const struct class *class,
|
||||
* they may be undone on its behalf too.
|
||||
*/
|
||||
if (test_and_clear_bit(FLAG_SYSFS, &desc->flags)) {
|
||||
status = 0;
|
||||
gpiod_unexport(desc);
|
||||
gpiod_free(desc);
|
||||
status = 0;
|
||||
}
|
||||
done:
|
||||
if (status)
|
||||
@ -781,8 +782,10 @@ void gpiochip_sysfs_unregister(struct gpio_device *gdev)
|
||||
mutex_unlock(&sysfs_lock);
|
||||
|
||||
/* unregister gpiod class devices owned by sysfs */
|
||||
for_each_gpio_desc_with_flag(chip, desc, FLAG_SYSFS)
|
||||
for_each_gpio_desc_with_flag(chip, desc, FLAG_SYSFS) {
|
||||
gpiod_unexport(desc);
|
||||
gpiod_free(desc);
|
||||
}
|
||||
}
|
||||
|
||||
static int __init gpiolib_sysfs_init(void)
|
||||
|
@ -2167,12 +2167,18 @@ static bool gpiod_free_commit(struct gpio_desc *desc)
|
||||
|
||||
void gpiod_free(struct gpio_desc *desc)
|
||||
{
|
||||
if (desc && desc->gdev && gpiod_free_commit(desc)) {
|
||||
module_put(desc->gdev->owner);
|
||||
gpio_device_put(desc->gdev);
|
||||
} else {
|
||||
/*
|
||||
* We must not use VALIDATE_DESC_VOID() as the underlying gdev->chip
|
||||
* may already be NULL but we still want to put the references.
|
||||
*/
|
||||
if (!desc)
|
||||
return;
|
||||
|
||||
if (!gpiod_free_commit(desc))
|
||||
WARN_ON(extra_checks);
|
||||
}
|
||||
|
||||
module_put(desc->gdev->owner);
|
||||
gpio_device_put(desc->gdev);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user