Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / arch / xtensa / kernel / irq.c
index d7b5a4c..4ac3d23 100644 (file)
@@ -28,7 +28,7 @@
 #include <asm/uaccess.h>
 #include <asm/platform.h>
 
-atomic_t irq_err_count;
+DECLARE_PER_CPU(unsigned long, nmi_count);
 
 asmlinkage void do_IRQ(int hwirq, struct pt_regs *regs)
 {
@@ -57,11 +57,16 @@ asmlinkage void do_IRQ(int hwirq, struct pt_regs *regs)
 
 int arch_show_interrupts(struct seq_file *p, int prec)
 {
+       unsigned cpu __maybe_unused;
 #ifdef CONFIG_SMP
        show_ipi_list(p, prec);
 #endif
-       seq_printf(p, "%*s: ", prec, "ERR");
-       seq_printf(p, "%10u\n", atomic_read(&irq_err_count));
+#if XTENSA_FAKE_NMI
+       seq_printf(p, "%*s:", prec, "NMI");
+       for_each_online_cpu(cpu)
+               seq_printf(p, " %10lu", per_cpu(nmi_count, cpu));
+       seq_puts(p, "   Non-maskable interrupts\n");
+#endif
        return 0;
 }
 
@@ -106,6 +111,12 @@ int xtensa_irq_map(struct irq_domain *d, unsigned int irq,
                irq_set_chip_and_handler_name(irq, irq_chip,
                                handle_percpu_irq, "timer");
                irq_clear_status_flags(irq, IRQ_LEVEL);
+#ifdef XCHAL_INTTYPE_MASK_PROFILING
+       } else if (mask & XCHAL_INTTYPE_MASK_PROFILING) {
+               irq_set_chip_and_handler_name(irq, irq_chip,
+                               handle_percpu_irq, "profiling");
+               irq_set_status_flags(irq, IRQ_LEVEL);
+#endif
        } else {/* XCHAL_INTTYPE_MASK_WRITE_ERROR */
                /* XCHAL_INTTYPE_MASK_NMI */
                irq_set_chip_and_handler_name(irq, irq_chip,