Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 11 Jul 2004 18:13:45 GMT
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 57097 for review
Message-ID:  <200407111813.i6BIDjdJ081296@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=57097

Change 57097 by marcel@marcel_nfs on 2004/07/11 18:12:52

	IFC @57096

Affected files ...

.. //depot/projects/gdb/UPDATING#21 integrate
.. //depot/projects/gdb/games/bcd/Makefile#2 integrate
.. //depot/projects/gdb/games/bcd/bcd.c#2 integrate
.. //depot/projects/gdb/lib/libc/regex/regcomp.c#2 integrate
.. //depot/projects/gdb/lib/libc/regex/regex2.h#2 integrate
.. //depot/projects/gdb/share/man/man9/sx.9#5 integrate
.. //depot/projects/gdb/sys/amd64/isa/clock.c#7 integrate
.. //depot/projects/gdb/sys/contrib/ipfilter/netinet/ip_fil.c#5 integrate
.. //depot/projects/gdb/sys/dev/cx/if_cx.c#13 integrate
.. //depot/projects/gdb/sys/dev/cy/cy.c#12 integrate
.. //depot/projects/gdb/sys/dev/digi/digi.c#12 integrate
.. //depot/projects/gdb/sys/dev/digi/digi.h#4 integrate
.. //depot/projects/gdb/sys/dev/fdc/fdc_pccard.c#2 integrate
.. //depot/projects/gdb/sys/dev/rc/rc.c#11 integrate
.. //depot/projects/gdb/sys/dev/rp/rp.c#8 integrate
.. //depot/projects/gdb/sys/dev/rp/rpvar.h#2 integrate
.. //depot/projects/gdb/sys/dev/si/si.c#9 integrate
.. //depot/projects/gdb/sys/dev/si/si.h#3 integrate
.. //depot/projects/gdb/sys/dev/sio/sio.c#20 integrate
.. //depot/projects/gdb/sys/dev/sx/sx.c#8 integrate
.. //depot/projects/gdb/sys/dev/sx/sx.h#3 integrate
.. //depot/projects/gdb/sys/doc/Doxyfile#1 branch
.. //depot/projects/gdb/sys/doc/Makefile#1 branch
.. //depot/projects/gdb/sys/i386/isa/clock.c#13 integrate
.. //depot/projects/gdb/sys/kern/device_if.m#2 integrate
.. //depot/projects/gdb/sys/kern/subr_kdb.c#19 integrate
.. //depot/projects/gdb/sys/kern/tty.c#13 integrate
.. //depot/projects/gdb/sys/pc98/conf/GENERIC#8 integrate
.. //depot/projects/gdb/sys/pc98/pc98/clock.c#6 integrate
.. //depot/projects/gdb/sys/pc98/pc98/sio.c#17 integrate
.. //depot/projects/gdb/sys/sys/param.h#19 integrate
.. //depot/projects/gdb/sys/sys/sx.h#3 integrate
.. //depot/projects/gdb/sys/sys/tty.h#12 integrate
.. //depot/projects/gdb/sys/tools/makeobjops.awk#3 integrate
.. //depot/projects/gdb/usr.bin/split/split.1#2 integrate
.. //depot/projects/gdb/usr.bin/split/split.c#2 integrate

Differences ...

==== //depot/projects/gdb/UPDATING#21 (text+ko) ====

@@ -17,6 +17,36 @@
 	developers choose to disable these features on build machines
 	to maximize performance.
 
+20040710:
+	__FreeBSD_version bumped to 502122.
+
+20040710:
+	The console initialization on Alpha has been reworked and is now
+	identical to other platforms. This means that the hardcoding of
+	the serial console and the debug port has been removed. As such,
+	hints are now required for the sio(4) driver to become a console
+	or debug port. The NO_SIO option has been decommissioned because
+	of this.
+
+20040710:
+	A revamp of the debugging code in the kernel with some visible
+	changes beyond just the debugging experience:
+	o  The DDB option is now specific to the DDB debugger backend
+	   and should not be used any more for conditional compilation
+	   of debugging code for when debugging is enabled. Use the KDB
+	   option for this.
+	o  The WITNESS_DDB, DDB_TRACE and DDB_UNATTENDED options have
+	   been renamed to WITNESS_KDB, KDB_TRACE and KDB_UNATTENDED
+	   respectively. This is in line with the first bullet.
+	o  The remote GDB support has been untangled from DDB and needs
+	   to be enabled seperately now. Use the GDB option for this.
+	o  The GDB_REMOTE_CHAT option has been removed. Support for this
+	   homegrown feature is discontinued. The GDB remote protocol
+	   supports console output and it makes sense to use that. 
+	o  The DDB_NOKLDSYM option has been removed. The DDB debugger
+	   now supports both direct symbol table lookups as well as KLD
+	   symbol lookups through the linker.
+
 20040708:
 	Bluetooth code has been marked as non-i386 specific.
 	__FreeBSD_version has been bumped to 502121 to mark this change.
