Re: [PATCH] gpio: check first for invalid gpio

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 1, 2016 at 5:30 PM, Sudip Mukherjee
<sudipm.mukherjee@xxxxxxxxx> wrote:
> Even if an invalid gpio number is sent to gpio_to_desc() we try to find
> it in the list before checking if it is invalid. We can check it first
> so that it will save us from traversing the list incase of invalid gpio.

The motivation for having that test at the end is that being provided
an invalid GPIO number should be the exceptional case (i.e. it does
not happen unless there is an error in the client code). Thus for
valid GPIOs (the vast majority) we find an entry in the list and save
that test.

>
> Signed-off-by: Sudip Mukherjee <sudip@xxxxxxxxxxxxxxx>
> ---
>  drivers/gpio/gpiolib.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index ca66302..17a1cd5 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -70,6 +70,11 @@ struct gpio_desc *gpio_to_desc(unsigned gpio)
>         struct gpio_chip *chip;
>         unsigned long flags;
>
> +       if (!gpio_is_valid(gpio)) {
> +               WARN(1, "invalid GPIO %d\n", gpio);
> +               return NULL;
> +       }
> +
>         spin_lock_irqsave(&gpio_lock, flags);
>
>         list_for_each_entry(chip, &gpio_chips, list) {
> @@ -81,9 +86,6 @@ struct gpio_desc *gpio_to_desc(unsigned gpio)
>
>         spin_unlock_irqrestore(&gpio_lock, flags);
>
> -       if (!gpio_is_valid(gpio))
> -               WARN(1, "invalid GPIO %d\n", gpio);
> -
>         return NULL;
>  }
>  EXPORT_SYMBOL_GPL(gpio_to_desc);
> --
> 1.9.1
>
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux