]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
gpio: mockup: tweak gpio_mockup_event_write()
authorBartosz Golaszewski <brgl@bgdev.pl>
Fri, 9 Jun 2017 11:41:26 +0000 (13:41 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 20 Jun 2017 07:18:47 +0000 (09:18 +0200)
Invert the logic of the irq_enabled check and only access the private
data after the input is sanitized.

Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-mockup.c

index da76267aa85cdabb4a2d8310b4e5bece48a59573..d78e8e081f5a3aa69f8e199dfc2c414a20e2ea1b 100644 (file)
@@ -210,24 +210,23 @@ static ssize_t gpio_mockup_event_write(struct file *file,
        struct gpio_chip *gc;
        int rv, val;
 
-       sfile = file->private_data;
-       priv = sfile->private;
-       desc = priv->desc;
-       chip = priv->chip;
-       gc = &chip->gc;
-
        rv = kstrtoint_from_user(usr_buf, size, 0, &val);
        if (rv)
                return rv;
        if (val != 0 && val != 1)
                return -EINVAL;
 
-       if (!chip->lines[priv->offset].irq_enabled)
-               return size;
+       sfile = file->private_data;
+       priv = sfile->private;
+       desc = priv->desc;
+       chip = priv->chip;
+       gc = &chip->gc;
 
-       gpiod_set_value_cansleep(desc, val);
-       priv->chip->irq_ctx.irq = gc->irq_base + priv->offset;
-       irq_work_queue(&priv->chip->irq_ctx.work);
+       if (chip->lines[priv->offset].irq_enabled) {
+               gpiod_set_value_cansleep(desc, val);
+               priv->chip->irq_ctx.irq = gc->irq_base + priv->offset;
+               irq_work_queue(&priv->chip->irq_ctx.work);
+       }
 
        return size;
 }