[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <200903011454.22280.david-b@pacbell.net>
Date: Sun, 1 Mar 2009 14:54:21 -0800
From: David Brownell <david-b@...bell.net>
To: Thomas Gleixner <tglx@...utronix.de>
Cc: Andrew Morton <akpm@...ux-foundation.org>, me@...ipebalbi.com,
linux-kernel@...r.kernel.org, linux-input@...r.kernel.org,
felipe.balbi@...ia.com, dmitry.torokhov@...il.com,
sameo@...nedhand.com, a.p.zijlstra@...llo.nl
Subject: Re: lockdep and threaded IRQs (was: ...)
On Sunday 01 March 2009, Thomas Gleixner wrote:
> On Sat, 28 Feb 2009, David Brownell wrote:
> > That seems to presume a hardirq-to-taskirq handoff. But the
> > problem case is taskirq-to-taskirq chaining, through e.g.
> > what set_irq_chip_and_handler() provided. (Details not very
> > amenable to brief emails, just UTSL.)
> >
> > Thing is, I'm not sure a per-IRQ thread can work easily with
> > that chaining. The chained IRQs can need to be handled before
> > the top-level IRQ gets re-enabled. That's why the twl4030-irq
> > code uses just one taskirq thread for all incoming events.
>
> This can be solved by a completion as well.
One of many potential solutions; it's probably a better
use case for a counting semaphore though, especially if
they were all going in parallel. And of course there's
the issue of where that synch code lives...
Though I still don't see any real issue with keeping it
simple and serializing them without creating new threads.
In terms of resource consumption, that simple solution is
clearly superior.
> > (Which of course is rarely more than one at a time, so there's
> > little reason not to share that task between the demuxing code
> > and the events being demuxed. Interrupts that need processing
> > via I2C/SPI/etc are more or less by definition not frequent or
> > performance-critical.)
>
> Then all we need to provide in the generic code is a function which
> does not go through the handle_IRQ_event() logic and calls the action
> handler directly.
That is, something to replace handle_simple_irq() and
handle_edge_irq() flow handlers? (irq_desc.handle_irq)
> Not rocket science to do that and better than using
> a facility which is designed to run in hardirq context and expect that
> it works in thread context without complaints.
The main "complaint" is the pre-existing lockdep breakage. :)
The need to call irq_desc.handle_irq() with IRQs disabled is a
bit strange, but not really a problem; and it ensures consistent
locking for the irq_desc statistics and flag updates.
- Dave
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists