]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/parisc/kernel/irq.c
oom: do not dump task state for non thread group leaders
[linux-2.6-omap-h63xx.git] / arch / parisc / kernel / irq.c
index e9d09b020e865ca2a2c875bc76a0d81929679a72..23ef950df0080a11d0e8c6390d52d948c778ba99 100644 (file)
@@ -46,14 +46,10 @@ extern irqreturn_t ipi_interrupt(int, void *);
 static volatile unsigned long cpu_eiem = 0;
 
 /*
-** ack bitmap ... habitually set to 1, but reset to zero
+** local ACK bitmap ... habitually set to 1, but reset to zero
 ** between ->ack() and ->end() of the interrupt to prevent
 ** re-interruption of a processing interrupt.
 */
-static volatile unsigned long global_ack_eiem = ~0UL;
-/*
-** Local bitmap, same as above but for per-cpu interrupts
-*/
 static DEFINE_PER_CPU(unsigned long, local_ack_eiem) = ~0UL;
 
 static void cpu_disable_irq(unsigned int irq)
@@ -94,13 +90,11 @@ void cpu_ack_irq(unsigned int irq)
        int cpu = smp_processor_id();
 
        /* Clear in EIEM so we can no longer process */
-       if (CHECK_IRQ_PER_CPU(irq_desc[irq].status))
-               per_cpu(local_ack_eiem, cpu) &= ~mask;
-       else
-               global_ack_eiem &= ~mask;
+       per_cpu(local_ack_eiem, cpu) &= ~mask;
 
        /* disable the interrupt */
-       set_eiem(cpu_eiem & global_ack_eiem & per_cpu(local_ack_eiem, cpu));
+       set_eiem(cpu_eiem & per_cpu(local_ack_eiem, cpu));
+
        /* and now ack it */
        mtctl(mask, 23);
 }
@@ -111,13 +105,10 @@ void cpu_end_irq(unsigned int irq)
        int cpu = smp_processor_id();
 
        /* set it in the eiems---it's no longer in process */
-       if (CHECK_IRQ_PER_CPU(irq_desc[irq].status))
-               per_cpu(local_ack_eiem, cpu) |= mask;
-       else
-               global_ack_eiem |= mask;
+       per_cpu(local_ack_eiem, cpu) |= mask;
 
        /* enable the interrupt */
-       set_eiem(cpu_eiem & global_ack_eiem & per_cpu(local_ack_eiem, cpu));
+       set_eiem(cpu_eiem & per_cpu(local_ack_eiem, cpu));
 }
 
 #ifdef CONFIG_SMP
@@ -354,8 +345,7 @@ void do_cpu_irq_mask(struct pt_regs *regs)
        local_irq_disable();
        irq_enter();
 
-       eirr_val = mfctl(23) & cpu_eiem & global_ack_eiem &
-               per_cpu(local_ack_eiem, cpu);
+       eirr_val = mfctl(23) & cpu_eiem & per_cpu(local_ack_eiem, cpu);
        if (!eirr_val)
                goto set_out;
        irq = eirr_to_irq(eirr_val);
@@ -381,14 +371,14 @@ void do_cpu_irq_mask(struct pt_regs *regs)
        return;
 
  set_out:
-       set_eiem(cpu_eiem & global_ack_eiem & per_cpu(local_ack_eiem, cpu));
+       set_eiem(cpu_eiem & per_cpu(local_ack_eiem, cpu));
        goto out;
 }
 
 static struct irqaction timer_action = {
        .handler = timer_interrupt,
        .name = "timer",
-       .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_PERCPU,
+       .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_PERCPU | IRQF_IRQPOLL,
 };
 
 #ifdef CONFIG_SMP
@@ -407,7 +397,7 @@ static void claim_cpu_irqs(void)
        }
 
        irq_desc[TIMER_IRQ].action = &timer_action;
-       irq_desc[TIMER_IRQ].status |= IRQ_PER_CPU;
+       irq_desc[TIMER_IRQ].status = IRQ_PER_CPU;
 #ifdef CONFIG_SMP
        irq_desc[IPI_IRQ].action = &ipi_action;
        irq_desc[IPI_IRQ].status = IRQ_PER_CPU;