]> git.karo-electronics.de Git - linux-beck.git/commitdiff
genirq: Move IRQ_ONESHOT to core
authorThomas Gleixner <tglx@linutronix.de>
Mon, 7 Feb 2011 20:02:10 +0000 (21:02 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 19 Feb 2011 11:58:16 +0000 (12:58 +0100)
No users outside of core.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
include/linux/irq.h
kernel/irq/chip.c
kernel/irq/internals.h
kernel/irq/manage.c

index 274590fc55a32b03cd23d72f52a0c55af4d8b851..1a4c723e74e11a0bebc771bf5b257677eb669ebd 100644 (file)
@@ -71,7 +71,6 @@ typedef       void (*irq_flow_handler_t)(unsigned int irq,
 #define IRQ_MOVE_PCNTXT                0x01000000      /* IRQ migration from process context */
 #define IRQ_AFFINITY_SET       0x02000000      /* IRQ affinity was set from userspace*/
 #define IRQ_SUSPENDED          0x04000000      /* IRQ has gone through suspend sequence */
-#define IRQ_ONESHOT            0x08000000      /* IRQ is not unmasked after hardirq */
 #define IRQ_NESTED_THREAD      0x10000000      /* IRQ is nested into another, no own handler thread */
 
 #define IRQF_MODIFY_MASK       \
index 075385549dcd914c9e1e6bd0d4328a46de569ae6..420fa6bdb117728a2fcf310771c96002e264b5a8 100644 (file)
@@ -472,7 +472,7 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc)
 
        handle_irq_event(desc);
 
-       if (!(desc->status & (IRQ_DISABLED | IRQ_ONESHOT)))
+       if (!(desc->status & IRQ_DISABLED) && !(desc->istate & IRQS_ONESHOT))
                unmask_irq(desc);
 out_unlock:
        raw_spin_unlock(&desc->lock);
index d1cb1f8df6fe0a9479f6511bcfedf149b448b7af..36563f731ff878d40829696d39c53a5bcd9fca95 100644 (file)
@@ -42,12 +42,14 @@ enum {
  *                               detection
  * IRQS_POLL_INPROGRESS                - polling in progress
  * IRQS_INPROGRESS             - Interrupt in progress
+ * IRQS_ONESHOT                        - irq is not unmasked in primary handler
  */
 enum {
        IRQS_AUTODETECT         = 0x00000001,
        IRQS_SPURIOUS_DISABLED  = 0x00000002,
        IRQS_POLL_INPROGRESS    = 0x00000008,
        IRQS_INPROGRESS         = 0x00000010,
+       IRQS_ONESHOT            = 0x00000020,
 };
 
 #define irq_data_to_desc(data) container_of(data, struct irq_desc, irq_data)
index 7e5a50825088b9fdb1dffffcb3ea7f2dc2f52181..aca4208a03ac671bad2912a0a894bd10fbf976b7 100644 (file)
@@ -697,7 +697,7 @@ static int irq_thread(void *data)
        };
        struct irqaction *action = data;
        struct irq_desc *desc = irq_to_desc(action->irq);
-       int wake, oneshot = desc->status & IRQ_ONESHOT;
+       int wake, oneshot = desc->istate & IRQS_ONESHOT;
 
        sched_setscheduler(current, SCHED_FIFO, &param);
        current->irqaction = action;
@@ -897,12 +897,12 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
                        desc->status |= IRQ_PER_CPU;
 #endif
 
-               desc->status &= ~(IRQ_WAITING | IRQ_ONESHOT);
+               desc->status &= ~IRQ_WAITING;
                desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED | \
-                                 IRQS_INPROGRESS);
+                                 IRQS_INPROGRESS | IRQS_ONESHOT);
 
                if (new->flags & IRQF_ONESHOT)
-                       desc->status |= IRQ_ONESHOT;
+                       desc->istate |= IRQS_ONESHOT;
 
                if (!(desc->status & IRQ_NOAUTOEN))
                        irq_startup(desc);