From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@elte.hu>,
Peter Zijlstra <peterz@infradead.org>,
Arjan van de Veen <arjan@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>,
Jon Masters <jonathan@jonmasters.org>
Subject: [patch 0/4] genirq: add infrastructure for threaded interrupt handlers V2
Date: Thu, 26 Feb 2009 13:28:02 -0000 [thread overview]
Message-ID: <20090226131336.423054348@linutronix.de> (raw)
This patch series implements support for threaded irq handlers for the
generic IRQ layer.
Changes vs. V1:
- review comments addressed
- irq affinity setting for handler threads
Threaded interrupt handlers are not only interesting in the preempt-rt
context. Threaded interrupt handlers can help to address common
problems in the interrupt handling code:
- move long running handlers out of the hard interrupt context
- avoid complex hardirq -> tasklet/softirq interaction and locking
problems by integration of this functionality into the threaded
handler code
- improved debugability of the kernel: faulty handlers do not take
down the system.
- allows prioritizing of the handlers which share an interrupt line
The implementation provides an opt-in mechanism to convert drivers to
the threaded interrupt handler model contrary to the preempt-rt patch
where the threaded handlers are enabled by a brute force switch. The
brute force switch is suboptimal as it does not change the interrupt
handler -> tasklet/softirq interaction problems, but was the only way
which was possible for the limited man power of the preempt-rt
developers.
Converting an interrupt to threaded makes only sense when the handler
code takes advantage of it by integrating tasklet/softirq
functionality and simplifying the locking.
When a driver wants to use threaded interrupt handlers it needs to
provide a quick check handler function, which checks whether the
interrupt was originated from the device or not.
In case it was originated from the device the quick check handler must
disable the interrupt at the device level and return
IRQ_WAKE_THREAD. The generic interrupt handling core then sets the
IRQF_RUNTHREAD in the irqaction of the handler and wakes the
associated thread.
The irqaction is referenced in the threads task_struct so handlers can
check for newly arrived interrupts in action flags. Aside of that the
reference is used to prevent further referencing of the thread in the
interrupt code in the case of segfault to make sure that the system
(minus the now dead interrupt handler) survives and debug information
can be retrieved. In the best case the driver can be restarted, but
dont expect that as a given.
The code was tested with a converted USB EHCI driver. The EHCI shares
an interrupt line with another device and both the threaded and the
non threaded handlers coexist nicely.
Thanks,
tglx
next reply other threads:[~2009-02-26 13:28 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-26 13:28 Thomas Gleixner [this message]
2009-02-26 13:28 ` [patch 1/4] genirq: make irqreturn_t an enum Thomas Gleixner
2009-03-25 19:51 ` Geert Uytterhoeven
2009-02-26 13:28 ` [patch 2/4] genirq: use kzalloc instead of explicit zero initialization Thomas Gleixner
2009-02-26 13:28 ` [patch 3/4] genirq: add a quick check handler Thomas Gleixner
2009-02-26 23:03 ` Andrew Morton
2009-02-26 23:11 ` Thomas Gleixner
2009-02-28 22:24 ` Christoph Hellwig
2009-03-01 9:44 ` Thomas Gleixner
2009-03-05 19:59 ` Sven-Thorsten Dietrich
2009-03-17 7:54 ` Christoph Hellwig
2009-03-17 15:29 ` Steven Rostedt
2009-02-26 13:28 ` [patch 4/4] genirq: add support for threaded interrupt handlers Thomas Gleixner
2009-02-26 23:32 ` Andrew Morton
2009-02-27 5:27 ` Arjan van de Ven
2009-02-27 5:45 ` Andrew Morton
2009-02-27 7:18 ` Peter Zijlstra
2009-02-27 7:48 ` Andrew Morton
2009-02-27 8:05 ` Peter Zijlstra
2009-02-27 8:15 ` Andrew Morton
2009-02-27 15:06 ` Arjan van de Ven
2009-02-27 15:30 ` Steven Rostedt
2009-02-28 13:46 ` Stefan Richter
2009-03-02 13:21 ` Peter Zijlstra
2009-02-28 17:13 ` Andi Kleen
2009-02-27 16:43 ` Thomas Gleixner
2009-02-26 15:26 ` [patch 0/4] genirq: add infrastructure for threaded interrupt handlers V2 Jon Masters
2009-03-05 20:03 ` Sven-Thorsten Dietrich
2009-02-28 22:10 ` Christoph Hellwig
2009-03-01 9:43 ` Thomas Gleixner
2009-03-05 8:40 ` [ANNOUNCE] USB genirq " Sven-Thorsten Dietrich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090226131336.423054348@linutronix.de \
--to=tglx@linutronix.de \
--cc=akpm@linux-foundation.org \
--cc=arjan@infradead.org \
--cc=jonathan@jonmasters.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®