linux/kernel/irq
Thomas Gleixner 3aa551c9b4 genirq: add threaded interrupt handler support
Add support for threaded interrupt handlers:

A device driver can request that its main interrupt handler runs in a
thread. To achive this the device driver requests the interrupt with
request_threaded_irq() and provides additionally to the handler a
thread function. The handler function is called in hard interrupt
context and needs to check whether the interrupt originated from the
device. If the interrupt originated from the device then the handler
can either return IRQ_HANDLED or IRQ_WAKE_THREAD. IRQ_HANDLED is
returned when no further action is required. IRQ_WAKE_THREAD causes
the genirq code to invoke the threaded (main) handler. When
IRQ_WAKE_THREAD is returned handler must have disabled the interrupt
on the device level. This is mandatory for shared interrupt handlers,
but we need to do it as well for obscure x86 hardware where disabling
an interrupt on the IO_APIC level redirects the interrupt to the
legacy PIC interrupt lines.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
2009-03-24 12:15:23 +01:00
..
autoprobe.c async: Asynchronous function calls to speed up kernel boot 2009-01-07 08:45:46 -08:00
chip.c Merge branch 'cpus4096' into irq/threaded 2009-03-23 21:20:20 +01:00
devres.c kernel: explicitly include required header files under kernel/ 2008-04-29 08:06:04 -07:00
handle.c genirq: add threaded interrupt handler support 2009-03-24 12:15:23 +01:00
internals.h Merge branch 'cpus4096' into irq/threaded 2009-03-23 21:20:20 +01:00
Makefile x86, sparseirq: move irq_desc according to smp_affinity, v7 2008-12-17 00:14:01 +01:00
manage.c genirq: add threaded interrupt handler support 2009-03-24 12:15:23 +01:00
migration.c cpumask: update irq_desc to use cpumask_var_t 2009-01-11 19:12:46 +01:00
numa_migrate.c Merge branch 'cpus4096' into irq/threaded 2009-03-23 21:20:20 +01:00
proc.c cpumask: update irq_desc to use cpumask_var_t 2009-01-11 19:12:46 +01:00
resend.c generic: sparse irqs: use irq_desc() together with dyn_array, instead of irq_desc[] 2008-10-16 16:52:29 +02:00
spurious.c irq: provide debug_poll_all_shared_irqs() method under CONFIG_DEBUG_SHIRQ 2009-01-16 17:46:49 +01:00