Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Jan 2008 05:16:24 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 133102 for review
Message-ID:  <200801120516.m0C5GOQL010776@repoman.freebsd.org>

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

Change 133102 by jb@jb_freebsd1 on 2008/01/12 05:15:42

	IFC

Affected files ...

.. //depot/projects/dtrace/doc/share/pgpkeys/marius.key#1 branch
.. //depot/projects/dtrace/doc/share/pgpkeys/pgpkeys-developers.sgml#30 integrate
.. //depot/projects/dtrace/doc/share/pgpkeys/pgpkeys.ent#29 integrate
.. //depot/projects/dtrace/ports/GIDs#13 integrate
.. //depot/projects/dtrace/ports/UIDs#15 integrate
.. //depot/projects/dtrace/src/ObsoleteFiles.inc#34 integrate
.. //depot/projects/dtrace/src/etc/namedb/named.conf#5 integrate
.. //depot/projects/dtrace/src/lib/libkvm/kvm.c#7 integrate
.. //depot/projects/dtrace/src/lib/msun/src/s_csqrt.c#2 integrate
.. //depot/projects/dtrace/src/lib/msun/src/s_csqrtf.c#2 integrate
.. //depot/projects/dtrace/src/sys/amd64/include/ieeefp.h#5 integrate
.. //depot/projects/dtrace/src/sys/dev/fdc/fdc.c#10 integrate
.. //depot/projects/dtrace/src/sys/i386/include/ieeefp.h#4 integrate
.. //depot/projects/dtrace/src/sys/kern/kern_lock.c#15 integrate
.. //depot/projects/dtrace/src/sys/nfsclient/nfs_socket.c#15 integrate
.. //depot/projects/dtrace/src/usr.bin/systat/ifstat.c#6 integrate
.. //depot/projects/dtrace/www/en/java/news.xml#1 branch
.. //depot/projects/dtrace/www/share/sgml/libcommon.xsl#7 integrate
.. //depot/projects/dtrace/www/share/sgml/templates.oldnewsflash.xsl#5 integrate
.. //depot/projects/dtrace/www/share/sgml/templates.oldpress.xsl#5 integrate
.. //depot/projects/dtrace/www/share/sgml/templates.press.xsl#3 integrate

Differences ...

==== //depot/projects/dtrace/doc/share/pgpkeys/pgpkeys-developers.sgml#30 (text+ko) ====

@@ -1,7 +1,7 @@
 <!--
      The FreeBSD Documentation Project
 
-     $FreeBSD: doc/share/pgpkeys/pgpkeys-developers.sgml,v 1.60 2008/01/04 21:00:54 wxs Exp $
+     $FreeBSD: doc/share/pgpkeys/pgpkeys-developers.sgml,v 1.61 2008/01/11 21:48:49 marius Exp $
 -->
 
     <sect2 id="pgpkey-ariff">
@@ -1044,6 +1044,11 @@
       &pgpkey.xride;
     </sect2>
 
+    <sect2 id="pgpkey-marius">
+      <title>&a.marius;</title>
+      &pgpkey.marius;
+    </sect2>
+
     <sect2 id="pgpkey-clsung">
       <title>&a.clsung;</title>
       &pgpkey.clsung;

==== //depot/projects/dtrace/doc/share/pgpkeys/pgpkeys.ent#29 (text+ko) ====

@@ -1,5 +1,5 @@
 
-<!-- $FreeBSD: doc/share/pgpkeys/pgpkeys.ent,v 1.156 2008/01/04 21:00:54 wxs Exp $ -->
+<!-- $FreeBSD: doc/share/pgpkeys/pgpkeys.ent,v 1.157 2008/01/11 21:48:49 marius Exp $ -->
 <!-- PGP keyblocks -->
 <!ENTITY pgpkey.aaron SYSTEM "aaron.key">
 <!ENTITY pgpkey.ache SYSTEM "ache.key">
@@ -155,6 +155,7 @@
 <!ENTITY pgpkey.marcel SYSTEM "marcel.key">
 <!ENTITY pgpkey.marck SYSTEM "marck.key">
 <!ENTITY pgpkey.marcus SYSTEM "marcus.key">
+<!ENTITY pgpkey.marius SYSTEM "marius.key">
 <!ENTITY pgpkey.markp SYSTEM "markp.key">
 <!ENTITY pgpkey.marks SYSTEM "marks.key">
 <!ENTITY pgpkey.markus SYSTEM "markus.key">

==== //depot/projects/dtrace/ports/GIDs#13 (text+ko) ====

@@ -1,4 +1,4 @@
-$FreeBSD: ports/GIDs,v 1.47 2007/09/07 03:08:58 edwin Exp $
+$FreeBSD: ports/GIDs,v 1.48 2008/01/11 15:46:29 rafan Exp $
 # Please keep this file sorted by GID!
 smmsp:*:25:
 bind:*:53:
@@ -92,6 +92,7 @@
 dkfilter:*:325:
 wildfire:*:340:
 stunnel:*:341:
+_iodined:*:353:
 ldap:*:389:
 tiarra:*:398:
 drweb:*:426:

==== //depot/projects/dtrace/ports/UIDs#15 (text+ko) ====

