[PATCH v3 00/13] Introduce configfs-based interface for gpio-aggregator

Koichiro Den posted 13 patches 10 months ago
There is a newer version of this series
.../admin-guide/gpio/gpio-aggregator.rst      |  107 ++
drivers/gpio/Kconfig                          |    8 +
drivers/gpio/Makefile                         |    1 +
drivers/gpio/gpio-aggregator.c                | 1129 ++++++++++++++---
drivers/gpio/gpio-pseudo.c                    |   86 ++
drivers/gpio/gpio-pseudo.h                    |   24 +
drivers/gpio/gpio-sim.c                       |   84 +-
drivers/gpio/gpio-virtuser.c                  |   73 +-
8 files changed, 1189 insertions(+), 323 deletions(-)
create mode 100644 drivers/gpio/gpio-pseudo.c
create mode 100644 drivers/gpio/gpio-pseudo.h
[PATCH v3 00/13] Introduce configfs-based interface for gpio-aggregator
Posted by Koichiro Den 10 months ago
This patch series introduces a configfs-based interface to gpio-aggregator
to address limitations in the existing 'new_device' interface.

The existing 'new_device' interface has several limitations:

  Issue#1. No way to determine when GPIO aggregator creation is complete.
  Issue#2. No way to retrieve errors when creating a GPIO aggregator.
  Issue#3. No way to trace a GPIO line of an aggregator back to its
           corresponding physical device.
  Issue#4. The 'new_device' echo does not indicate which virtual
           gpiochip<N> was created.
  Issue#5. No way to assign names to GPIO lines exported through an
           aggregator.

Although Issue#1 to #3 could technically be resolved easily without
configfs, using configfs offers a streamlined, modern, and extensible
approach, especially since gpio-sim and gpio-virtuser already utilize
configfs.

This v3 patch series includes 13 patches:

  Patch#1-7: Prepare for Patch#8
             * #1: Prepare for the following patches.
             * #2: Fix an issue that was spotted during v3 preparation.
             * #3: Add gpio-pseudo.[ch] to reduce code duplications.
             * #4: Update gpio-sim to use gpio-pseudo.[ch].
             * #5: Update gpio-virtuser to use gpio-pseudo.[ch].
             * #6: Update gpio-aggregator to use gpio-pseudo.[ch].
             * #7: Add aggr_alloc() to reduce code duplication.
  Patch#8:   Introduce basic configfs interface. Address Issue#1 to #4.
  Patch#9:   Address Issue#5.
  Patch#10:  Prepare for Patch#11.
  Patch#11:  Expose devices created with sysfs to configfs.
  Patch#12:  Suppress deferred probe for purely configfs-based aggregators.
  Patch#13:  Documentation for the new configfs interface.

N.B. v3 developed based on the latest gpio/for-next as of this writing:
c88aa6829739 ("phy: mapphone-mdm6600: use gpiod_multi_set_value_cansleep")


v2->v3 changes:
  - Addressed feedback from Bartosz:
    * Factored out the common mechanism for synchronizing platform device
      probe by adding gpio-pseudo.[ch].
    * Renamed "_auto." prefix to "_sysfs." for auto-generated
      configfs entries corresponding to sysfs-created devices.
    * Squashed v2 Patch#3 into its predecessor.
  - Addressed feedback from Geert:
    * Factored out duplicate code in struct gpio_aggregator initialization
      by adding gpio_alloc()/gpio_free() functions. Note that v2 Patch#7
      was dropped for other reasons as mentioned below, so aggr_free() in
      v3 is unrelated to the same-named function in v2.
    * Removed redundant parsing of gpio-line-names and unnecessary
      chip->names assignments; squashed v2 Patch#4 + v2 Patch#5 into v3
      Patch#9.
    * Updated to use sysfs_emit().
    * Updated Kconfig (select CONFIGFS_FS).
    * Fixed typos, coding style issues, missing const qualifiers, and other
      minor issues.
  - Resolved an issue that was spotted during v3 preparation. See Patch#2.
  - Reordered resource initialization order in gpio_aggregator_init() to
    both eliminate a potential race condition (as noted in the source code
    comment) and simplify the code. See Patch#8. This enabled:
    * Removal of v2 Patch#7.
    * Merging of aggr_unregister_lines() and aggr_free_lines() into a
      unified function.
  - Disabled 'delete_device' functionality for devices created via configfs
    for simplicity. It was mistakenly allowed in v2 and proved buggy. See
    Patch #8.

RFC->v2 changes:
  - Addressed feedback from Bartosz:
    * Expose devices created with sysfs to configfs.
    * Drop 'num_lines' attribute.
    * Fix bugs and crashes.
    * Organize internal symbol prefixes more cleanly.
  - Split diffs for improved reviewability.
  - Update kernel doc to reflect the changes.

