summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/conf/NOTES6
-rw-r--r--sys/i386/i386/identcpu.c9
-rw-r--r--sys/i386/i386/machdep.c5
-rw-r--r--sys/i386/i386/pmap.c53
-rw-r--r--sys/i386/i386/support.s35
5 files changed, 44 insertions, 64 deletions
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<UPAGES;i++) {
/*
* Get a kernel stack page
@@ -876,11 +878,11 @@ pmap_new_proc(p)
*/
*(ptek + i) = VM_PAGE_TO_PHYS(m) | PG_RW | PG_V | pgeflag;
if (oldpte) {
- if ((oldpte & PG_G) || (cpu_class > 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
OpenPOWER on IntegriCloud