lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4fb5db50911170345m687ea1fcmff1444250d341240@mail.gmail.com>
Date:	Tue, 17 Nov 2009 17:15:49 +0530
From:	Janakiram Sistla <janakiram.sistla@...il.com>
To:	Rodolfo Giometti <giometti@...ux.it>
Cc:	linux-kernel@...r.kernel.org,
	Haavard Skinnemoen <hskinnemoen@...el.com>,
	raffaele.recalcati@...cino.it
Subject: Re: [PATCH] gpio: show IRQ settings even if GPIO direction is 
	"output"

On Tue, Nov 17, 2009 at 5:01 PM, Rodolfo Giometti <giometti@...ux.it> wrote:
> Some architectures (as PXA 27x for example) may define GPIO IRQ lines
> as outputs since internal circuitry supports such configuration.
>
> This patch simply detects if a GPIO is a IRQ line or not just looking
> for IRQ line number, "desc" and "desc->action" fields.
>
> Signed-off-by: Rodolfo Giometti <giometti@...ux.it>
> Cc: raffaele.recalcati@...cino.it
> ---
>  drivers/gpio/gpiolib.c |   82 ++++++++++++++++++++++++------------------------
>  1 files changed, 41 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index 50de0f5..298b66f 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -1381,6 +1381,8 @@ static void gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
>        unsigned                gpio = chip->base;
>        struct gpio_desc        *gdesc = &gpio_desc[gpio];
>        int                     is_out;
> +       int                     irq;
> +       struct irq_desc         *desc;
>
>        for (i = 0; i < chip->ngpio; i++, gpio++, gdesc++) {
>                if (!test_bit(FLAG_REQUESTED, &gdesc->flags))
> @@ -1394,48 +1396,46 @@ static void gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
>                                ? (chip->get(chip, i) ? "hi" : "lo")
>                                : "?  ");
>
> -               if (!is_out) {
> -                       int             irq = gpio_to_irq(gpio);
> -                       struct irq_desc *desc = irq_to_desc(irq);
> -
> -                       /* This races with request_irq(), set_irq_type(),
> -                        * and set_irq_wake() ... but those are "rare".
> -                        *
> -                        * More significantly, trigger type flags aren't
> -                        * currently maintained by genirq.
> -                        */
> -                       if (irq >= 0 && desc->action) {
> -                               char *trigger;
> -
> -                               switch (desc->status & IRQ_TYPE_SENSE_MASK) {
> -                               case IRQ_TYPE_NONE:
> -                                       trigger = "(default)";
> -                                       break;
> -                               case IRQ_TYPE_EDGE_FALLING:
> -                                       trigger = "edge-falling";
> -                                       break;
> -                               case IRQ_TYPE_EDGE_RISING:
> -                                       trigger = "edge-rising";
> -                                       break;
> -                               case IRQ_TYPE_EDGE_BOTH:
> -                                       trigger = "edge-both";
> -                                       break;
> -                               case IRQ_TYPE_LEVEL_HIGH:
> -                                       trigger = "level-high";
> -                                       break;
> -                               case IRQ_TYPE_LEVEL_LOW:
> -                                       trigger = "level-low";
> -                                       break;
> -                               default:
> -                                       trigger = "?trigger?";
> -                                       break;
> -                               }
> -
> -                               seq_printf(s, " irq-%d %s%s",
> -                                       irq, trigger,
> -                                       (desc->status & IRQ_WAKEUP)
> -                                               ? " wakeup" : "");
> +               irq = gpio_to_irq(gpio);
> +               desc = irq_to_desc(irq);
> +
> +               /* This races with request_irq(), set_irq_type(),
> +                * and set_irq_wake() ... but those are "rare".
> +                *
> +                * More significantly, trigger type flags aren't
> +                * currently maintained by genirq.
> +                */
> +               if (irq >= 0 && desc && desc->action) {
> +                       char *trigger;
> +
> +                       switch (desc->status & IRQ_TYPE_SENSE_MASK) {
> +                       case IRQ_TYPE_NONE:
> +                               trigger = "(default)";
> +                               break;
> +                       case IRQ_TYPE_EDGE_FALLING:
> +                               trigger = "edge-falling";
> +                               break;
> +                       case IRQ_TYPE_EDGE_RISING:
> +                               trigger = "edge-rising";
> +                               break;
> +                       case IRQ_TYPE_EDGE_BOTH:
> +                               trigger = "edge-both";
> +                               break;
> +                       case IRQ_TYPE_LEVEL_HIGH:
> +                               trigger = "level-high";
> +                               break;
> +                       case IRQ_TYPE_LEVEL_LOW:
> +                               trigger = "level-low";
> +                               break;
> +                       default:
> +                               trigger = "?trigger?";
> +                               break;
>                        }
> +
> +                       seq_printf(s, " irq-%d %s%s",
> +                               irq, trigger,
> +                               (desc->status & IRQ_WAKEUP)
> +                                       ? " wakeup" : "");
>                }
>
>                seq_printf(s, "\n");
> --
> 1.6.3.3

Is there any valid test scenario that makes use of this
patch???Detecting GPIO if it is IRQ in kernel what is the advantage?


Regards,
Ram.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