PERFORCE change 57686 for review

Doug Rabson dfr at FreeBSD.org
Mon Jul 19 01:43:02 PDT 2004


http://perforce.freebsd.org/chv.cgi?CH=57686

Change 57686 by dfr at dfr_home on 2004/07/19 08:42:50

	IFC

Affected files ...

.. //depot/projects/kse/lib/libc/amd64/gen/Makefile.inc#3 integrate
.. //depot/projects/kse/lib/libc/amd64/gen/flt_rounds.c#1 branch
.. //depot/projects/kse/lib/libc/gen/Makefile.inc#8 integrate
.. //depot/projects/kse/lib/libc/gen/signbit.3#2 delete
.. //depot/projects/kse/lib/libc/gen/signbit.c#2 delete
.. //depot/projects/kse/lib/libc/i386/gen/Makefile.inc#6 integrate
.. //depot/projects/kse/lib/libc/i386/gen/flt_rounds.c#1 branch
.. //depot/projects/kse/lib/libc/ia64/gen/Makefile.inc#4 integrate
.. //depot/projects/kse/lib/libc/ia64/gen/flt_rounds.c#1 branch
.. //depot/projects/kse/lib/libc/regex/grot/debug.c#2 integrate
.. //depot/projects/kse/lib/libc/regex/grot/limits.h#2 delete
.. //depot/projects/kse/lib/libc/regex/grot/stdlib.h#2 delete
.. //depot/projects/kse/sys/amd64/include/float.h#5 integrate
.. //depot/projects/kse/sys/arm/include/float.h#2 integrate
.. //depot/projects/kse/sys/geom/nop/g_nop.c#3 integrate
.. //depot/projects/kse/sys/geom/nop/g_nop.h#2 integrate
.. //depot/projects/kse/sys/i386/i386/machdep.c#65 integrate
.. //depot/projects/kse/sys/i386/include/float.h#6 integrate
.. //depot/projects/kse/sys/ia64/ia64/pmap.c#37 integrate
.. //depot/projects/kse/sys/ia64/include/float.h#6 integrate
.. //depot/projects/kse/sys/ia64/include/pmap.h#11 integrate
.. //depot/projects/kse/sys/kern/kern_malloc.c#18 integrate
.. //depot/projects/kse/sys/powerpc/conf/GENERIC.hints#1 branch
.. //depot/projects/kse/sys/powerpc/include/float.h#5 integrate
.. //depot/projects/kse/sys/powerpc/include/ucontext.h#3 integrate
.. //depot/projects/kse/sys/sys/malloc.h#12 integrate
.. //depot/projects/kse/sys/vm/vm_contig.c#13 integrate
.. //depot/projects/kse/sys/vm/vm_page.h#17 integrate
.. //depot/projects/kse/tools/regression/lib/msun/test-fenv.c#2 integrate

Differences ...

==== //depot/projects/kse/lib/libc/amd64/gen/Makefile.inc#3 (text+ko) ====

@@ -1,8 +1,8 @@
 #	@(#)Makefile.inc	8.1 (Berkeley) 6/4/93
-# $FreeBSD: src/lib/libc/amd64/gen/Makefile.inc,v 1.26 2004/07/18 21:23:38 das Exp $
+# $FreeBSD: src/lib/libc/amd64/gen/Makefile.inc,v 1.27 2004/07/19 08:17:24 das Exp $
 
 SRCS+=	_setjmp.S rfork_thread.S setjmp.S sigsetjmp.S \
 	fabs.S modf.S \
 	infinity.c ldexp.c makecontext.c signalcontext.c \
-	fpgetmask.c fpsetmask.c fpgetprec.c fpsetprec.c \
+	flt_rounds.c fpgetmask.c fpsetmask.c fpgetprec.c fpsetprec.c \
 	fpgetround.c fpsetround.c fpgetsticky.c fpsetsticky.c

==== //depot/projects/kse/lib/libc/gen/Makefile.inc#8 (text+ko) ====

@@ -1,5 +1,5 @@
 #	@(#)Makefile.inc	8.6 (Berkeley) 5/4/95
-# $FreeBSD: src/lib/libc/gen/Makefile.inc,v 1.113 2004/07/18 21:23:39 das Exp $
+# $FreeBSD: src/lib/libc/gen/Makefile.inc,v 1.114 2004/07/19 08:16:10 das Exp $
 
 # machine-independent gen sources
 .PATH: ${.CURDIR}/${MACHINE_ARCH}/gen ${.CURDIR}/gen
@@ -25,8 +25,7 @@
 	raise.c readdir.c readpassphrase.c rewinddir.c \
 	scandir.c seed48.c seekdir.c sem.c semctl.c \
 	setdomainname.c sethostname.c setjmperr.c setmode.c \
-	setproctitle.c setprogname.c \
-	siginterrupt.c siglist.c signal.c signbit.c \
+	setproctitle.c setprogname.c siginterrupt.c siglist.c signal.c \
 	sigsetops.c sleep.c srand48.c statvfs.c stringlist.c strtofflags.c \
 	sysconf.c sysctl.c sysctlbyname.c sysctlnametomib.c \
 	syslog.c telldir.c termios.c time.c times.c timezone.c tls.c \