@@ -24,7 +54,7 @@
 20040702:
 	The native preemption has been added to the kernel scheduler.
 	There is some report that ULE scheduler was broken in some
-	machines and we encourage users using ULE schedluer either
+	machines and we encourage users using ULE scheduler either
 	stick with an known good kernel, or temporary switch to 4BSD
 	scheduler as a workaround.
 
@@ -1684,4 +1714,4 @@
 Contact Warner Losh if you have any questions about your use of
 this document.
 
-$FreeBSD: src/UPDATING,v 1.323 2004/07/09 16:57:24 emax Exp $
+$FreeBSD: src/UPDATING,v 1.325 2004/07/11 13:26:44 simon Exp $

==== //depot/projects/gdb/games/bcd/Makefile#2 (text+ko) ====

@@ -1,7 +1,8 @@
 #	@(#)Makefile	8.1 (Berkeley) 5/31/93
-# $FreeBSD: src/games/bcd/Makefile,v 1.5 2001/03/26 14:20:54 ru Exp $
+# $FreeBSD: src/games/bcd/Makefile,v 1.6 2004/07/11 17:26:18 stefanf Exp $
 
 PROG=	bcd
+WARNS?=	6
 MAN=	bcd.6
 MLINKS=	bcd.6 ppt.6
 

==== //depot/projects/gdb/games/bcd/bcd.c#2 (text+ko) ====

@@ -45,7 +45,7 @@
 static char sccsid[] = "@(#)bcd.c	8.2 (Berkeley) 3/20/94";
 #endif
 static const char rcsid[] =
- "$FreeBSD: src/games/bcd/bcd.c,v 1.8 1999/11/30 03:48:41 billf Exp $";
+ "$FreeBSD: src/games/bcd/bcd.c,v 1.9 2004/07/11 17:26:18 stefanf Exp $";
 #endif /* not lint */
 
 /*
@@ -80,9 +80,11 @@
 
 #include <sys/types.h>
 
+#include <ctype.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
-#include <ctype.h>
+#include <unistd.h>
 
 u_short holes[256] = {
     0x0,	 0x0,	  0x0,	   0x0,	    0x0,     0x0,     0x0,     0x0,
@@ -119,15 +121,15 @@
     0x202,	 0x201,	  0x082,   0x806,   0x822,   0x600,   0x282,   0x0
 };
 
+void printcard(char *);
+
 /*
  * i'th bit of w.
  */
 #define	bit(w,i)	((w)&(1<<(i)))
 
 int
