From 134cd3c07ec1805473e286adf9aa5ef9067789d2 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 16 Jan 2001 09:10:34 +0000 Subject: Stop doing runtime checking on i386 cpus for cpu class. The cpu is slow enough as it is, without having to constantly check that it really is an i386 still. It was possible to compile out the conditionals for faster cpus by leaving out 'I386_CPU', but it was not possible to unconditionally compile for the i386. You got the runtime checking whether you wanted it or not. This makes I386_CPU mutually exclusive with the other cpu types, and tidies things up a little in the process. Reviewed by: alfred, markm, phk, benno, jlemon, jhb, jake, grog, msmith, jasone, dcs, des (and a bunch more people who encouraged it) --- sys/i386/conf/NOTES | 6 +++--- sys/i386/i386/identcpu.c | 9 +++++--- sys/i386/i386/machdep.c | 5 ++--- sys/i386/i386/pmap.c | 53 ++++++++++++++++++++++++------------------------ sys/i386/i386/support.s | 35 ++++++-------------------------- 5 files changed, 44 insertions(+), 64 deletions(-) (limited to 'sys/i386') diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES index 5a8d17e..a92b0b8 100644 --- a/sys/i386/conf/NOTES +++ b/sys/i386/conf/NOTES @@ -155,10 +155,10 @@ options WITNESS_SKIPSPIN # # You must specify at least one CPU (the one you intend to run on); # deleting the specification for CPUs you don't need to use may make -# parts of the system run faster. This is especially true removing -# I386_CPU. +# parts of the system run faster. +# I386_CPU is mutually exclusive with the other CPU types. # -cpu I386_CPU +#cpu I386_CPU cpu I486_CPU cpu I586_CPU # aka Pentium(tm) cpu I686_CPU # aka Pentium Pro(tm) diff --git a/sys/i386/i386/identcpu.c b/sys/i386/i386/identcpu.c index 230675f..b379e73 100644 --- a/sys/i386/i386/identcpu.c +++ b/sys/i386/i386/identcpu.c @@ -624,15 +624,18 @@ void panicifcpuunsupported(void) { +#if !defined(I386_CPU) && !defined(I486_CPU) && !defined(I586_CPU) && !defined(I686_CPU) +#error This kernel is not configured for one of the supported CPUs +#endif +#if defined(I386_CPU) && (defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU)) +#error I386_CPU is mutually exclusive with the other cpu types. +#endif /* * Now that we have told the user what they have, * let them know if that machine type isn't configured. */ switch (cpu_class) { case CPUCLASS_286: /* a 286 should not make it this far, anyway */ -#if !defined(I386_CPU) && !defined(I486_CPU) && !defined(I586_CPU) && !defined(I686_CPU) -#error This kernel is not configured for one of the supported CPUs -#endif #if !defined(I386_CPU) case CPUCLASS_386: #endif diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index c97719f..a6d27ea 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -1118,10 +1118,9 @@ cpu_setregs(void) cr0 = rcr0(); cr0 |= CR0_NE; /* Done by npxinit() */ cr0 |= CR0_MP | CR0_TS; /* Done at every execve() too. */ -#ifdef I386_CPU - if (cpu_class != CPUCLASS_386) +#ifndef I386_CPU + cr0 |= CR0_WP | CR0_AM; #endif - cr0 |= CR0_WP | CR0_AM; load_cr0(cr0); load_gs(_udatasel); } diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index aa5f94e..f7d9dfa 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -567,14 +567,11 @@ pmap_track_modified(vm_offset_t va) static PMAP_INLINE void invltlb_1pg(vm_offset_t va) { -#if defined(I386_CPU) - if (cpu_class == CPUCLASS_386) { - invltlb(); - } else +#ifdef I386_CPU + invltlb(); +#else + invlpg(va); #endif - { - invlpg(va); - } } static __inline void @@ -832,7 +829,10 @@ void pmap_new_proc(p) struct proc *p; { - int i, updateneeded; +#ifdef I386_CPU + int updateneeded; +#endif + int i; vm_object_t upobj; vm_page_t m; struct user *up; @@ -857,7 +857,9 @@ pmap_new_proc(p) ptek = (unsigned *) vtopte((vm_offset_t) up); +#ifdef I386_CPU updateneeded = 0; +#endif for(i=0;i CPUCLASS_386)) { - invlpg((vm_offset_t) up + i * PAGE_SIZE); - } else { - updateneeded = 1; - } +#ifdef I386_CPU + updateneeded = 1; +#else + invlpg((vm_offset_t) up + i * PAGE_SIZE); +#endif } vm_page_wakeup(m); @@ -888,8 +890,10 @@ pmap_new_proc(p) vm_page_flag_set(m, PG_MAPPED | PG_WRITEABLE); m->valid = VM_PAGE_BITS_ALL; } +#ifdef I386_CPU if (updateneeded) invltlb(); +#endif } /* @@ -917,14 +921,14 @@ pmap_dispose_proc(p) oldpte = *(ptek + i); *(ptek + i) = 0; - if ((oldpte & PG_G) || (cpu_class > CPUCLASS_386)) - invlpg((vm_offset_t) p->p_addr + i * PAGE_SIZE); +#ifndef I386_CPU + invlpg((vm_offset_t) p->p_addr + i * PAGE_SIZE); +#endif vm_page_unwire(m, 0); vm_page_free(m); } -#if defined(I386_CPU) - if (cpu_class <= CPUCLASS_386) - invltlb(); +#ifdef I386_CPU + invltlb(); #endif } @@ -2775,15 +2779,12 @@ pmap_copy_page(src, dst) *(int *) CMAP1 = PG_V | (src & PG_FRAME) | PG_A; *(int *) CMAP2 = PG_V | PG_RW | (dst & PG_FRAME) | PG_A | PG_M; -#if defined(I386_CPU) - if (cpu_class == CPUCLASS_386) { - invltlb(); - } else +#ifdef I386_CPU + invltlb(); +#else + invlpg((u_int)CADDR1); + invlpg((u_int)CADDR2); #endif - { - invlpg((u_int)CADDR1); - invlpg((u_int)CADDR2); - } bcopy(CADDR1, CADDR2, PAGE_SIZE); diff --git a/sys/i386/i386/support.s b/sys/i386/i386/support.s index 3f0f51f..95154e6 100644 --- a/sys/i386/i386/support.s +++ b/sys/i386/i386/support.s @@ -89,7 +89,7 @@ ENTRY(generic_bzero) popl %edi ret -#if defined(I486_CPU) +#ifdef I486_CPU ENTRY(i486_bzero) movl 4(%esp),%edx movl 8(%esp),%ecx @@ -703,12 +703,8 @@ ENTRY(generic_copyout) cmpl $VM_MAXUSER_ADDRESS,%eax ja copyout_fault -#if defined(I386_CPU) +#ifdef I386_CPU -#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU) - cmpl $CPUCLASS_386,_cpu_class - jne 3f -#endif /* * We have to check each PTE for user write permission. * The checking may cause a page fault, so it is important to set @@ -760,7 +756,6 @@ ENTRY(generic_copyout) #endif /* I386_CPU */ /* bcopy(%esi, %edi, %ebx) */ -3: movl %ebx,%ecx #if defined(I586_CPU) && NNPX > 0 @@ -1207,12 +1202,7 @@ ENTRY(suword) movl $fusufault,PCB_ONFAULT(%ecx) movl 4(%esp),%edx -#if defined(I386_CPU) - -#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU) - cmpl $CPUCLASS_386,_cpu_class - jne 2f /* we only have to set the right segment selector */ -#endif /* I486_CPU || I586_CPU || I686_CPU */ +#ifdef I386_CPU /* XXX - page boundary crossing is still not handled */ movl %edx,%eax @@ -1240,7 +1230,6 @@ ENTRY(suword) movl 4(%esp),%edx #endif -2: cmpl $VM_MAXUSER_ADDRESS-4,%edx /* verify address validity */ ja fusufault @@ -1259,12 +1248,7 @@ ENTRY(susword) movl $fusufault,PCB_ONFAULT(%ecx) movl 4(%esp),%edx -#if defined(I386_CPU) - -#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU) - cmpl $CPUCLASS_386,_cpu_class - jne 2f -#endif /* I486_CPU || I586_CPU || I686_CPU */ +#ifdef I386_CPU /* XXX - page boundary crossing is still not handled */ movl %edx,%eax @@ -1292,7 +1276,6 @@ ENTRY(susword) movl 4(%esp),%edx #endif -2: cmpl $VM_MAXUSER_ADDRESS-2,%edx /* verify address validity */ ja fusufault @@ -1312,12 +1295,7 @@ ENTRY(subyte) movl $fusufault,PCB_ONFAULT(%ecx) movl 4(%esp),%edx -#if defined(I386_CPU) - -#if defined(I486_CPU) || defined(I586_CPU) || defined(I686_CPU) - cmpl $CPUCLASS_386,_cpu_class - jne 2f -#endif /* I486_CPU || I586_CPU || I686_CPU */ +#ifdef I386_CPU movl %edx,%eax shrl $IDXSHIFT,%edx @@ -1344,7 +1322,6 @@ ENTRY(subyte) movl 4(%esp),%edx #endif -2: cmpl $VM_MAXUSER_ADDRESS-1,%edx /* verify address validity */ ja fusufault @@ -1586,7 +1563,7 @@ ENTRY(rcr3) /* void load_cr3(caddr_t cr3) */ ENTRY(load_cr3) -#if defined(SWTCH_OPTIM_STATS) +#ifdef SWTCH_OPTIM_STATS incl _tlb_flush_count #endif movl 4(%esp),%eax -- cgit v1.1