diff options
author | Artur Grabowski <art@cvs.openbsd.org> | 2007-04-12 20:22:59 +0000 |
---|---|---|
committer | Artur Grabowski <art@cvs.openbsd.org> | 2007-04-12 20:22:59 +0000 |
commit | c96c8d60569ece4c81cfeed0d77047930008fb2d (patch) | |
tree | dc759575865f3b1beb0fc87f5bd6497e2ff840e9 /sys/arch/i386/isa/icu.s | |
parent | f3993868001ce22efaf8d52de18065f952cb8b08 (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.s | 8 |
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 |