-main(argc, argv)
-	int argc;
-	char **argv;
+main(int argc, char **argv)
 {
 	char cardline[80];
 
@@ -150,16 +152,15 @@
 
 #define	COLUMNS	48
 
-printcard(str)
-	char *str;
+void
+printcard(char *str)
 {
 	static char rowchars[] = "   123456789";
 	int i, row;
 	char *p;
-	char *index();
 
 	/* ruthlessly remove newlines and truncate at 48 characters. */
-	if ((p = index(str, '\n')))
+	if ((p = strchr(str, '\n')))
 		*p = '\0';
 
 	if (strlen(str) > COLUMNS)
@@ -183,7 +184,7 @@
 	p = str;
 	putchar('/');
 	for (i = 1; *p; i++, p++)
-		if (holes[*p])
+		if (holes[(unsigned char)*p])
 			putchar(*p);
 		else
 			putchar(' ');
@@ -201,7 +202,7 @@
 	for (row = 0; row <= 11; ++row) {
 		putchar('|');
 		for (i = 0, p = str; *p; i++, p++) {
-			if (bit(holes[*p], 11 - row))
+			if (bit(holes[(unsigned char)*p], 11 - row))
 				putchar(']');
 			else
 				putchar(rowchars[row]);

==== //depot/projects/gdb/lib/libc/regex/regcomp.c#2 (text+ko) ====

@@ -41,7 +41,7 @@
 static char sccsid[] = "@(#)regcomp.c	8.5 (Berkeley) 3/20/94";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/regex/regcomp.c,v 1.30 2003/02/16 17:29:10 nectar Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/regex/regcomp.c,v 1.31 2004/07/11 05:58:31 tjr Exp $");
 
 #include <sys/types.h>
 #include <stdio.h>
@@ -106,17 +106,6 @@
 static int freezeset(struct parse *p, cset *cs);
 static int firstch(struct parse *p, cset *cs);
 static int nch(struct parse *p, cset *cs);
-static void mcadd(struct parse *p, cset *cs, char *cp) __unused;
-#if used
-static void mcsub(cset *cs, char *cp);
-static int mcin(cset *cs, char *cp);
-static char *mcfind(cset *cs, char *cp);
-#endif
-static void mcinvert(struct parse *p, cset *cs);
-static void mccase(struct parse *p, cset *cs);
-static int isinsets(struct re_guts *g, int c);
-static int samesets(struct re_guts *g, int c1, int c2);
-static void categorize(struct parse *p, struct re_guts *g);
 static sopno dupl(struct parse *p, sopno start, sopno finish);
 static void doemit(struct parse *p, sop op, size_t opnd);
 static void doinsert(struct parse *p, sop op, size_t opnd, sopno pos);
@@ -124,7 +113,7 @@
 static void enlarge(struct parse *p, sopno size);
 static void stripsnug(struct parse *p, struct re_guts *g);
 static void findmust(struct parse *p, struct re_guts *g);
-static int altoffset(sop *scan, int offset, int mccs);
+static int altoffset(sop *scan, int offset);
 static void computejumps(struct parse *p, struct re_guts *g);
 static void computematchjumps(struct parse *p, struct re_guts *g);
 static sopno pluscount(struct parse *p, struct re_guts *g);
@@ -216,8 +205,7 @@
 		len = strlen((char *)pattern);
 
 	/* do the mallocs early so failure handling is easy */
-	g = (struct re_guts *)malloc(sizeof(struct re_guts) +
-							(NC-1)*sizeof(cat_t));
+	g = (struct re_guts *)malloc(sizeof(struct re_guts));
 	if (g == NULL)
 		return(REG_ESPACE);
 	p->ssize = len/(size_t)2*(size_t)3 + (size_t)1;	/* ugh */
@@ -252,9 +240,6 @@
 	g->matchjump = NULL;
 	g->mlen = 0;
 	g->nsub = 0;
-	g->ncategories = 1;	/* category 0 is "everything else" */
-	g->categories = &g->catspace[-(CHAR_MIN)];
-	(void) memset((char *)g->catspace, 0, NC*sizeof(cat_t));
 	g->backrefs = 0;
 
 	/* do it */
@@ -270,7 +255,6 @@
 	g->laststate = THERE();
 
 	/* tidy up loose ends and fill things in */
-	categorize(p, g);
 	stripsnug(p, g);
 	findmust(p, g);
 	/* only use Boyer-Moore algorithm if the pattern is bigger
@@ -516,9 +500,7 @@
  * Giving end1 as OUT essentially eliminates the end1/end2 check.
  *
  * This implementation is a bit of a kludge, in that a trailing $ is first
- * taken as an ordinary character and then revised to be an anchor.  The
- * only undesirable side effect is that '$' gets included as a character
- * category in such cases.  This is fairly harmless; not worth fixing.
+ * taken as an ordinary character and then revised to be an anchor.
  * The amount of lookahead needed to avoid this kludge is excessive.
  */
 static void
@@ -739,8 +721,6 @@
 				if (ci != i)
 					CHadd(cs, ci);
 			}
-		if (cs->multis != NULL)
-			mccase(p, cs);
 	}
 	if (invert) {
 		int i;
@@ -752,12 +732,8 @@
 				CHadd(cs, i);
 		if (p->g->cflags&REG_NEWLINE)
 			CHsub(cs, '\n');
-		if (cs->multis != NULL)
-			mcinvert(p, cs);
 	}
 
-	assert(cs->multis == NULL);		/* xxx */
-
 	if (nch(p, cs) == 1) {		/* optimize singleton sets */
 		ordinary(p, firstch(p, cs));
 		freeset(p, cs);
@@ -812,7 +788,6 @@
 		(void)REQUIRE(EATTWO('=', ']'), REG_ECOLLATE);
 		break;
 	default:		/* symbol, ordinary character, or range */
-/* xxx revision needed for multichar stuff */
 		start = p_b_symbol(p);
 		if (SEE('-') && MORE2() && PEEK2() != ']') {
 			/* range */
@@ -932,10 +907,6 @@
 				CHadd(cs, c);
 		break;
 	}
-#if 0
-	for (u = cp->multis; *u != '\0'; u += strlen(u) + 1)
-		MCadd(p, cs, u);
-#endif
 }
 
 /*
@@ -1059,15 +1030,11 @@
 struct parse *p;
 int ch;
 {
-	cat_t *cap = p->g->categories;
 
 	if ((p->g->cflags&REG_ICASE) && isalpha((uch)ch) && othercase(ch) != ch)
 		bothcases(p, ch);
-	else {
+	else
 		EMIT(OCHAR, (uch)ch);
-		if (cap[ch] == 0)
-			cap[ch] = p->g->ncategories++;
-	}
 }
 
 /*
@@ -1233,8 +1200,6 @@
 	cs->ptr = p->g->setbits + css*((no)/CHAR_BIT);
 	cs->mask = 1 << ((no) % CHAR_BIT);
 	cs->hash = 0;
-	cs->smultis = 0;
-	cs->multis = NULL;
 
 	return(cs);
 }
@@ -1337,193 +1302,6 @@
 }
 
 /*
- - mcadd - add a collating element to a cset
- == static void mcadd(struct parse *p, cset *cs, \
- ==	char *cp);
- */
-static void
-mcadd(p, cs, cp)
-struct parse *p;
-cset *cs;
-char *cp;
-{
-	size_t oldend = cs->smultis;
-
-	cs->smultis += strlen(cp) + 1;
-	if (cs->multis == NULL)
-		cs->multis = malloc(cs->smultis);
-	else
-		cs->multis = reallocf(cs->multis, cs->smultis);
-	if (cs->multis == NULL) {
-		SETERROR(REG_ESPACE);
-		return;
-	}
-
-	(void) strcpy(cs->multis + oldend - 1, cp);
-	cs->multis[cs->smultis - 1] = '\0';
-}
-
-#if used
-/*
- - mcsub - subtract a collating element from a cset
- == static void mcsub(cset *cs, char *cp);
- */
-static void
-mcsub(cs, cp)
-cset *cs;
-char *cp;
-{
-	char *fp = mcfind(cs, cp);
-	size_t len = strlen(fp);
-
-	assert(fp != NULL);
-	(void) memmove(fp, fp + len + 1,
-				cs->smultis - (fp + len + 1 - cs->multis));
-	cs->smultis -= len;
-
-	if (cs->smultis == 0) {
-		free(cs->multis);
-		cs->multis = NULL;
-		return;
-	}
-
-	cs->multis = reallocf(cs->multis, cs->smultis);
-	assert(cs->multis != NULL);
-}
-
-/*
- - mcin - is a collating element in a cset?
- == static int mcin(cset *cs, char *cp);
- */
-static int
-mcin(cs, cp)
-cset *cs;
-char *cp;
-{
-	return(mcfind(cs, cp) != NULL);
-}
-
-/*
- - mcfind - find a collating element in a cset
- == static char *mcfind(cset *cs, char *cp);
- */
-static char *
-mcfind(cs, cp)
-cset *cs;
-char *cp;
-{
-	char *p;
-
-	if (cs->multis == NULL)
-		return(NULL);
-	for (p = cs->multis; *p != '\0'; p += strlen(p) + 1)
-		if (strcmp(cp, p) == 0)
-			return(p);
-	return(NULL);
-}
-#endif
-
-/*
- - mcinvert - invert the list of collating elements in a cset
- == static void mcinvert(struct parse *p, cset *cs);
- *
- * This would have to know the set of possibilities.  Implementation
- * is deferred.
- */
-static void
-mcinvert(p, cs)
-struct parse *p;
-cset *cs;
-{
-	assert(cs->multis == NULL);	/* xxx */
-}
-
-/*
- - mccase - add case counterparts of the list of collating elements in a cset
- == static void mccase(struct parse *p, cset *cs);
- *
- * This would have to know the set of possibilities.  Implementation
- * is deferred.
- */
-static void
-mccase(p, cs)
-struct parse *p;
-cset *cs;
-{
-	assert(cs->multis == NULL);	/* xxx */
-}
-
-/*
- - isinsets - is this character in any sets?
- == static int isinsets(struct re_guts *g, int c);
- */
-static int			/* predicate */
-isinsets(g, c)
-struct re_guts *g;
-int c;
-{
-	uch *col;
-	int i;
-	int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;
-	unsigned uc = (uch)c;
-
-	for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)
-		if (col[uc] != 0)
-			return(1);
-	return(0);
-}
-
-/*
- - samesets - are these two characters in exactly the same sets?
- == static int samesets(struct re_guts *g, int c1, int c2);
- */
-static int			/* predicate */
-samesets(g, c1, c2)
-struct re_guts *g;
-int c1;
-int c2;
-{
-	uch *col;
-	int i;
-	int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT;
-	unsigned uc1 = (uch)c1;
-	unsigned uc2 = (uch)c2;
-
-	for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize)
-		if (col[uc1] != col[uc2])
-			return(0);
-	return(1);
-}
-
-/*
- - categorize - sort out character categories
- == static void categorize(struct parse *p, struct re_guts *g);
- */
-static void
-categorize(p, g)
-struct parse *p;
-struct re_guts *g;
-{
-	cat_t *cats = g->categories;
-	int c;
-	int c2;
-	cat_t cat;
-
-	/* avoid making error situations worse */
-	if (p->error != 0)
-		return;
-
-	for (c = CHAR_MIN; c <= CHAR_MAX; c++)
-		if (cats[c] == 0 && isinsets(g, c)) {
-			cat = g->ncategories++;
-			cats[c] = cat;
-			for (c2 = c+1; c2 <= CHAR_MAX; c2++)
-				if (cats[c2] == 0 && samesets(g, c, c2))
-					cats[c2] = cat;
-		}
-}
-
-/*
  - dupl - emit a duplicate of a bunch of sops
  == static sopno dupl(struct parse *p, sopno start, sopno finish);
  */
