| From 6116e8d2a20468fc26d0b316fb4f1386c4377206 Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Wed, 26 Aug 2009 16:17:59 +0200 |
| Subject: [PATCH] genirq: Do not mask edge ONESHOT interrupts |
| |
| commit 7f072a34719f7064189fd40d41f1b98d6bdbf653 in tip. |
| |
| Edge type oneshot interrupts should not be masked for forced |
| threading. We might lose interrupts. |
| |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c |
| index cd58389..ad096ed 100644 |
| --- a/kernel/irq/chip.c |
| +++ b/kernel/irq/chip.c |
| @@ -536,7 +536,12 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc) |
| { |
| raw_spin_lock(&desc->lock); |
| |
| - desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); |
| + /* |
| + * Edge irqs can be requested with IRQF_ONESHOT set. RT |
| + * (ab)uses this for enforced irq threading, but we do not |
| + * want to mask edge type interrupts. Clear the oneshot flag. |
| + */ |
| + desc->status &= ~(IRQ_REPLAY | IRQ_WAITING | IRQ_ONESHOT); |
| |
| /* |
| * If we're currently running this IRQ, or its disabled, |
| -- |
| 1.7.1.1 |
| |