aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/kernel/irqchip.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/blackfin/kernel/irqchip.c')
-rw-r--r--arch/blackfin/kernel/irqchip.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/arch/blackfin/kernel/irqchip.c b/arch/blackfin/kernel/irqchip.c
index 07402f57c9de..9eebb782fd30 100644
--- a/arch/blackfin/kernel/irqchip.c
+++ b/arch/blackfin/kernel/irqchip.c
@@ -36,7 +36,7 @@
36#include <linux/irq.h> 36#include <linux/irq.h>
37#include <asm/trace.h> 37#include <asm/trace.h>
38 38
39static unsigned long irq_err_count; 39static atomic_t irq_err_count;
40static spinlock_t irq_controller_lock; 40static spinlock_t irq_controller_lock;
41 41
42/* 42/*
@@ -48,7 +48,7 @@ void dummy_mask_unmask_irq(unsigned int irq)
48 48
49void ack_bad_irq(unsigned int irq) 49void ack_bad_irq(unsigned int irq)
50{ 50{
51 irq_err_count += 1; 51 atomic_inc(&irq_err_count);
52 printk(KERN_ERR "IRQ: spurious interrupt %d\n", irq); 52 printk(KERN_ERR "IRQ: spurious interrupt %d\n", irq);
53} 53}
54EXPORT_SYMBOL(ack_bad_irq); 54EXPORT_SYMBOL(ack_bad_irq);
@@ -72,7 +72,7 @@ static struct irq_desc bad_irq_desc = {
72 72
73int show_interrupts(struct seq_file *p, void *v) 73int show_interrupts(struct seq_file *p, void *v)
74{ 74{
75 int i = *(loff_t *) v; 75 int i = *(loff_t *) v, j;
76 struct irqaction *action; 76 struct irqaction *action;
77 unsigned long flags; 77 unsigned long flags;
78 78
@@ -80,19 +80,20 @@ int show_interrupts(struct seq_file *p, void *v)
80 spin_lock_irqsave(&irq_desc[i].lock, flags); 80 spin_lock_irqsave(&irq_desc[i].lock, flags);
81 action = irq_desc[i].action; 81 action = irq_desc[i].action;
82 if (!action) 82 if (!action)
83 goto unlock; 83 goto skip;
84 84 seq_printf(p, "%3d: ", i);
85 seq_printf(p, "%3d: %10u ", i, kstat_irqs(i)); 85 for_each_online_cpu(j)
86 seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
87 seq_printf(p, " %8s", irq_desc[i].chip->name);
86 seq_printf(p, " %s", action->name); 88 seq_printf(p, " %s", action->name);
87 for (action = action->next; action; action = action->next) 89 for (action = action->next; action; action = action->next)
88 seq_printf(p, ", %s", action->name); 90 seq_printf(p, " %s", action->name);
89 91
90 seq_putc(p, '\n'); 92 seq_putc(p, '\n');
91 unlock: 93 skip:
92 spin_unlock_irqrestore(&irq_desc[i].lock, flags); 94 spin_unlock_irqrestore(&irq_desc[i].lock, flags);
93 } else if (i == NR_IRQS) { 95 } else if (i == NR_IRQS)
94 seq_printf(p, "Err: %10lu\n", irq_err_count); 96 seq_printf(p, "Err: %10u\n", atomic_read(&irq_err_count));
95 }
96 return 0; 97 return 0;
97} 98}
98 99
@@ -101,7 +102,6 @@ int show_interrupts(struct seq_file *p, void *v)
101 * come via this function. Instead, they should provide their 102 * come via this function. Instead, they should provide their
102 * own 'handler' 103 * own 'handler'
103 */ 104 */
104
105#ifdef CONFIG_DO_IRQ_L1 105#ifdef CONFIG_DO_IRQ_L1
106__attribute__((l1_text)) 106__attribute__((l1_text))
107#endif 107#endif