@@ -1,4 +1,4 @@
-$FreeBSD: ports/UIDs,v 1.52 2007/09/30 07:19:48 edwin Exp $
+$FreeBSD: ports/UIDs,v 1.53 2008/01/11 15:46:29 rafan Exp $
 # Please keep this file sorted by UID!
 smmsp:*:25:25:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin
 bind:*:53:53:Bind Sandbox:/:/usr/sbin/nologin
@@ -102,6 +102,7 @@
 dkfilter:*:325:325:DK Filter Owner:/nonexistent:/usr/sbin/nologin
 wildfire:*:340:340::0:0:Wildfire Daemon:/nonexistent:/usr/sbin/nologin
 stunnel:*:341:341::0:0:Stunnel Daemon:/nonexistent:/usr/sbin/nologin
+_iodined:*:353:353:Iodine Daemon:/nonexistent:/usr/sbin/nologin
 ldap:*:389:389:OpenLDAP Server:/nonexistent:/usr/sbin/nologin
 tiarra:*:398:398:Tiarra IRC Proxy:/nonexistent:/usr/sbin/nologin
 drweb:*:426:426:Dr.Web Mail Scanner:/nonexistent:/usr/sbin/nologin

==== //depot/projects/dtrace/src/ObsoleteFiles.inc#34 (text+ko) ====

@@ -1,5 +1,5 @@
 #
-# $FreeBSD: src/ObsoleteFiles.inc,v 1.124 2007/12/07 22:56:10 dougb Exp $
+# $FreeBSD: src/ObsoleteFiles.inc,v 1.125 2008/01/11 13:41:31 jhb Exp $
 #
 # This file lists old files (OLD_FILES), libraries (OLD_LIBS) and
 # directories (OLD_DIRS) which should get removed at an update. Recently
@@ -14,6 +14,9 @@
 # The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
 #
 
+# 20080108: Moved to section 2
+OLD_FILES+=usr/share/man/man3/shm_open.3.gz
+OLD_FILES+=usr/share/man/man3/shm_unlink.3.gz
 # 20071207: Merged with fortunes-o.real
 OLD_FILES+=usr/share/games/fortune/fortunes2-o
 OLD_FILES+=usr/share/games/fortune/fortunes2-o.dat
@@ -25,6 +28,8 @@
 .endif
 # 20071129: Removed a Solaris compatibility header
 OLD_FILES+=usr/include/sys/_elf_solaris.h
+# 20071125: Renamed to pmc_get_msr()
+OLD_FILES+=usr/share/man/man3/pmc_x86_get_msr.3.gz
 # 20071108: Removed very crunch OLDCARD support file
 OLD_FILES+=etc/defaults/pccard.conf
 # 20071104: Removed bsdlabel, fdisk and gpt from rescue on ia64.
@@ -33,6 +38,8 @@
 OLD_FILES+=rescue/fdisk
 OLD_FILES+=rescue/gpt
 .endif
+# 20071026: kthread(9)/kproc(9) API changes
+OLD_FILES+=usr/share/man/man9/kthread_create.9.gz
 # 20071025: rc.d/nfslocking superceeded by rc.d/lockd and rc.d/statd
 OLD_FILES+=etc/rc.d/nfslocking
 # 20070930: rename of cached to nscd

==== //depot/projects/dtrace/src/etc/namedb/named.conf#5 (text+ko) ====

@@ -1,4 +1,4 @@
-// $FreeBSD: src/etc/namedb/named.conf,v 1.26 2007/08/17 04:37:02 dougb Exp $
+// $FreeBSD: src/etc/namedb/named.conf,v 1.27 2008/01/11 22:41:21 dougb Exp $
 //
 // Refer to the named.conf(5) and named(8) man pages, and the documentation
 // in /usr/share/doc/bind9 for more details.
@@ -121,14 +121,6 @@
 // "This" Network (RFCs 1912 and 3330)
 zone "0.in-addr.arpa"		{ type master; file "master/empty.db"; };
 
-// IANA Reserved - Unlikely to ever be assigned
-zone "1.in-addr.arpa"		{ type master; file "master/empty.db"; };
-zone "2.in-addr.arpa"		{ type master; file "master/empty.db"; };
-zone "223.in-addr.arpa"		{ type master; file "master/empty.db"; };
-
-// Public Data Networks (RFC 3330)
-zone "14.in-addr.arpa"		{ type master; file "master/empty.db"; };
-
 // Private Use Networks (RFC 1918)
 zone "10.in-addr.arpa"		{ type master; file "master/empty.db"; };
 zone "16.172.in-addr.arpa"	{ type master; file "master/empty.db"; };

==== //depot/projects/dtrace/src/lib/libkvm/kvm.c#7 (text+ko) ====

@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libkvm/kvm.c,v 1.31 2007/06/15 11:35:11 simokawa Exp $");
+__FBSDID("$FreeBSD: src/lib/libkvm/kvm.c,v 1.32 2008/01/12 00:54:47 delphij Exp $");
 
 #if defined(LIBC_SCCS) && !defined(lint)
 #if 0
@@ -290,6 +290,10 @@
 		_kvm_freevtop(kd);
 	if (kd->procbase != 0)
 		free((void *)kd->procbase);
+	if (kd->argbuf != 0)
+		free((void *) kd->argbuf);
+	if (kd->argspc != 0)
+		free((void *) kd->argspc);
 	if (kd->argv != 0)
 		free((void *)kd->argv);
 	free((void *)kd);