@@ -1698,18 +1476,11 @@
 	char *cp;
 	sopno i;
 	int offset;
-	int cs, mccs;
 
 	/* avoid making error situations worse */
 	if (p->error != 0)
 		return;
 
-	/* Find out if we can handle OANYOF or not */
-	mccs = 0;
-	for (cs = 0; cs < g->ncsets; cs++)
-		if (g->sets[cs].multis != NULL)
-			mccs = 1;
-
 	/* find the longest OCHAR sequence in strip */
 	newlen = 0;
 	offset = 0;
@@ -1729,7 +1500,7 @@
 			break;
 		case OQUEST_:		/* things that must be skipped */
 		case OCH_:
-			offset = altoffset(scan, offset, mccs);
+			offset = altoffset(scan, offset);
 			scan--;
 			do {
 				scan += OPND(s);
@@ -1797,11 +1568,6 @@
 			if (offset > -1)
 				offset++;
 			newlen = 0;
-			/* And, now, if we found out we can't deal with
-			 * it, make offset = -1.
-			 */
-			if (mccs)
-				offset = -1;
 			break;
 		default:
 			/* Anything here makes it impossible or too hard
@@ -1849,16 +1615,15 @@
 
 /*
  - altoffset - choose biggest offset among multiple choices
- == static int altoffset(sop *scan, int offset, int mccs);
+ == static int altoffset(sop *scan, int offset);
  *
  * Compute, recursively if necessary, the largest offset among multiple
  * re paths.
  */
 static int
-altoffset(scan, offset, mccs)
+altoffset(scan, offset)
 sop *scan;
 int offset;
-int mccs;
 {
 	int largest;
 	int try;
@@ -1880,7 +1645,7 @@
 			break;
 		case OQUEST_:
 		case OCH_:
-			try = altoffset(scan, try, mccs);
+			try = altoffset(scan, try);
 			if (try == -1)
 				return -1;
 			scan--;
@@ -1897,8 +1662,6 @@
 			scan++;
 			break;
 		case OANYOF:
-			if (mccs)
-				return -1;
 		case OCHAR:
 		case OANY:
 			try++;

==== //depot/projects/gdb/lib/libc/regex/regex2.h#2 (text+ko) ====

@@ -35,7 +35,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)regex2.h	8.4 (Berkeley) 3/20/94
- * $FreeBSD: src/lib/libc/regex/regex2.h,v 1.6 2002/03/22 23:41:56 obrien Exp $
+ * $FreeBSD: src/lib/libc/regex/regex2.h,v 1.7 2004/07/11 05:58:31 tjr Exp $
  */
 
 /*
@@ -113,29 +113,16 @@
  * The individual set therefore has both a pointer to the byte vector
  * and a mask to pick out the relevant bit of each byte.  A hash code
  * simplifies testing whether two sets could be identical.
- *
- * This will get trickier for multicharacter collating elements.  As
- * preliminary hooks for dealing with such things, we also carry along
- * a string of multi-character elements, and decide the size of the
- * vectors at run time.
  */
 typedef struct {
 	uch *ptr;		/* -> uch [csetsize] */
 	uch mask;		/* bit within array */
 	short hash;             /* hash code */
-	size_t smultis;
-	char *multis;		/* -> char[smulti]  ab\0cd\0ef\0\0 */
 } cset;
 /* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */
 #define CHadd(cs, c)    ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (uch)(c))
 #define CHsub(cs, c)    ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (uch)(c))
 #define	CHIN(cs, c)	((cs)->ptr[(uch)(c)] & (cs)->mask)
-#define	MCadd(p, cs, cp)	mcadd(p, cs, cp)	/* regcomp() internal fns */
-#define	MCsub(p, cs, cp)	mcsub(p, cs, cp)
-#define	MCin(p, cs, cp)	mcin(p, cs, cp)
-
-/* stuff for character categories */
-typedef unsigned char cat_t;
 
 /*
  * main compiled-expression structure
@@ -158,8 +145,6 @@
 #		define	BAD	04	/* something wrong */
 	int nbol;		/* number of ^ used */
 	int neol;		/* number of $ used */
-	int ncategories;	/* how many character categories */
-	cat_t *categories;	/* ->catspace[-CHAR_MIN] */
 	char *must;		/* match must contain this string */
 	int moffset;		/* latest point at which must may be located */
 	int *charjump;		/* Boyer-Moore char jump table */
@@ -168,8 +153,6 @@
 	size_t nsub;		/* copy of re_nsub */
 	int backrefs;		/* does it use back references? */
 	sopno nplus;		/* how deep does it nest +s? */
-	/* catspace must be last */
-	cat_t catspace[1];	/* actually [NC] */
 };
 
 /* misc utilities */

