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.11.2.7 retrieving revision 1.21 diff -u -p -r1.11.2.7 -r1.21 --- src/sys/arch/i386/i386/locore.S 2005/03/04 16:38:39 1.11.2.7 +++ src/sys/arch/i386/i386/locore.S 2004/01/04 11:44:52 1.21 @@ -1,7 +1,7 @@ -/* $NetBSD: locore.S,v 1.11.2.7 2005/03/04 16:38:39 skrll Exp $ */ +/* $NetBSD: locore.S,v 1.21 2004/01/04 11:44:52 jdolecek Exp $ */ /*- - * Copyright (c) 1998, 2000, 2004 The NetBSD Foundation, Inc. + * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation @@ -74,6 +74,7 @@ #include "opt_compat_oldboot.h" #include "opt_cputype.h" #include "opt_ddb.h" +#include "opt_dummy_nops.h" #include "opt_ipkdb.h" #include "opt_lockdebug.h" #include "opt_multiprocessor.h" @@ -110,12 +111,12 @@ #include #if defined(MULTIPROCESSOR) - + #define SET_CURLWP(lwp,cpu) \ movl CPUVAR(SELF),cpu ; \ movl lwp,CPUVAR(CURLWP) ; \ movl cpu,L_CPU(lwp) - + #else #define SET_CURLWP(lwp,tcpu) movl lwp,CPUVAR(CURLWP) @@ -123,9 +124,9 @@ #endif -#define GET_CURPCB(reg) movl CPUVAR(CURPCB),reg +#define GET_CURPCB(reg) movl CPUVAR(CURPCB),reg #define SET_CURPCB(reg) movl reg,CPUVAR(CURPCB) - + #define CLEAR_RESCHED(reg) movl reg,CPUVAR(RESCHED) /* XXX temporary kluge; these should not be here */ @@ -152,9 +153,27 @@ #ifdef MULTIPROCESSOR #include #endif + +/* + * PTmap is recursive pagemap at top of virtual address space. + * Within PTmap, the page directory can be found (third indirection). + * + * XXX 4 == sizeof pde + */ + .set _C_LABEL(PTmap),(PDSLOT_PTE << PDSHIFT) + .set _C_LABEL(PTD),(_C_LABEL(PTmap) + PDSLOT_PTE * PAGE_SIZE) + .set _C_LABEL(PTDpde),(_C_LABEL(PTD) + PDSLOT_PTE * 4) + +/* + * APTmap, APTD is the alternate recursive pagemap. + * It's used when modifying another process's page tables. + * + * XXX 4 == sizeof pde + */ + .set _C_LABEL(APTmap),(PDSLOT_APTE << PDSHIFT) + .set _C_LABEL(APTD),(_C_LABEL(APTmap) + PDSLOT_APTE * PAGE_SIZE) + .set _C_LABEL(APTDpde),(_C_LABEL(PTD) + PDSLOT_APTE * 4) -/* This shouldn't conflict with a macro of the same name defined in pmap.h */ -#define PTE_BASE (PDSLOT_PTE << PDSHIFT) /* * Initialization @@ -167,14 +186,14 @@ #ifdef COMPAT_OLDBOOT .globl _C_LABEL(bootdev) #endif - .globl _C_LABEL(proc0paddr),_C_LABEL(PDPpaddr) + .globl _C_LABEL(proc0paddr),_C_LABEL(PTDpaddr) .globl _C_LABEL(biosbasemem),_C_LABEL(biosextmem) .globl _C_LABEL(gdt) #ifdef I586_CPU .globl _C_LABEL(idt) #endif - .globl _C_LABEL(lapic_tpr) - + .globl _C_LABEL(lapic_tpr) + #if NLAPIC > 0 #ifdef __ELF__ .align PAGE_SIZE @@ -184,27 +203,27 @@ .globl _C_LABEL(local_apic), _C_LABEL(lapic_id) _C_LABEL(local_apic): .space LAPIC_ID -_C_LABEL(lapic_id): +_C_LABEL(lapic_id): .long 0x00000000 .space LAPIC_TPRI-(LAPIC_ID+4) -_C_LABEL(lapic_tpr): +_C_LABEL(lapic_tpr): .space LAPIC_PPRI-LAPIC_TPRI -_C_LABEL(lapic_ppr): +_C_LABEL(lapic_ppr): .space LAPIC_ISR-LAPIC_PPRI _C_LABEL(lapic_isr): .space PAGE_SIZE-LAPIC_ISR #else -_C_LABEL(lapic_tpr): +_C_LABEL(lapic_tpr): .long 0 #endif - + _C_LABEL(cpu): .long 0 # are we 386, 386sx, or 486, # or Pentium, or.. _C_LABEL(esym): .long 0 # ptr to end of syms _C_LABEL(atdevbase): .long 0 # location of start of iomem in virtual _C_LABEL(proc0paddr): .long 0 -_C_LABEL(PDPpaddr): .long 0 # paddr of PDP, for libkvm +_C_LABEL(PTDpaddr): .long 0 # paddr of PTD, for libkvm #ifndef REALBASEMEM _C_LABEL(biosbasemem): .long 0 # base memory reported by BIOS #else @@ -215,7 +234,7 @@ _C_LABEL(biosextmem): .long 0 # extended #else _C_LABEL(biosextmem): .long REALEXTMEM #endif - + .space 512 tmpstk: @@ -479,7 +498,7 @@ try586: /* Use the `cpuid' instruction. /* * Virtual address space of kernel: * - * text | data | bss | [syms] | page dir | proc0 kstack + * text | data | bss | [syms] | page dir | proc0 kstack * 0 1 2 3 */ #define PROC0PDIR ((0) * PAGE_SIZE) @@ -506,24 +525,17 @@ try586: /* Use the `cpuid' instruction. /* * Calculate the size of the kernel page table directory, and - * how many entries it will have. Adjust nkpde to the actual - * kernel size automatically. Account for the bootstrap tables, - * round up, and add an extra 4MB. + * how many entries it will have. */ - leal TABLESIZE+NBPD+PDOFSET(%edi),%eax - shrl $PDSHIFT,%eax movl RELOC(nkpde),%ecx # get nkpde - cmpl %ecx,%eax - jb 1f - movl %eax,%ecx -1: cmpl $NKPTP_MIN,%ecx # larger than min? + cmpl $NKPTP_MIN,%ecx # larger than min? jge 1f movl $NKPTP_MIN,%ecx # set at min jmp 2f 1: cmpl $NKPTP_MAX,%ecx # larger than max? jle 2f movl $NKPTP_MAX,%ecx -2: movl %ecx,RELOC(nkpde) +2: /* Clear memory for bootstrap tables. */ shll $PGSHIFT,%ecx @@ -554,7 +566,7 @@ try586: /* Use the `cpuid' instruction. /* Calculate end of text segment, rounded to a page. */ leal (RELOC(etext)+PGOFSET),%edx andl $~PGOFSET,%edx - + /* Skip over the first 1MB. */ movl $_RELOC(KERNTEXTOFF),%eax movl %eax,%ecx @@ -602,8 +614,8 @@ try586: /* Use the `cpuid' instruction. leal (PROC0PDIR+PG_V|PG_KW)(%esi),%eax # pte for ptd movl %eax,(PROC0PDIR+PDSLOT_PTE*4)(%esi) # recursive PD slot - /* Save phys. addr of PDP, for libkvm. */ - movl %esi,RELOC(PDPpaddr) + /* Save phys. addr of PTD, for libkvm. */ + movl %esi,RELOC(PTDpaddr) /* Load base of page directory and enable mapping. */ movl %esi,%eax # phys address of ptd in proc 0 @@ -643,7 +655,7 @@ begin: pushl %esp call _C_LABEL(initgdt) addl $4,%esp - + movl _C_LABEL(nkpde),%eax shll $PGSHIFT,%eax addl $TABLESIZE,%eax @@ -690,7 +702,6 @@ NENTRY(proc_trampoline) pushl %ebx call *%esi addl $4,%esp - DO_DEFERRED_SWITCH(%eax) INTRFASTEXIT /* NOTREACHED */ @@ -708,7 +719,13 @@ NENTRY(sigcode) leal 12(%esp),%eax # get pointer to sigcontext movl %eax,4(%esp) # put it in the argument slot # fake return address already there +#if defined(SYS_compat_16___sigreturn14) movl $SYS_compat_16___sigreturn14,%eax +#elif defined(SYS___sigreturn14) + movl $SYS___sigreturn14,%eax +#else + #error "no sigreturn14 syscall" +#endif int $0x80 # enter kernel with args on stack movl $SYS_exit,%eax int $0x80 # exit if sigreturn fails @@ -762,7 +779,7 @@ ENTRY(kcopy) pushl %edi GET_CURPCB(%eax) # load curpcb into eax and set on-fault pushl PCB_ONFAULT(%eax) - movl $_C_LABEL(kcopy_fault), PCB_ONFAULT(%eax) + movl $_C_LABEL(copy_fault), PCB_ONFAULT(%eax) movl 16(%esp),%esi movl 20(%esp),%edi @@ -855,7 +872,6 @@ _C_LABEL(copyin_func): */ /* LINTSTUB: Func: int copyout(const void *kaddr, void *uaddr, size_t len) */ ENTRY(copyout) - DO_DEFERRED_SWITCH(%eax) jmp *_C_LABEL(copyout_func) #if defined(I386_CPU) @@ -864,7 +880,7 @@ ENTRY(i386_copyout) pushl %esi pushl %edi pushl $0 - + movl 16(%esp),%esi movl 20(%esp),%edi movl 24(%esp),%eax @@ -904,9 +920,9 @@ ENTRY(i386_copyout) movl $2f,PCB_ONFAULT(%edx) 1: /* Check PTE for each page. */ - testb $PG_RW,PTE_BASE(,%edi,4) + testb $PG_RW,_C_LABEL(PTmap)(,%edi,4) jz 2f - + 4: incl %edi decl %ecx jns 1b @@ -914,7 +930,7 @@ ENTRY(i386_copyout) movl 20(%esp),%edi movl 24(%esp),%eax jmp 3f - + 2: /* Simulate a trap. */ pushl %ecx movl %edi,%eax @@ -954,7 +970,7 @@ ENTRY(i486_copyout) pushl %esi pushl %edi pushl $0 - + movl 16(%esp),%esi movl 20(%esp),%edi movl 24(%esp),%eax @@ -997,7 +1013,6 @@ ENTRY(i486_copyout) */ /* LINTSTUB: Func: int copyin(const void *uaddr, void *kaddr, size_t len) */ ENTRY(copyin) - DO_DEFERRED_SWITCH(%eax) jmp *_C_LABEL(copyin_func) #if defined(I386_CPU) || defined(I486_CPU) || defined(I586_CPU) || \ @@ -1009,7 +1024,7 @@ ENTRY(i386_copyin) GET_CURPCB(%eax) pushl $0 movl $_C_LABEL(copy_fault),PCB_ONFAULT(%eax) - + movl 16(%esp),%esi movl 20(%esp),%edi movl 24(%esp),%eax @@ -1048,19 +1063,6 @@ ENTRY(i386_copyin) NENTRY(copy_efault) movl $EFAULT,%eax -/* - * kcopy_fault is used by kcopy and copy_fault is used by copyin/out. - * - * they're distinguished for lazy pmap switching. see trap(). - */ -/* LINTSTUB: Ignore */ -NENTRY(kcopy_fault) - GET_CURPCB(%edx) - popl PCB_ONFAULT(%edx) - popl %edi - popl %esi - ret - /* LINTSTUB: Ignore */ NENTRY(copy_fault) GET_CURPCB(%edx) @@ -1082,8 +1084,6 @@ ENTRY(copyoutstr) pushl %esi pushl %edi - DO_DEFERRED_SWITCH(%eax) - movl 12(%esp),%esi # esi = from movl 16(%esp),%edi # edi = to movl 20(%esp),%edx # edx = maxlen @@ -1114,7 +1114,7 @@ ENTRY(copyoutstr) movl %edi,%eax shrl $PGSHIFT,%eax # calculate pte address - testb $PG_RW,PTE_BASE(,%eax,4) + testb $PG_RW,_C_LABEL(PTmap)(,%eax,4) jnz 2f 6: /* Simulate a trap. */ @@ -1201,9 +1201,6 @@ ENTRY(copyoutstr) ENTRY(copyinstr) pushl %esi pushl %edi - - DO_DEFERRED_SWITCH(%eax) - GET_CURPCB(%ecx) movl $_C_LABEL(copystr_fault),PCB_ONFAULT(%ecx) @@ -1315,7 +1312,6 @@ ENTRY(copystr) */ /* LINTSTUB: Func: long fuword(const void *base) */ ENTRY(fuword) - DO_DEFERRED_SWITCH(%eax) movl 4(%esp),%edx cmpl $VM_MAXUSER_ADDRESS-4,%edx ja _C_LABEL(fusuaddrfault) @@ -1324,7 +1320,7 @@ ENTRY(fuword) movl (%edx),%eax movl $0,PCB_ONFAULT(%ecx) ret - + /* * int fusword(const void *uaddr); * Fetch a short from the user's address space. @@ -1332,7 +1328,6 @@ ENTRY(fuword) */ /* LINTSTUB: Func: int fusword(const void *base) */ ENTRY(fusword) - DO_DEFERRED_SWITCH(%eax) movl 4(%esp),%edx cmpl $VM_MAXUSER_ADDRESS-2,%edx ja _C_LABEL(fusuaddrfault) @@ -1341,7 +1336,7 @@ ENTRY(fusword) movzwl (%edx),%eax movl $0,PCB_ONFAULT(%ecx) ret - + /* * int fuswintr(const void *uaddr); * Fetch a short from the user's address space. Can be called during an @@ -1350,8 +1345,6 @@ ENTRY(fusword) */ /* LINTSTUB: Func: int fuswintr(const void *base) */ ENTRY(fuswintr) - cmpl $TLBSTATE_VALID, CPUVAR(TLBSTATE) - jnz _C_LABEL(fusuaddrfault) movl 4(%esp),%edx cmpl $VM_MAXUSER_ADDRESS-2,%edx ja _C_LABEL(fusuaddrfault) @@ -1361,7 +1354,7 @@ ENTRY(fuswintr) movzwl (%edx),%eax movl $0,PCB_ONFAULT(%ecx) ret - + /* * int fubyte(const void *uaddr); * Fetch a byte from the user's address space. @@ -1369,7 +1362,6 @@ ENTRY(fuswintr) */ /* LINTSTUB: Func: int fubyte(const void *base) */ ENTRY(fubyte) - DO_DEFERRED_SWITCH(%eax) movl 4(%esp),%edx cmpl $VM_MAXUSER_ADDRESS-1,%edx ja _C_LABEL(fusuaddrfault) @@ -1414,7 +1406,6 @@ NENTRY(fusuaddrfault) */ /* LINTSTUB: Func: int suword(void *base, long c) */ ENTRY(suword) - DO_DEFERRED_SWITCH(%eax) movl 4(%esp),%edx cmpl $VM_MAXUSER_ADDRESS-4,%edx ja _C_LABEL(fusuaddrfault) @@ -1430,7 +1421,7 @@ ENTRY(suword) movl %edx,%eax shrl $PGSHIFT,%eax # calculate pte address - testb $PG_RW,PTE_BASE(,%eax,4) + testb $PG_RW,_C_LABEL(PTmap)(,%eax,4) jnz 1f 3: /* Simulate a trap. */ @@ -1454,7 +1445,7 @@ ENTRY(suword) xorl %eax,%eax movl %eax,PCB_ONFAULT(%ecx) ret - + /* * int susword(void *uaddr, short x); * Store a short in the user's address space. @@ -1462,7 +1453,6 @@ ENTRY(suword) */ /* LINTSTUB: Func: int susword(void *base, short c) */ ENTRY(susword) - DO_DEFERRED_SWITCH(%eax) movl 4(%esp),%edx cmpl $VM_MAXUSER_ADDRESS-2,%edx ja _C_LABEL(fusuaddrfault) @@ -1478,7 +1468,7 @@ ENTRY(susword) movl %edx,%eax shrl $PGSHIFT,%eax # calculate pte address - testb $PG_RW,PTE_BASE(,%eax,4) + testb $PG_RW,_C_LABEL(PTmap)(,%eax,4) jnz 1f 3: /* Simulate a trap. */ @@ -1511,8 +1501,6 @@ ENTRY(susword) */ /* LINTSTUB: Func: int suswintr(void *base, short c) */ ENTRY(suswintr) - cmpl $TLBSTATE_VALID, CPUVAR(TLBSTATE) - jnz _C_LABEL(fusuaddrfault) movl 4(%esp),%edx cmpl $VM_MAXUSER_ADDRESS-2,%edx ja _C_LABEL(fusuaddrfault) @@ -1528,7 +1516,7 @@ ENTRY(suswintr) movl %edx,%eax shrl $PGSHIFT,%eax # calculate pte address - testb $PG_RW,PTE_BASE(,%eax,4) + testb $PG_RW,_C_LABEL(PTmap)(,%eax,4) jnz 1f /* Simulate a trap. */ @@ -1550,7 +1538,6 @@ ENTRY(suswintr) */ /* LINTSTUB: Func: int subyte(void *base, int c) */ ENTRY(subyte) - DO_DEFERRED_SWITCH(%eax) movl 4(%esp),%edx cmpl $VM_MAXUSER_ADDRESS-1,%edx ja _C_LABEL(fusuaddrfault) @@ -1561,12 +1548,12 @@ ENTRY(subyte) jne 2f #endif /* I486_CPU || I586_CPU || I686_CPU */ - GET_CURPCB(%eax) + GET_CURPCB(%eax) movl $3f,PCB_ONFAULT(%eax) movl %edx,%eax shrl $PGSHIFT,%eax # calculate pte address - testb $PG_RW,PTE_BASE(,%eax,4) + testb $PG_RW,_C_LABEL(PTmap)(,%eax,4) jnz 1f 3: /* Simulate a trap. */ @@ -1678,9 +1665,9 @@ NENTRY(switch_error) * Find a runnable process and switch to it. Wait if necessary. If the new * process is the same as the old one, we short-circuit the context save and * restore. - * + * * Note that the stack frame layout is known to "struct switchframe" - * in and to the code in cpu_fork() which initializes + * in and to the code in cpu_fork() which initializes * it for a new lwp. */ ENTRY(cpu_switch) @@ -1695,9 +1682,9 @@ ENTRY(cpu_switch) call _C_LABEL(panic) /* NOTREACHED */ 2: .asciz "not splsched() in cpu_switch!" -1: +1: #endif /* DEBUG */ - + movl 16(%esp),%esi # current /* @@ -1736,7 +1723,7 @@ ENTRY(cpu_switch) */ pushl %esi - call _C_LABEL(pmap_deactivate2) # pmap_deactivate(oldproc) + call _C_LABEL(pmap_deactivate) # pmap_deactivate(oldproc) addl $4,%esp movl L_ADDR(%esi),%esi @@ -1763,9 +1750,12 @@ ENTRY(cpu_switch) movl PCB_ESP(%edi),%esp movl PCB_EBP(%edi),%ebp + + /* Switch address space. */ + movl PCB_CR3(%edi),%ecx + movl %ecx,%cr3 + /* Switch TSS. Reset "task busy" flag before loading. */ - movl %cr3,%eax - movl %eax,PCB_CR3(%edi) #ifdef MULTIPROCESSOR movl CPUVAR(GDT),%eax #else @@ -1785,8 +1775,8 @@ ENTRY(cpu_switch) xorl %esi,%esi sti -idle_unlock: -#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) +idle_unlock: +#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) call _C_LABEL(sched_unlock_idle) #endif /* Interrupts are okay again. */ @@ -1794,7 +1784,7 @@ idle_unlock: call _C_LABEL(Xspllower) # process pending interrupts addl $4,%esp jmp idle_start -idle_zero: +idle_zero: sti call _C_LABEL(uvm_pageidlezero) cli @@ -1808,24 +1798,24 @@ idle_loop: sti hlt NENTRY(mpidle) -idle_start: +idle_start: cli cmpl $0,_C_LABEL(sched_whichqs) jz idle_loop -idle_exit: +idle_exit: movl $IPL_HIGH,CPUVAR(ILEVEL) # splhigh sti -#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) +#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) call _C_LABEL(sched_lock_idle) #endif movl _C_LABEL(sched_whichqs),%ecx bsfl %ecx,%ebx jz idle_unlock -switch_dequeue: - /* +switch_dequeue: + /* * we're running at splhigh(), but it's otherwise okay to take - * interrupts here. + * interrupts here. */ sti leal _C_LABEL(sched_qs)(,%ebx,8),%eax # select q @@ -1883,7 +1873,7 @@ switch_resume: */ pushl %esi - call _C_LABEL(pmap_deactivate2) # pmap_deactivate(oldproc) + call _C_LABEL(pmap_deactivate) # pmap_deactivate(oldproc) addl $4,%esp movl L_ADDR(%esi),%esi @@ -1916,17 +1906,15 @@ switch_exited: jnz switch_restored #endif - /* Switch TSS. Reset "task busy" flag before loading. */ - movl %cr3,%eax - movl %eax,PCB_CR3(%esi) /* XXX should be done by pmap_activate? */ #ifdef MULTIPROCESSOR movl CPUVAR(GDT),%eax -#else +#else /* Load TSS info. */ movl _C_LABEL(gdt),%eax #endif movl L_MD_TSS_SEL(%edi),%edx + /* Switch TSS. Reset "task busy" flag before loading. */ andl $~0x0200,4(%eax,%edx, 1) ltr %dx @@ -1940,16 +1928,16 @@ switch_restored: /* Restore cr0 (including FPU state). */ movl PCB_CR0(%esi),%ecx #ifdef MULTIPROCESSOR - /* - * If our floating point registers are on a different CPU, + /* + * If our floating point registers are on a different cpu, * clear CR0_TS so we'll trap rather than reuse bogus state. */ movl PCB_FPCPU(%esi),%ebx cmpl CPUVAR(SELF),%ebx jz 1f orl $CR0_TS,%ecx -1: -#endif +1: +#endif movl %ecx,%cr0 /* Record new pcb. */ @@ -1969,19 +1957,16 @@ switch_restored: movl $1,%ebx switch_return: -#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) +#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) call _C_LABEL(sched_unlock_idle) #endif - cmpl $0,CPUVAR(IPENDING) - jz 3f pushl $IPL_NONE # spl0() call _C_LABEL(Xspllower) # process pending interrupts addl $4,%esp -3: movl $IPL_HIGH,CPUVAR(ILEVEL) # splhigh() movl %ebx,%eax - + popl %edi popl %esi popl %ebx @@ -2044,8 +2029,8 @@ ENTRY(cpu_switchto) /* * void cpu_exit(struct lwp *l) - * Switch to the appropriate idle context (lwp0's if uniprocessor; the CPU's - * if multiprocessor) and deallocate the address space and kernel stack for p. + * Switch to the appropriate idle context (lwp0's if uniprocessor; the cpu's + * if multiprocessor) and deallocate the address space and kernel stack for p. * Then jump into cpu_switch(), as if we were in the idle proc all along. */ #ifndef MULTIPROCESSOR @@ -2074,16 +2059,19 @@ ENTRY(cpu_exit) movl PCB_ESP(%esi),%esp movl PCB_EBP(%esi),%ebp - /* Switch TSS. Reset "task busy" flag before loading. */ - movl %cr3,%eax - movl %eax,PCB_CR3(%esi) + /* Load TSS info. */ #ifdef MULTIPROCESSOR movl CPUVAR(GDT),%eax -#else +#else /* Load TSS info. */ movl _C_LABEL(gdt),%eax #endif + /* Switch address space. */ + movl PCB_CR3(%esi),%ecx + movl %ecx,%cr3 + + /* Switch TSS. */ andl $~0x0200,4-SEL_KPL(%eax,%edx,1) ltr %dx @@ -2118,7 +2106,7 @@ ENTRY(cpu_exit) /* LINTSTUB: Func: void savectx(struct pcb *pcb) */ ENTRY(savectx) movl 4(%esp),%edx # edx = p->p_addr - + /* Save stack pointers. */ movl %esp,PCB_ESP(%edx) movl %ebp,PCB_EBP(%edx) @@ -2147,12 +2135,6 @@ syscall1: INTRENTRY #ifdef DIAGNOSTIC - cmpl $0, CPUVAR(WANT_PMAPLOAD) - jz 1f - pushl $6f - call _C_LABEL(printf) - addl $4, %esp -1: movl CPUVAR(ILEVEL),%ebx testl %ebx,%ebx jz 1f @@ -2162,7 +2144,7 @@ syscall1: #ifdef DDB int $3 #endif -1: +1: #endif /* DIAGNOSTIC */ movl CPUVAR(CURLWP),%edx movl %esp,L_MD_REGS(%edx) # save pointer to frame @@ -2170,8 +2152,7 @@ syscall1: pushl %esp call *P_MD_SYSCALL(%edx) # get pointer to syscall() function addl $4,%esp -.Lsyscall_checkast: - /* Check for ASTs on exit to user mode. */ +2: /* Check for ASTs on exit to user mode. */ cli CHECK_ASTPENDING(%eax) je 1f @@ -2182,13 +2163,11 @@ syscall1: pushl %esp call _C_LABEL(trap) addl $4,%esp - jmp .Lsyscall_checkast /* re-check ASTs */ -1: CHECK_DEFERRED_SWITCH(%eax) - jnz 9f + jmp 2b #ifndef DIAGNOSTIC - INTRFASTEXIT +1: INTRFASTEXIT #else /* DIAGNOSTIC */ - cmpl $IPL_NONE,CPUVAR(ILEVEL) +1: cmpl $IPL_NONE,CPUVAR(ILEVEL) jne 3f INTRFASTEXIT 3: sti @@ -2201,12 +2180,8 @@ syscall1: movl $IPL_NONE,CPUVAR(ILEVEL) jmp 2b 4: .asciz "WARNING: SPL NOT LOWERED ON SYSCALL EXIT\n" -5: .asciz "WARNING: SPL NOT ZERO ON SYSCALL ENTRY\n" -6: .asciz "WARNING: WANT PMAPLOAD ON SYSCALL ENTRY\n" +5: .asciz "WARNING: SPL NOT ZERO ON SYSCALL ENTRY\n" #endif /* DIAGNOSTIC */ -9: sti - call _C_LABEL(pmap_load) - jmp .Lsyscall_checkast /* re-check ASTs */ #if NNPX > 0 /*