sparc64: Fix NMI programming when perf events are active.
authorDavid S. Miller <davem@davemloft.net>
Mon, 4 Jan 2010 23:37:04 +0000 (15:37 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Jan 2010 23:37:04 +0000 (15:37 -0800)
If perf events are active, we should not reset the %pcr to
PCR_PIC_PRIV.  That perf events code does the management.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/kernel/nmi.c

index f30f4a1..d242a73 100644 (file)
@@ -96,7 +96,6 @@ notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs)
        int cpu = smp_processor_id();
 
        clear_softint(1 << irq);
-       pcr_ops->write(PCR_PIC_PRIV);
 
        local_cpu_data().__nmi_count++;
 
@@ -105,6 +104,8 @@ notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs)
        if (notify_die(DIE_NMI, "nmi", regs, 0,
                       pt_regs_trap_type(regs), SIGINT) == NOTIFY_STOP)
                touched = 1;
+       else
+               pcr_ops->write(PCR_PIC_PRIV);
 
        sum = kstat_irqs_cpu(0, cpu);
        if (__get_cpu_var(nmi_touch)) {