==== //depot/projects/gdb/share/man/man9/sx.9#5 (text+ko) ====

@@ -24,7 +24,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
 .\" DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man9/sx.9,v 1.28 2004/06/16 08:33:57 ru Exp $
+.\" $FreeBSD: src/share/man/man9/sx.9,v 1.29 2004/07/11 16:08:25 darrenr Exp $
 .\"
 .Dd August 14, 2001
 .Dt SX 9
@@ -42,6 +42,7 @@
 .Nm sx_try_upgrade ,
 .Nm sx_downgrade ,
 .Nm sx_assert ,
+.Nm sx_unlock ,
 .Nm SX_SYSINIT
 .Nd kernel shared/exclusive lock
 .Sh SYNOPSIS
@@ -68,13 +69,16 @@
 .Fn sx_try_upgrade "struct sx *sx"
 .Ft void
 .Fn sx_downgrade "struct sx *sx"
-.Pp
-.Cd "options INVARIANTS"
-.Cd "options INVARIANT_SUPPORT"
 .Ft void
 .Fn sx_assert "struct sx *sx" "int what"
-.In sys/kernel.h
+.\"
+.Ss sx utility macros
+.Fn sx_unlock "struct sx *sx"
 .Fn SX_SYSINIT "name" "struct sx *sx" "const char *description"
