From: Ben Gras Date: Mon, 22 Mar 2010 13:55:51 +0000 (+0000) Subject: only print 1 every 1000 spurious interrupts (per interrupt). X-Git-Tag: v3.1.7~216 X-Git-Url: http://zhaoyanbai.com/repos/man.dnssec-signzone.html?a=commitdiff_plain;h=4b2310a7eeffe1e62c4249a805aa43156b3ee3ee;p=minix.git only print 1 every 1000 spurious interrupts (per interrupt). --- diff --git a/kernel/interrupt.c b/kernel/interrupt.c index 328a404fb..123a06fe7 100644 --- a/kernel/interrupt.c +++ b/kernel/interrupt.c @@ -13,6 +13,8 @@ * disable_irq: disable hook for IRQ. */ +#include + #include "kernel.h" #include "proc.h" #include "archconst.h" @@ -117,13 +119,18 @@ PUBLIC void irq_handle(int irq) irq_hook_t * hook; /* here we need not to get this IRQ until all the handlers had a say */ + assert(irq >= 0 && irq < NR_IRQ_VECTORS); hw_intr_mask(irq); hook = irq_handlers[irq]; - /* Sanity check. */ + /* Check for spurious interrupts. */ if(hook == NULL) { - printf("%s: irq_handle:no handler registered, masking the IRQ...\n", - __FILE__); + static int nspurious[NR_IRQ_VECTORS]; + nspurious[irq]++; + if(nspurious[irq] == 1 || !(nspurious[irq] % 1000)) { + printf("irq_handle: spurious irq %d (count: %d); keeping masked\n", + irq, nspurious[irq]); + } return; }