@@ -58,7 +57,7 @@
 	scandir.3 sem_destroy.3 sem_getvalue.3 sem_init.3 \
 	sem_open.3 sem_post.3 sem_wait.3 \
 	setjmp.3 setmode.3 setproctitle.3 shm_open.3 \
-	siginterrupt.3 signal.3 signbit.3 sigsetops.3 sleep.3 \
+	siginterrupt.3 signal.3 sigsetops.3 sleep.3 \
 	statvfs.3 stringlist.3 \
 	strtofflags.3 sysconf.3 sysctl.3 syslog.3 tcgetpgrp.3 \
 	tcsendbreak.3 tcsetattr.3 tcsetpgrp.3 time.3 times.3 timezone.3 \

==== //depot/projects/kse/lib/libc/i386/gen/Makefile.inc#6 (text+ko) ====

@@ -1,6 +1,6 @@
 #	@(#)Makefile.inc	8.1 (Berkeley) 6/4/93
-# $FreeBSD: src/lib/libc/i386/gen/Makefile.inc,v 1.20 2004/07/18 21:23:39 das Exp $
+# $FreeBSD: src/lib/libc/i386/gen/Makefile.inc,v 1.21 2004/07/19 08:17:24 das Exp $
 
 SRCS+=	_ctx_start.S _setjmp.S alloca.S fabs.S \
-	infinity.c ldexp.c makecontext.c modf.S \
+	flt_rounds.c infinity.c ldexp.c makecontext.c modf.S \
 	rfork_thread.S setjmp.S signalcontext.c sigsetjmp.S

==== //depot/projects/kse/lib/libc/ia64/gen/Makefile.inc#4 (text+ko) ====

@@ -1,8 +1,9 @@
-# $FreeBSD: src/lib/libc/ia64/gen/Makefile.inc,v 1.10 2004/07/18 21:23:39 das Exp $
+# $FreeBSD: src/lib/libc/ia64/gen/Makefile.inc,v 1.11 2004/07/19 08:17:24 das Exp $
 
 SRCS+=	__divdf3.S __divdi3.S __divsf3.S __divsi3.S __moddi3.S __modsi3.S \
 	__udivdi3.S __udivsi3.S __umoddi3.S __umodsi3.S _setjmp.S fabs.S \
-	fpgetmask.c fpgetround.c fpsetmask.c fpsetround.c infinity.c \
+	flt_rounds.c fpgetmask.c fpgetround.c fpsetmask.c \
+	fpsetround.c infinity.c \
 	ldexp.c makecontext.c modf.c setjmp.S signalcontext.c sigsetjmp.S
 
 # The following may go away if function _Unwind_FindTableEntry()

==== //depot/projects/kse/lib/libc/regex/grot/debug.c#2 (text+ko) ====

@@ -1,5 +1,5 @@
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/regex/grot/debug.c,v 1.3 2002/03/22 21:52:48 obrien Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/regex/grot/debug.c,v 1.4 2004/07/19 08:28:53 tjr Exp $");
 
 #include <stdio.h>
 #include <string.h>
@@ -8,6 +8,8 @@
 #include <stdlib.h>
 #include <sys/types.h>
 #include <regex.h>
+#include <wchar.h>
+#include <wctype.h>
 
 #include "utils.h"
 #include "regex2.h"
@@ -26,10 +28,8 @@
 	int i;
 	int c;
 	int last;
-	int nincat[NC];
 
-	fprintf(d, "%ld states, %d categories", (long)g->nstates,
-							g->ncategories);
+	fprintf(d, "%ld states", (long)g->nstates);
 	fprintf(d, ", first %ld last %ld", (long)g->firststate,
 						(long)g->laststate);
 	if (g->iflags&USEBOL)
@@ -49,41 +49,6 @@
 		fprintf(d, ", nplus %ld", (long)g->nplus);
 	fprintf(d, "\n");
 	s_print(g, d);
-	for (i = 0; i < g->ncategories; i++) {
-		nincat[i] = 0;
-		for (c = CHAR_MIN; c <= CHAR_MAX; c++)
-			if (g->categories[c] == i)
-				nincat[i]++;
-	}
-	fprintf(d, "cc0#%d", nincat[0]);
-	for (i = 1; i < g->ncategories; i++)
-		if (nincat[i] == 1) {
-			for (c = CHAR_MIN; c <= CHAR_MAX; c++)
-				if (g->categories[c] == i)
-					break;
-			fprintf(d, ", %d=%s", i, regchar(c));
-		}
-	fprintf(d, "\n");
-	for (i = 1; i < g->ncategories; i++)
-		if (nincat[i] != 1) {
-			fprintf(d, "cc%d\t", i);
-			last = -1;
-			for (c = CHAR_MIN; c <= CHAR_MAX+1; c++)	/* +1 does flush */
-				if (c <= CHAR_MAX && g->categories[c] == i) {
-					if (last < 0) {
-						fprintf(d, "%s", regchar(c));
-						last = c;
-					}
-				} else {
-					if (last >= 0) {
-						if (last != c-1)
-							fprintf(d, "-%s",
-								regchar(c-1));
-						last = -1;
-					}
-				}
-			fprintf(d, "\n");
-		}
 }
 
 /*
@@ -148,6 +113,7 @@
 			break;
 		case OANYOF:
 			fprintf(d, "[(%ld)", (long)opnd);
+#if 0
 			cs = &g->sets[opnd];
 			last = -1;
 			for (i = 0; i < g->csetsize+1; i++)	/* +1 flushes */
