Browse Source

[ARM] Quieten spurious IRQ detection

Only issue a "nobody cared" warning after 99900 spurious interrupts.
This avoids the occasional spurious interrupt causing warnings, as
per x86.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Russell King 19 năm trước cách đây
mục cha
commit
bec1b81936

+ 8 - 3
arch/arm/kernel/irq.c

@@ -305,14 +305,19 @@ report_bad_irq(unsigned int irq, struct pt_regs *regs, struct irqdesc *desc, int
 	static int count = 100;
 	static int count = 100;
 	struct irqaction *action;
 	struct irqaction *action;
 
 
-	if (!count || noirqdebug)
+	if (noirqdebug)
 		return;
 		return;
 
 
-	count--;
-
 	if (ret != IRQ_HANDLED && ret != IRQ_NONE) {
 	if (ret != IRQ_HANDLED && ret != IRQ_NONE) {
+		if (!count)
+			return;
+		count--;
 		printk("irq%u: bogus retval mask %x\n", irq, ret);
 		printk("irq%u: bogus retval mask %x\n", irq, ret);
 	} else {
 	} else {
+		desc->irqs_unhandled++;
+		if (desc->irqs_unhandled <= 99900)
+			return;
+		desc->irqs_unhandled = 0;
 		printk("irq%u: nobody cared\n", irq);
 		printk("irq%u: nobody cared\n", irq);
 	}
 	}
 	show_regs(regs);
 	show_regs(regs);

+ 1 - 0
include/asm-arm/mach/irq.h

@@ -74,6 +74,7 @@ struct irqdesc {
 	unsigned int	noautoenable : 1;	/* don't automatically enable IRQ */
 	unsigned int	noautoenable : 1;	/* don't automatically enable IRQ */
 	unsigned int	unused   :25;
 	unsigned int	unused   :25;
 
 
+	unsigned int	irqs_unhandled;
 	struct proc_dir_entry *procdir;
 	struct proc_dir_entry *procdir;
 
 
 #ifdef CONFIG_SMP
 #ifdef CONFIG_SMP