diff options
author | jhb <jhb@FreeBSD.org> | 2007-03-02 17:01:45 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2007-03-02 17:01:45 +0000 |
commit | d58c5abd8b93eab4eef449392a503f9032aa614b (patch) | |
tree | 78a3220e7fb328b62da6ed6d813786deb1cca950 /sys/kern | |
parent | c2a084f538e21f00a7cc7c86e3b86fbefbc9152e (diff) | |
download | FreeBSD-src-d58c5abd8b93eab4eef449392a503f9032aa614b.zip FreeBSD-src-d58c5abd8b93eab4eef449392a503f9032aa614b.tar.gz |
- Don't do the interrupt storm protection stuff for software interrupt
handlers.
- Use pause() when throtting during an interrupt storm.
Reported by: kris (1)
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_intr.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c index 0964b9a..38c6772 100644 --- a/sys/kern/kern_intr.c +++ b/sys/kern/kern_intr.c @@ -696,14 +696,15 @@ ithread_execute_handlers(struct proc *p, struct intr_event *ie) * number of back to back interrupts exceeds the storm threshold, * then enter storming mode. */ - if (intr_storm_threshold != 0 && ie->ie_count >= intr_storm_threshold) { + if (intr_storm_threshold != 0 && ie->ie_count >= intr_storm_threshold && + !(ie->ie_flags & IE_SOFT)) { if (ie->ie_warned == 0) { printf( "Interrupt storm detected on \"%s\"; throttling interrupt source\n", ie->ie_name); ie->ie_warned = 1; } - tsleep(&ie->ie_count, 0, "istorm", 1); + pause("istorm", 1); } else ie->ie_count++; |