From owner-p4-projects Wed May 29 1: 9:58 2002 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 67A9837B401; Wed, 29 May 2002 01:07:48 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id ACEAC37B412 for ; Wed, 29 May 2002 01:07:45 -0700 (PDT) Received: (from perforce@localhost) by freefall.freebsd.org (8.11.6/8.11.6) id g4T87jv47741 for perforce@freebsd.org; Wed, 29 May 2002 01:07:45 -0700 (PDT) (envelope-from peter@freebsd.org) Date: Wed, 29 May 2002 01:07:45 -0700 (PDT) Message-Id: <200205290807.g4T87jv47741@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm Subject: PERFORCE change 12053 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG http://people.freebsd.org/~peter/p4db/chv.cgi?CH=12053 Change 12053 by peter@peter_daintree on 2002/05/29 01:07:38 IFC @12052 Affected files ... ... //depot/projects/ia64/Makefile.inc1#29 integrate ... //depot/projects/ia64/share/man/man4/Makefile#10 integrate ... //depot/projects/ia64/share/man/man4/disc.4#1 branch ... //depot/projects/ia64/share/man/man4/faith.4#2 integrate ... //depot/projects/ia64/share/man/man4/stf.4#3 integrate ... //depot/projects/ia64/share/man/man4/vlan.4#4 integrate ... //depot/projects/ia64/share/man/tools/M.folio#2 delete ... //depot/projects/ia64/share/man/tools/M.tabs#2 delete ... //depot/projects/ia64/share/man/tools/README#2 delete ... //depot/projects/ia64/share/man/tools/TOOLKIT#2 delete ... //depot/projects/ia64/share/man/tools/badcref3#2 delete ... //depot/projects/ia64/share/man/tools/break#2 delete ... //depot/projects/ia64/share/man/tools/ckcrefs#2 delete ... //depot/projects/ia64/share/man/tools/ckfrefs#2 delete ... //depot/projects/ia64/share/man/tools/cknames#2 delete ... //depot/projects/ia64/share/man/tools/ckso#2 delete ... //depot/projects/ia64/share/man/tools/ckspell#2 delete ... //depot/projects/ia64/share/man/tools/ignore#2 delete ... //depot/projects/ia64/share/man/tools/line.c#2 delete ... //depot/projects/ia64/share/man/tools/list#2 delete ... //depot/projects/ia64/share/man/tools/mcmp#2 delete ... //depot/projects/ia64/share/man/tools/mgrep#2 delete ... //depot/projects/ia64/share/man/tools/missing#2 delete ... //depot/projects/ia64/share/man/tools/mklinks#2 delete ... //depot/projects/ia64/share/man/tools/mroff#2 delete ... //depot/projects/ia64/share/man/tools/newsp.errs#2 delete ... //depot/projects/ia64/share/man/tools/noso.c#2 delete ... //depot/projects/ia64/share/man/tools/pages.c#2 delete ... //depot/projects/ia64/share/man/tools/pgcnt#2 delete ... //depot/projects/ia64/share/man/tools/prnames#2 delete ... //depot/projects/ia64/share/man/tools/prsynops#2 delete ... //depot/projects/ia64/share/man/tools/sp.ignore#2 delete ... //depot/projects/ia64/share/man/tools/tocrc#2 delete ... //depot/projects/ia64/sys/boot/sparc64/loader/locore.S#2 integrate ... //depot/projects/ia64/sys/boot/sparc64/loader/main.c#5 integrate ... //depot/projects/ia64/sys/boot/sparc64/loader/metadata.c#4 integrate ... //depot/projects/ia64/sys/conf/files.sparc64#11 integrate ... //depot/projects/ia64/sys/ia64/ia64/machdep.c#40 integrate ... //depot/projects/ia64/sys/ia64/ia64/mca.c#4 integrate ... //depot/projects/ia64/sys/ia64/ia64/mp_machdep.c#17 integrate ... //depot/projects/ia64/sys/ia64/include/mca.h#9 integrate ... //depot/projects/ia64/sys/modules/Makefile#14 integrate ... //depot/projects/ia64/sys/sparc64/include/metadata.h#2 integrate ... //depot/projects/ia64/sys/sparc64/include/pmap.h#4 integrate ... //depot/projects/ia64/sys/sparc64/include/pv.h#5 integrate ... //depot/projects/ia64/sys/sparc64/include/tlb.h#6 integrate ... //depot/projects/ia64/sys/sparc64/include/tsb.h#4 integrate ... //depot/projects/ia64/sys/sparc64/include/tte.h#4 integrate ... //depot/projects/ia64/sys/sparc64/sparc64/genassym.c#10 integrate ... //depot/projects/ia64/sys/sparc64/sparc64/machdep.c#15 integrate ... //depot/projects/ia64/sys/sparc64/sparc64/pmap.c#12 integrate ... //depot/projects/ia64/sys/sparc64/sparc64/pv.c#7 integrate ... //depot/projects/ia64/sys/sparc64/sparc64/trap.c#10 integrate ... //depot/projects/ia64/sys/sparc64/sparc64/tsb.c#5 integrate ... //depot/projects/ia64/sys/sparc64/sparc64/vm_machdep.c#7 integrate ... //depot/projects/ia64/sys/sys/gpt.h#4 integrate ... //depot/projects/ia64/usr.bin/su/su.c#4 integrate Differences ... ==== //depot/projects/ia64/Makefile.inc1#29 (text+ko) ==== @@ -1,5 +1,5 @@ # -# $FreeBSD: src/Makefile.inc1,v 1.286 2002/05/29 00:48:14 peter Exp $ +# $FreeBSD: src/Makefile.inc1,v 1.287 2002/05/29 03:59:20 peter Exp $ # # Make command line options: # -DMAKE_KERBEROS4 to build KerberosIV @@ -572,7 +572,11 @@ .if exists(${.CURDIR}/games) && !defined(NOGAMES) _strfile= games/fortune/strfile .endif +# This horrible kludge should be deleted in about 2 weeks, say July 9, 2002 +_cxx_version!= ${CXX} -v 2>&1 | awk '$$0 ~ /^gcc version/ {print $$3}' +.if ${CXX:T} != "c++" || ${_cxx_version} != "3.1" || exists(/usr/lib/libstdc++.so.4) _cxx_consumers= gnu/usr.bin/gperf gnu/usr.bin/groff +.endif bootstrap-tools: .for _tool in ${_strfile} usr.bin/yacc usr.bin/colldef \ ==== //depot/projects/ia64/share/man/man4/Makefile#10 (text+ko) ==== @@ -1,5 +1,5 @@ # @(#)Makefile 8.1 (Berkeley) 6/18/93 -# $FreeBSD: src/share/man/man4/Makefile,v 1.155 2002/05/20 18:50:58 will Exp $ +# $FreeBSD: src/share/man/man4/Makefile,v 1.156 2002/05/29 06:59:30 brooks Exp $ MAN= aac.4 \ acpi.4 \ @@ -32,6 +32,7 @@ dc.4 \ ddb.4 \ de.4 \ + disc.4 \ divert.4 \ dpt.4 \ dummynet.4 \ ==== //depot/projects/ia64/share/man/man4/faith.4#2 (text+ko) ==== @@ -27,7 +27,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man4/faith.4,v 1.11 2001/09/25 18:40:52 brooks Exp $ +.\" $FreeBSD: src/share/man/man4/faith.4,v 1.12 2002/05/29 06:55:06 brooks Exp $ .\" .Dd April 10, 1999 .Dt FAITH 4 @@ -45,6 +45,18 @@ like .Xr faithd 8 . .Pp +Each +.Nm +interface is created at runtime using interface cloning. +This is +most easily done with the +.Xr ifconfig 8 +.Cm create +command or using the +.Va cloned_interfaces +variable in +.Xr rc.conf 5 . +.Pp Special action will be taken when IPv6 TCP traffic is seen on a router, and routing table suggests to route it to .Nm ==== //depot/projects/ia64/share/man/man4/stf.4#3 (text+ko) ==== @@ -1,4 +1,4 @@ -.\" $FreeBSD: src/share/man/man4/stf.4,v 1.10 2002/01/21 12:09:13 mpp Exp $ +.\" $FreeBSD: src/share/man/man4/stf.4,v 1.11 2002/05/29 06:55:06 brooks Exp $ .\" $KAME: stf.4,v 1.35 2001/05/02 06:24:49 itojun Exp $ .\" .\" Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -57,6 +57,18 @@ .Dq 6to4 router in the specification). .Pp +Each +.Nm +interface is created at runtime using interface cloning. +This is +most easily done with the +.Xr ifconfig 8 +.Cm create +command or using the +.Va cloned_interfaces +variable in +.Xr rc.conf 5 . +.Pp Due to the way 6to4 protocol is specified, .Nm interface requires certain configuration to work properly. ==== //depot/projects/ia64/share/man/man4/vlan.4#4 (text+ko) ==== @@ -23,7 +23,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man4/vlan.4,v 1.7 2002/01/16 16:33:57 ambrisko Exp $ +.\" $FreeBSD: src/share/man/man4/vlan.4,v 1.8 2002/05/29 06:55:06 brooks Exp $ .\" .Dd July 25, 2001 .Dt VLAN 4 @@ -43,6 +43,18 @@ network interfaces, which allows routing/bridging between multiple VLANs through a single switch trunk port. .Pp +Each +.Nm +interface is created at runtime using interface cloning. +This is +most easily done with the +.Xr ifconfig 8 +.Cm create +command or using the +.Va cloned_interfaces +variable in +.Xr rc.conf 5 . +.Pp To function, a .Nm interface must be assigned a parent interface and ==== //depot/projects/ia64/sys/boot/sparc64/loader/locore.S#2 (text+ko) ==== @@ -6,7 +6,7 @@ * As long as the above copyright statement and this notice remain * unchanged, you can do what ever you want with this file. * - * $FreeBSD: src/sys/boot/sparc64/loader/locore.S,v 1.5 2002/04/02 17:10:15 tmm Exp $ + * $FreeBSD: src/sys/boot/sparc64/loader/locore.S,v 1.6 2002/05/29 05:49:58 jake Exp $ */ #define LOCORE @@ -92,7 +92,6 @@ ENTRY(itlb_enter) rdpr %pstate, %o4 wrpr %o4, PSTATE_IE, %pstate - sllx %o0, PAGE_SHIFT, %o0 mov AA_IMMU_TAR, %o3 stxa %o0, [%o3] ASI_IMMU stxa %o1, [%g0] ASI_ITLB_DATA_IN_REG @@ -103,7 +102,6 @@ ENTRY(dtlb_enter) rdpr %pstate, %o4 wrpr %o4, PSTATE_IE, %pstate - sllx %o0, PAGE_SHIFT, %o0 mov AA_DMMU_TAR, %o3 stxa %o0, [%o3] ASI_DMMU stxa %o1, [%g0] ASI_DTLB_DATA_IN_REG ==== //depot/projects/ia64/sys/boot/sparc64/loader/main.c#5 (text+ko) ==== @@ -6,7 +6,7 @@ * As long as the above copyright statement and this notice remain * unchanged, you can do what ever you want with this file. * - * $FreeBSD: src/sys/boot/sparc64/loader/main.c,v 1.10 2002/05/16 21:21:59 trhodes Exp $ + * $FreeBSD: src/sys/boot/sparc64/loader/main.c,v 1.11 2002/05/29 05:49:58 jake Exp $ */ /* * FreeBSD/sparc64 kernel loader - machine dependent part @@ -63,8 +63,8 @@ char __progname[] = "FreeBSD/sparc64 loader"; -struct tte *dtlb_store; -struct tte *itlb_store; +struct tlb_entry *dtlb_store; +struct tlb_entry *itlb_store; int dtlb_slot; int itlb_slot; @@ -240,7 +240,7 @@ mmu_mapin(vm_offset_t va, vm_size_t len) { vm_offset_t pa, mva; - struct tte tte; + u_long data; if (va + len > curkva) curkva = va + len; @@ -275,13 +275,16 @@ panic("mmu_mapin: out of dtlb_slots"); if (itlb_slot >= itlb_slot_max) panic("mmu_mapin: out of itlb_slots"); - tte.tte_vpn = TV_VPN(va); - tte.tte_data = TD_V | TD_4M | TD_PA(pa) | TD_L | TD_CP | + data = TD_V | TD_4M | TD_PA(pa) | TD_L | TD_CP | TD_CV | TD_P | TD_W; - dtlb_store[dtlb_slot++] = tte; - itlb_store[itlb_slot++] = tte; - dtlb_enter(tte.tte_vpn, tte.tte_data); - itlb_enter(tte.tte_vpn, tte.tte_data); + dtlb_store[dtlb_slot].te_pa = pa; + dtlb_store[dtlb_slot].te_va = va; + itlb_store[itlb_slot].te_pa = pa; + itlb_store[itlb_slot].te_va = va; + dtlb_slot++; + itlb_slot++; + dtlb_enter(va, data); + itlb_enter(va, data); pa = (vm_offset_t)-1; } len -= len > PAGE_SIZE_4M ? PAGE_SIZE_4M : len; ==== //depot/projects/ia64/sys/boot/sparc64/loader/metadata.c#4 (text+ko) ==== @@ -24,22 +24,21 @@ * SUCH DAMAGE. * * from: FreeBSD: src/sys/boot/i386/libi386/bootinfo.c,v 1.29 - * $FreeBSD: src/sys/boot/sparc64/loader/metadata.c,v 1.4 2002/04/02 17:10:15 tmm Exp $ + * $FreeBSD: src/sys/boot/sparc64/loader/metadata.c,v 1.5 2002/05/29 05:49:58 jake Exp $ */ #include #include #include #include -#include #include #include "bootstrap.h" #include "libofw.h" -extern struct tte *dtlb_store; -extern struct tte *itlb_store; +extern struct tlb_entry *dtlb_store; +extern struct tlb_entry *itlb_store; extern int dtlb_slot; extern int itlb_slot; @@ -318,10 +317,10 @@ file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof kernend, &kernend); file_addmetadata(kfp, MODINFOMD_DTLB_SLOTS, sizeof dtlb_slots, &dtlb_slots); file_addmetadata(kfp, MODINFOMD_ITLB_SLOTS, sizeof itlb_slots, &itlb_slots); - file_addmetadata(kfp, MODINFOMD_DTLB, dtlb_slots * sizeof(struct tte), - dtlb_store); - file_addmetadata(kfp, MODINFOMD_ITLB, itlb_slots * sizeof(struct tte), - itlb_store); + file_addmetadata(kfp, MODINFOMD_DTLB, + dtlb_slots * sizeof(*dtlb_store), dtlb_store); + file_addmetadata(kfp, MODINFOMD_ITLB, + itlb_slots * sizeof(*itlb_store), itlb_store); *modulep = addr; size = md_copymodules(0); ==== //depot/projects/ia64/sys/conf/files.sparc64#11 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.sparc64,v 1.19 2002/05/20 16:10:17 jake Exp $ +# $FreeBSD: src/sys/conf/files.sparc64,v 1.20 2002/05/29 06:08:45 jake Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -56,7 +56,6 @@ sparc64/sparc64/ofw_bus.c standard sparc64/sparc64/ofw_machdep.c standard sparc64/sparc64/pmap.c standard -sparc64/sparc64/pv.c standard sparc64/sparc64/rwindow.c standard sparc64/sparc64/sparcbus_if.m standard sparc64/sparc64/support.s standard ==== //depot/projects/ia64/sys/ia64/ia64/machdep.c#40 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/ia64/ia64/machdep.c,v 1.104 2002/05/20 05:41:20 marcel Exp $ + * $FreeBSD: src/sys/ia64/ia64/machdep.c,v 1.105 2002/05/29 05:19:07 marcel Exp $ */ #include "opt_compat.h" ==== //depot/projects/ia64/sys/ia64/ia64/mca.c#4 (text+ko) ==== @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/ia64/ia64/mca.c,v 1.2 2002/05/01 22:10:03 marcel Exp $ + * $FreeBSD: src/sys/ia64/ia64/mca.c,v 1.3 2002/05/29 05:19:07 marcel Exp $ */ #include ==== //depot/projects/ia64/sys/ia64/ia64/mp_machdep.c#17 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/ia64/ia64/mp_machdep.c,v 1.38 2002/05/19 04:42:19 marcel Exp $ + * $FreeBSD: src/sys/ia64/ia64/mp_machdep.c,v 1.39 2002/05/29 05:19:07 marcel Exp $ */ #include ==== //depot/projects/ia64/sys/ia64/include/mca.h#9 (text+ko) ==== @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/ia64/include/mca.h,v 1.4 2002/05/22 02:25:06 marcel Exp $ + * $FreeBSD: src/sys/ia64/include/mca.h,v 1.5 2002/05/29 05:19:07 marcel Exp $ */ #ifndef _MACHINE_MCA_H_ ==== //depot/projects/ia64/sys/modules/Makefile#14 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/modules/Makefile,v 1.243 2002/05/19 03:59:06 marcel Exp $ +# $FreeBSD: src/sys/modules/Makefile,v 1.245 2002/05/29 05:09:51 marcel Exp $ .if exists(${.CURDIR}/../crypto) && !defined(NOCRYPT) _random= random @@ -102,7 +102,6 @@ usb \ uscanner \ uvscom \ - vinum \ vpo \ vr \ vx \ @@ -161,6 +160,7 @@ stg \ streams \ vesa \ + vinum \ wi \ xe .endif @@ -168,7 +168,6 @@ .if ${MACHINE_ARCH} == "ia64" SUBDIR+=aic \ arcnet \ - bktr \ ciss \ cm \ coff \ @@ -189,7 +188,8 @@ .if ${MACHINE} == "pc98" SUBDIR+=pmc \ - snc + snc \ + vinum .endif .if ${MACHINE_ARCH} == "alpha" @@ -200,7 +200,8 @@ lomac \ osf1 \ sound \ - sppp + sppp \ + vinum .endif .if defined(WANT_EXT2FS_MODULE) ==== //depot/projects/ia64/sys/sparc64/include/metadata.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/sparc64/include/metadata.h,v 1.2 2002/02/23 17:43:44 jake Exp $ + * $FreeBSD: src/sys/sparc64/include/metadata.h,v 1.3 2002/05/29 05:49:59 jake Exp $ */ #ifndef _MACHINE_METADATA_H_ @@ -37,6 +37,11 @@ #define MODINFOMD_DTLB 0x1006 #define MODINFOMD_ITLB 0x1007 +struct tlb_entry { + vm_offset_t te_pa; + vm_offset_t te_va; +}; + #define MD_FETCH(mdp, info, type) ({ \ type *__p; \ __p = (type *)preload_search_info((mdp), MODINFO_METADATA | (info)); \ ==== //depot/projects/ia64/sys/sparc64/include/pmap.h#4 (text+ko) ==== @@ -37,7 +37,7 @@ * from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90 * from: @(#)pmap.h 7.4 (Berkeley) 5/12/91 * from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30 - * $FreeBSD: src/sys/sparc64/include/pmap.h,v 1.16 2002/04/29 07:43:15 peter Exp $ + * $FreeBSD: src/sys/sparc64/include/pmap.h,v 1.20 2002/05/29 06:12:12 jake Exp $ */ #ifndef _MACHINE_PMAP_H_ @@ -52,21 +52,19 @@ #define PMAP_CONTEXT_MAX 8192 +#define PG_UNCACHEABLE (1<<0) + #define pmap_resident_count(pm) (pm->pm_stats.resident_count) -struct pv_entry; - typedef struct pmap *pmap_t; -typedef struct pv_entry *pv_entry_t; struct md_page { - TAILQ_HEAD(, pv_entry) pv_list; - int pv_list_count; + STAILQ_HEAD(, tte) tte_list; int colors[DCACHE_COLORS]; + int flags; }; struct pmap { - TAILQ_HEAD(,pv_entry) pm_pvlist; struct tte *pm_tsb; vm_object_t pm_tsb_obj; u_int pm_active; @@ -74,14 +72,6 @@ struct pmap_statistics pm_stats; }; -struct pv_entry { - TAILQ_ENTRY(pv_entry) pv_list; - TAILQ_ENTRY(pv_entry) pv_plist; - pmap_t pv_pmap; - vm_offset_t pv_va; - vm_page_t pv_m; -}; - void pmap_bootstrap(vm_offset_t ekva); void pmap_context_rollover(void); vm_offset_t pmap_kextract(vm_offset_t va); @@ -91,8 +81,17 @@ int pmap_cache_enter(vm_page_t m, vm_offset_t va); void pmap_cache_remove(vm_page_t m, vm_offset_t va); +int pmap_remove_tte(struct pmap *pm1, struct pmap *pm2, struct tte *tp, + vm_offset_t va); +int pmap_protect_tte(struct pmap *pm1, struct pmap *pm2, struct tte *tp, + vm_offset_t va); + void pmap_map_tsb(void); +void pmap_remove_all(vm_page_t m); + +void pmap_clear_write(vm_page_t m); + #define vtophys(va) pmap_kextract(((vm_offset_t) (va))) extern vm_offset_t avail_start; ==== //depot/projects/ia64/sys/sparc64/include/pv.h#5 (text+ko) ==== @@ -34,26 +34,16 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/sparc64/include/pv.h,v 1.6 2002/03/21 02:30:26 jeff Exp $ + * $FreeBSD: src/sys/sparc64/include/pv.h,v 1.7 2002/05/29 05:56:05 jake Exp $ */ #ifndef _MACHINE_PV_H_ #define _MACHINE_PV_H_ -extern uma_zone_t pvzone; -extern struct vm_object pvzone_obj; -extern int pv_entry_count; -extern int pv_entry_max; -extern int pv_entry_high_water; -extern struct pv_entry *pvinit; +struct tte; -void *pv_allocf(uma_zone_t zone, int bytes, u_int8_t *flags, int wait); -pv_entry_t pv_alloc(void); -void pv_free(pv_entry_t pv); - -void pv_insert(pmap_t pm, vm_page_t m, vm_offset_t va); -pv_entry_t pv_lookup(pmap_t pm, vm_page_t m, vm_offset_t va); -void pv_remove(pmap_t pm, vm_page_t m, vm_offset_t va); +void pv_insert(pmap_t pm, vm_page_t m, struct tte *tp); +void pv_remove(pmap_t pm, vm_page_t m, struct tte *tp); int pv_page_exists(pmap_t pm, vm_page_t m); void pv_remove_all(vm_page_t m); ==== //depot/projects/ia64/sys/sparc64/include/tlb.h#6 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/sparc64/include/tlb.h,v 1.18 2002/05/21 00:29:02 jake Exp $ + * $FreeBSD: src/sys/sparc64/include/tlb.h,v 1.19 2002/05/29 05:49:59 jake Exp $ */ #ifndef _MACHINE_TLB_H_ @@ -80,8 +80,10 @@ #define MMU_SFSR_W (1L << MMU_SFSR_W_SHIFT) +struct tlb_entry; + extern int kernel_tlb_slots; -extern struct tte *kernel_ttes; +extern struct tlb_entry *kernel_tlbs; void tlb_context_demap(struct pmap *pm); void tlb_page_demap(u_int tlb, struct pmap *pm, vm_offset_t va); ==== //depot/projects/ia64/sys/sparc64/include/tsb.h#4 (text+ko) ==== @@ -26,13 +26,13 @@ * SUCH DAMAGE. * * from: BSDI: pmap.v9.h,v 1.10.2.6 1999/08/23 22:18:44 cp Exp - * $FreeBSD: src/sys/sparc64/include/tsb.h,v 1.13 2002/05/21 02:15:37 jake Exp $ + * $FreeBSD: src/sys/sparc64/include/tsb.h,v 1.14 2002/05/29 06:08:44 jake Exp $ */ #ifndef _MACHINE_TSB_H_ #define _MACHINE_TSB_H_ -#define TSB_PAGES_SHIFT (2) +#define TSB_PAGES_SHIFT (1) #define TSB_PAGES (1 << TSB_PAGES_SHIFT) #define TSB_BSHIFT (TSB_PAGES_SHIFT + PAGE_SHIFT) #define TSB_BSIZE (1UL << TSB_BSHIFT) ==== //depot/projects/ia64/sys/sparc64/include/tte.h#4 (text+ko) ==== @@ -26,13 +26,13 @@ * SUCH DAMAGE. * * from: BSDI: pmap.v9.h,v 1.10.2.6 1999/08/23 22:18:44 cp Exp - * $FreeBSD: src/sys/sparc64/include/tte.h,v 1.10 2002/05/21 00:29:02 jake Exp $ + * $FreeBSD: src/sys/sparc64/include/tte.h,v 1.11 2002/05/29 05:56:05 jake Exp $ */ #ifndef _MACHINE_TTE_H_ #define _MACHINE_TTE_H_ -#define TTE_SHIFT (4) +#define TTE_SHIFT (5) #define TD_SIZE_SHIFT (61) #define TD_SOFT2_SHIFT (50) @@ -98,10 +98,16 @@ (((tp)->tte_data & TD_EXEC) ? (TLB_DTLB | TLB_ITLB) : TLB_DTLB) #define TTE_GET_VA(tp) \ ((tp)->tte_vpn << PAGE_SHIFT) +#define TTE_GET_PMAP(tp) \ + ((tp)->tte_pmap) +#define TTE_ZERO(tp) \ + bzero(tp, sizeof(*tp)) struct tte { u_long tte_vpn; u_long tte_data; + STAILQ_ENTRY(tte) tte_link; + struct pmap *tte_pmap; }; static __inline int ==== //depot/projects/ia64/sys/sparc64/sparc64/genassym.c#10 (text+ko) ==== @@ -24,7 +24,7 @@ * SUCH DAMAGE. * * from: @(#)genassym.c 5.11 (Berkeley) 5/10/91 - * $FreeBSD: src/sys/sparc64/sparc64/genassym.c,v 1.33 2002/05/25 02:39:28 jake Exp $ + * $FreeBSD: src/sys/sparc64/sparc64/genassym.c,v 1.34 2002/05/29 06:08:44 jake Exp $ */ #include @@ -61,7 +61,6 @@ #include #include #include -#include #include #include #include ==== //depot/projects/ia64/sys/sparc64/sparc64/machdep.c#15 (text+ko) ==== @@ -37,7 +37,7 @@ * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 * from: FreeBSD: src/sys/i386/i386/machdep.c,v 1.477 2001/08/27 - * $FreeBSD: src/sys/sparc64/sparc64/machdep.c,v 1.51 2002/05/25 02:39:28 jake Exp $ + * $FreeBSD: src/sys/sparc64/sparc64/machdep.c,v 1.52 2002/05/29 05:49:59 jake Exp $ */ #include "opt_ddb.h" @@ -107,7 +107,7 @@ typedef int ofw_vec_t(void *); -struct tte *kernel_ttes; +struct tlb_entry *kernel_tlbs; int kernel_tlb_slots; int physmem; @@ -229,7 +229,7 @@ end = MD_FETCH(kmdp, MODINFOMD_KERNEND, vm_offset_t); kernel_tlb_slots = MD_FETCH(kmdp, MODINFOMD_DTLB_SLOTS, int); - kernel_ttes = (struct tte *)preload_search_info(kmdp, + kernel_tlbs = (void *)preload_search_info(kmdp, MODINFO_METADATA | MODINFOMD_DTLB); } } ==== //depot/projects/ia64/sys/sparc64/sparc64/pmap.c#12 (text+ko) ==== @@ -39,7 +39,7 @@ * SUCH DAMAGE. * * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 - * $FreeBSD: src/sys/sparc64/sparc64/pmap.c,v 1.53 2002/05/21 02:14:11 jake Exp $ + * $FreeBSD: src/sys/sparc64/sparc64/pmap.c,v 1.58 2002/05/29 06:12:13 jake Exp $ */ /* @@ -94,7 +94,7 @@ #include #include #include -#include +#include #include #include #include @@ -172,10 +172,6 @@ */ #define PMAP_TSB_THRESH ((TSB_SIZE / 2) * PAGE_SIZE) -/* Callbacks for tsb_foreach. */ -static tsb_callback_t pmap_remove_tte; -static tsb_callback_t pmap_protect_tte; - #ifdef PMAP_STATS static long pmap_enter_nupdate; static long pmap_enter_nreplace; @@ -310,8 +306,8 @@ * pmap_kextract() will work for them. */ for (i = 0; i < kernel_tlb_slots; i++) { - va = TTE_GET_VA(&kernel_ttes[i]); - pa = TTE_GET_PA(&kernel_ttes[i]); + pa = kernel_tlbs[i].te_pa; + va = kernel_tlbs[i].te_va; for (off = 0; off < PAGE_SIZE_4M; off += PAGE_SIZE) { tp = tsb_kvtotte(va + off); tp->tte_vpn = TV_VPN(va + off); @@ -396,7 +392,6 @@ for (i = 0; i < MAXCPU; i++) pm->pm_context[i] = TLB_CTX_KERNEL; pm->pm_active = ~0; - TAILQ_INIT(&pm->pm_pvlist); /* XXX flush all non-locked tlb entries */ } @@ -521,8 +516,8 @@ vm_page_t m; m = &vm_page_array[i]; - TAILQ_INIT(&m->md.pv_list); - m->md.pv_list_count = 0; + STAILQ_INIT(&m->md.tte_list); + m->md.flags = 0; } for (i = 0; i < translations_size; i++) { @@ -536,10 +531,6 @@ panic("pmap_init: vm_map_find"); } - pvzone = uma_zcreate("PV ENTRY", sizeof (struct pv_entry), - NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); - uma_zone_set_allocf(pvzone, pv_allocf); - uma_prealloc(pvzone, vm_page_array_size); pmap_initialized = TRUE; } @@ -551,13 +542,6 @@ void pmap_init2(void) { - int shpgperproc; - - shpgperproc = PMAP_SHPGPERPROC; - TUNABLE_INT_FETCH("vm.pmap.shpgperproc", &shpgperproc); - pv_entry_max = shpgperproc * maxproc + vm_page_array_size; - pv_entry_high_water = 9 * (pv_entry_max / 10); - uma_zone_set_obj(pvzone, &pvzone_obj, pv_entry_max); } /* @@ -597,10 +581,7 @@ pmap_cache_enter(vm_page_t m, vm_offset_t va) { struct tte *tp; - vm_offset_t pa; - pv_entry_t pv; - int c; - int i; + int c, i; CTR2(KTR_PMAP, "pmap_cache_enter: m=%p va=%#lx", m, va); PMAP_STATS_INC(pmap_ncache_enter); @@ -619,21 +600,21 @@ return (0); } CTR0(KTR_PMAP, "pmap_cache_enter: marking uncacheable"); - TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) { - if ((tp = tsb_tte_lookup(pv->pv_pmap, pv->pv_va)) != NULL) { - atomic_clear_long(&tp->tte_data, TD_CV); - tlb_page_demap(TLB_DTLB | TLB_ITLB, pv->pv_pmap, - pv->pv_va); - } + STAILQ_FOREACH(tp, &m->md.tte_list, tte_link) { + tp->tte_data &= ~TD_CV; + tlb_page_demap(TLB_DTLB | TLB_ITLB, TTE_GET_PMAP(tp), + TTE_GET_VA(tp)); } - pa = VM_PAGE_TO_PHYS(m); - dcache_page_inval(pa); + dcache_page_inval(VM_PAGE_TO_PHYS(m)); + m->md.flags |= PG_UNCACHEABLE; return (0); } void pmap_cache_remove(vm_page_t m, vm_offset_t va) { + struct tte *tp; + int c, i; CTR3(KTR_PMAP, "pmap_cache_remove: m=%p va=%#lx c=%d", m, va, m->md.colors[DCACHE_COLOR(va)]); @@ -641,6 +622,18 @@ ("pmap_cache_remove: no mappings %d <= 0", m->md.colors[DCACHE_COLOR(va)])); m->md.colors[DCACHE_COLOR(va)]--; + for (i = 0, c = 0; i < DCACHE_COLORS; i++) { + if (m->md.colors[i] != 0) + c++; + } + if (c != 1 || (m->md.flags & PG_UNCACHEABLE) == 0) + return; + STAILQ_FOREACH(tp, &m->md.tte_list, tte_link) { + tp->tte_data |= TD_CV; + tlb_page_demap(TLB_DTLB | TLB_ITLB, TTE_GET_PMAP(tp), + TTE_GET_VA(tp)); + } + m->md.flags &= ~PG_UNCACHEABLE; } /* @@ -649,14 +642,31 @@ void pmap_kenter(vm_offset_t va, vm_offset_t pa) { + vm_offset_t ova; struct tte *tp; + vm_page_t om; + vm_page_t m; + u_long data; tp = tsb_kvtotte(va); + m = PHYS_TO_VM_PAGE(pa); CTR4(KTR_PMAP, "pmap_kenter: va=%#lx pa=%#lx tp=%p data=%#lx", va, pa, tp, tp->tte_data); + if ((tp->tte_data & TD_V) != 0) { + om = PHYS_TO_VM_PAGE(TTE_GET_PA(tp)); + ova = TTE_GET_VA(tp); + STAILQ_REMOVE(&om->md.tte_list, tp, tte, tte_link); + pmap_cache_remove(om, ova); + if (va != ova) + tlb_page_demap(TLB_DTLB, kernel_pmap, ova); + } + data = TD_V | TD_8K | TD_PA(pa) | TD_REF | TD_SW | TD_CP | TD_P | TD_W; + if (pmap_cache_enter(m, va) != 0) + data |= TD_CV; tp->tte_vpn = TV_VPN(va); - tp->tte_data = TD_V | TD_8K | TD_PA(pa) | TD_REF | TD_SW | TD_CP | - TD_CV | TD_P | TD_W; + tp->tte_data = data; + STAILQ_INSERT_TAIL(&m->md.tte_list, tp, tte_link); + tp->tte_pmap = kernel_pmap; } /* @@ -696,13 +706,15 @@ pmap_kremove(vm_offset_t va) { struct tte *tp; + vm_page_t m; tp = tsb_kvtotte(va); CTR3(KTR_PMAP, "pmap_kremove: va=%#lx tp=%p data=%#lx", va, tp, tp->tte_data); - atomic_clear_long(&tp->tte_data, TD_V); - tp->tte_vpn = 0; - tp->tte_data = 0; + m = PHYS_TO_VM_PAGE(TTE_GET_PA(tp)); + STAILQ_REMOVE(&m->md.tte_list, tp, tte, tte_link); + pmap_cache_remove(m, va); + TTE_ZERO(tp); } /* @@ -1100,7 +1112,6 @@ pm->pm_active = 0; pm->pm_tsb = NULL; pm->pm_tsb_obj = NULL; - TAILQ_INIT(&pm->pm_pvlist); bzero(&pm->pm_stats, sizeof(pm->pm_stats)); } @@ -1148,7 +1159,6 @@ for (i = 0; i < MAXCPU; i++) pm->pm_context[i] = -1; pm->pm_active = 0; - TAILQ_INIT(&pm->pm_pvlist); bzero(&pm->pm_stats, sizeof(pm->pm_stats)); } @@ -1173,8 +1183,6 @@ pm->pm_context[PCPU_GET(cpuid)], pm->pm_tsb); obj = pm->pm_tsb_obj; KASSERT(obj->ref_count == 1, ("pmap_release: tsbobj ref count != 1")); - KASSERT(TAILQ_EMPTY(&pm->pm_pvlist), - ("pmap_release: leaking pv entries")); KASSERT(pmap_resident_count(pm) == 0, ("pmap_release: resident pages %ld != 0", pmap_resident_count(pm))); @@ -1206,32 +1214,16 @@ void pmap_collect(void) { - static int warningdone; - vm_page_t m; - int i; - - if (pmap_pagedaemon_waken == 0) - return; - if (warningdone++ < 5) - printf("pmap_collect: collecting pv entries -- suggest" - "increasing PMAP_SHPGPERPROC\n"); - for (i = 0; i < vm_page_array_size; i++) { - m = &vm_page_array[i]; - if (m->wire_count || m->hold_count || m->busy || - (m->flags & (PG_BUSY | PG_UNMANAGED))) - continue; - pv_remove_all(m); - } - pmap_pagedaemon_waken = 0; } -static int +int pmap_remove_tte(struct pmap *pm, struct pmap *pm2, struct tte *tp, vm_offset_t va) { vm_page_t m; m = PHYS_TO_VM_PAGE(TTE_GET_PA(tp)); + STAILQ_REMOVE(&m->md.tte_list, tp, tte, tte_link); if ((tp->tte_data & TD_WIRED) != 0) pm->pm_stats.wired_count--; if ((tp->tte_data & TD_PV) != 0) { @@ -1240,12 +1232,12 @@ vm_page_dirty(m); if ((tp->tte_data & TD_REF) != 0) vm_page_flag_set(m, PG_REFERENCED); - pv_remove(pm, m, va); - pmap_cache_remove(m, va); + if (STAILQ_EMPTY(&m->md.tte_list)) + vm_page_flag_clear(m, PG_MAPPED | PG_WRITEABLE); + pm->pm_stats.resident_count--; } - atomic_clear_long(&tp->tte_data, TD_V); - tp->tte_vpn = 0; - tp->tte_data = 0; + pmap_cache_remove(m, va); + TTE_ZERO(tp); if (PMAP_REMOVE_DONE(pm)) return (0); return (1); @@ -1278,7 +1270,41 @@ } } -static int +void +pmap_remove_all(vm_page_t m) +{ + struct pmap *pm; + struct tte *tpn; + struct tte *tp; + vm_offset_t va; + + KASSERT((m->flags & (PG_FICTITIOUS|PG_UNMANAGED)) == 0, + ("pv_remove_all: illegal for unmanaged page %#lx", + VM_PAGE_TO_PHYS(m))); + for (tp = STAILQ_FIRST(&m->md.tte_list); tp != NULL; tp = tpn) { + tpn = STAILQ_NEXT(tp, tte_link); + if ((tp->tte_data & TD_PV) == 0) + continue; >>> TRUNCATED FOR MAIL (1000 lines) <<< To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message