Re: [PATCH 2/2] gpio: gpiolib: set gpiochip_remove retval to void
From: Lars-Peter Clausen <lars@metafoo.de>
Date: 2014-05-31 07:35:39
Also in:
linux-arm-kernel, linux-gpio, linux-input, linux-leds, linux-mips, netdev, platform-driver-x86
On 05/31/2014 01:29 AM, Greg KH wrote:
On Fri, May 30, 2014 at 08:16:59PM +0200, Lars-Peter Clausen wrote:quoted
On 05/30/2014 07:33 PM, David Daney wrote:quoted
On 05/30/2014 04:39 AM, Geert Uytterhoeven wrote:quoted
On Fri, May 30, 2014 at 1:30 PM, abdoulaye berthe [off-list ref] wrote:quoted
--- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c@@ -1263,10 +1263,9 @@ static void gpiochip_irqchip_remove(structgpio_chip *gpiochip); * * A gpio_chip with any GPIOs still requested may not be removed. */ -int gpiochip_remove(struct gpio_chip *chip) +void gpiochip_remove(struct gpio_chip *chip) { unsigned long flags; - int status = 0; unsigned id; acpi_gpiochip_remove(chip);@@ -1278,24 +1277,15 @@ int gpiochip_remove(struct gpio_chip *chip) of_gpiochip_remove(chip); for (id = 0; id < chip->ngpio; id++) { - if (test_bit(FLAG_REQUESTED, &chip->desc[id].flags)) { - status = -EBUSY; - break; - } - } - if (status == 0) { - for (id = 0; id < chip->ngpio; id++) - chip->desc[id].chip = NULL; - - list_del(&chip->list); + if (test_bit(FLAG_REQUESTED, &chip->desc[id].flags)) + panic("gpio: removing gpiochip with gpios stillrequested\n");panic?NACK to the patch for this reason. The strongest thing you should do here is WARN. That said, I am not sure why we need this whole patch set in the first place.Well, what currently happens when you remove a device that is a provider of a gpio_chip which is still in use, is that the kernel crashes. Probably with a rather cryptic error message. So this patch doesn't really change the behavior, but makes it more explicit what is actually wrong. And even if you replace the panic() by a WARN() it will again just crash slightly later. This is a design flaw in the GPIO subsystem that needs to be fixed.Then fix the GPIO code properly, don't add a new panic() to the kernel.
Until somebody comes up with a patch that fixes this for good I think that patch is still an improvement over the current situation. Rather than keeping the kernel running in a inconsistent state, which might cause all kinds of undefined behavior and which will lead to a crash eventually, we might as well just crash the kernel at the cause of the inconsistent state. This will make it obvious why it crashed (compared to a random stacktrace) and will also prevent the kernel from running in a undefined state. - Lars