v2: https://lore.kernel.org/all/20250203031213.399914-1-koichiro.den@canonical.com/
RFC (v1): https://lore.kernel.org/linux-gpio/20250129155525.663780-1-koichiro.den@canonical.com/T/#u


Koichiro Den (13):
  gpio: aggregator: reorder functions to prepare for configfs
    introduction
  gpio: aggregator: protect driver attr handlers against module unload
  gpio: pseudo: common helper functions for pseudo gpio devices
  gpio: sim: convert to use gpio-pseudo utilities
  gpio: virtuser: convert to use gpio-pseudo utilities
  gpio: aggregator: convert to use gpio-pseudo utilities
  gpio: aggregator: add aggr_alloc()/aggr_free()
  gpio: aggregator: introduce basic configfs interface
  gpio: aggregator: add 'name' attribute for custom GPIO line names
  gpio: aggregator: rename 'name' to 'key' in aggr_parse()
  gpio: aggregator: expose aggregator created via legacy sysfs to
    configfs
  gpio: aggregator: cancel deferred probe for devices created via
    configfs
  Documentation: gpio: document configfs interface for gpio-aggregator

 .../admin-guide/gpio/gpio-aggregator.rst      |  107 ++
 drivers/gpio/Kconfig                          |    8 +
 drivers/gpio/Makefile                         |    1 +
 drivers/gpio/gpio-aggregator.c                | 1129 ++++++++++++++---
 drivers/gpio/gpio-pseudo.c                    |   86 ++
 drivers/gpio/gpio-pseudo.h                    |   24 +
 drivers/gpio/gpio-sim.c                       |   84 +-
 drivers/gpio/gpio-virtuser.c                  |   73 +-
 8 files changed, 1189 insertions(+), 323 deletions(-)
 create mode 100644 drivers/gpio/gpio-pseudo.c
 create mode 100644 drivers/gpio/gpio-pseudo.h

-- 
2.45.2
Re: [PATCH v3 00/13] Introduce configfs-based interface for gpio-aggregator
Posted by Bartosz Golaszewski 10 months ago
On Sun, Feb 16, 2025 at 1:58 PM Koichiro Den <koichiro.den@canonical.com> wrote:
>
> This patch series introduces a configfs-based interface to gpio-aggregator
> to address limitations in the existing 'new_device' interface.
>
> The existing 'new_device' interface has several limitations:
>
>   Issue#1. No way to determine when GPIO aggregator creation is complete.
>   Issue#2. No way to retrieve errors when creating a GPIO aggregator.
>   Issue#3. No way to trace a GPIO line of an aggregator back to its
>            corresponding physical device.
>   Issue#4. The 'new_device' echo does not indicate which virtual
>            gpiochip<N> was created.
>   Issue#5. No way to assign names to GPIO lines exported through an
>            aggregator.
>
> Although Issue#1 to #3 could technically be resolved easily without
> configfs, using configfs offers a streamlined, modern, and extensible
> approach, especially since gpio-sim and gpio-virtuser already utilize
> configfs.
>
> This v3 patch series includes 13 patches:
>
>   Patch#1-7: Prepare for Patch#8
>              * #1: Prepare for the following patches.
>              * #2: Fix an issue that was spotted during v3 preparation.
>              * #3: Add gpio-pseudo.[ch] to reduce code duplications.
>              * #4: Update gpio-sim to use gpio-pseudo.[ch].
>              * #5: Update gpio-virtuser to use gpio-pseudo.[ch].
>              * #6: Update gpio-aggregator to use gpio-pseudo.[ch].
>              * #7: Add aggr_alloc() to reduce code duplication.

Please don't ram this new functionality into an unrelated series.
Split it into the gpio-pseudo code, factoring out common parts and
converting existing drivers, then send the aggregator series saying it
depends on the former. Otherwise it gets way too complex to review.