==== //depot/projects/dtrace/src/lib/msun/src/s_csqrt.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/msun/src/s_csqrt.c,v 1.1 2007/12/15 08:38:43 das Exp $");
+__FBSDID("$FreeBSD: src/lib/msun/src/s_csqrt.c,v 1.2 2008/01/11 04:18:25 das Exp $");
 
 #include <complex.h>
 #include <math.h>
@@ -41,17 +41,20 @@
  */
 #pragma	STDC CX_LIMITED_RANGE	on
 
-/* We risk spurious overflow for components >= DBL_MAX/(1+sqrt(2)) */
-#define THRESH	0x1.a827999fcef32p+1022
+/* We risk spurious overflow for components >= DBL_MAX / (1 + sqrt(2)). */
+#define	THRESH	0x1.a827999fcef32p+1022
 
 double complex
 csqrt(double complex z)
 {
-	double a = creal(z), b = cimag(z);
+	double complex result;
+	double a, b;
 	double t;
-	double complex result;
 	int scale;
 
+	a = creal(z);
+	b = cimag(z);
+
 	/* Handle special cases. */
 	if (z == 0)
 		return (cpack(0, b));
@@ -59,13 +62,13 @@
 		return (cpack(INFINITY, b));
 	if (isnan(a)) {
 		t = (b - b) / (b - b);	/* raise invalid if b is not a NaN */
-		return (cpack(t, t));	/* return NaN + NaN i */
+		return (cpack(a, t));	/* return NaN + NaN i */
 	}
 	if (isinf(a)) {
 		/*
-		 * csqrt(inf + nan i)  = inf +  nan i
+		 * csqrt(inf + NaN i)  = inf +  NaN i
 		 * csqrt(inf + y i)    = inf +  0 i
-		 * csqrt(-inf + nan i) = nan +- inf i
+		 * csqrt(-inf + NaN i) = NaN +- inf i
 		 * csqrt(-inf + y i)   = 0   +  inf i
 		 */
 		if (signbit(a))
@@ -79,15 +82,15 @@
 	 */
 
 	/* Scale to avoid overflow. */
-	if (a >= THRESH || b >= THRESH) {
-	    a *= 0.25;
-	    b *= 0.25;
-	    scale = 1;
+	if (fabs(a) >= THRESH || fabs(b) >= THRESH) {
+		a *= 0.25;
+		b *= 0.25;
+		scale = 1;
 	} else {
-	    scale = 0;
+		scale = 0;
 	}
 
-	/* Algorithm 312, CACM vol 10, Oct 1967 */
+	/* Algorithm 312, CACM vol 10, Oct 1967. */
 	if (a >= 0) {
 		t = sqrt((a + hypot(a, b)) * 0.5);
 		result = cpack(t, b / (2 * t));
@@ -96,9 +99,9 @@
 		result = cpack(fabs(b) / (2 * t), copysign(t, b));
 	}
 
-	/* Rescale */
+	/* Rescale. */
 	if (scale)
-	    return (result * 2);
+		return (result * 2);
 	else
-	    return (result);
+		return (result);
 }

==== //depot/projects/dtrace/src/lib/msun/src/s_csqrtf.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/msun/src/s_csqrtf.c,v 1.1 2007/12/15 08:38:43 das Exp $");
+__FBSDID("$FreeBSD: src/lib/msun/src/s_csqrtf.c,v 1.2 2008/01/11 04:18:25 das Exp $");
 
 #include <complex.h>
 #include <math.h>
@@ -54,13 +54,13 @@
 		return (cpackf(INFINITY, b));
 	if (isnan(a)) {
 		t = (b - b) / (b - b);	/* raise invalid if b is not a NaN */
-		return (cpackf(t, t));	/* return NaN + NaN i */
+		return (cpackf(a, t));	/* return NaN + NaN i */
 	}
 	if (isinf(a)) {
 		/*
-		 * csqrtf(inf + nan i)  = inf +  nan i
+		 * csqrtf(inf + NaN i)  = inf +  NaN i
 		 * csqrtf(inf + y i)    = inf +  0 i
-		 * csqrtf(-inf + nan i) = nan +- inf i
+		 * csqrtf(-inf + NaN i) = NaN +- inf i
 		 * csqrtf(-inf + y i)   = 0   +  inf i
 		 */
 		if (signbit(a))

==== //depot/projects/dtrace/src/sys/amd64/include/ieeefp.h#5 (text+ko) ====

@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  * 	from: @(#) ieeefp.h 	1.0 (Berkeley) 9/23/93
- * $FreeBSD: src/sys/amd64/include/ieeefp.h,v 1.17 2008/01/09 15:03:03 bde Exp $
+ * $FreeBSD: src/sys/amd64/include/ieeefp.h,v 1.19 2008/01/11 17:11:32 bde Exp $
  */
 
 #ifndef _MACHINE_IEEEFP_H_
@@ -40,6 +40,7 @@
 
 /*
  * IEEE floating point type, constant and function definitions.
+ * XXX: {FP,SSE}*FLD and {FP,SSE}*OFF are undocumented pollution.
  */
 
 #ifndef _SYS_CDEFS_H_
@@ -47,17 +48,17 @@
 #endif
 
 /*
- * FP rounding modes
+ * Rounding modes.
  */
 typedef enum {
 	FP_RN=0,	/* round to nearest */
-	FP_RM,		/* round down to minus infinity */
-	FP_RP,		/* round up to plus infinity */
+	FP_RM,		/* round down towards minus infinity */
+	FP_RP,		/* round up towards plus infinity */
 	FP_RZ		/* truncate */
 } fp_rnd_t;
 
 /*
- * FP precision modes
+ * Precision (i.e., rounding precision) modes.
  */
 typedef enum {
 	FP_PS=0,	/* 24 bit (single-precision) */
@@ -69,7 +70,7 @@
 #define fp_except_t	int
 
 /*
- * FP exception masks
+ * Exception bit masks.
  */
 #define FP_X_INV	0x01	/* invalid operation */
 #define FP_X_DNML	0x02	/* denormal */
@@ -80,23 +81,19 @@
 #define FP_X_STK	0x40	/* stack fault */
 
 /*
- * FP registers
+ * FPU control word bit-field masks.
  */
-#define FP_MSKS_REG	0	/* exception masks */
-#define FP_PRC_REG	0	/* precision */
-#define FP_RND_REG	0	/* direction */
-#define FP_STKY_REG	1	/* sticky flags */
+#define FP_MSKS_FLD	0x3f	/* exception masks field */
+#define FP_PRC_FLD	0x300	/* precision control field */
+#define	FP_RND_FLD	0xc00	/* rounding control field */
 
 /*
- * FP register bit field masks
+ * FPU status word bit-field masks.
  */
-#define FP_MSKS_FLD	0x3f	/* exception masks field */
-#define FP_PRC_FLD	0x300	/* precision control field */
-#define FP_RND_FLD	0xc00	/* round control field */
 #define FP_STKY_FLD	0x3f	/* sticky flags field */
 
 /*
- * SSE mxcsr register bit field masks
+ * SSE mxcsr register bit-field masks.
  */
 #define	SSE_STKY_FLD	0x3f	/* exception flags */
 #define	SSE_DAZ_FLD	0x40	/* Denormals are zero */
@@ -105,15 +102,19 @@
 #define	SSE_FZ_FLD	0x8000	/* flush to zero on underflow */
 
 /*
- * FP register bit field offsets
+ * FPU control word bit-field offsets (shift counts).
  */
 #define FP_MSKS_OFF	0	/* exception masks offset */
 #define FP_PRC_OFF	8	/* precision control offset */
-#define FP_RND_OFF	10	/* round control offset */
+#define	FP_RND_OFF	10	/* rounding control offset */
+
+/*
+ * FPU status word bit-field offsets (shift counts).
+ */
 #define FP_STKY_OFF	0	/* sticky flags offset */
 
 /*
- * SSE mxcsr register bit field offsets
+ * SSE mxcsr register bit-field offsets (shift counts).
  */
 #define	SSE_STKY_OFF	0	/* exception flags offset */
 #define	SSE_DAZ_OFF	6	/* DAZ exception mask offset */
@@ -124,12 +125,42 @@
 #ifdef __GNUCLIKE_ASM
 
 #define	__fldcw(addr)	__asm __volatile("fldcw %0" : : "m" (*(addr)))
+#define	__fldenv(addr)	__asm __volatile("fldenv %0" : : "m" (*(addr)))
 #define	__fnstcw(addr)	__asm __volatile("fnstcw %0" : "=m" (*(addr)))
+#define	__fnstenv(addr)	__asm __volatile("fnstenv %0" : "=m" (*(addr)))
 #define	__fnstsw(addr)	__asm __volatile("fnstsw %0" : "=m" (*(addr)))
 #define	__ldmxcsr(addr)	__asm __volatile("ldmxcsr %0" : : "m" (*(addr)))
 #define	__stmxcsr(addr)	__asm __volatile("stmxcsr %0" : "=m" (*(addr)))
 
 /*
+ * Load the control word.  Be careful not to trap if there is a currently
+ * unmasked exception (ones that will become freshly unmasked are not a
+ * problem).  This case must be handled by a save/restore of the
+ * environment or even of the full x87 state.  Accessing the environment
+ * is very inefficient, so only do it when necessary.
+ */
+static __inline void
+__fnldcw(unsigned short _cw, unsigned short _newcw)
+{
+	struct {
+		unsigned _cw;
+		unsigned _other[6];
+	} _env;
+	unsigned short _sw;
+
+	if ((_cw & FP_MSKS_FLD) != FP_MSKS_FLD) {
+		__fnstsw(&_sw);
+		if (((_sw & ~_cw) & FP_STKY_FLD) != 0) {
+			__fnstenv(&_env);
+			_env._cw = _newcw;
+			__fldenv(&_env);
+			return;
+		}
+	}
+	__fldcw(&_newcw);
+}
+
+/*
  * General notes about conflicting SSE vs FP status bits.
  * This code assumes that software will not fiddle with the control
  * bits of the SSE and x87 in such a way to get them out of sync and
@@ -154,13 +185,13 @@
 {
 	fp_rnd_t _p;
 	unsigned _mxcsr;
-	unsigned short _cw;
+	unsigned short _cw, _newcw;
 
 	__fnstcw(&_cw);
 	_p = (fp_rnd_t)((_cw & FP_RND_FLD) >> FP_RND_OFF);
-	_cw &= ~FP_RND_FLD;
-	_cw |= (_m << FP_RND_OFF) & FP_RND_FLD;
-	__fldcw(&_cw);
+	_newcw = _cw & ~FP_RND_FLD;
+	_newcw |= (_m << FP_RND_OFF) & FP_RND_FLD;
+	__fnldcw(_cw, _newcw);
 	__stmxcsr(&_mxcsr);
 	_mxcsr &= ~SSE_RND_FLD;
 	_mxcsr |= (_m << SSE_RND_OFF) & SSE_RND_FLD;
@@ -186,13 +217,13 @@
 __fpsetprec(fp_prec_t _m)
 {
 	fp_prec_t _p;
-	unsigned short _cw;
+	unsigned short _cw, _newcw;
 
 	__fnstcw(&_cw);
 	_p = (fp_prec_t)((_cw & FP_PRC_FLD) >> FP_PRC_OFF);
-	_cw &= ~FP_PRC_FLD;
-	_cw |= (_m << FP_PRC_OFF) & FP_PRC_FLD;
-	__fldcw(&_cw);
+	_newcw = _cw & ~FP_PRC_FLD;
+	_newcw |= (_m << FP_PRC_OFF) & FP_PRC_FLD;
+	__fnldcw(_cw, _newcw);
 	return (_p);
 }
 
@@ -216,13 +247,13 @@
 {
 	fp_except_t _p;
 	unsigned _mxcsr;
-	unsigned short _cw;
+	unsigned short _cw, _newcw;
 
 	__fnstcw(&_cw);
 	_p = (~_cw & FP_MSKS_FLD) >> FP_MSKS_OFF;
-	_cw &= ~FP_MSKS_FLD;
-	_cw |= (~_m >> FP_MSKS_OFF) & FP_MSKS_FLD;
-	__fldcw(&_cw);
+	_newcw = _cw & ~FP_MSKS_FLD;
+	_newcw |= (~_m << FP_MSKS_OFF) & FP_MSKS_FLD;
+	__fnldcw(_cw, _newcw);
 	__stmxcsr(&_mxcsr);
 	/* XXX should we clear non-ieee SSE_DAZ_FLD and SSE_FZ_FLD ? */
 	_mxcsr &= ~SSE_MSKS_FLD;
@@ -248,13 +279,13 @@
 
 #if !defined(__IEEEFP_NOINLINES__) && defined(__GNUCLIKE_ASM)
 
+#define	fpgetmask()	__fpgetmask()
+#define	fpgetprec()	__fpgetprec()
 #define	fpgetround()	__fpgetround()
-#define	fpsetround(_m)	__fpsetround(_m)
-#define	fpgetprec()	__fpgetprec()
-#define	fpsetprec(_m)	__fpsetprec(_m)
-#define	fpgetmask()	__fpgetmask()
-#define	fpsetmask(_m)	__fpsetmask(_m)
 #define	fpgetsticky()	__fpgetsticky()
+#define	fpsetmask(m)	__fpsetmask(m)
+#define	fpsetprec(m)	__fpsetprec(m)
+#define	fpsetround(m)	__fpsetround(m)
 
 /* Suppress prototypes in the MI header. */
 #define	_IEEEFP_INLINED_	1

==== //depot/projects/dtrace/src/sys/dev/fdc/fdc.c#10 (text+ko) ====

@@ -51,7 +51,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/fdc/fdc.c,v 1.318 2007/10/20 23:23:14 julian Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/fdc/fdc.c,v 1.320 2008/01/11 16:50:52 kib Exp $");
 
 #include "opt_fdc.h"
 
@@ -1383,6 +1383,7 @@
 	struct fd_data *fd;
 	struct fdc_data *fdc;
 	int ar, aw, ae;
+	int busy;
 
 	fd = pp->geom->softc;
 	fdc = fd->fdc;
@@ -1403,6 +1404,7 @@
 		return (0);
 	}
 
+	busy = 0;
 	if (pp->acr == 0 && pp->acw == 0 && pp->ace == 0) {
 		if (fdmisccmd(fd, BIO_PROBE, NULL))
 			return (ENXIO);
@@ -1415,10 +1417,14 @@
 			mtx_unlock(&fdc->fdc_mtx);
 		}
 		device_busy(fd->dev);
+		busy = 1;
 	}
 
-	if (w > 0 && (fd->flags & FD_WP))
+	if (w > 0 && (fd->flags & FD_WP)) {
+		if (busy)
+			device_unbusy(fd->dev);
 		return (EROFS);
+	}
 
 	pp->sectorsize = fd->sectorsize;
 	pp->stripesize = fd->ft->heads * fd->ft->sectrac * fd->sectorsize;
@@ -1714,7 +1720,7 @@
 	fdc->flags |= FDC_KTHREAD_EXIT;
 	wakeup(&fdc->head);
 	while ((fdc->flags & FDC_KTHREAD_ALIVE) != 0)
-		msleep(&fdc->fdc_thread, &fdc->fdc_mtx, PRIBIO, "fdcdet", 0);
+		msleep(fdc->fdc_thread, &fdc->fdc_mtx, PRIBIO, "fdcdet", 0);
 	mtx_unlock(&fdc->fdc_mtx);
 
 	/* reset controller, turn motor off */

==== //depot/projects/dtrace/src/sys/i386/include/ieeefp.h#4 (text+ko) ====

@@ -1,4 +1,5 @@
 /*-
+ * Copyright (c) 2003 Peter Wemm.
  * Copyright (c) 1990 Andrew Moore, Talke Studio
  * All rights reserved.
  *
@@ -31,32 +32,33 @@
  * SUCH DAMAGE.
  *
  * 	from: @(#) ieeefp.h 	1.0 (Berkeley) 9/23/93
- * $FreeBSD: src/sys/i386/include/ieeefp.h,v 1.11 2005/03/15 15:53:39 das Exp $
+ * $FreeBSD: src/sys/i386/include/ieeefp.h,v 1.14 2008/01/11 18:59:35 bde Exp $
  */
 
+#ifndef _MACHINE_IEEEFP_H_
+#define _MACHINE_IEEEFP_H_
+
 /*
- *	IEEE floating point type and constant definitions.
+ * IEEE floating point type, constant and function definitions.
+ * XXX: FP*FLD and FP*OFF are undocumented pollution.
  */
 
-#ifndef _MACHINE_IEEEFP_H_
-#define _MACHINE_IEEEFP_H_
-
 #ifndef _SYS_CDEFS_H_
 #error this file needs sys/cdefs.h as a prerequisite
 #endif
 
 /*
- * FP rounding modes
+ * Rounding modes.
  */
 typedef enum {
 	FP_RN=0,	/* round to nearest */
-	FP_RM,		/* round down to minus infinity */
-	FP_RP,		/* round up to plus infinity */
+	FP_RM,		/* round down towards minus infinity */
+	FP_RP,		/* round up towards plus infinity */
 	FP_RZ		/* truncate */
 } fp_rnd_t;
 
 /*
- * FP precision modes
+ * Precision (i.e., rounding precision) modes.
  */
 typedef enum {
 	FP_PS=0,	/* 24 bit (single-precision) */
@@ -68,7 +70,7 @@
 #define fp_except_t	int
 
 /*
- * FP exception masks
+ * Exception bit masks.
  */
 #define FP_X_INV	0x01	/* invalid operation */
 #define FP_X_DNML	0x02	/* denormal */
@@ -79,105 +81,178 @@
 #define FP_X_STK	0x40	/* stack fault */
 
 /*
- * FP registers
+ * FPU control word bit-field masks.
  */
-#define FP_MSKS_REG	0	/* exception masks */
-#define FP_PRC_REG	0	/* precision */
-#define FP_RND_REG	0	/* direction */
-#define FP_STKY_REG	1	/* sticky flags */
+#define FP_MSKS_FLD	0x3f	/* exception masks field */
+#define FP_PRC_FLD	0x300	/* precision control field */
+#define	FP_RND_FLD	0xc00	/* rounding control field */
 
 /*
- * FP register bit field masks
+ * FPU status word bit-field masks.
  */
-#define FP_MSKS_FLD	0x3f	/* exception masks field */
-#define FP_PRC_FLD	0x300	/* precision control field */
-#define FP_RND_FLD	0xc00	/* round control field */
 #define FP_STKY_FLD	0x3f	/* sticky flags field */
 
 /*
- * FP register bit field offsets
+ * FPU control word bit-field offsets (shift counts).
  */
 #define FP_MSKS_OFF	0	/* exception masks offset */
 #define FP_PRC_OFF	8	/* precision control offset */
-#define FP_RND_OFF	10	/* round control offset */
+#define	FP_RND_OFF	10	/* rounding control offset */
+
+/*
+ * FPU status word bit-field offsets (shift counts).
+ */
 #define FP_STKY_OFF	0	/* sticky flags offset */
 
 #ifdef __GNUCLIKE_ASM
 
+#define	__fldcw(addr)	__asm __volatile("fldcw %0" : : "m" (*(addr)))
 #define	__fldenv(addr)	__asm __volatile("fldenv %0" : : "m" (*(addr)))
+#define	__fnclex()	__asm __volatile("fnclex")
+#define	__fnstcw(addr)	__asm __volatile("fnstcw %0" : "=m" (*(addr)))
 #define	__fnstenv(addr)	__asm __volatile("fnstenv %0" : "=m" (*(addr)))
-#define	__fnstcw(addr)	__asm __volatile("fnstcw %0" : "=m" (*(addr)))
 #define	__fnstsw(addr)	__asm __volatile("fnstsw %0" : "=m" (*(addr)))
 
 /*
- * return the contents of a FP register
+ * Load the control word.  Be careful not to trap if there is a currently
+ * unmasked exception (ones that will become freshly unmasked are not a
+ * problem).  This case must be handled by a save/restore of the
+ * environment or even of the full x87 state.  Accessing the environment
+ * is very inefficient, so only do it when necessary.
  */
-static __inline__ int
-__fpgetreg(int _reg)
+static __inline void
+__fnldcw(unsigned short _cw, unsigned short _newcw)
 {
-	unsigned short _mem;
+	struct {
+		unsigned _cw;
+		unsigned _other[6];
+	} _env;
+	unsigned short _sw;
 
-	/*-
-	 * This is more efficient than it looks.  The switch gets optimized
-	 * away if _reg is constant.
-	 *
-	 * The default case only supports _reg == 0.  We could handle more
-	 * registers (e.g., tags) using fnstenv, but the interface doesn't
-	 * support more.
-	 */
-	switch(_reg) {
-	default:
-		__fnstcw(&_mem);
-		break;
-	case FP_STKY_REG:
-		__fnstsw(&_mem);
-		break;
+	if ((_cw & FP_MSKS_FLD) != FP_MSKS_FLD) {
+		__fnstsw(&_sw);
+		if (((_sw & ~_cw) & FP_STKY_FLD) != 0) {
+			__fnstenv(&_env);
+			_env._cw = _newcw;
+			__fldenv(&_env);
+			return;
+		}
 	}
-	return _mem;
+	__fldcw(&_newcw);
+}
+
+static __inline fp_rnd_t
+fpgetround(void)
+{
+	unsigned short _cw;
+
+	__fnstcw(&_cw);
+	return ((fp_rnd_t)((_cw & FP_RND_FLD) >> FP_RND_OFF));
+}
+
+static __inline fp_rnd_t
+fpsetround(fp_rnd_t _m)
+{
+	fp_rnd_t _p;
+	unsigned short _cw, _newcw;
+
+	__fnstcw(&_cw);
+	_p = (fp_rnd_t)((_cw & FP_RND_FLD) >> FP_RND_OFF);
+	_newcw = _cw & ~FP_RND_FLD;
+	_newcw |= (_m << FP_RND_OFF) & FP_RND_FLD;
+	__fnldcw(_cw, _newcw);
+	return (_p);
+}
+
+static __inline fp_prec_t
+fpgetprec(void)
+{
+	unsigned short _cw;
+
+	__fnstcw(&_cw);
+	return ((fp_prec_t)((_cw & FP_PRC_FLD) >> FP_PRC_OFF));
+}
+
+static __inline fp_prec_t
+fpsetprec(fp_prec_t _m)
+{
+	fp_prec_t _p;
+	unsigned short _cw, _newcw;
+
+	__fnstcw(&_cw);
+	_p = (fp_prec_t)((_cw & FP_PRC_FLD) >> FP_PRC_OFF);
+	_newcw = _cw & ~FP_PRC_FLD;
+	_newcw |= (_m << FP_PRC_OFF) & FP_PRC_FLD;
+	__fnldcw(_cw, _newcw);
+	return (_p);
 }
 
 /*
- * set a FP mode; return previous mode
+ * Get or set the exception mask.
+ * Note that the x87 mask bits are inverted by the API -- a mask bit of 1
+ * means disable for x87 and SSE, but for fp*mask() it means enable.
  */
-static __inline__ int
-__fpsetreg(int _m, int _reg, int _fld, int _off)
+
+static __inline fp_except_t
+fpgetmask(void)
+{
+	unsigned short _cw;
+
+	__fnstcw(&_cw);
+	return ((~_cw & FP_MSKS_FLD) >> FP_MSKS_OFF);
+}
+
+static __inline fp_except_t
+fpsetmask(fp_except_t _m)
+{
+	fp_except_t _p;
+	unsigned short _cw, _newcw;
+
+	__fnstcw(&_cw);
+	_p = (~_cw & FP_MSKS_FLD) >> FP_MSKS_OFF;
+	_newcw = _cw & ~FP_MSKS_FLD;
+	_newcw |= (~_m << FP_MSKS_OFF) & FP_MSKS_FLD;
+	__fnldcw(_cw, _newcw);
+	return (_p);
+}
+
+static __inline fp_except_t
+fpgetsticky(void)
+{
+	unsigned _ex;
+	unsigned short _sw;
+
+	__fnstsw(&_sw);
+	_ex = (_sw & FP_STKY_FLD) >> FP_STKY_OFF;
+	return ((fp_except_t)_ex);
+}
+
+static __inline fp_except_t
+fpresetsticky(fp_except_t _m)
 {
-	unsigned _env[7];
-	unsigned _p;
+	struct {
+		unsigned _cw;
+		unsigned _sw;
+		unsigned _other[5];
+	} _env;
+	fp_except_t _p;
 
-	/*
-	 * _reg == 0 could be handled better using fnstcw/fldcw.
-	 */
-	__fnstenv(_env);
-	_p =  (_env[_reg] & _fld) >> _off;
-	_env[_reg] = (_env[_reg] & ~_fld) | (_m << _off & _fld);
-	__fldenv(_env);
-	return _p;
+	_m &= FP_STKY_FLD >> FP_STKY_OFF;
+	_p = fpgetsticky();
+	if ((_p & ~_m) == _p)
+		return (_p);
+	if ((_p & ~_m) == 0) {
+		__fnclex();
+		return (_p);
+	}
+	__fnstenv(&_env);
+	_env._sw &= ~_m;
+	__fldenv(&_env);
+	return (_p);
 }
 
 #endif /* __GNUCLIKE_ASM */
 
-/*
- * SysV/386 FP control interface
- */
-#define	fpgetround()	((fp_rnd_t)					\
-	((__fpgetreg(FP_RND_REG) & FP_RND_FLD) >> FP_RND_OFF))
-#define	fpsetround(m)	((fp_rnd_t)					\
-	__fpsetreg((m), FP_RND_REG, FP_RND_FLD, FP_RND_OFF))
-#define	fpgetprec()	((fp_prec_t)					\
-	((__fpgetreg(FP_PRC_REG) & FP_PRC_FLD) >> FP_PRC_OFF))
-#define	fpsetprec(m)	((fp_prec_t)					\
-	__fpsetreg((m), FP_PRC_REG, FP_PRC_FLD, FP_PRC_OFF))
-#define	fpgetmask()	((fp_except_t)					\
-	((~__fpgetreg(FP_MSKS_REG) & FP_MSKS_FLD) >> FP_MSKS_OFF))
-#define	fpsetmask(m)	((fp_except_t)					\
-	(~__fpsetreg(~(m), FP_MSKS_REG, FP_MSKS_FLD, FP_MSKS_OFF)) &	\
-	    (FP_MSKS_FLD >> FP_MSKS_OFF))
-#define	fpgetsticky()	((fp_except_t)					\
-	((__fpgetreg(FP_STKY_REG) & FP_STKY_FLD) >> FP_STKY_OFF))
-#define	fpresetsticky(m) ((fp_except_t)					\
-	__fpsetreg(0, FP_STKY_REG, (m), FP_STKY_OFF))
-
 /* Suppress prototypes in the MI header. */
 #define	_IEEEFP_INLINED_	1
 

