summaryrefslogtreecommitdiff
path: root/kernel/irq/chip.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2009-07-16 12:23:12 +0200
committerThomas Gleixner <tglx@linutronix.de>2009-07-29 23:30:27 +0200
commit8baf330d664a262b4e6d42728b40e6161ef02183 (patch)
treebf215a4af7ba21bc5a946e7c4db961a7eaac2987 /kernel/irq/chip.c
parentcecf393e7eca1950e4299f21c072617b8f7b568c (diff)
downloadlwn-8baf330d664a262b4e6d42728b40e6161ef02183.tar.gz
lwn-8baf330d664a262b4e6d42728b40e6161ef02183.zip
genirq: support forced threading of interrupts
Based on the mainline infrastructure we force thread all interrupts with per device threads. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r--kernel/irq/chip.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index 474657a806d7..3f8f04f4eb8e 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -247,6 +247,7 @@ static unsigned int default_startup(unsigned int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
+ desc->status &= ~IRQ_MASKED;
desc->chip->enable(irq);
return 0;
}
@@ -382,7 +383,8 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc)
atomic_spin_lock(&desc->lock);
desc->status &= ~IRQ_INPROGRESS;
- if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask)
+ if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask &&
+ !desc->forced_threads_active)
desc->chip->unmask(irq);
out_unlock:
atomic_spin_unlock(&desc->lock);