summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/amd64/cpu_switch.S57
-rw-r--r--sys/amd64/amd64/machdep.c10
-rw-r--r--sys/amd64/amd64/pmap.c27
-rw-r--r--sys/amd64/amd64/support.S5
-rw-r--r--sys/amd64/amd64/support.s5
-rw-r--r--sys/amd64/amd64/swtch.s57
-rw-r--r--sys/amd64/include/cpufunc.h8
-rw-r--r--sys/i386/i386/machdep.c10
-rw-r--r--sys/i386/i386/pmap.c27
-rw-r--r--sys/i386/i386/support.s5
-rw-r--r--sys/i386/i386/swtch.s57
-rw-r--r--sys/i386/include/cpufunc.h8
-rw-r--r--sys/kern/init_main.c4
-rw-r--r--sys/vm/pmap.h3
14 files changed, 241 insertions, 42 deletions
diff --git a/sys/amd64/amd64/cpu_switch.S b/sys/amd64/amd64/cpu_switch.S
index 4d57b64..df0bda8 100644
--- a/sys/amd64/amd64/cpu_switch.S
+++ b/sys/amd64/amd64/cpu_switch.S
@@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: swtch.s,v 1.63 1997/09/21 15:03:58 peter Exp $
+ * $Id: swtch.s,v 1.64 1997/10/10 09:44:06 peter Exp $
*/
#include "npx.h"
@@ -86,6 +86,11 @@ _hlt_vector: .long _default_halt /* pointer to halt routine */
.globl _want_resched
_want_resched: .long 0 /* we need to re-run the scheduler */
+#if defined(SWTCH_OPTIM_STATS)
+ .globl _swtch_optim_stats, _tlb_flush_count
+_swtch_optim_stats: .long 0 /* number of _swtch_optims */
+_tlb_flush_count: .long 0
+#endif
.text
/*
@@ -252,6 +257,9 @@ _idle:
/* use our idleproc's "context" */
movl _my_idlePTD,%ecx
movl %ecx,%cr3
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
movl $_idlestack_top,%ecx
movl %ecx,%esp
@@ -259,8 +267,7 @@ _idle:
#ifdef VM86
movl _my_tr, %esi
#endif /* VM86 */
- movl $_common_tss, %eax
- movl %ecx, TSS_ESP0(%eax)
+ movl %ecx, _common_tss + TSS_ESP0
#ifdef VM86
btrl %esi, _private_tss
@@ -302,6 +309,9 @@ _idle:
.globl idle_loop
idle_loop:
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
movl %cr3,%eax /* ouch! */
movl %eax,%cr3
@@ -357,15 +367,27 @@ idle_loop:
#else
xorl %ebp,%ebp
movl $HIDENAME(tmpstk),%esp
- movl _IdlePTD,%ecx
- movl %ecx,%cr3
+#if defined(OVERLY_CONSERVATIVE_PTD_MGMT)
+#if defined(SWTCH_OPTIM_STATS)
+ incl _swtch_optim_stats
+#endif
+ movl _IdlePTD, %ecx
+ movl %cr3, %eax
+ cmpl %ecx, %eax
+ je 2f
+#if defined(SWTCH_OPTIM_STATS)
+ decl _swtch_optim_stats
+ incl _tlb_flush_count
+#endif
+ movl %ecx, %cr3
+2:
+#endif
/* update common_tss.tss_esp0 pointer */
#ifdef VM86
movl _my_tr, %esi
#endif /* VM86 */
- movl $_common_tss, %eax
- movl %esp, TSS_ESP0(%eax)
+ movl %esp, _common_tss + TSS_ESP0
#ifdef VM86
btrl %esi, _private_tss
@@ -576,16 +598,28 @@ swtch_com:
movl %eax,P_BACK(%ecx) /* isolate process to run */
movl P_ADDR(%ecx),%edx
- movl PCB_CR3(%edx),%ebx
#ifdef SMP
+ movl PCB_CR3(%edx),%ebx
/* Grab the private PT pointer from the outgoing process's PTD */
movl $_PTD, %esi
movl 4*MPPTDI(%esi), %eax /* fetch cpu's prv pt */
-#endif /* SMP */
-
+#else
+#if defined(SWTCH_OPTIM_STATS)
+ incl _swtch_optim_stats
+#endif
/* switch address space */
+ movl %cr3,%ebx
+ cmpl PCB_CR3(%edx),%ebx
+ je 4f
+#if defined(SWTCH_OPTIM_STATS)
+ decl _swtch_optim_stats
+ incl _tlb_flush_count
+#endif
+ movl PCB_CR3(%edx),%ebx
+#endif /* SMP */
movl %ebx,%cr3
+4:
#ifdef SMP
/* Copy the private PT to the new process's PTD */
@@ -597,6 +631,9 @@ swtch_com:
*/
movl %eax, 4*MPPTDI(%esi) /* restore cpu's prv page */
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
/* XXX: we have just changed the page tables.. reload.. */
movl %ebx, %cr3
#endif /* SMP */
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index d6db6e6..0aeefb2 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $Id: machdep.c,v 1.277 1997/12/04 14:35:39 jkh Exp $
+ * $Id: machdep.c,v 1.278 1997/12/04 21:21:24 jmg Exp $
*/
#include "apm.h"
@@ -150,6 +150,14 @@ int msgbufmapped = 0; /* set when safe to use msgbuf */
int _udatasel, _ucodesel;
u_int atdevbase;
+#if defined(SWTCH_OPTIM_STATS)
+extern int swtch_optim_stats;
+SYSCTL_INT(_debug, OID_AUTO, swtch_optim_stats,
+ CTLFLAG_RD, &swtch_optim_stats, 0, "");
+SYSCTL_INT(_debug, OID_AUTO, tlb_flush_count,
+ CTLFLAG_RD, &tlb_flush_count, 0, "");
+#endif
+
int physmem = 0;
int cold = 1;
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 2a8561f..0286bdb 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -39,7 +39,7 @@
* SUCH DAMAGE.
*
* from: @(#)pmap.c 7.7 (Berkeley) 5/12/91
- * $Id: pmap.c,v 1.172 1997/11/07 19:58:34 tegge Exp $
+ * $Id: pmap.c,v 1.173 1997/11/20 19:30:31 bde Exp $
*/
/*
@@ -1116,6 +1116,28 @@ pmap_unuse_pt(pmap, va, mpte)
return pmap_unwire_pte_hold(pmap, mpte);
}
+#if !defined(SMP)
+void
+pmap_pinit0(pmap)
+ struct pmap *pmap;
+{
+ pmap->pm_pdir =
+ (pd_entry_t *)kmem_alloc_pageable(kernel_map, PAGE_SIZE);
+ pmap_kenter((vm_offset_t) pmap->pm_pdir, (vm_offset_t) IdlePTD);
+ pmap->pm_flags = 0;
+ pmap->pm_count = 1;
+ pmap->pm_ptphint = NULL;
+ TAILQ_INIT(&pmap->pm_pvlist);
+}
+#else
+void
+pmap_pinit0(pmap)
+ struct pmap *pmap;
+{
+ pmap_pinit(pmap);
+}
+#endif
+
/*
* Initialize a preallocated and zeroed pmap structure,
* such as one in a vmspace structure.
@@ -3247,6 +3269,9 @@ pmap_mincore(pmap, addr)
void
pmap_activate(struct proc *p)
{
+#if defined(SWTCH_OPTIM_STATS)
+ ++tlb_flush_count;
+#endif
load_cr3(p->p_addr->u_pcb.pcb_cr3 =
vtophys(p->p_vmspace->vm_pmap.pm_pdir));
}
diff --git a/sys/amd64/amd64/support.S b/sys/amd64/amd64/support.S
index 2ae3e20..3b9970f 100644
--- a/sys/amd64/amd64/support.S
+++ b/sys/amd64/amd64/support.S
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: support.s,v 1.56 1997/08/09 00:02:44 dyson Exp $
+ * $Id: support.s,v 1.57 1997/09/02 20:05:30 bde Exp $
*/
#include "npx.h"
@@ -1517,6 +1517,9 @@ ENTRY(rcr3)
/* void load_cr3(caddr_t cr3) */
ENTRY(load_cr3)
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
movl 4(%esp),%eax
movl %eax,%cr3
ret
diff --git a/sys/amd64/amd64/support.s b/sys/amd64/amd64/support.s
index 2ae3e20..3b9970f 100644
--- a/sys/amd64/amd64/support.s
+++ b/sys/amd64/amd64/support.s
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: support.s,v 1.56 1997/08/09 00:02:44 dyson Exp $
+ * $Id: support.s,v 1.57 1997/09/02 20:05:30 bde Exp $
*/
#include "npx.h"
@@ -1517,6 +1517,9 @@ ENTRY(rcr3)
/* void load_cr3(caddr_t cr3) */
ENTRY(load_cr3)
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
movl 4(%esp),%eax
movl %eax,%cr3
ret
diff --git a/sys/amd64/amd64/swtch.s b/sys/amd64/amd64/swtch.s
index 4d57b64..df0bda8 100644
--- a/sys/amd64/amd64/swtch.s
+++ b/sys/amd64/amd64/swtch.s
@@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: swtch.s,v 1.63 1997/09/21 15:03:58 peter Exp $
+ * $Id: swtch.s,v 1.64 1997/10/10 09:44:06 peter Exp $
*/
#include "npx.h"
@@ -86,6 +86,11 @@ _hlt_vector: .long _default_halt /* pointer to halt routine */
.globl _want_resched
_want_resched: .long 0 /* we need to re-run the scheduler */
+#if defined(SWTCH_OPTIM_STATS)
+ .globl _swtch_optim_stats, _tlb_flush_count
+_swtch_optim_stats: .long 0 /* number of _swtch_optims */
+_tlb_flush_count: .long 0
+#endif
.text
/*
@@ -252,6 +257,9 @@ _idle:
/* use our idleproc's "context" */
movl _my_idlePTD,%ecx
movl %ecx,%cr3
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
movl $_idlestack_top,%ecx
movl %ecx,%esp
@@ -259,8 +267,7 @@ _idle:
#ifdef VM86
movl _my_tr, %esi
#endif /* VM86 */
- movl $_common_tss, %eax
- movl %ecx, TSS_ESP0(%eax)
+ movl %ecx, _common_tss + TSS_ESP0
#ifdef VM86
btrl %esi, _private_tss
@@ -302,6 +309,9 @@ _idle:
.globl idle_loop
idle_loop:
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
movl %cr3,%eax /* ouch! */
movl %eax,%cr3
@@ -357,15 +367,27 @@ idle_loop:
#else
xorl %ebp,%ebp
movl $HIDENAME(tmpstk),%esp
- movl _IdlePTD,%ecx
- movl %ecx,%cr3
+#if defined(OVERLY_CONSERVATIVE_PTD_MGMT)
+#if defined(SWTCH_OPTIM_STATS)
+ incl _swtch_optim_stats
+#endif
+ movl _IdlePTD, %ecx
+ movl %cr3, %eax
+ cmpl %ecx, %eax
+ je 2f
+#if defined(SWTCH_OPTIM_STATS)
+ decl _swtch_optim_stats
+ incl _tlb_flush_count
+#endif
+ movl %ecx, %cr3
+2:
+#endif
/* update common_tss.tss_esp0 pointer */
#ifdef VM86
movl _my_tr, %esi
#endif /* VM86 */
- movl $_common_tss, %eax
- movl %esp, TSS_ESP0(%eax)
+ movl %esp, _common_tss + TSS_ESP0
#ifdef VM86
btrl %esi, _private_tss
@@ -576,16 +598,28 @@ swtch_com:
movl %eax,P_BACK(%ecx) /* isolate process to run */
movl P_ADDR(%ecx),%edx
- movl PCB_CR3(%edx),%ebx
#ifdef SMP
+ movl PCB_CR3(%edx),%ebx
/* Grab the private PT pointer from the outgoing process's PTD */
movl $_PTD, %esi
movl 4*MPPTDI(%esi), %eax /* fetch cpu's prv pt */
-#endif /* SMP */
-
+#else
+#if defined(SWTCH_OPTIM_STATS)
+ incl _swtch_optim_stats
+#endif
/* switch address space */
+ movl %cr3,%ebx
+ cmpl PCB_CR3(%edx),%ebx
+ je 4f
+#if defined(SWTCH_OPTIM_STATS)
+ decl _swtch_optim_stats
+ incl _tlb_flush_count
+#endif
+ movl PCB_CR3(%edx),%ebx
+#endif /* SMP */
movl %ebx,%cr3
+4:
#ifdef SMP
/* Copy the private PT to the new process's PTD */
@@ -597,6 +631,9 @@ swtch_com:
*/
movl %eax, 4*MPPTDI(%esi) /* restore cpu's prv page */
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
/* XXX: we have just changed the page tables.. reload.. */
movl %ebx, %cr3
#endif /* SMP */
diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h
index 3b7eb9c..4143dce 100644
--- a/sys/amd64/include/cpufunc.h
+++ b/sys/amd64/include/cpufunc.h
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: cpufunc.h,v 1.3 1997/09/05 20:20:31 smp Exp smp $
+ * $Id: cpufunc.h,v 1.72 1997/09/07 22:01:27 fsmp Exp $
*/
/*
@@ -45,6 +45,9 @@
#include <machine/lock.h>
+#if defined(SWTCH_OPTIM_STATS)
+extern int tlb_flush_count;
+#endif
#ifdef __GNUC__
@@ -234,6 +237,9 @@ invltlb(void)
*/
__asm __volatile("movl %%cr3, %0; movl %0, %%cr3" : "=r" (temp)
: : "memory");
+#if defined(SWTCH_OPTIM_STATS)
+ ++tlb_flush_count;
+#endif
}
#endif /* SMP */
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index d6db6e6..0aeefb2 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
- * $Id: machdep.c,v 1.277 1997/12/04 14:35:39 jkh Exp $
+ * $Id: machdep.c,v 1.278 1997/12/04 21:21:24 jmg Exp $
*/
#include "apm.h"
@@ -150,6 +150,14 @@ int msgbufmapped = 0; /* set when safe to use msgbuf */
int _udatasel, _ucodesel;
u_int atdevbase;
+#if defined(SWTCH_OPTIM_STATS)
+extern int swtch_optim_stats;
+SYSCTL_INT(_debug, OID_AUTO, swtch_optim_stats,
+ CTLFLAG_RD, &swtch_optim_stats, 0, "");
+SYSCTL_INT(_debug, OID_AUTO, tlb_flush_count,
+ CTLFLAG_RD, &tlb_flush_count, 0, "");
+#endif
+
int physmem = 0;
int cold = 1;
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 2a8561f..0286bdb 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -39,7 +39,7 @@
* SUCH DAMAGE.
*
* from: @(#)pmap.c 7.7 (Berkeley) 5/12/91
- * $Id: pmap.c,v 1.172 1997/11/07 19:58:34 tegge Exp $
+ * $Id: pmap.c,v 1.173 1997/11/20 19:30:31 bde Exp $
*/
/*
@@ -1116,6 +1116,28 @@ pmap_unuse_pt(pmap, va, mpte)
return pmap_unwire_pte_hold(pmap, mpte);
}
+#if !defined(SMP)
+void
+pmap_pinit0(pmap)
+ struct pmap *pmap;
+{
+ pmap->pm_pdir =
+ (pd_entry_t *)kmem_alloc_pageable(kernel_map, PAGE_SIZE);
+ pmap_kenter((vm_offset_t) pmap->pm_pdir, (vm_offset_t) IdlePTD);
+ pmap->pm_flags = 0;
+ pmap->pm_count = 1;
+ pmap->pm_ptphint = NULL;
+ TAILQ_INIT(&pmap->pm_pvlist);
+}
+#else
+void
+pmap_pinit0(pmap)
+ struct pmap *pmap;
+{
+ pmap_pinit(pmap);
+}
+#endif
+
/*
* Initialize a preallocated and zeroed pmap structure,
* such as one in a vmspace structure.
@@ -3247,6 +3269,9 @@ pmap_mincore(pmap, addr)
void
pmap_activate(struct proc *p)
{
+#if defined(SWTCH_OPTIM_STATS)
+ ++tlb_flush_count;
+#endif
load_cr3(p->p_addr->u_pcb.pcb_cr3 =
vtophys(p->p_vmspace->vm_pmap.pm_pdir));
}
diff --git a/sys/i386/i386/support.s b/sys/i386/i386/support.s
index 2ae3e20..3b9970f 100644
--- a/sys/i386/i386/support.s
+++ b/sys/i386/i386/support.s
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: support.s,v 1.56 1997/08/09 00:02:44 dyson Exp $
+ * $Id: support.s,v 1.57 1997/09/02 20:05:30 bde Exp $
*/
#include "npx.h"
@@ -1517,6 +1517,9 @@ ENTRY(rcr3)
/* void load_cr3(caddr_t cr3) */
ENTRY(load_cr3)
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
movl 4(%esp),%eax
movl %eax,%cr3
ret
diff --git a/sys/i386/i386/swtch.s b/sys/i386/i386/swtch.s
index 4d57b64..df0bda8 100644
--- a/sys/i386/i386/swtch.s
+++ b/sys/i386/i386/swtch.s
@@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: swtch.s,v 1.63 1997/09/21 15:03:58 peter Exp $
+ * $Id: swtch.s,v 1.64 1997/10/10 09:44:06 peter Exp $
*/
#include "npx.h"
@@ -86,6 +86,11 @@ _hlt_vector: .long _default_halt /* pointer to halt routine */
.globl _want_resched
_want_resched: .long 0 /* we need to re-run the scheduler */
+#if defined(SWTCH_OPTIM_STATS)
+ .globl _swtch_optim_stats, _tlb_flush_count
+_swtch_optim_stats: .long 0 /* number of _swtch_optims */
+_tlb_flush_count: .long 0
+#endif
.text
/*
@@ -252,6 +257,9 @@ _idle:
/* use our idleproc's "context" */
movl _my_idlePTD,%ecx
movl %ecx,%cr3
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
movl $_idlestack_top,%ecx
movl %ecx,%esp
@@ -259,8 +267,7 @@ _idle:
#ifdef VM86
movl _my_tr, %esi
#endif /* VM86 */
- movl $_common_tss, %eax
- movl %ecx, TSS_ESP0(%eax)
+ movl %ecx, _common_tss + TSS_ESP0
#ifdef VM86
btrl %esi, _private_tss
@@ -302,6 +309,9 @@ _idle:
.globl idle_loop
idle_loop:
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
movl %cr3,%eax /* ouch! */
movl %eax,%cr3
@@ -357,15 +367,27 @@ idle_loop:
#else
xorl %ebp,%ebp
movl $HIDENAME(tmpstk),%esp
- movl _IdlePTD,%ecx
- movl %ecx,%cr3
+#if defined(OVERLY_CONSERVATIVE_PTD_MGMT)
+#if defined(SWTCH_OPTIM_STATS)
+ incl _swtch_optim_stats
+#endif
+ movl _IdlePTD, %ecx
+ movl %cr3, %eax
+ cmpl %ecx, %eax
+ je 2f
+#if defined(SWTCH_OPTIM_STATS)
+ decl _swtch_optim_stats
+ incl _tlb_flush_count
+#endif
+ movl %ecx, %cr3
+2:
+#endif
/* update common_tss.tss_esp0 pointer */
#ifdef VM86
movl _my_tr, %esi
#endif /* VM86 */
- movl $_common_tss, %eax
- movl %esp, TSS_ESP0(%eax)
+ movl %esp, _common_tss + TSS_ESP0
#ifdef VM86
btrl %esi, _private_tss
@@ -576,16 +598,28 @@ swtch_com:
movl %eax,P_BACK(%ecx) /* isolate process to run */
movl P_ADDR(%ecx),%edx
- movl PCB_CR3(%edx),%ebx
#ifdef SMP
+ movl PCB_CR3(%edx),%ebx
/* Grab the private PT pointer from the outgoing process's PTD */
movl $_PTD, %esi
movl 4*MPPTDI(%esi), %eax /* fetch cpu's prv pt */
-#endif /* SMP */
-
+#else
+#if defined(SWTCH_OPTIM_STATS)
+ incl _swtch_optim_stats
+#endif
/* switch address space */
+ movl %cr3,%ebx
+ cmpl PCB_CR3(%edx),%ebx
+ je 4f
+#if defined(SWTCH_OPTIM_STATS)
+ decl _swtch_optim_stats
+ incl _tlb_flush_count
+#endif
+ movl PCB_CR3(%edx),%ebx
+#endif /* SMP */
movl %ebx,%cr3
+4:
#ifdef SMP
/* Copy the private PT to the new process's PTD */
@@ -597,6 +631,9 @@ swtch_com:
*/
movl %eax, 4*MPPTDI(%esi) /* restore cpu's prv page */
+#if defined(SWTCH_OPTIM_STATS)
+ incl _tlb_flush_count
+#endif
/* XXX: we have just changed the page tables.. reload.. */
movl %ebx, %cr3
#endif /* SMP */
diff --git a/sys/i386/include/cpufunc.h b/sys/i386/include/cpufunc.h
index 3b7eb9c..4143dce 100644
--- a/sys/i386/include/cpufunc.h
+++ b/sys/i386/include/cpufunc.h
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: cpufunc.h,v 1.3 1997/09/05 20:20:31 smp Exp smp $
+ * $Id: cpufunc.h,v 1.72 1997/09/07 22:01:27 fsmp Exp $
*/
/*
@@ -45,6 +45,9 @@
#include <machine/lock.h>
+#if defined(SWTCH_OPTIM_STATS)
+extern int tlb_flush_count;
+#endif
#ifdef __GNUC__
@@ -234,6 +237,9 @@ invltlb(void)
*/
__asm __volatile("movl %%cr3, %0; movl %0, %%cr3" : "=r" (temp)
: : "memory");
+#if defined(SWTCH_OPTIM_STATS)
+ ++tlb_flush_count;
+#endif
}
#endif /* SMP */
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index d4ea42b..620e1b9 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -39,7 +39,7 @@
* SUCH DAMAGE.
*
* @(#)init_main.c 8.9 (Berkeley) 1/21/94
- * $Id: init_main.c,v 1.77 1997/12/06 04:11:09 sef Exp $
+ * $Id: init_main.c,v 1.78 1997/12/12 04:00:57 dyson Exp $
*/
#include "opt_devfs.h"
@@ -401,7 +401,7 @@ proc0_init(dummy)
/* Allocate a prototype map so we have something to fork. */
p->p_vmspace = &vmspace0;
vmspace0.vm_refcnt = 1;
- pmap_pinit(&vmspace0.vm_pmap);
+ pmap_pinit0(&vmspace0.vm_pmap);
vm_map_init(&vmspace0.vm_map, round_page(VM_MIN_ADDRESS),
trunc_page(VM_MAXUSER_ADDRESS), TRUE);
vmspace0.vm_map.pmap = &vmspace0.vm_pmap;
diff --git a/sys/vm/pmap.h b/sys/vm/pmap.h
index 2c9697a..291cb01 100644
--- a/sys/vm/pmap.h
+++ b/sys/vm/pmap.h
@@ -61,7 +61,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: pmap.h,v 1.23 1997/08/05 22:07:21 dyson Exp $
+ * $Id: pmap.h,v 1.24 1997/08/05 23:03:24 dyson Exp $
*/
/*
@@ -113,6 +113,7 @@ void pmap_pageable __P((pmap_t, vm_offset_t, vm_offset_t,
boolean_t));
vm_offset_t pmap_phys_address __P((int));
void pmap_pinit __P((pmap_t));
+void pmap_pinit0 __P((pmap_t));
void pmap_protect __P((pmap_t, vm_offset_t, vm_offset_t,
vm_prot_t));
void pmap_qenter __P((vm_offset_t, vm_page_t *, int));
OpenPOWER on IntegriCloud