@@ -164,6 +130,7 @@
 						last = -1;
 					}
 				}
+#endif
 			fprintf(d, "]");
 			break;
 		case OBACK_:

==== //depot/projects/kse/sys/amd64/include/float.h#5 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)float.h	7.1 (Berkeley) 5/8/90
- * $FreeBSD: src/sys/amd64/include/float.h,v 1.13 2004/07/08 01:32:25 peter Exp $
+ * $FreeBSD: src/sys/amd64/include/float.h,v 1.14 2004/07/19 08:17:24 das Exp $
  */
 
 #ifndef _MACHINE_FLOAT_H_
@@ -35,8 +35,12 @@
 
 #include <sys/cdefs.h>
 
+__BEGIN_DECLS
+extern int __flt_rounds(void);
+__END_DECLS
+
 #define FLT_RADIX	2		/* b */
-#define FLT_ROUNDS	1		/* FP addition rounds to nearest */
+#define FLT_ROUNDS	__flt_rounds()
 #if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	(-1)		/* i387 semantics are...interesting */
 #define	DECIMAL_DIG	21		/* max precision in decimal digits */

==== //depot/projects/kse/sys/arm/include/float.h#2 (text+ko) ====

@@ -31,15 +31,15 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)float.h	7.1 (Berkeley) 5/8/90
- * $FreeBSD: src/sys/arm/include/float.h,v 1.1 2004/05/14 11:46:44 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/float.h,v 1.3 2004/07/19 08:24:04 das Exp $
  */
 
 #ifndef _MACHINE_FLOAT_H_
 #define _MACHINE_FLOAT_H_ 1
 
 #define FLT_RADIX	2		/* b */
-#define FLT_ROUNDS	1		/* FP addition rounds to nearest */
-#define	FLT_EVAL_METHOD	(-1)		/* i387 semantics are...interesting */
+#define FLT_ROUNDS	(-1)		/* indeterminate */
+#define	FLT_EVAL_METHOD	(-1)		/* XXX */
 #define	DECIMAL_DIG	21		/* max precision in decimal digits */
 
 #define FLT_MANT_DIG	24		/* p */

