2011-03-24 21:27:41

by Thomas Gleixner

[permalink] [raw]
Subject: [patch 1/3] arm/gpio: Remove three copies of broken and racy debug code

gpiolib plus two gpio implementations in arm fiddle in the guts of
irq_desc in a racy and buggy way. Remove the stuff. I already told the
gpio folks that we can provide that information in a proper way if
necessary.

Signed-off-by: Thomas Gleixner <[email protected]>
---
arch/arm/mach-ep93xx/gpio.c | 39 -------------------------------------
arch/arm/plat-nomadik/gpio.c | 45 -------------------------------------------
drivers/gpio/gpiolib.c | 45 -------------------------------------------
3 files changed, 129 deletions(-)

Index: linux-2.6-tip/arch/arm/mach-ep93xx/gpio.c
===================================================================
--- linux-2.6-tip.orig/arch/arm/mach-ep93xx/gpio.c
+++ linux-2.6-tip/arch/arm/mach-ep93xx/gpio.c
@@ -366,45 +366,6 @@ static void ep93xx_gpio_dbg_show(struct
gpiochip_is_requested(chip, i) ? : "",
is_out ? "out" : "in ",
(data_reg & (1 << i)) ? "hi" : "lo");
-
- if (!is_out) {
- int irq = gpio_to_irq(gpio);
- struct irq_desc *desc = irq_desc + irq;
-
- 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" : "");
- }
- }
-
seq_printf(s, "\n");
}
}
Index: linux-2.6-tip/arch/arm/plat-nomadik/gpio.c
===================================================================
--- linux-2.6-tip.orig/arch/arm/plat-nomadik/gpio.c
+++ linux-2.6-tip/arch/arm/plat-nomadik/gpio.c
@@ -832,51 +832,6 @@ static void nmk_gpio_dbg_show(struct seq
: "? ",
(mode < 0) ? "unknown" : modes[mode],
pull ? "pull" : "none");
-
- 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" : "");
- }
- }
-
seq_printf(s, "\n");
}
}
Index: linux-2.6-tip/drivers/gpio/gpiolib.c
===================================================================
--- linux-2.6-tip.orig/drivers/gpio/gpiolib.c
+++ linux-2.6-tip/drivers/gpio/gpiolib.c
@@ -1656,51 +1656,6 @@ static void gpiolib_dbg_show(struct seq_
chip->get
? (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" : "");
- }
- }
-
seq_printf(s, "\n");
}
}


2011-03-24 21:41:18

by Ryan Mallon

[permalink] [raw]
Subject: Re: [patch 1/3] arm/gpio: Remove three copies of broken and racy debug code

On 03/25/2011 10:27 AM, Thomas Gleixner wrote:
> gpiolib plus two gpio implementations in arm fiddle in the guts of
> irq_desc in a racy and buggy way. Remove the stuff. I already told the
> gpio folks that we can provide that information in a proper way if
> necessary.
>
> Signed-off-by: Thomas Gleixner <[email protected]>
> ---
> arch/arm/mach-ep93xx/gpio.c | 39 -------------------------------------
> arch/arm/plat-nomadik/gpio.c | 45 -------------------------------------------
> drivers/gpio/gpiolib.c | 45 -------------------------------------------
> 3 files changed, 129 deletions(-)
>
> Index: linux-2.6-tip/arch/arm/mach-ep93xx/gpio.c
> ===================================================================

I suggested an alternative patch for the ep93xx last time round which
keeps the information that the pin is configured as an interrupt and
tidies the code a bit (moves the newline to the first seq_printf). My
patch is available here:
http://lists-archives.org/linux-kernel/27439434-arm-ep93xx-kill-another-instance-of-broken-irq_desc-fiddling.html

Could we merge that instead please.

Thanks,
~Ryan

--
Bluewater Systems Ltd - ARM Technology Solution Centre

Ryan Mallon 5 Amuri Park, 404 Barbadoes St
[email protected] PO Box 13 889, Christchurch 8013
http://www.bluewatersys.com New Zealand
Phone: +64 3 3779127 Freecall: Australia 1800 148 751
Fax: +64 3 3779135 USA 1800 261 2934

2011-03-24 22:43:20

by Thomas Gleixner

[permalink] [raw]
Subject: Re: [patch 1/3] arm/gpio: Remove three copies of broken and racy debug code


On Fri, 25 Mar 2011, Ryan Mallon wrote:

> On 03/25/2011 10:27 AM, Thomas Gleixner wrote:
> > gpiolib plus two gpio implementations in arm fiddle in the guts of
> > irq_desc in a racy and buggy way. Remove the stuff. I already told the
> > gpio folks that we can provide that information in a proper way if
> > necessary.
> >
> > Signed-off-by: Thomas Gleixner <[email protected]>
> > ---
> > arch/arm/mach-ep93xx/gpio.c | 39 -------------------------------------
> > arch/arm/plat-nomadik/gpio.c | 45 -------------------------------------------
> > drivers/gpio/gpiolib.c | 45 -------------------------------------------
> > 3 files changed, 129 deletions(-)
> >
> > Index: linux-2.6-tip/arch/arm/mach-ep93xx/gpio.c
> > ===================================================================
>
> I suggested an alternative patch for the ep93xx last time round which
> keeps the information that the pin is configured as an interrupt and
> tidies the code a bit (moves the newline to the first seq_printf). My
> patch is available here:
> http://lists-archives.org/linux-kernel/27439434-arm-ep93xx-kill-another-instance-of-broken-irq_desc-fiddling.html
>
> Could we merge that instead please.

Sure. Will pick it up.

Thanks,

tglx