Bartosz
Re: [PATCH v3 00/13] Introduce configfs-based interface for gpio-aggregator
Posted by Koichiro Den 10 months ago
On Sun, Feb 16, 2025 at 04:56:59PM GMT, Bartosz Golaszewski wrote:
> On Sun, Feb 16, 2025 at 1:58 PM Koichiro Den <koichiro.den@canonical.com> wrote:
> >
> > This patch series introduces a configfs-based interface to gpio-aggregator
> > to address limitations in the existing 'new_device' interface.
> >
> > The existing 'new_device' interface has several limitations:
> >
> >   Issue#1. No way to determine when GPIO aggregator creation is complete.
> >   Issue#2. No way to retrieve errors when creating a GPIO aggregator.
> >   Issue#3. No way to trace a GPIO line of an aggregator back to its
> >            corresponding physical device.
> >   Issue#4. The 'new_device' echo does not indicate which virtual
> >            gpiochip<N> was created.
> >   Issue#5. No way to assign names to GPIO lines exported through an
> >            aggregator.
> >
> > Although Issue#1 to #3 could technically be resolved easily without
> > configfs, using configfs offers a streamlined, modern, and extensible
> > approach, especially since gpio-sim and gpio-virtuser already utilize
> > configfs.
> >
> > This v3 patch series includes 13 patches:
> >
> >   Patch#1-7: Prepare for Patch#8
> >              * #1: Prepare for the following patches.
> >              * #2: Fix an issue that was spotted during v3 preparation.
> >              * #3: Add gpio-pseudo.[ch] to reduce code duplications.
> >              * #4: Update gpio-sim to use gpio-pseudo.[ch].
> >              * #5: Update gpio-virtuser to use gpio-pseudo.[ch].
> >              * #6: Update gpio-aggregator to use gpio-pseudo.[ch].
> >              * #7: Add aggr_alloc() to reduce code duplication.
> 
> Please don't ram this new functionality into an unrelated series.
> Split it into the gpio-pseudo code, factoring out common parts and
> converting existing drivers, then send the aggregator series saying it
> depends on the former. Otherwise it gets way too complex to review.

Ok, I'll do so.
Thanks,

Koichiro

> 
> Bartosz
Re: [PATCH v3 00/13] Introduce configfs-based interface for gpio-aggregator
Posted by Koichiro Den 10 months ago
On Mon, Feb 17, 2025 at 10:07:03AM GMT, Koichiro Den wrote:
> On Sun, Feb 16, 2025 at 04:56:59PM GMT, Bartosz Golaszewski wrote:
> > On Sun, Feb 16, 2025 at 1:58 PM Koichiro Den <koichiro.den@canonical.com> wrote:
> > >
> > > This patch series introduces a configfs-based interface to gpio-aggregator
> > > to address limitations in the existing 'new_device' interface.
> > >
> > > The existing 'new_device' interface has several limitations:
> > >
> > >   Issue#1. No way to determine when GPIO aggregator creation is complete.
> > >   Issue#2. No way to retrieve errors when creating a GPIO aggregator.
> > >   Issue#3. No way to trace a GPIO line of an aggregator back to its
> > >            corresponding physical device.
> > >   Issue#4. The 'new_device' echo does not indicate which virtual
> > >            gpiochip<N> was created.
> > >   Issue#5. No way to assign names to GPIO lines exported through an
> > >            aggregator.
> > >
> > > Although Issue#1 to #3 could technically be resolved easily without
> > > configfs, using configfs offers a streamlined, modern, and extensible
> > > approach, especially since gpio-sim and gpio-virtuser already utilize
> > > configfs.
> > >
> > > This v3 patch series includes 13 patches:
> > >
> > >   Patch#1-7: Prepare for Patch#8
> > >              * #1: Prepare for the following patches.
> > >              * #2: Fix an issue that was spotted during v3 preparation.
> > >              * #3: Add gpio-pseudo.[ch] to reduce code duplications.
> > >              * #4: Update gpio-sim to use gpio-pseudo.[ch].
> > >              * #5: Update gpio-virtuser to use gpio-pseudo.[ch].
> > >              * #6: Update gpio-aggregator to use gpio-pseudo.[ch].
> > >              * #7: Add aggr_alloc() to reduce code duplication.
> > 
> > Please don't ram this new functionality into an unrelated series.
> > Split it into the gpio-pseudo code, factoring out common parts and
> > converting existing drivers, then send the aggregator series saying it
> > depends on the former. Otherwise it gets way too complex to review.
> 
> Ok, I'll do so.
> Thanks,

Should Patch#2 also be split off into another submission?

Koichiro

