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). > } ... > 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