Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 May 2002 01:07:45 -0700 (PDT)
From:      Peter Wemm <peter@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 12053 for review
Message-ID:  <200205290807.g4T87jv47741@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
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 <stand.h>
 #include <sys/param.h>
 #include <sys/reboot.h>
 #include <sys/linker.h>
-#include <machine/tte.h>
 
 #include <machine/metadata.h>
 
 #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 <sys/param.h>

==== //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 <sys/param.h>

==== //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 <sys/param.h>
@@ -61,7 +61,6 @@
 #include <machine/setjmp.h>
 #include <machine/sigframe.h>
 #include <machine/smp.h>
-#include <machine/pv.h>
 #include <machine/tte.h>
 #include <machine/tlb.h>
 #include <machine/tsb.h>

==== //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 <machine/cache.h>
 #include <machine/frame.h>
 #include <machine/md_var.h>
-#include <machine/pv.h>
+#include <machine/metadata.h>
 #include <machine/smp.h>
 #include <machine/tlb.h>
 #include <machine/tte.h>
@@ -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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200205290807.g4T87jv47741>