+.\"
+.Ss Kernel options
+.Cd "options INVARIANTS"
+.Cd "options INVARIANT_SUPPORT"
 .Sh DESCRIPTION
 Shared/exclusive locks are used to protect data that are read far more often
 than they are written.
@@ -98,13 +102,17 @@
 or
 .Fn sx_try_slock
 and
-.Fn sx_sunlock .
+.Fn sx_sunlock
+or
+.Fn sx_unlock .
 Threads acquire and release an exclusive lock by calling
 .Fn sx_xlock
 or
 .Fn sx_try_xlock
 and
-.Fn sx_xunlock .
+.Fn sx_xunlock
+or
+.Fn sx_unlock .
 A thread can attempt to upgrade a currently held shared lock to an exclusive
 lock by calling
 .Fn sx_try_upgrade .
@@ -158,6 +166,15 @@
 by the first argument.
 .El
 .Pp
+For ease of programming,
+.Fn sx_unlock
+is provided as a macro frontend to the respective functions,
+.Fn sx_sunlock
+and
+.Fn sx_xunlock .
+Algorithms that are aware of what state the lock is in should use either
+of the two specific functions for a minor performance benefit.
+.Pp
 The
 .Fn SX_SYSINIT
 macro is used to generate a call to the

==== //depot/projects/gdb/sys/amd64/isa/clock.c#7 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/isa/clock.c,v 1.212 2004/07/10 22:42:22 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/isa/clock.c,v 1.213 2004/07/11 18:07:55 marcel Exp $");
 
 /*
  * Routines to handle clock hardware.
@@ -53,8 +53,8 @@
 #include <sys/systm.h>
 #include <sys/bus.h>
 #include <sys/lock.h>
+#include <sys/kdb.h>
 #include <sys/mutex.h>
-#include <sys/kdb.h>
 #include <sys/proc.h>
 #include <sys/time.h>
 #include <sys/timetc.h>
@@ -293,8 +293,18 @@
 	 * takes about 1.5 usec for each of the i/o's in getit().  The loop
 	 * takes about 6 usec on a 486/33 and 13 usec on a 386/20.  The
 	 * multiplications and divisions to scale the count take a while).
+	 *
+	 * However, if ddb is active then use a fake counter since reading
+	 * the i8254 counter involves acquiring a lock.  ddb must not go
+	 * locking for many reasons, but it calls here for at least atkbd
+	 * input.
 	 */
