diff options
author | jhb <jhb@FreeBSD.org> | 2001-01-24 09:43:26 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-01-24 09:43:26 +0000 |
commit | 3b95ed413d3c4c7a1b64d17ae108a86d9458cb12 (patch) | |
tree | a727bfb3db311506927a9b12067502363691d6b1 /sys/amd64 | |
parent | cc7cdf26c0d8a078e15afdf4eddacc24c69633e4 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/amd64/amd64/exception.S | 27 | ||||
-rw-r--r-- | sys/amd64/amd64/exception.s | 27 |
2 files changed, 6 insertions, 48 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 */ /* 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 */ /* |