]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
genirq: Move IRQ_SPURIOUS_DISABLED to core state
authorThomas Gleixner <tglx@linutronix.de>
Mon, 7 Feb 2011 19:40:54 +0000 (20:40 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 19 Feb 2011 11:58:15 +0000 (12:58 +0100)
No users outside.

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

index d1f9c352cd1be113156a97ccd0008ec24518282a..a900741b43eafd221b86ac5740de98fdb4e6a595 100644 (file)
@@ -64,7 +64,6 @@ typedef       void (*irq_flow_handler_t)(unsigned int irq,
 #define IRQ_WAKEUP             0x00100000      /* IRQ triggers system wakeup */
 #define IRQ_MOVE_PENDING       0x00200000      /* need to re-target IRQ destination */
 #define IRQ_NO_BALANCING       0x00400000      /* IRQ is excluded from balancing */
-#define IRQ_SPURIOUS_DISABLED  0x00800000      /* IRQ was disabled by the spurious trap */
 #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 */
index 7ffd4f439b924dc2f0a038ea1cc16f38282ea3e1..dc5e21b84f9e305d61e03fb9154bdbd806f60953 100644 (file)
@@ -37,9 +37,12 @@ enum {
  * Bit masks for desc->state
  *
  * IRQS_AUTODETECT             - autodetection in progress
+ * IRQS_SPURIOUS_DISABLED      - was disabled due to spurious interrupt
+ *                               detection
  */
 enum {
        IRQS_AUTODETECT         = 0x00000001,
+       IRQS_SPURIOUS_DISABLED  = 0x00000002,
 };
 
 #define irq_data_to_desc(data) container_of(data, struct irq_desc, irq_data)
index abe852c9449d443afe1463e96ad1f3df55e9b846..5b918ffa46afa2436800fc1adeb52b334e8a1d95 100644 (file)
@@ -897,9 +897,8 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
                        desc->status |= IRQ_PER_CPU;
 #endif
 
-               desc->status &= ~(IRQ_WAITING | IRQ_ONESHOT |
-                                 IRQ_INPROGRESS | IRQ_SPURIOUS_DISABLED);
-               desc->istate &= ~IRQS_AUTODETECT;
+               desc->status &= ~(IRQ_WAITING | IRQ_ONESHOT | IRQ_INPROGRESS);
+               desc->istate &= ~(IRQS_AUTODETECT | IRQS_SPURIOUS_DISABLED);
 
                if (new->flags & IRQF_ONESHOT)
                        desc->status |= IRQ_ONESHOT;
@@ -937,8 +936,8 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
         * Check whether we disabled the irq via the spurious handler
         * before. Reenable it and give it another chance.
         */
-       if (shared && (desc->status & IRQ_SPURIOUS_DISABLED)) {
-               desc->status &= ~IRQ_SPURIOUS_DISABLED;
+       if (shared && (desc->istate & IRQS_SPURIOUS_DISABLED)) {
+               desc->istate &= ~IRQS_SPURIOUS_DISABLED;
                __enable_irq(desc, irq, false);
        }
 
index bc0620745d5f0e16930e71f7375b47acd732bb1a..2941d8a22df7b15e00f814f5ab6e7336c371d207 100644 (file)
@@ -146,15 +146,15 @@ static void poll_spurious_irqs(unsigned long dummy)
        irq_poll_cpu = smp_processor_id();
 
        for_each_irq_desc(i, desc) {
-               unsigned int status;
+               unsigned int state;
 
                if (!i)
                         continue;
 
                /* Racy but it doesn't matter */
-               status = desc->status;
+               state = desc->istate;
                barrier();
-               if (!(status & IRQ_SPURIOUS_DISABLED))
+               if (!(state & IRQS_SPURIOUS_DISABLED))
                        continue;
 
                local_irq_disable();
@@ -298,7 +298,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
                 * Now kill the IRQ
                 */
                printk(KERN_EMERG "Disabling IRQ #%d\n", irq);
-               desc->status |= IRQ_SPURIOUS_DISABLED;
+               desc->istate |= IRQS_SPURIOUS_DISABLED;
                desc->depth++;
                irq_disable(desc);