-	prev_tick = getit();
+#ifdef KDB
+	if (kdb_active)
+		prev_tick = 1;
+	else
+#endif
+		prev_tick = getit();
 	n -= 0;			/* XXX actually guess no initial overhead */
 	/*
 	 * Calculate (n * (timer_freq / 1e6)) without using floating point
@@ -321,7 +331,15 @@
 			     / 1000000;
 
 	while (ticks_left > 0) {
-		tick = getit();
+#ifdef KDB
+		if (kdb_active) {
+			inb(0x84);
+			tick = prev_tick - 1;
+			if (tick <= 0)
+				tick = timer0_max_count;
+		} else
+#endif
+			tick = getit();
 #ifdef DELAYDEBUG
 		++getit_calls;
 #endif
@@ -366,17 +384,10 @@
 			splx(x);
 			return (-1); /* XXX Should be EBUSY, but nobody cares anyway. */
 		}
-#ifdef KDB
-	if (!kdb_active)
-#endif
-		mtx_lock_spin(&clock_lock);
+	mtx_lock_spin(&clock_lock);
 	outb(TIMER_CNTR2, pitch);
 	outb(TIMER_CNTR2, (pitch>>8));
-#ifdef KDB
-	if (!kdb_active)
-#endif
-		mtx_unlock_spin(&clock_lock);
-
+	mtx_unlock_spin(&clock_lock);
 	if (!beeping) {
 		/* enable counter2 output to speaker */
 		outb(IO_PPI, inb(IO_PPI) | 3);

==== //depot/projects/gdb/sys/contrib/ipfilter/netinet/ip_fil.c#5 (text+ko) ====

@@ -131,7 +131,7 @@
 #if !defined(lint)
 static const char sccsid[] = "@(#)ip_fil.c	2.41 6/5/96 (C) 1993-2000 Darren Reed";
 /* static const char rcsid[] = "@(#)$Id: ip_fil.c,v 2.42.2.34 2001/07/23 13:49:57 darrenr Exp $"; */
-static const char rcsid[] = "@(#)$FreeBSD: src/sys/contrib/ipfilter/netinet/ip_fil.c,v 1.46 2004/06/22 02:44:06 darrenr Exp $";
+static const char rcsid[] = "@(#)$FreeBSD: src/sys/contrib/ipfilter/netinet/ip_fil.c,v 1.47 2004/07/11 10:13:05 darrenr Exp $";
 #endif
 
 extern	struct	protosw	inetsw[];
@@ -168,7 +168,7 @@
 # endif
 # ifdef	__sgi
 extern	int		tcp_mtudisc;
-extern  kmutex_t        ipf_rw;
+extern	kmutex_t        ipf_rw;
 extern	KRWLOCK_T	ipf_mutex;
 # endif
 #else
@@ -206,8 +206,6 @@
     defined(_KERNEL)
 # include <sys/conf.h>
 const struct cdevsw ipl_cdevsw = {
-	.d_version =	D_VERSION,
-	.d_flags =	D_NEEDGIANT,
 	iplopen, iplclose, iplread, nowrite, iplioctl,
 	nostop, notty, nopoll, nommap,
 };
@@ -229,8 +227,9 @@
 };
 #endif /* _BSDI_VERSION >= 199510  && _KERNEL */
 
-#if defined(__NetBSD__) || defined(__OpenBSD__)  || \
-    (_BSDI_VERSION >= 199701) || (__FreeBSD_version >= 500011)
+#if defined(__NetBSD__) || defined(__OpenBSD__) || \
+    (_BSDI_VERSION >= 199701) || \
+    ((__FreeBSD_version >= 500011) && defined(_KERNEL))
 # include <sys/conf.h>
 # if defined(NETBSD_PF)
 #  include <net/pfil.h>
@@ -328,7 +327,7 @@
 fr_check_wrapper6(void *arg, struct mbuf **mp, struct ifnet *ifp, int dir)
 {
 	return (fr_check(mtod(*mp, struct ip *), sizeof(struct ip6_hdr),
-	    ifp, (dir == PFIL_OUT), mp));
+		ifp, (dir == PFIL_OUT), mp));
 }
 # endif
 #endif /* __FreeBSD_version >= 501108 */
@@ -535,7 +534,7 @@
     ((__NetBSD_Version__ >= 104200000) || (__FreeBSD_version >= 500011))
 	int error = 0;
 # if (__NetBSD_Version__ >= 105150000) || (__FreeBSD_version >= 501108)
-        struct pfil_head *ph_inet = pfil_head_get(PFIL_TYPE_AF, AF_INET);
+	struct pfil_head *ph_inet = pfil_head_get(PFIL_TYPE_AF, AF_INET);
 #  ifdef USE_INET6
 	struct pfil_head *ph_inet6 = pfil_head_get(PFIL_TYPE_AF, AF_INET6);
 #  endif
