linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/21] gpio: convert users to gpio_device_find() and remove gpiochip_find()
@ 2023-09-05 18:52 Bartosz Golaszewski
  2023-09-05 18:52 ` [PATCH 01/21] gpiolib: make gpio_device_get() and gpio_device_put() public Bartosz Golaszewski
                   ` (21 more replies)
  0 siblings, 22 replies; 87+ messages in thread
From: Bartosz Golaszewski @ 2023-09-05 18:52 UTC (permalink / raw)
  To: Aaro Koskinen, Janusz Krzysztofik, Tony Lindgren, Russell King,
	Mika Westerberg, Andy Shevchenko, Linus Walleij,
	Bartosz Golaszewski, Dipen Patel, Thierry Reding, Jonathan Hunter,
	Hans de Goede, Mark Gross
  Cc: linux-arm-kernel, linux-omap, linux-kernel, linux-gpio,
	linux-acpi, timestamp, linux-tegra, platform-driver-x86,
	Bartosz Golaszewski

From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

The GPIO subsystem does not handle hot-unplug events very well. We have
recently patched the user-space part of it so that at least a rouge user
cannot crash the kernel but in-kernel users are still affected by a lot of
issues: from incorrect locking or lack thereof to using structures that are
private to GPIO drivers. Since almost all GPIO controllers can be unbound,
not to mention that we have USB devices registering GPIO expanders as well as
I2C-on-USB HID devices on which I2C GPIO expanders can live, various media
gadgets etc., we really need to make GPIO hotplug/unplug friendly.

Before we can even get to fixing the locking, we need to address a serious
abuse of the GPIO driver API - accessing struct gpio_chip by anyone who isn't
the driver owning this object. This structure is owned by the GPIO provider
and its lifetime is tied to that of that provider. It is destroyed when the
device is unregistered and this may happen at any moment. struct gpio_device
is the opaque, reference counted interface to struct gpio_chip (which is the
low-level implementation) and all access should pass through it.

The end-goal is to make all gpio_device manipulators check the existence of
gdev->chip and then lock it for the duration of any of the calls using SRCU.
Before we can get there, we need to first provide a set of functions that will
replace any gpio_chip functions and convert all in-kernel users.

This series starts the process by replacing gpiochip_find() with
gpio_device_find(). This is in line with other device_find type interfaces and
returns a reference to the GPIO device that is guaranteed to remain valid
until it is put.

Note that this does not make everything correct just yet. Especially the
GPIOLIB internal users release the reference returned by the lookup function
after getting the descriptor of interest but before requesting it. This will
eventually be addressed. This is not a regression either.

First we add a bunch of new APIs that are needed to start replacing calls
to gpiochip_find. We then use them first in external users and then locally in
GPIOLIB core. Finally we remove gpiochip_find().

Bartosz Golaszewski (21):
  gpiolib: make gpio_device_get() and gpio_device_put() public
  gpiolib: provide gpio_device_find()
  gpiolib: provide gpio_device_find_by_label()
  gpiolib: provide gpio_device_get_desc()
  gpiolib: add support for scope-based management to gpio_device
  gpiolib: provide gpiod_to_device()
  gpiolib: provide gpio_device_get_base()
  gpio: acpi: provide acpi_gpio_device_free_interrupts()
  gpiolib: reluctantly provide gpio_device_get_chip()
  gpiolib: replace find_chip_by_name() with gpio_device_find_by_label()
  platform: x86: android-tablets: don't access GPIOLIB private members
  hte: allow building modules with COMPILE_TEST enabled
  hte: tegra194: improve the GPIO-related comment
  hte: tegra194: don't access struct gpio_chip
  arm: omap1: ams-delta: stop using gpiochip_find()
  gpio: of: correct notifier return codes
  gpio: of: replace gpiochip_find_* with gpio_device_find_*
  gpio: acpi: replace gpiochip_find() with gpio_device_find()
  gpio: swnode: replace gpiochip_find() with gpio_device_find_by_label()
  gpio: sysfs: drop the mention of gpiochip_find() from sysfs code
  gpiolib: remove gpiochip_find()

 arch/arm/mach-omap1/board-ams-delta.c         |  36 ++--
 drivers/gpio/gpiolib-acpi.c                   |  37 +++-
 drivers/gpio/gpiolib-of.c                     |  48 ++---
 drivers/gpio/gpiolib-swnode.c                 |  29 ++-
 drivers/gpio/gpiolib-sysfs.c                  |   2 +-
 drivers/gpio/gpiolib.c                        | 203 +++++++++++++-----
 drivers/gpio/gpiolib.h                        |  10 -
 drivers/hte/Kconfig                           |   4 +-
 drivers/hte/hte-tegra194.c                    |  49 +++--
 .../platform/x86/x86-android-tablets/core.c   |  38 ++--
 include/linux/gpio/driver.h                   |  30 ++-
 11 files changed, 316 insertions(+), 170 deletions(-)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 87+ messages in thread

