Subject: CVS commit: src/sys/arch/arm
To: None <source-changes@netbsd.org>
From: Steve Woodford <scw@netbsd.org>
List: source-changes
Date: 04/18/2003 11:08:29
Module Name:	src
Committed By:	scw
Date:		Fri Apr 18 11:08:28 UTC 2003

Modified Files:
	src/sys/arch/arm/arm32: arm32_machdep.c bus_dma.c cpuswitch.S
	    db_interface.c fault.c genassym.cf vm_machdep.c
	src/sys/arch/arm/conf: files.arm
	src/sys/arch/arm/include: pcb.h
	src/sys/arch/arm/include/arm32: pmap.h pte.h types.h vmparam.h
Added Files:
	src/sys/arch/arm/arm32: pmap_new.c

Log Message:
Add the generic arm32 bits of the new pmap, contributed by Wasabi Systems.

Some features of the new pmap are:

 - It allows L1 descriptor tables to be shared efficiently between
   multiple processes. A typical "maxusers 32" kernel, where NPROC is set
   to 532, requires 35 L1s. A "maxusers 2" kernel runs quite happily
   with just 4 L1s. This completely solves the problem of running out
   of contiguous physical memory for allocating new L1s at runtime on a
   busy system.

 - Much improved cache/TLB management "smarts". This change ripples
   out to encompass the low-level context switch code, which is also
   much smarter about when to flush the cache/TLB, and when not to.

 - Faster allocation of L2 page tables and associated metadata thanks,
   in part, to the pool_cache enhancements recently contributed to
   NetBSD by Wasabi Systems.

 - Faster VM space teardown due to accurate referenced tracking of L2
   page tables.

 - Better/faster cache-alias tracking.

The new pmap is enabled by adding options ARM32_PMAP_NEW to the kernel
config file, and making the necessary changes to the port-specific
initarm() function. Several ports have already been converted and will
be committed shortly.


To generate a diff of this commit:
cvs rdiff -r1.30 -r1.31 src/sys/arch/arm/arm32/arm32_machdep.c
cvs rdiff -r1.28 -r1.29 src/sys/arch/arm/arm32/bus_dma.c
cvs rdiff -r1.29 -r1.30 src/sys/arch/arm/arm32/cpuswitch.S
cvs rdiff -r1.22 -r1.23 src/sys/arch/arm/arm32/db_interface.c
cvs rdiff -r1.26 -r1.27 src/sys/arch/arm/arm32/fault.c
cvs rdiff -r1.21 -r1.22 src/sys/arch/arm/arm32/genassym.cf
cvs rdiff -r0 -r1.1 src/sys/arch/arm/arm32/pmap_new.c
cvs rdiff -r1.25 -r1.26 src/sys/arch/arm/arm32/vm_machdep.c
cvs rdiff -r1.66 -r1.67 src/sys/arch/arm/conf/files.arm
cvs rdiff -r1.7 -r1.8 src/sys/arch/arm/include/pcb.h
cvs rdiff -r1.64 -r1.65 src/sys/arch/arm/include/arm32/pmap.h
cvs rdiff -r1.5 -r1.6 src/sys/arch/arm/include/arm32/pte.h
cvs rdiff -r1.6 -r1.7 src/sys/arch/arm/include/arm32/types.h
cvs rdiff -r1.12 -r1.13 src/sys/arch/arm/include/arm32/vmparam.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.