On Fri, Aug 11, 2023 at 4:24 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > On Fri, Aug 11, 2023 at 03:14:27PM +0200, Bartosz Golaszewski wrote: > > From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > > > Use macros defined in linux/cleanup.h to automate resource lifetime > > control in gpio-sim. > > ... > > > struct gpio_sim_chip *chip = gpiochip_get_data(gc); > > int ret; > > > > - mutex_lock(&chip->lock); > > - ret = !!test_bit(offset, chip->value_map); > > - mutex_unlock(&chip->lock); > > + scoped_guard(mutex, &chip->lock) > > + ret = !!test_bit(offset, chip->value_map); > > > > return ret; > > Isn't the same approach applicable here? > > ... > > > { > > struct gpio_sim_chip *chip = gpiochip_get_data(gc); > > With > > unsigned long *map = ...->value_map; > > > - mutex_lock(&chip->lock); > > - bitmap_replace(chip->value_map, chip->value_map, bits, mask, gc->ngpio); > > - mutex_unlock(&chip->lock); > > + scoped_guard(mutex, &chip->lock) > > + bitmap_replace(chip->value_map, chip->value_map, bits, mask, > > + gc->ngpio); > > ...you can satisfy me as well :-) > > bitmap_replace(map, map, bits, mask, gc->ngpio); > > > } > > ... > > > { > > struct gpio_sim_chip *chip = gpiochip_get_data(gc); > > > > - mutex_lock(&chip->lock); > > - __assign_bit(offset, chip->value_map, !!test_bit(offset, chip->pull_map)); > > - mutex_unlock(&chip->lock); > > + scoped_guard(mutex, &chip->lock) > > + __assign_bit(offset, chip->value_map, > > + !!test_bit(offset, chip->pull_map)); > > Ditto (I checked the line size). > Sorry but no. This is bikeshedding. I'm not going to add temp variables to only use them once. Bart > > } > > ... > > > struct gpio_sim_device *dev = gpio_sim_bank_get_device(bank); > > struct gpio_sim_chip_name_ctx ctx = { bank->swnode, page }; > > - int ret; > > > > - mutex_lock(&dev->lock); > > + guard(mutex)(&dev->lock); > > + > > if (gpio_sim_device_is_live_unlocked(dev)) > > - ret = device_for_each_child(&dev->pdev->dev, &ctx, > > - gpio_sim_emit_chip_name); > > - else > > - ret = sprintf(page, "none\n"); > > - mutex_unlock(&dev->lock); > > + return device_for_each_child(&dev->pdev->dev, &ctx, > > + gpio_sim_emit_chip_name); > > > > - return ret; > > + return sprintf(page, "none\n"); > > I looked at the original and at the change and maybe it could be done as > > struct device *parent = &dev->pdev->dev; // Naming? > bool live; > > live = gpio_sim_device_is_live_unlocked(dev); > if (!live) > return sprintf(page, "none\n"); > > return device_for_each_child(parent, &ctx, gpio_sim_emit_chip_name); > > ... > > > int ret; > > > > - mutex_lock(&dev->lock); > > - ret = sprintf(page, "%s\n", hog->name ?: ""); > > - mutex_unlock(&dev->lock); > > + scoped_guard(mutex, &dev->lock) > > + ret = sprintf(page, "%s\n", hog->name ?: ""); > > > > return ret; > > guard() ? > > -- > With Best Regards, > Andy Shevchenko > >