==== //depot/projects/kse/sys/geom/nop/g_nop.c#3 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/nop/g_nop.c,v 1.4 2004/06/07 13:40:40 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/nop/g_nop.c,v 1.5 2004/07/19 07:52:56 pjd Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -72,11 +72,13 @@
 static void
 g_nop_start(struct bio *bp)
 {
+	struct g_nop_softc *sc;
 	struct g_geom *gp;
 	struct g_provider *pp;
 	struct bio *cbp;
 
 	gp = bp->bio_to->geom;
+	sc = gp->softc;
 	G_NOP_LOGREQ(bp, "Request received.");
 	cbp = g_clone_bio(bp);
 	if (cbp == NULL) {
@@ -85,17 +87,17 @@
 	}
 	pp = LIST_FIRST(&gp->provider);
 	KASSERT(pp != NULL, ("NULL pp"));
-	if (pp->index > 0) {
+	if (sc->sc_failprob > 0) {
 		u_int rval;
 
 		rval = arc4random() % 100;
-		if (rval < pp->index) {
+		if (rval < sc->sc_failprob) {
 			g_io_deliver(bp, EIO);
 			return;
 		}
 	}
 	cbp->bio_done = g_std_done;
-	cbp->bio_offset = bp->bio_offset;
+	cbp->bio_offset = bp->bio_offset + sc->sc_offset;
 	cbp->bio_data = bp->bio_data;
 	cbp->bio_length = bp->bio_length;
 	cbp->bio_to = LIST_FIRST(&gp->provider);
@@ -119,8 +121,9 @@
 
 static int
 g_nop_create(struct gctl_req *req, struct g_class *mp, struct g_provider *pp,
-    u_int failprob)
+    u_int failprob, off_t offset, off_t size)
 {
+	struct g_nop_softc *sc;
 	struct g_geom *gp;
 	struct g_provider *newpp;
 	struct g_consumer *cp;
@@ -133,6 +136,24 @@
 	newpp = NULL;
 	cp = NULL;
 
+	if ((offset % pp->sectorsize) != 0) {
+		gctl_error(req, "Invalid offset for provider %s.", pp->name);
+		return (EINVAL);
+	}
+	if ((size % pp->sectorsize) != 0) {
+		gctl_error(req, "Invalid size for provider %s.", pp->name);
+		return (EINVAL);
+	}
+	if (offset >= pp->mediasize) {
+		gctl_error(req, "Invalid offset for provider %s.", pp->name);
+		return (EINVAL);
+	}
+	if (size == 0)
+		size = pp->mediasize - offset;
+	if (offset + size > pp->mediasize) {
+		gctl_error(req, "Invalid size for provider %s.", pp->name);
+		return (EINVAL);
+	}
 	snprintf(name, sizeof(name), "%s%s", pp->name, G_NOP_SUFFIX);
 	LIST_FOREACH(gp, &mp->geom, geom) {
 		if (strcmp(gp->name, name) == 0) {
@@ -145,7 +166,10 @@
 		gctl_error(req, "Cannot create geom %s.", name);
 		return (ENOMEM);
 	}
-	gp->softc = NULL;
+	sc = g_malloc(sizeof(*sc), M_WAITOK);
+	sc->sc_offset = offset;
+	sc->sc_failprob = failprob;
+	gp->softc = sc;
 	gp->start = g_nop_start;
 	gp->spoiled = g_nop_orphan;
 	gp->orphan = g_nop_orphan;
@@ -158,9 +182,8 @@
 		error = ENOMEM;
 		goto fail;
 	}
-	newpp->mediasize = pp->mediasize;
+	newpp->mediasize = size;
 	newpp->sectorsize = pp->sectorsize;
-	newpp->index = failprob;
 
 	cp = g_new_consumer(gp);
 	if (cp == NULL) {
@@ -185,8 +208,11 @@
 	}
 	if (newpp != NULL)
 		g_destroy_provider(pp);
-	if (gp != NULL)
+	if (gp != NULL) {
+		if (gp->softc != NULL)
+			g_free(gp->softc);
 		g_destroy_geom(gp);
+	}
 	return (error);
 }
 
@@ -209,6 +235,8 @@
 	} else {
 		G_NOP_DEBUG(0, "Device %s removed.", gp->name);
 	}
+	g_free(gp->softc);
+	gp->softc = NULL;
 	g_wither_geom(gp, ENXIO);
 
 	return (0);
@@ -225,7 +253,7 @@
 g_nop_ctl_create(struct gctl_req *req, struct g_class *mp)
 {
 	struct g_provider *pp;
-	intmax_t *failprob;
+	intmax_t *failprob, *offset, *size;
 	const char *name;
 	char param[16];
 	int i, *nargs;
@@ -250,6 +278,24 @@
 		gctl_error(req, "Invalid '%s' argument", "failprob");
 		return;
 	}
+	offset = gctl_get_paraml(req, "offset", sizeof(*offset));
+	if (offset == NULL) {
+		gctl_error(req, "No '%s' argument", "offset");
+		return;
+	}
+	if (*offset < 0) {
+		gctl_error(req, "Invalid '%s' argument", "offset");
+		return;
+	}
+	size = gctl_get_paraml(req, "size", sizeof(*size));
+	if (size == NULL) {
+		gctl_error(req, "No '%s' argument", "size");
+		return;
+	}
+	if (*size < 0) {
+		gctl_error(req, "Invalid '%s' argument", "size");
+		return;
+	}
 
 	for (i = 0; i < *nargs; i++) {
 		snprintf(param, sizeof(param), "arg%d", i);
@@ -266,14 +312,17 @@
 			gctl_error(req, "Provider %s is invalid.", name);
 			return; 
 		}
-		if (g_nop_create(req, mp, pp, (u_int)*failprob) != 0)
+		if (g_nop_create(req, mp, pp, (u_int)*failprob, (off_t)*offset,
+		    (off_t)*size) != 0) {
 			return;
+		}
 	}
 }
 
 static void
 g_nop_ctl_configure(struct gctl_req *req, struct g_class *mp)
 {
+	struct g_nop_softc *sc;
 	struct g_provider *pp;
 	intmax_t *failprob;
 	const char *name;
@@ -316,7 +365,8 @@
 			gctl_error(req, "Provider %s is invalid.", name);
 			return; 
 		}
-		pp->index = (u_int)*failprob;
+		sc = pp->geom->softc;
+		sc->sc_failprob = (u_int)*failprob;
 	}
 }
 
@@ -416,11 +466,14 @@
 g_nop_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp,
     struct g_consumer *cp, struct g_provider *pp)
 {
+	struct g_nop_softc *sc;
 
-	if (pp != NULL) {
-		sbuf_printf(sb, "%s<failprob>%u</failprob>\n", indent,
-		    pp->index);
-	}
+	if (pp == NULL)
+		return;
+	sc = gp->softc;
+	sbuf_printf(sb, "%s<offset>%jd</offset>\n", indent,
+	    (intmax_t)sc->sc_offset);
+	sbuf_printf(sb, "%s<failprob>%u</failprob>\n", indent, sc->sc_failprob);
 }
 
 DECLARE_GEOM_CLASS(g_nop_class, g_nop);