> 
> Koichiro
> 
> > 
> > Bartosz
Re: [PATCH v3 00/13] Introduce configfs-based interface for gpio-aggregator
Posted by Bartosz Golaszewski 10 months ago
On Mon, Feb 17, 2025 at 2:18 AM Koichiro Den <koichiro.den@canonical.com> wrote:
>
> On Mon, Feb 17, 2025 at 10:07:03AM GMT, Koichiro Den wrote:
> > On Sun, Feb 16, 2025 at 04:56:59PM GMT, Bartosz Golaszewski wrote:
> > > On Sun, Feb 16, 2025 at 1:58 PM Koichiro Den <koichiro.den@canonical.com> wrote:
> > > >
> > > > This patch series introduces a configfs-based interface to gpio-aggregator
> > > > to address limitations in the existing 'new_device' interface.
> > > >
> > > > The existing 'new_device' interface has several limitations:
> > > >
> > > >   Issue#1. No way to determine when GPIO aggregator creation is complete.
> > > >   Issue#2. No way to retrieve errors when creating a GPIO aggregator.
> > > >   Issue#3. No way to trace a GPIO line of an aggregator back to its
> > > >            corresponding physical device.
> > > >   Issue#4. The 'new_device' echo does not indicate which virtual
> > > >            gpiochip<N> was created.
> > > >   Issue#5. No way to assign names to GPIO lines exported through an
> > > >            aggregator.
> > > >
> > > > Although Issue#1 to #3 could technically be resolved easily without
> > > > configfs, using configfs offers a streamlined, modern, and extensible
> > > > approach, especially since gpio-sim and gpio-virtuser already utilize
> > > > configfs.
> > > >
> > > > This v3 patch series includes 13 patches:
> > > >
> > > >   Patch#1-7: Prepare for Patch#8
> > > >              * #1: Prepare for the following patches.
> > > >              * #2: Fix an issue that was spotted during v3 preparation.
> > > >              * #3: Add gpio-pseudo.[ch] to reduce code duplications.
> > > >              * #4: Update gpio-sim to use gpio-pseudo.[ch].
> > > >              * #5: Update gpio-virtuser to use gpio-pseudo.[ch].
> > > >              * #6: Update gpio-aggregator to use gpio-pseudo.[ch].
> > > >              * #7: Add aggr_alloc() to reduce code duplication.
> > >
> > > Please don't ram this new functionality into an unrelated series.
> > > Split it into the gpio-pseudo code, factoring out common parts and
> > > converting existing drivers, then send the aggregator series saying it
> > > depends on the former. Otherwise it gets way too complex to review.
> >
> > Ok, I'll do so.
> > Thanks,
>
> Should Patch#2 also be split off into another submission?
>

I'd fold it into the aggregator rework but make it come first in the
series so that I can pick it up into fixes easily and send it for
stable.

Bart
Re: [PATCH v3 00/13] Introduce configfs-based interface for gpio-aggregator
Posted by Koichiro Den 10 months ago
On Mon, Feb 17, 2025 at 09:12:07AM GMT, Bartosz Golaszewski wrote:
> On Mon, Feb 17, 2025 at 2:18 AM Koichiro Den <koichiro.den@canonical.com> wrote:
> >
> > On Mon, Feb 17, 2025 at 10:07:03AM GMT, Koichiro Den wrote:
> > > On Sun, Feb 16, 2025 at 04:56:59PM GMT, Bartosz Golaszewski wrote:
> > > > On Sun, Feb 16, 2025 at 1:58 PM Koichiro Den <koichiro.den@canonical.com> wrote:
> > > > >
> > > > > This patch series introduces a configfs-based interface to gpio-aggregator
> > > > > to address limitations in the existing 'new_device' interface.
> > > > >
> > > > > The existing 'new_device' interface has several limitations:
> > > > >
> > > > >   Issue#1. No way to determine when GPIO aggregator creation is complete.
> > > > >   Issue#2. No way to retrieve errors when creating a GPIO aggregator.
> > > > >   Issue#3. No way to trace a GPIO line of an aggregator back to its
> > > > >            corresponding physical device.
> > > > >   Issue#4. The 'new_device' echo does not indicate which virtual
> > > > >            gpiochip<N> was created.
> > > > >   Issue#5. No way to assign names to GPIO lines exported through an
> > > > >            aggregator.
> > > > >
> > > > > Although Issue#1 to #3 could technically be resolved easily without
> > > > > configfs, using configfs offers a streamlined, modern, and extensible
> > > > > approach, especially since gpio-sim and gpio-virtuser already utilize
> > > > > configfs.
> > > > >
> > > > > This v3 patch series includes 13 patches:
> > > > >
> > > > >   Patch#1-7: Prepare for Patch#8
> > > > >              * #1: Prepare for the following patches.
> > > > >              * #2: Fix an issue that was spotted during v3 preparation.
> > > > >              * #3: Add gpio-pseudo.[ch] to reduce code duplications.
> > > > >              * #4: Update gpio-sim to use gpio-pseudo.[ch].
> > > > >              * #5: Update gpio-virtuser to use gpio-pseudo.[ch].
> > > > >              * #6: Update gpio-aggregator to use gpio-pseudo.[ch].
> > > > >              * #7: Add aggr_alloc() to reduce code duplication.
> > > >
> > > > Please don't ram this new functionality into an unrelated series.
> > > > Split it into the gpio-pseudo code, factoring out common parts and
> > > > converting existing drivers, then send the aggregator series saying it
> > > > depends on the former. Otherwise it gets way too complex to review.
> > >
> > > Ok, I'll do so.
> > > Thanks,
> >
> > Should Patch#2 also be split off into another submission?
> >
> 
> I'd fold it into the aggregator rework but make it come first in the
> series so that I can pick it up into fixes easily and send it for
> stable.

Ok, thanks for guiding!

Koichiro

> 
> Bart