end of thread, other threads:[~2024-01-24 15:18 UTC | newest]

Thread overview: 87+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-05 18:52 [PATCH 00/21] gpio: convert users to gpio_device_find() and remove gpiochip_find() Bartosz Golaszewski
2023-09-05 18:52 ` [PATCH 01/21] gpiolib: make gpio_device_get() and gpio_device_put() public Bartosz Golaszewski
2023-09-07  7:02   ` Linus Walleij
2023-09-05 18:52 ` [PATCH 02/21] gpiolib: provide gpio_device_find() Bartosz Golaszewski
2023-09-06 14:10   ` Andy Shevchenko
2023-09-11 13:14     ` Bartosz Golaszewski
2023-09-07  7:05   ` Linus Walleij
2023-09-05 18:52 ` [PATCH 03/21] gpiolib: provide gpio_device_find_by_label() Bartosz Golaszewski
2023-09-06 14:13   ` Andy Shevchenko
2023-09-07  7:06   ` Linus Walleij
2023-09-05 18:52 ` [PATCH 04/21] gpiolib: provide gpio_device_get_desc() Bartosz Golaszewski
2023-09-06 14:15   ` Andy Shevchenko
2023-09-07  7:07   ` Linus Walleij
2023-09-05 18:52 ` [PATCH 05/21] gpiolib: add support for scope-based management to gpio_device Bartosz Golaszewski
2023-09-07  7:09   ` Linus Walleij
2023-09-05 18:52 ` [PATCH 06/21] gpiolib: provide gpiod_to_device() Bartosz Golaszewski
2023-09-06 14:17   ` Andy Shevchenko
2023-09-07  7:10   ` Linus Walleij
2023-09-05 18:52 ` [PATCH 07/21] gpiolib: provide gpio_device_get_base() Bartosz Golaszewski
2023-09-07  7:17   ` Linus Walleij
2023-09-07  7:57     ` Bartosz Golaszewski
2023-10-03 20:32       ` Dipen Patel
2023-09-05 18:52 ` [PATCH 08/21] gpio: acpi: provide acpi_gpio_device_free_interrupts() Bartosz Golaszewski
2023-09-06  7:10   ` Mika Westerberg
2023-09-05 18:52 ` [PATCH 09/21] gpiolib: reluctantly provide gpio_device_get_chip() Bartosz Golaszewski
2023-09-07  7:19   ` Linus Walleij
2023-09-05 18:52 ` [PATCH 10/21] gpiolib: replace find_chip_by_name() with gpio_device_find_by_label() Bartosz Golaszewski
2023-09-06 14:23   ` Andy Shevchenko
2023-09-07  7:20   ` Linus Walleij
2023-09-05 18:52 ` [RFT PATCH 11/21] platform: x86: android-tablets: don't access GPIOLIB private members Bartosz Golaszewski
2023-09-06 13:01   ` Hans de Goede
2023-09-06 14:27     ` Bartosz Golaszewski
2023-09-09 14:17       ` Hans de Goede
2023-09-11 10:05         ` Andy Shevchenko
2023-09-05 18:53 ` [PATCH 12/21] hte: allow building modules with COMPILE_TEST enabled Bartosz Golaszewski
2023-09-07  7:22   ` Linus Walleij
2023-09-07  7:31     ` Bartosz Golaszewski
2023-09-05 18:53 ` [PATCH 13/21] hte: tegra194: improve the GPIO-related comment Bartosz Golaszewski
2023-09-07  7:24   ` Linus Walleij
2023-09-05 18:53 ` [RFT PATCH 14/21] hte: tegra194: don't access struct gpio_chip Bartosz Golaszewski
2023-09-06 14:47   ` Andy Shevchenko
2023-09-07  7:28   ` Linus Walleij
2023-10-04 12:00     ` Bartosz Golaszewski
2023-10-04 20:30       ` Dipen Patel
2023-10-04 20:33         ` Dipen Patel
2023-10-04 22:54           ` Dipen Patel
2023-10-04 23:51             ` Dipen Patel
2023-10-05 13:48               ` Bartosz Golaszewski
2023-10-05 18:12                 ` Dipen Patel
2023-10-05 19:05                   ` Bartosz Golaszewski
2023-10-05 19:43                     ` Dipen Patel
2023-10-05 19:47                       ` Bartosz Golaszewski
2023-10-09  6:48                       ` Bartosz Golaszewski
2023-10-09 16:34                         ` Dipen Patel
2023-10-09 17:46                           ` Dipen Patel
2023-09-05 18:53 ` [RFT PATCH 15/21] arm: omap1: ams-delta: stop using gpiochip_find() Bartosz Golaszewski
2023-09-06 14:48   ` Andy Shevchenko
2023-09-06 14:56     ` Bartosz Golaszewski
2023-09-07  7:31   ` Linus Walleij
2023-09-08 18:07     ` Janusz Krzysztofik
2023-09-11 11:09       ` Bartosz Golaszewski
2023-09-11 12:50         ` Tony Lindgren
2023-09-11 17:17         ` Janusz Krzysztofik
2023-09-07  7:35   ` Linus Walleij
2023-09-07  7:57     ` Bartosz Golaszewski
2023-10-04 11:59   ` Bartosz Golaszewski
2023-09-05 18:53 ` [PATCH 16/21] gpio: of: correct notifier return codes Bartosz Golaszewski
2023-09-07  7:36   ` Linus Walleij
2023-09-05 18:53 ` [PATCH 17/21] gpio: of: replace gpiochip_find_* with gpio_device_find_* Bartosz Golaszewski
2023-09-07  7:37   ` Linus Walleij
2023-09-07  7:38   ` Linus Walleij
2023-09-05 18:53 ` [PATCH 18/21] gpio: acpi: replace gpiochip_find() with gpio_device_find() Bartosz Golaszewski
2023-09-06 14:50   ` Andy Shevchenko
2023-09-07  7:39   ` Linus Walleij
2023-09-05 18:53 ` [PATCH 19/21] gpio: swnode: replace gpiochip_find() with gpio_device_find_by_label() Bartosz Golaszewski
2023-09-06 14:52   ` Andy Shevchenko
2023-09-07  7:40   ` Linus Walleij
2024-01-24 14:59   ` Paul Cercueil
2024-01-24 15:04     ` Bartosz Golaszewski
2024-01-24 15:11       ` Paul Cercueil
2024-01-24 15:18       ` Paul Cercueil
2023-09-05 18:53 ` [PATCH 20/21] gpio: sysfs: drop the mention of gpiochip_find() from sysfs code Bartosz Golaszewski
2023-09-07  7:40   ` Linus Walleij
2023-09-05 18:53 ` [PATCH 21/21] gpiolib: remove gpiochip_find() Bartosz Golaszewski
2023-09-06 14:53   ` Andy Shevchenko
2023-09-07  7:42   ` Linus Walleij
2023-09-07  7:00 ` [PATCH 00/21] gpio: convert users to gpio_device_find() and " Linus Walleij

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).