summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_intr.c8
-rw-r--r--sys/sys/interrupt.h3
2 files changed, 6 insertions, 5 deletions
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c
index 38c6772..94e2672 100644
--- a/sys/kern/kern_intr.c
+++ b/sys/kern/kern_intr.c
@@ -83,7 +83,7 @@ void *vm_ih;
static MALLOC_DEFINE(M_ITHREAD, "ithread", "Interrupt Threads");
-static int intr_storm_threshold = 500;
+static int intr_storm_threshold = 1000;
TUNABLE_INT("hw.intr_storm_threshold", &intr_storm_threshold);
SYSCTL_INT(_hw, OID_AUTO, intr_storm_threshold, CTLFLAG_RW,
&intr_storm_threshold, 0,
@@ -698,11 +698,11 @@ ithread_execute_handlers(struct proc *p, struct intr_event *ie)
*/
if (intr_storm_threshold != 0 && ie->ie_count >= intr_storm_threshold &&
!(ie->ie_flags & IE_SOFT)) {
- if (ie->ie_warned == 0) {
+ /* Report the message only once every second. */
+ if (ppsratecheck(&ie->ie_warntm, &ie->ie_warncnt, 1)) {
printf(
- "Interrupt storm detected on \"%s\"; throttling interrupt source\n",
+ "interrupt storm detected on \"%s\"; throttling interrupt source\n",
ie->ie_name);
- ie->ie_warned = 1;
}
pause("istorm", 1);
} else
diff --git a/sys/sys/interrupt.h b/sys/sys/interrupt.h
index cfbb28f..9ca87d2 100644
--- a/sys/sys/interrupt.h
+++ b/sys/sys/interrupt.h
@@ -74,7 +74,8 @@ struct intr_event {
void (*ie_enable)(void *);
int ie_flags;
int ie_count; /* Loop counter. */
- int ie_warned; /* Warned about interrupt storm. */
+ int ie_warncnt; /* Rate-check interrupt storm warns. */
+ struct timeval ie_warntm;
};
/* Interrupt event flags kept in ie_flags. */
OpenPOWER on IntegriCloud