Thread (52 messages) 52 messages, 11 authors, 2013-11-12

Re: [PATCH v3] gpio: interrupt consistency check for OF GPIO IRQs

From: Linus Walleij <hidden>
Date: 2013-09-24 08:31:46
Also in: linux-devicetree, lkml

On Mon, Sep 23, 2013 at 10:21 PM, Stephen Warren [off-list ref] wrote:
On 09/23/2013 02:01 PM, Linus Walleij wrote:
quoted
And how to you block the same line from being gpio_request()ed
and set as output?
To be honest, I really don't think this problem is terribly likely to
occur, so I'm really not convinced that it's worth putting a lot of
effort into solving it.
I have a different opionion, I think this is important. As GPIO
subsystem maintainer I need to be convinced of the integrity
of the system.
If the problem does occur, it's trivial to see that this has happened by
looking at /proc/interrupts and /sys/kernel/debug/gpio,
I basically want /sys/kernel/debug/gpio to say if a certain line
is tied for IRQ.
That driver needs to maintain some state that indicates which of its
IRQs have been requested. Any time a GPIO request (I mean e.g.
set_output() not request_gpio)) comes in, the request needs to be
validated against that IRQ usage state. If there's a conflict, deny the
GPIO request.
I think this should be done by gpiolib, and I think it is trivial
given the right APIs. Putting it in the drivers will just create
an array of similar-look Rube Goldberg-machines and code
duplication. There is no point.
Now, it's quite possible that the code to maintain this state and
perform the checks will be similar/common across multiple drivers. If
so, by all means implement the code somewhere common, and have the
various irq_chip/gpio_chip drivers call into it.
And this is what we should do in gpiolib.
The main thing is that all of this has to be driven/controlled/enabled
by the gpio_chip/irq_chip driver itself, not as some global/blanket
feature of the GPIO or IRQ subsystems.
Sure.
Perhaps rather than having the gpio_chip/irq_chip drivers physically
implement a function which calls this common code, they could set some
flags/data/... in the struct gpio_chip/irq_chip indicating that they
desire the core code that implements the error-checking to be enabled.
I think it should more be like a function they can call to flag
a GPIO as used for IRQ.

Yours,
Linus Walleij
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help