summaryrefslogtreecommitdiff
path: root/sys/arch/i386/isa/icu.s
diff options
context:
space:
mode:
authorArtur Grabowski <art@cvs.openbsd.org>2007-04-12 20:22:59 +0000
committerArtur Grabowski <art@cvs.openbsd.org>2007-04-12 20:22:59 +0000
commitc96c8d60569ece4c81cfeed0d77047930008fb2d (patch)
treedc759575865f3b1beb0fc87f5bd6497e2ff840e9 /sys/arch/i386/isa/icu.s
parentf3993868001ce22efaf8d52de18065f952cb8b08 (diff)
Faster signal delivery on i386/MP.
We need to poke the other CPU so that it processes the AST immediately and doesn't wait for the next interrupt or syscall. Since IPIs really shouldn't process ASTs, we need to trigger a soft interrupt on the destination CPU to process the AST. But since we can't send soft interrupts to other CPUs, we send an IPI, that triggers a soft interrupt that in turn processes the AST. Also, this marks the beginning of moving to slightly better IPI mechanism of short and optimized IPIs instead of the large and complicated IPI infrastructure we're using now. tested by many, ok tholo@
Diffstat (limited to 'sys/arch/i386/isa/icu.s')
-rw-r--r--sys/arch/i386/isa/icu.s8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/arch/i386/isa/icu.s b/sys/arch/i386/isa/icu.s
index 743c2dc7c21..ff1693ec67a 100644
--- a/sys/arch/i386/isa/icu.s
+++ b/sys/arch/i386/isa/icu.s
@@ -1,4 +1,4 @@
-/* $OpenBSD: icu.s,v 1.23 2005/12/13 16:14:49 aaron Exp $ */
+/* $OpenBSD: icu.s,v 1.24 2007/04/12 20:22:58 art Exp $ */
/* $NetBSD: icu.s,v 1.45 1996/01/07 03:59:34 mycroft Exp $ */
/*-
@@ -123,6 +123,12 @@ IDTVEC(doreti)
#include "pccom.h"
+IDTVEC(softast)
+ movl $IPL_SOFTAST,%eax
+ movl %eax,CPL
+ sti
+ jmp *%esi
+
IDTVEC(softtty)
#if NPCCOM > 0
movl $IPL_SOFTTTY,%eax