gpiolib: Optimize gpiochip_remove() when check for requested line
Here are the following optimizations have been done: - break the loop after first found requested line - due to above, drop redundant boolean variable - replace open coded variant of gpiochip_is_requested() - due to above, drop redundant pointer to struct gpio_desc - use 'unsigned int' instead of 'unsigned' for loop counter Note, pointer to struct gpio_chip followed by pointer to struct gpio_device is still valid, back link is not. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20200225114725.839-1-andriy.shevchenko@linux.intel.com Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
Родитель
63636d956c
Коммит
869233f813
|
@ -1797,10 +1797,8 @@ EXPORT_SYMBOL_GPL(gpiochip_get_data);
|
||||||
void gpiochip_remove(struct gpio_chip *chip)
|
void gpiochip_remove(struct gpio_chip *chip)
|
||||||
{
|
{
|
||||||
struct gpio_device *gdev = chip->gpiodev;
|
struct gpio_device *gdev = chip->gpiodev;
|
||||||
struct gpio_desc *desc;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned i;
|
unsigned int i;
|
||||||
bool requested = false;
|
|
||||||
|
|
||||||
/* FIXME: should the legacy sysfs handling be moved to gpio_device? */
|
/* FIXME: should the legacy sysfs handling be moved to gpio_device? */
|
||||||
gpiochip_sysfs_unregister(gdev);
|
gpiochip_sysfs_unregister(gdev);
|
||||||
|
@ -1820,13 +1818,12 @@ void gpiochip_remove(struct gpio_chip *chip)
|
||||||
|
|
||||||
spin_lock_irqsave(&gpio_lock, flags);
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
for (i = 0; i < gdev->ngpio; i++) {
|
for (i = 0; i < gdev->ngpio; i++) {
|
||||||
desc = &gdev->descs[i];
|
if (gpiochip_is_requested(chip, i))
|
||||||
if (test_bit(FLAG_REQUESTED, &desc->flags))
|
break;
|
||||||
requested = true;
|
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&gpio_lock, flags);
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
|
||||||
if (requested)
|
if (i == gdev->ngpio)
|
||||||
dev_crit(&gdev->dev,
|
dev_crit(&gdev->dev,
|
||||||
"REMOVING GPIOCHIP WITH GPIOS STILL REQUESTED\n");
|
"REMOVING GPIOCHIP WITH GPIOS STILL REQUESTED\n");
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче