On Tue, 3 Feb 2026 07:10:50 +0100, Tzung-Bi Shih <[email protected]> said: > gpiochip_sysfs_unregister() is only called by gpiochip_remove() where > the struct gpio_chip is ensured. > > Remove the redundant check. > > Signed-off-by: Tzung-Bi Shih <[email protected]> > --- > v2: > - No changes. > > v1: https://lore.kernel.org/all/[email protected] > > drivers/gpio/gpiolib-sysfs.c | 9 +-------- > drivers/gpio/gpiolib-sysfs.h | 6 ++++-- > drivers/gpio/gpiolib.c | 2 +- > 3 files changed, 6 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c > index cd553acf3055..8e6b09d8b559 100644 > --- a/drivers/gpio/gpiolib-sysfs.c > +++ b/drivers/gpio/gpiolib-sysfs.c > @@ -1048,11 +1048,10 @@ int gpiochip_sysfs_register(struct gpio_device *gdev) > return 0; > } > > -void gpiochip_sysfs_unregister(struct gpio_device *gdev) > +void gpiochip_sysfs_unregister(struct gpio_device *gdev, struct gpio_chip > *chip) > { > struct gpiodev_data *data; > struct gpio_desc *desc; > - struct gpio_chip *chip; > > scoped_guard(mutex, &sysfs_lock) { > data = gdev_get_data(gdev); > @@ -1066,12 +1065,6 @@ void gpiochip_sysfs_unregister(struct gpio_device > *gdev) > kfree(data); > } > > - guard(srcu)(&gdev->srcu); > - > - chip = srcu_dereference(gdev->chip, &gdev->srcu); > - if (!chip) > - return; > - > /* unregister gpiod class devices owned by sysfs */ > for_each_gpio_desc_with_flag(chip, desc, GPIOD_FLAG_SYSFS) { > gpiod_unexport(desc); > diff --git a/drivers/gpio/gpiolib-sysfs.h b/drivers/gpio/gpiolib-sysfs.h > index b794b396d6a5..93debe8e118c 100644 > --- a/drivers/gpio/gpiolib-sysfs.h > +++ b/drivers/gpio/gpiolib-sysfs.h > @@ -8,7 +8,8 @@ struct gpio_device; > #ifdef CONFIG_GPIO_SYSFS > > int gpiochip_sysfs_register(struct gpio_device *gdev); > -void gpiochip_sysfs_unregister(struct gpio_device *gdev); > +void gpiochip_sysfs_unregister(struct gpio_device *gdev, > + struct gpio_chip *chip); > > #else > > @@ -17,7 +18,8 @@ static inline int gpiochip_sysfs_register(struct > gpio_device *gdev) > return 0; > } > > -static inline void gpiochip_sysfs_unregister(struct gpio_device *gdev) > +static inline void gpiochip_sysfs_unregister(struct gpio_device *gdev, > + struct gpio_chip *chip) > { > } > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index a6dd07be126c..3137e6f1108a 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -1281,7 +1281,7 @@ void gpiochip_remove(struct gpio_chip *gc) > struct gpio_device *gdev = gc->gpiodev; > > /* FIXME: should the legacy sysfs handling be moved to gpio_device? */ > - gpiochip_sysfs_unregister(gdev); > + gpiochip_sysfs_unregister(gdev, gc);
I understand the intention here but I really don't like passing both gc and gdev here. We can get the address of the gpio_device from gpio_chip so why not do this and pass only variable? Bartosz > gpiochip_free_hogs(gc); > gpiochip_free_remaining_irqs(gc); > > -- > 2.53.0.rc2.204.g2597b5adb4-goog > >