==== //depot/projects/kse/sys/geom/nop/g_nop.h#2 (text+ko) ====

@@ -23,14 +23,14 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/geom/nop/g_nop.h,v 1.2 2004/05/21 15:23:48 pjd Exp $
+ * $FreeBSD: src/sys/geom/nop/g_nop.h,v 1.3 2004/07/19 07:52:56 pjd Exp $
  */
 
 #ifndef	_G_NOP_H_
 #define	_G_NOP_H_
 
 #define	G_NOP_CLASS_NAME	"NOP"
-#define	G_NOP_VERSION		1
+#define	G_NOP_VERSION		2
 #define	G_NOP_SUFFIX		".nop"
 
 #ifdef _KERNEL
@@ -53,6 +53,11 @@
 		printf("\n");						\
 	}								\
 } while (0)
+
+struct g_nop_softc {
+	off_t	sc_offset;
+	u_int	sc_failprob;
+};
 #endif	/* _KERNEL */
 
 #endif	/* _G_NOP_H_ */

==== //depot/projects/kse/sys/i386/i386/machdep.c#65 (text+ko) ====

@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/machdep.c,v 1.595 2004/07/13 07:22:54 davidxu Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/machdep.c,v 1.596 2004/07/19 02:46:34 silby Exp $");
 
 #include "opt_apic.h"
 #include "opt_atalk.h"
@@ -95,6 +95,9 @@
 #include <sys/cons.h>
 
 #ifdef DDB
+#ifndef KDB
+#error KDB must be enabled in order for DDB to work!
+#endif
 #include <ddb/ddb.h>
 #include <ddb/db_sym.h>
 #endif

==== //depot/projects/kse/sys/i386/include/float.h#6 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)float.h	7.1 (Berkeley) 5/8/90
- * $FreeBSD: src/sys/i386/include/float.h,v 1.13 2004/06/28 03:08:17 imp Exp $
+ * $FreeBSD: src/sys/i386/include/float.h,v 1.14 2004/07/19 08:17:25 das Exp $
  */
 
 #ifndef _MACHINE_FLOAT_H_
@@ -35,8 +35,12 @@
 
 #include <sys/cdefs.h>
 
+__BEGIN_DECLS
+extern int __flt_rounds(void);
+__END_DECLS
+
 #define FLT_RADIX	2		/* b */
-#define FLT_ROUNDS	1		/* FP addition rounds to nearest */
+#define FLT_ROUNDS	__flt_rounds()
 #if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	(-1)		/* i387 semantics are...interesting */
 #define	DECIMAL_DIG	21		/* max precision in decimal digits */

==== //depot/projects/kse/sys/ia64/ia64/pmap.c#37 (text+ko) ====

@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ia64/ia64/pmap.c,v 1.141 2004/07/16 03:42:45 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/ia64/ia64/pmap.c,v 1.142 2004/07/19 05:39:49 alc Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -445,6 +445,7 @@
 	/*
 	 * Initialize the kernel pmap (which is statically allocated).
 	 */
+	PMAP_LOCK_INIT(kernel_pmap);
 	for (i = 0; i < 5; i++)
 		kernel_pmap->pm_rid[i] = 0;
 	kernel_pmap->pm_active = 1;
