summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2004-07-19 16:37:47 +0000
committerjhb <jhb@FreeBSD.org>2004-07-19 16:37:47 +0000
commitd4ea20b7e1d7639414abf5065adbb41b63e8d4cf (patch)
treec1fb942a8209f4ba2b335e4721ad7fbbba4392e9 /sys
parent3b66ac9138bbf0fa12b71d837e0efedb6f01f555 (diff)
downloadFreeBSD-src-d4ea20b7e1d7639414abf5065adbb41b63e8d4cf.zip
FreeBSD-src-d4ea20b7e1d7639414abf5065adbb41b63e8d4cf.tar.gz
As a temporary hack, turn off deferred preemptions that are the result of
a fast interrupt handler doing an swi_sched(). This fixed the lockups I saw on my laptop when using xmms in KDE and on rwatson's MySQL benchmarks on SMP. This will eventually be removed and/or modified when I figure out what the root cause is and fix that.
Diffstat (limited to 'sys')
-rw-r--r--sys/alpha/alpha/interrupt.c2
-rw-r--r--sys/amd64/amd64/intr_machdep.c2
-rw-r--r--sys/i386/i386/intr_machdep.c2
3 files changed, 6 insertions, 0 deletions
diff --git a/sys/alpha/alpha/interrupt.c b/sys/alpha/alpha/interrupt.c
index 066244d..1c3bd47 100644
--- a/sys/alpha/alpha/interrupt.c
+++ b/sys/alpha/alpha/interrupt.c
@@ -435,6 +435,8 @@ alpha_dispatch_intr(void *frame, unsigned long vector)
if ((ih->ih_flags & IH_FAST) != 0) {
critical_enter();
ih->ih_handler(ih->ih_argument);
+ /* XXX */
+ td->td_pflags &= ~TDP_OWEPREEMPT;
critical_exit();
return;
}
diff --git a/sys/amd64/amd64/intr_machdep.c b/sys/amd64/amd64/intr_machdep.c
index 6b591d4..8a8968b 100644
--- a/sys/amd64/amd64/intr_machdep.c
+++ b/sys/amd64/amd64/intr_machdep.c
@@ -204,6 +204,8 @@ intr_execute_handlers(struct intsrc *isrc, struct intrframe *iframe)
}
isrc->is_pic->pic_eoi_source(isrc);
error = 0;
+ /* XXX */
+ td->td_pflags &= ~TDP_OWEPREEMPT;
critical_exit();
} else {
/*
diff --git a/sys/i386/i386/intr_machdep.c b/sys/i386/i386/intr_machdep.c
index 6b591d4..8a8968b 100644
--- a/sys/i386/i386/intr_machdep.c
+++ b/sys/i386/i386/intr_machdep.c
@@ -204,6 +204,8 @@ intr_execute_handlers(struct intsrc *isrc, struct intrframe *iframe)
}
isrc->is_pic->pic_eoi_source(isrc);
error = 0;
+ /* XXX */
+ td->td_pflags &= ~TDP_OWEPREEMPT;
critical_exit();
} else {
/*
OpenPOWER on IntegriCloud