summaryrefslogtreecommitdiffstats
path: root/sys/amd64/amd64/exception.S
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-01-24 09:43:26 +0000
committerjhb <jhb@FreeBSD.org>2001-01-24 09:43:26 +0000
commit3b95ed413d3c4c7a1b64d17ae108a86d9458cb12 (patch)
treea727bfb3db311506927a9b12067502363691d6b1 /sys/amd64/amd64/exception.S
parentcc7cdf26c0d8a078e15afdf4eddacc24c69633e4 (diff)
downloadFreeBSD-src-3b95ed413d3c4c7a1b64d17ae108a86d9458cb12.zip
FreeBSD-src-3b95ed413d3c4c7a1b64d17ae108a86d9458cb12.tar.gz
Call fork_exit() now instead of futzing around in assembly during a fork
return.
Diffstat (limited to 'sys/amd64/amd64/exception.S')
-rw-r--r--sys/amd64/amd64/exception.S27
1 files changed, 3 insertions, 24 deletions
diff --git a/sys/amd64/amd64/exception.S b/sys/amd64/amd64/exception.S
index aafbf0b..54d7f82 100644
--- a/sys/amd64/amd64/exception.S
+++ b/sys/amd64/amd64/exception.S
@@ -289,31 +289,10 @@ IDTVEC(int0x80_syscall)
jmp _doreti
ENTRY(fork_trampoline)
- MTX_EXIT(_sched_lock, MTX_SPIN)
- sti /* XXX: we need this for kernel threads
- created very early before interrupts
- are enabled */
-
-#ifdef SMP
- cmpl $0,PCPU(SWITCHTIME)
- jne 1f
- PCPU_ADDR(SWITCHTIME, %eax)
- pushl %eax
- call _microuptime
- popl %edx
- movl _ticks,%eax
- movl %eax,PCPU(SWITCHTICKS)
-1:
-#endif
-
- /*
- * cpu_set_fork_handler intercepts this function call to
- * have this call a non-return function to stay in kernel mode.
- * initproc has its own fork handler, but it does return.
- */
pushl %ebx /* arg1 */
- call *%esi /* function */
- addl $4,%esp
+ pushl %esi /* function */
+ call _fork_exit
+ addl $8,%esp
/* cut from syscall */
/*
OpenPOWER on IntegriCloud