@@ -698,6 +699,7 @@
 {
 	int i;
 
+	PMAP_LOCK_INIT(pmap);
 	for (i = 0; i < 5; i++)
 		pmap->pm_rid[i] = pmap_allocate_rid();
 	pmap->pm_active = 0;
@@ -722,6 +724,7 @@
 	for (i = 0; i < 5; i++)
 		if (pmap->pm_rid[i])
 			pmap_free_rid(pmap->pm_rid[i]);
+	PMAP_LOCK_DESTROY(pmap);
 }
 
 /*
@@ -1339,6 +1342,7 @@
 		return;
 
 	vm_page_lock_queues();
+	PMAP_LOCK(pmap);
 	oldpmap = pmap_install(pmap);
 
 	/*
@@ -1374,6 +1378,7 @@
 
 out:
 	pmap_install(oldpmap);
+	PMAP_UNLOCK(pmap);
 	vm_page_unlock_queues();
 }
 
@@ -1414,6 +1419,7 @@
 		pmap_t pmap = pv->pv_pmap;
 		vm_offset_t va = pv->pv_va;
 
+		PMAP_LOCK(pmap);
 		oldpmap = pmap_install(pmap);
 		pte = pmap_find_vhpt(va);
 		KASSERT(pte != NULL, ("pte"));
@@ -1422,6 +1428,7 @@
 		pmap_remove_pte(pmap, pte, va, pv, 1);
 		pmap_invalidate_page(pmap, va);
 		pmap_install(oldpmap);
+		PMAP_UNLOCK(pmap);
 	}
 
 	vm_page_flag_clear(m, PG_WRITEABLE);
@@ -1458,6 +1465,7 @@
 		panic("pmap_protect: unaligned addresses");
 
 	vm_page_lock_queues();
+	PMAP_LOCK(pmap);
 	oldpmap = pmap_install(pmap);
 	while (sva < eva) {
 		/* 
@@ -1491,6 +1499,7 @@
 		sva += PAGE_SIZE;
 	}
 	pmap_install(oldpmap);
+	PMAP_UNLOCK(pmap);
 	vm_page_unlock_queues();
 }
 
@@ -1704,6 +1713,7 @@
 	if (pmap == NULL)
 		return;
 
+	PMAP_LOCK(pmap);
 	oldpmap = pmap_install(pmap);
 
 	pte = pmap_find_vhpt(va);
@@ -1720,6 +1730,7 @@
 	pmap_pte_set_w(pte, wired);
 
 	pmap_install(oldpmap);
+	PMAP_UNLOCK(pmap);
 }
 
 
@@ -1854,6 +1865,7 @@
 #endif
 
 	vm_page_lock_queues();
+	PMAP_LOCK(pmap);
 	for (pv = TAILQ_FIRST(&pmap->pm_pvlist);
 		pv;
 		pv = npv) {
@@ -1874,6 +1886,7 @@
 	}
 
 	pmap_invalidate_all(pmap);
+	PMAP_UNLOCK(pmap);
 	vm_page_unlock_queues();
 }
 

==== //depot/projects/kse/sys/ia64/include/float.h#6 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/ia64/include/float.h,v 1.6 2004/04/25 02:36:29 das Exp $ */
+/* $FreeBSD: src/sys/ia64/include/float.h,v 1.7 2004/07/19 08:17:25 das Exp $ */
 /* From: NetBSD: float.h,v 1.6 1997/07/17 21:36:03 thorpej Exp */
 
 /*
@@ -35,8 +35,12 @@
 
 #include <sys/cdefs.h>
 
+__BEGIN_DECLS
+extern int __flt_rounds(void);
+__END_DECLS
+
 #define FLT_RADIX	2		/* b */
-#define FLT_ROUNDS	1		/* FP addition rounds to nearest */
+#define FLT_ROUNDS	__flt_rounds()
 #if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	0		/* no promotions */
 #define	DECIMAL_DIG	35		/* max precision in decimal digits */

==== //depot/projects/kse/sys/ia64/include/pmap.h#11 (text+ko) ====