@@ -2232,8 +2231,8 @@
 	int fd;
 
 # if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606)) || \
-	(defined(OpenBSD) && (OpenBSD >= 199603)) || \
-	(defined(__FreeBSD__) && (__FreeBSD_version >= 501113))
+     (defined(OpenBSD) && (OpenBSD >= 199603)) || \
+     (defined(__FreeBSD__) && (__FreeBSD_version >= 501113))
 	for (ifa = ifneta; ifa && (ifp = *ifa); ifa++) {
 		ifp->if_output = write_output;
 		sprintf(fname, "/tmp/%s", ifp->if_xname);

==== //depot/projects/gdb/sys/dev/cx/if_cx.c#13 (text+ko) ====

@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.25 2004/06/28 16:17:10 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.26 2004/07/11 15:18:37 phk Exp $");
 
 #include <sys/param.h>
 
@@ -160,14 +160,11 @@
 	cx_dma_mem_t dmamem;
 	struct tty *tty;
 	struct callout_handle dcd_timeout_handle;
-	unsigned dtrwait;
-	unsigned dtroff;
 	unsigned callout;
 	unsigned lock;
 	int open_dev;
 	int cd;
 	int running;
-	struct	callout_handle dtr_timeout_handle;
 #ifdef NETGRAPH
 	char	nodename [NG_NODELEN+1];
 	hook_p	hook;
@@ -217,7 +214,6 @@
 static void cx_oproc (struct tty *tp);
 static int cx_param (struct tty *tp, struct termios *t);
 static void cx_stop (struct tty *tp, int flag);
-static void cx_dtrwakeup (void *a);
 static void cx_receive (cx_chan_t *c, char *data, int len);
 static void cx_transmit (cx_chan_t *c, void *attachment, int len);
 static void cx_error (cx_chan_t *c, int data);
@@ -817,7 +813,6 @@
 		sprintf (d->name, "cx%d.%d", b->num, c->num);
 		d->board = b;
 		d->chan = c;
-		d->dtrwait = 3 * hz;	/* Default DTR off timeout is 3 seconds. */
 		d->open_dev = 0;
 		c->sys = d;
 
@@ -940,8 +935,6 @@
 		if (!d || d->chan->type == T_NONE)
 			continue;
 
-		if (d->dtr_timeout_handle.callout)
-			untimeout (cx_dtrwakeup, d, d->dtr_timeout_handle);
 		if (d->dcd_timeout_handle.callout)
 			untimeout (cx_carrier, c, d->dcd_timeout_handle);
 	}
@@ -1518,12 +1511,9 @@
 	dev->si_tty = d->tty;
 	d->tty->t_dev = dev;
 again:
-	if (d->dtroff) {
-		error = tsleep (&d->dtrwait, TTIPRI | PCATCH, "cxdtr", 0);
-		if (error)
-			return error;
-		goto again;
-	}
+	error = ttydtrwaitsleep(d->tty);
+	if (error)
+		return error;
 
 	if ((d->tty->t_state & TS_ISOPEN) && (d->tty->t_state & TS_XCLUDE) &&
 #if __FreeBSD_version >= 500000
@@ -1608,11 +1598,7 @@
 			splhigh ();
 			cx_set_dtr (d->chan, 0);
 			cx_set_rts (d->chan, 0);
-			if (d->dtrwait) {
-				d->dtr_timeout_handle =
-				    timeout (cx_dtrwakeup, d, d->dtrwait);
-				d->dtroff = 1;
-			}
+			ttydtrwaitstart(d->tty);
 			spl0 ();
 		}
 		return error;
@@ -1652,11 +1638,7 @@
 	if ((d->tty->t_cflag & HUPCL) || ! (d->tty->t_state & TS_ISOPEN)) {
 		cx_set_dtr (d->chan, 0);
 		cx_set_rts (d->chan, 0);
-		if (d->dtrwait) {
-			d->dtr_timeout_handle =
-			    timeout (cx_dtrwakeup, d, d->dtrwait);
-			d->dtroff = 1;
-		}
+		ttydtrwaitstart(d->tty);
 	}
 	ttyclose (d->tty);
 	splx (s);
@@ -2139,48 +2121,11 @@
 		*(int*)data = cx_modem_status (d);
 	        return 0;
 
-#ifdef TIOCMSDTRWAIT
-	case TIOCMSDTRWAIT:
-	        CX_DEBUG2 (d, ("ioctl: tiocmsdtrwait\n"));
-	        /* Only for superuser! */
-#if __FreeBSD_version < 500000

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



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