Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/arch/i386/i386/locore.S,v rcsdiff: /ftp/cvs/cvsroot/src/sys/arch/i386/i386/locore.S,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.47.4.4 retrieving revision 1.52 diff -u -p -r1.47.4.4 -r1.52 --- src/sys/arch/i386/i386/locore.S 2007/08/14 10:49:59 1.47.4.4 +++ src/sys/arch/i386/i386/locore.S 2007/10/17 19:54:45 1.52 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.S,v 1.47.4.4 2007/08/14 10:49:59 yamt Exp $ */ +/* $NetBSD: locore.S,v 1.52 2007/10/17 19:54:45 garbled Exp $ */ /*- * Copyright (c) 1998, 2000, 2004, 2006, 2007 The NetBSD Foundation, Inc. @@ -630,47 +630,6 @@ NENTRY(sigcode) _C_LABEL(esigcode): /* - * void lgdt(struct region_descriptor *rdp); - * - * Load a new GDT pointer (and do any necessary cleanup). - * XXX It's somewhat questionable whether reloading all the segment registers - * is necessary, since the actual descriptor data is not changed except by - * process creation and exit, both of which clean up via task switches. OTOH, - * this only happens at run time when the GDT is resized. - */ -NENTRY(lgdt) - /* Reload the descriptor table. */ - movl 4(%esp),%eax - lgdt (%eax) - /* Flush the prefetch queue. */ - jmp 1f - nop -1: /* Reload "stale" selectors. */ - movl $GSEL(GDATA_SEL, SEL_KPL),%eax - movw %ax,%ds - movw %ax,%es - movw %ax,%gs - movw %ax,%ss - movl $GSEL(GCPU_SEL, SEL_KPL),%eax - movw %ax,%fs - /* Reload code selector by doing intersegment return. */ - popl %eax - pushl $GSEL(GCODE_SEL, SEL_KPL) - pushl %eax - lret - -/* - * void x86_flush() - * - * Flush instruction pipelines by doing an intersegment (far) return. - */ -NENTRY(x86_flush) - popl %eax - pushl $GSEL(GCODE_SEL, SEL_KPL) - pushl %eax - lret - -/* * int setjmp(label_t *) * * Used primarily by DDB. @@ -705,8 +664,7 @@ ENTRY(longjmp) ret /* - * struct lwp *cpu_switchto(struct lwp *oldlwp, struct newlwp, - * bool returning) + * struct lwp *cpu_switchto(struct lwp *oldlwp, struct newlwp) * * 1. if (oldlwp != NULL), save its context. * 2. then, restore context of newlwp. @@ -722,7 +680,6 @@ ENTRY(cpu_switchto) movl 16(%esp),%esi # oldlwp movl 20(%esp),%edi # newlwp - movl 24(%esp),%edx # returning testl %esi,%esi jz 1f @@ -736,13 +693,6 @@ ENTRY(cpu_switchto) movl PCB_EBP(%ebx),%ebp movl PCB_ESP(%ebx),%esp - /* Set curlwp. */ - movl %edi,CPUVAR(CURLWP) - - /* Skip the rest if returning to a pinned LWP. */ - testl %edx,%edx - jnz 4f - /* Switch TSS. Reset "task busy" flag before loading. */ movl %cr3,%eax movl %eax,PCB_CR3(%ebx) # for TSS gates @@ -751,6 +701,9 @@ ENTRY(cpu_switchto) andl $~0x0200,4(%eax,%edx, 1) ltr %dx + /* Set curlwp. */ + movl %edi,CPUVAR(CURLWP) + /* Don't bother with the rest if switching to a system process. */ testl $LW_SYSTEM,L_FLAG(%edi) jnz 4f @@ -798,7 +751,8 @@ ENTRY(cpu_switchto) addl $8,%esp cmpl $-1,%eax je 2b - movl %eax,TF_EIP(%ebx) + movl L_MD_REGS(%edi),%ecx + movl %eax,TF_EIP(%ecx) jmp 2b /*