Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 27fe971d authored by Jonathan Corbet's avatar Jonathan Corbet
Browse files

viafb: Do not remove gpiochip under spinlock



gpiochip_remove() is not meant to be called with interrupts disabled, and
there is no need for the lock here in any case.

Reported-by: default avatarBruno Prémont <bonbons@linux-vserver.org>
Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
parent 2b78a963
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -246,7 +246,6 @@ static int viafb_gpio_remove(struct platform_device *platdev)
	unsigned long flags;
	int ret = 0, i;

	spin_lock_irqsave(&gpio_config.vdev->reg_lock, flags);
	/*
	 * Get unregistered.
	 */
@@ -254,16 +253,16 @@ static int viafb_gpio_remove(struct platform_device *platdev)
		ret = gpiochip_remove(&gpio_config.gpio_chip);
		if (ret) { /* Somebody still using it? */
			printk(KERN_ERR "Viafb: GPIO remove failed\n");
			goto out;
			return ret;
		}
	}
	/*
	 * Disable the ports.
	 */
	spin_lock_irqsave(&gpio_config.vdev->reg_lock, flags);
	for (i = 0; i < gpio_config.gpio_chip.ngpio; i += 2)
		viafb_gpio_disable(gpio_config.active_gpios[i]);
	gpio_config.gpio_chip.ngpio = 0;
out:
	spin_unlock_irqrestore(&gpio_config.vdev->reg_lock, flags);
	return ret;
}