@@ -39,13 +39,15 @@
  *	from: hp300: @(#)pmap.h	7.2 (Berkeley) 12/16/90
  *	from: @(#)pmap.h	7.4 (Berkeley) 5/12/91
  *	from: i386 pmap.h,v 1.54 1997/11/20 19:30:35 bde Exp
- * $FreeBSD: src/sys/ia64/include/pmap.h,v 1.21 2004/07/16 03:42:45 alc Exp $
+ * $FreeBSD: src/sys/ia64/include/pmap.h,v 1.22 2004/07/19 05:39:49 alc Exp $
  */
 
 #ifndef _MACHINE_PMAP_H_
 #define	_MACHINE_PMAP_H_
 
 #include <sys/queue.h>
+#include <sys/_lock.h>
+#include <sys/_mutex.h>
 #include <machine/pte.h>
 
 #ifdef _KERNEL
@@ -70,6 +72,7 @@
 };
 
 struct pmap {
+	struct mtx		pm_mtx;
 	TAILQ_HEAD(,pv_entry)	pm_pvlist;	/* list of mappings in pmap */
 	u_int32_t		pm_rid[5];	/* base RID for pmap */
 	int			pm_active;	/* active flag */
@@ -81,6 +84,17 @@
 #ifdef _KERNEL
 extern struct pmap	kernel_pmap_store;
 #define kernel_pmap	(&kernel_pmap_store)
+
+#define	PMAP_LOCK(pmap)		mtx_lock(&(pmap)->pm_mtx)
+#define	PMAP_LOCK_ASSERT(pmap, type) \
+				mtx_assert(&(pmap)->pm_mtx, (type))
+#define	PMAP_LOCK_DESTROY(pmap)	mtx_destroy(&(pmap)->pm_mtx)
+#define	PMAP_LOCK_INIT(pmap)	mtx_init(&(pmap)->pm_mtx, "pmap", \
+				    NULL, MTX_DEF)
+#define	PMAP_LOCKED(pmap)	mtx_owned(&(pmap)->pm_mtx)
+#define	PMAP_MTX(pmap)		(&(pmap)->pm_mtx)
+#define	PMAP_TRYLOCK(pmap)	mtx_trylock(&(pmap)->pm_mtx)
+#define	PMAP_UNLOCK(pmap)	mtx_unlock(&(pmap)->pm_mtx)
 #endif
 
 /*

==== //depot/projects/kse/sys/kern/kern_malloc.c#18 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_malloc.c,v 1.134 2004/07/10 21:36:01 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_malloc.c,v 1.135 2004/07/19 06:21:26 green Exp $");
 
 #include "opt_vm.h"
 
@@ -176,6 +176,47 @@
 }
 
 /*
+ * Add this to the informational malloc_type bucket.
+ */
+static void
+malloc_type_zone_allocated(struct malloc_type *ksp, unsigned long size,
+    int zindx)
+{
+	mtx_lock(&ksp->ks_mtx);
+	ksp->ks_calls++;
+	if (zindx != -1)
+		ksp->ks_size |= 1 << zindx;
+	if (size != 0) {
+		ksp->ks_memuse += size;
+		ksp->ks_inuse++;
+		if (ksp->ks_memuse > ksp->ks_maxused)
+			ksp->ks_maxused = ksp->ks_memuse;
+	}
+	mtx_unlock(&ksp->ks_mtx);
+}
+
+void
+malloc_type_allocated(struct malloc_type *ksp, unsigned long size)
+{
+	malloc_type_zone_allocated(ksp, size, -1);
+}
+
+/*
+ * Remove this allocation from the informational malloc_type bucket.
+ */
+void
+malloc_type_freed(struct malloc_type *ksp, unsigned long size)
+{
+	mtx_lock(&ksp->ks_mtx);
+	KASSERT(size <= ksp->ks_memuse,
+		("malloc(9)/free(9) confusion.\n%s",
+		 "Probably freeing with wrong type, but maybe not here."));
+	ksp->ks_memuse -= size;
+	ksp->ks_inuse--;
+	mtx_unlock(&ksp->ks_mtx);
+}
+
+/*
  *	malloc:
  *
  *	Allocate a block of memory.
@@ -196,7 +237,6 @@
 #ifdef DIAGNOSTIC
 	unsigned long osize = size;
 #endif
-	register struct malloc_type *ksp = type;
 
 #ifdef INVARIANTS
 	/*
@@ -242,29 +282,16 @@
 		krequests[size >> KMEM_ZSHIFT]++;
 #endif
 		va = uma_zalloc(zone, flags);
-		mtx_lock(&ksp->ks_mtx);
-		if (va == NULL) 
-			goto out;
-
-		ksp->ks_size |= 1 << indx;
-		size = keg->uk_size;
+		if (va != NULL)
+			size = keg->uk_size;
+		malloc_type_zone_allocated(type, va == NULL ? 0 : size, indx);
 	} else {
 		size = roundup(size, PAGE_SIZE);
 		zone = NULL;
 		keg = NULL;
 		va = uma_large_malloc(size, flags);
-		mtx_lock(&ksp->ks_mtx);
-		if (va == NULL)
-			goto out;
+		malloc_type_allocated(type, va == NULL ? 0 : size);
 	}
-	ksp->ks_memuse += size;
-	ksp->ks_inuse++;
-out:
-	ksp->ks_calls++;
-	if (ksp->ks_memuse > ksp->ks_maxused)
-		ksp->ks_maxused = ksp->ks_memuse;
-
-	mtx_unlock(&ksp->ks_mtx);
 	if (flags & M_WAITOK)
 		KASSERT(va != NULL, ("malloc(M_WAITOK) returned NULL"));
 	else if (va == NULL)
@@ -289,7 +316,6 @@
 	void *addr;
 	struct malloc_type *type;
 {
-	register struct malloc_type *ksp = type;
 	uma_slab_t slab;
 	u_long size;
 
@@ -297,7 +323,7 @@
 	if (addr == NULL)
 		return;
 
-	KASSERT(ksp->ks_memuse > 0,
+	KASSERT(type->ks_memuse > 0,
 		("malloc(9)/free(9) confusion.\n%s",
 		 "Probably freeing with wrong type, but maybe not here."));
 	size = 0;
@@ -334,13 +360,7 @@
 		size = slab->us_size;
 		uma_large_free(slab);
 	}
-	mtx_lock(&ksp->ks_mtx);
-	KASSERT(size <= ksp->ks_memuse,
-		("malloc(9)/free(9) confusion.\n%s",
-		 "Probably freeing with wrong type, but maybe not here."));
-	ksp->ks_memuse -= size;
-	ksp->ks_inuse--;
-	mtx_unlock(&ksp->ks_mtx);
+	malloc_type_freed(type, size);
 }
 
 /*

==== //depot/projects/kse/sys/powerpc/include/float.h#5 (text+ko) ====

@@ -28,7 +28,7 @@
  *
  *	from: @(#)float.h	7.1 (Berkeley) 5/8/90
  *	from: FreeBSD: src/sys/i386/include/float.h,v 1.8 1999/08/28 00:44:11
- * $FreeBSD: src/sys/powerpc/include/float.h,v 1.5 2004/04/25 02:36:29 das Exp $
+ * $FreeBSD: src/sys/powerpc/include/float.h,v 1.6 2004/07/19 08:17:25 das Exp $
  */
 
 #ifndef _MACHINE_FLOAT_H_
@@ -36,8 +36,12 @@
 
 #include <sys/cdefs.h>
 
+__BEGIN_DECLS
+extern int __flt_rounds(void);
+__END_DECLS
+
 #define FLT_RADIX	2		/* b */
-#define FLT_ROUNDS	1		/* FP addition rounds to nearest */
+#define FLT_ROUNDS	__flt_rounds()
 #if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	1		/* operands promoted to double */
 #define	DECIMAL_DIG	35		/* max precision in decimal digits */

==== //depot/projects/kse/sys/powerpc/include/ucontext.h#3 (text+ko) ====

@@ -29,7 +29,7 @@
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $NetBSD: signal.h,v 1.4 1998/09/14 02:48:34 thorpej Exp $
- * $FreeBSD: src/sys/powerpc/include/ucontext.h,v 1.3 2004/03/02 06:13:08 grehan Exp $
+ * $FreeBSD: src/sys/powerpc/include/ucontext.h,v 1.4 2004/07/19 07:21:46 grehan Exp $
  */
 
 #ifndef	_MACHINE_UCONTEXT_H_
@@ -68,5 +68,6 @@
 #define mc_vrsave	mc_av[1]
 
 #define _MC_VERSION	0x1
+#define _MC_VERSION_KSE 0xee	/* partial ucontext for libpthread */
 
 #endif	/* !_MACHINE_UCONTEXT_H_ */

==== //depot/projects/kse/sys/sys/malloc.h#12 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)malloc.h	8.5 (Berkeley) 5/3/95
- * $FreeBSD: src/sys/sys/malloc.h,v 1.76 2004/04/07 04:19:49 imp Exp $
+ * $FreeBSD: src/sys/sys/malloc.h,v 1.77 2004/07/19 06:21:26 green Exp $
  */
 
 #ifndef _SYS_MALLOC_H_
@@ -105,6 +105,8 @@
 void	*malloc(unsigned long size, struct malloc_type *type, int flags);
 void	malloc_init(void *);
 int	malloc_last_fail(void);
+void	malloc_type_allocated(struct malloc_type *type, unsigned long size);
+void	malloc_type_freed(struct malloc_type *type, unsigned long size);
 void	malloc_uninit(void *);
 void	*realloc(void *addr, unsigned long size, struct malloc_type *type,
 	    int flags);

==== //depot/projects/kse/sys/vm/vm_contig.c#13 (text+ko) ====

@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/vm/vm_contig.c,v 1.35 2004/06/15 01:02:00 green Exp $");
+__FBSDID("$FreeBSD: src/sys/vm/vm_contig.c,v 1.36 2004/07/19 06:21:27 green Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -68,6 +68,9 @@
 #include <sys/malloc.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>
+#include <sys/kernel.h>
+#include <sys/linker_set.h>
+#include <sys/sysctl.h>
 #include <sys/vmmeter.h>
 #include <sys/vnode.h>
 
@@ -83,49 +86,62 @@
 #include <vm/vm_extern.h>
 
 static int
-vm_contig_launder(int queue)
+vm_contig_launder_page(vm_page_t m)
 {
 	vm_object_t object;
-	vm_page_t m, m_tmp, next;
+	vm_page_t m_tmp;
 	struct vnode *vp;
 
+	if (vm_page_sleep_if_busy(m, TRUE, "vpctw0")) {
+		vm_page_lock_queues();
+		return (EBUSY);
+	}
+	if (!VM_OBJECT_TRYLOCK(m->object))
+		return (EAGAIN);
+	vm_page_test_dirty(m);
+	if (m->dirty == 0 && m->hold_count == 0)
+		pmap_remove_all(m);
+	if (m->dirty) {
+		object = m->object;
+		if (object->type == OBJT_VNODE) {
+			vm_page_unlock_queues();
+			vp = object->handle;
+			VM_OBJECT_UNLOCK(object);
+			vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread);
+			VM_OBJECT_LOCK(object);
+			vm_object_page_clean(object, 0, 0, OBJPC_SYNC);
+			VM_OBJECT_UNLOCK(object);
+			VOP_UNLOCK(vp, 0, curthread);
+			vm_page_lock_queues();
+			return (0);
+		} else if (object->type == OBJT_SWAP ||
+			   object->type == OBJT_DEFAULT) {
+			m_tmp = m;
+			vm_pageout_flush(&m_tmp, 1, VM_PAGER_PUT_SYNC);
+			VM_OBJECT_UNLOCK(object);
+			return (0);
+		}
+	} else if (m->hold_count == 0)
+		vm_page_cache(m);
+	VM_OBJECT_UNLOCK(m->object);
+	return (0);
+}
+
+static int
+vm_contig_launder(int queue)
+{
+	vm_page_t m, next;
+	int error;
+
 	for (m = TAILQ_FIRST(&vm_page_queues[queue].pl); m != NULL; m = next) {
 		next = TAILQ_NEXT(m, pageq);
 		KASSERT(m->queue == queue,
 		    ("vm_contig_launder: page %p's queue is not %d", m, queue));
-		if (!VM_OBJECT_TRYLOCK(m->object))
-			continue;

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list