==== //depot/projects/dtrace/src/sys/kern/kern_lock.c#15 (text+ko) ====

@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_lock.c,v 1.118 2008/01/09 00:02:43 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_lock.c,v 1.119 2008/01/11 16:38:12 attilio Exp $");
 
 #include "opt_ddb.h"
 #include "opt_global.h"
@@ -546,16 +546,19 @@
 	struct thread *td;
 
 	td = curthread;
-	KASSERT(lkp->lk_exclusivecount,
+	KASSERT(panicstr != NULL || lkp->lk_exclusivecount,
 	    ("%s: %p lockmgr must be exclusively locked", __func__, lkp));
-	KASSERT(lkp->lk_lockholder == td || lkp->lk_lockholder == LK_KERNPROC,
+	KASSERT(panicstr != NULL || lkp->lk_lockholder == td ||
+	    lkp->lk_lockholder == LK_KERNPROC,
 	    ("%s: %p lockmgr must be locked by curthread (%p)", __func__, lkp,
 	    td));
 
 	/*
 	 * Drop the lock reference and switch the owner.  This will result
 	 * in an atomic operation like td_lock is only accessed by curthread
-	 * and lk_lockholder only needs one write.
+	 * and lk_lockholder only needs one write.  Note also that the lock
+	 * owner can be alredy KERNPROC, so in that case just skip the
+	 * decrement.
 	 */
 	if (lkp->lk_lockholder == td)
 		td->td_locks--;

==== //depot/projects/dtrace/src/sys/nfsclient/nfs_socket.c#15 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_socket.c,v 1.156 2008/01/10 23:36:00 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_socket.c,v 1.157 2008/01/11 23:57:39 jhb Exp $");
 
 /*
  * Socket operations for use by nfs
@@ -264,7 +264,22 @@
 	int error, rcvreserve, sndreserve;
 	int pktscale;
 	struct sockaddr *saddr;
-	struct thread *td = curthread; /* only used for socreate and sobind */
+	struct ucred *origcred;
+	struct thread *td = curthread;
+
+	/*
+	 * We need to establish the socket using the credentials of
+	 * the mountpoint.  Some parts of this process (such as
+	 * sobind() and soconnect()) will use the curent thread's
+	 * credential instead of the socket credential.  To work
+	 * around this, temporarily change the current thread's
+	 * credential to that of the mountpoint.
+	 *
+	 * XXX: It would be better to explicitly pass the correct
+	 * credential to sobind() and soconnect().
+	 */
+	origcred = td->td_ucred;
+	td->td_ucred = nmp->nm_mountp->mnt_cred;
 
 	if (nmp->nm_sotype == SOCK_STREAM) {
 		mtx_lock(&nmp->nm_mtx);
@@ -453,6 +468,9 @@
 	so->so_snd.sb_flags |= SB_NOINTR;
 	SOCKBUF_UNLOCK(&so->so_snd);
 
+	/* Restore current thread's credentials. */
+	td->td_ucred = origcred;
+
 	mtx_lock(&nmp->nm_mtx);
 	/* Initialize other non-zero congestion variables */
 	nfs_init_rtt(nmp);
@@ -463,6 +481,9 @@
 	return (0);
 
 bad:
+	/* Restore current thread's credentials. */
+	td->td_ucred = origcred;
+
 	nfs_disconnect(nmp);
 	return (error);
 }

==== //depot/projects/dtrace/src/usr.bin/systat/ifstat.c#6 (text+ko) ====

@@ -25,7 +25,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/usr.bin/systat/ifstat.c,v 1.6 2006/11/27 16:59:08 yar Exp $
+ * $FreeBSD: src/usr.bin/systat/ifstat.c,v 1.7 2008/01/12 00:11:26 delphij Exp $
  */
 
 #include <sys/types.h>
@@ -37,6 +37,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <err.h>
+#include <errno.h>
 
 #include "systat.h"
 #include "extern.h"
@@ -210,10 +211,9 @@
 	SLIST_INIT(&curlist);

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



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