version 1.72.2.2, 2008/09/18 04:33:27 |
version 1.78.4.3, 2009/04/04 17:39:09 |
Line 138 __KERNEL_RCSID(0, "$NetBSD$"); |
|
Line 138 __KERNEL_RCSID(0, "$NetBSD$"); |
|
|
|
#include "opt_compat_oldboot.h" |
#include "opt_compat_oldboot.h" |
#include "opt_ddb.h" |
#include "opt_ddb.h" |
|
#include "opt_multiboot.h" |
#include "opt_realmem.h" |
#include "opt_realmem.h" |
#include "opt_vm86.h" |
#include "opt_vm86.h" |
#include "opt_xen.h" |
#include "opt_xen.h" |
|
|
END(dumpsys) |
END(dumpsys) |
|
|
/* |
/* |
* struct lwp *cpu_switchto(struct lwp *oldlwp, struct newlwp, |
* struct lwp *cpu_switchto(struct lwp *oldlwp, struct *newlwp, |
* bool returning) |
* bool returning) |
* |
* |
* 1. if (oldlwp != NULL), save its context. |
* 1. if (oldlwp != NULL), save its context. |
Line 1007 ENTRY(cpu_switchto) |
|
Line 1008 ENTRY(cpu_switchto) |
|
2: |
2: |
#ifndef XEN |
#ifndef XEN |
movl $IPL_IPI,CPUVAR(ILEVEL) |
movl $IPL_IPI,CPUVAR(ILEVEL) |
movl PCB_CR0(%ebx),%ecx |
movl PCB_CR0(%ebx),%ecx /* has CR0_TS clear */ |
movl %cr0,%edx |
movl %cr0,%edx |
|
|
/* |
/* |
* If our floating point registers are on a different CPU, |
* If our floating point registers are on a different CPU, |
* set CR0_TS so we'll trap rather than reuse bogus state. |
* set CR0_TS so we'll trap rather than reuse bogus state. |
*/ |
*/ |
movl PCB_FPCPU(%ebx),%eax |
cmpl CPUVAR(FPCURLWP),%edi |
cmpl CPUVAR(SELF),%eax |
|
je 3f |
je 3f |
orl $CR0_TS,%ecx |
orl $CR0_TS,%ecx |
|
|
|
|
* Old call gate entry for syscall |
* Old call gate entry for syscall |
*/ |
*/ |
IDTVEC(osyscall) |
IDTVEC(osyscall) |
|
cli # must be first instruction |
pushfl # set eflags in trap frame |
pushfl # set eflags in trap frame |
popl 8(%esp) |
popl 8(%esp) |
|
orl $PSL_I,(%esp) # re-enable ints on return to user |
pushl $7 # size of instruction for restart |
pushl $7 # size of instruction for restart |
jmp syscall1 |
jmp syscall1 |
IDTVEC_END(osyscall) |
IDTVEC_END(osyscall) |
Line 1094 IDTVEC(syscall) |
|
Line 1096 IDTVEC(syscall) |
|
syscall1: |
syscall1: |
pushl $T_ASTFLT # trap # for doing ASTs |
pushl $T_ASTFLT # trap # for doing ASTs |
INTRENTRY |
INTRENTRY |
|
STI(%eax) |
#ifdef DIAGNOSTIC |
#ifdef DIAGNOSTIC |
movl CPUVAR(ILEVEL),%ebx |
movl CPUVAR(ILEVEL),%ebx |
testl %ebx,%ebx |
testl %ebx,%ebx |
Line 1240 ENTRY(sse2_idlezero_page) |
|
Line 1243 ENTRY(sse2_idlezero_page) |
|
xorl %eax, %eax |
xorl %eax, %eax |
.align 16 |
.align 16 |
1: |
1: |
cmpl $0, CPUVAR(RESCHED) |
testl $RESCHED_KPREEMPT, CPUVAR(RESCHED) |
jnz 2f |
jnz 2f |
movnti %eax, 0(%edx) |
movnti %eax, 0(%edx) |
movnti %eax, 4(%edx) |
movnti %eax, 4(%edx) |