PERFORCE change 52422 for review

Peter Wemm peter at FreeBSD.org
Fri May 7 07:39:58 PDT 2004


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

Change 52422 by peter at peter_daintree on 2004/05/07 07:39:13

	IFC @52413

Affected files ...

.. //depot/projects/hammer/etc/rc.d/power_profile#3 integrate
.. //depot/projects/hammer/share/man/man4/acpi.4#22 integrate
.. //depot/projects/hammer/share/man/man5/link.5#4 integrate
.. //depot/projects/hammer/share/man/man5/style.Makefile.5#4 integrate
.. //depot/projects/hammer/share/mk/bsd.lib.mk#19 integrate
.. //depot/projects/hammer/sys/conf/files.ia64#17 integrate
.. //depot/projects/hammer/sys/dev/acpica/acpi_cpu.c#18 integrate
.. //depot/projects/hammer/sys/dev/ctau/if_ct.c#2 integrate
.. //depot/projects/hammer/sys/dev/cx/if_cx.c#3 integrate
.. //depot/projects/hammer/sys/ia64/ia64/interrupt.c#14 integrate
.. //depot/projects/hammer/sys/ia64/ia64/trap.c#24 integrate
.. //depot/projects/hammer/sys/vm/vm_glue.c#27 integrate

Differences ...

==== //depot/projects/hammer/etc/rc.d/power_profile#3 (text+ko) ====

@@ -5,7 +5,7 @@
 #
 # Arguments: 0x00 (AC offline, economy) or 0x01 (AC online, performance)
 #
-# $FreeBSD: src/etc/rc.d/power_profile,v 1.2 2004/03/08 12:25:05 pjd Exp $
+# $FreeBSD: src/etc/rc.d/power_profile,v 1.3 2004/05/07 05:22:38 njl Exp $
 #
 
 # PROVIDE: power_profile
@@ -71,9 +71,9 @@
 
 # Set the various sysctls based on the profile's values.
 node="hw.acpi.cpu.cx_lowest"
-highest_value=0
+highest_value="C1"
 lowest_value="$(sysctl -n hw.acpi.cpu.cx_supported | \
-	awk '{ print split($0, a) - 1 }' - 2> /dev/null)"
+	awk '{ print "C" split($0, a) }' - 2> /dev/null)"
 eval value=\$${profile}_cx_lowest
 sysctl_set
 

==== //depot/projects/hammer/share/man/man4/acpi.4#22 (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/acpi.4,v 1.33 2004/04/20 17:45:47 njl Exp $
+.\" $FreeBSD: src/share/man/man4/acpi.4,v 1.34 2004/05/07 05:22:37 njl Exp $
 .\"
 .Dd July 2, 2001
 .Dt ACPI 4
@@ -366,19 +366,21 @@
 .Va hw.acpi.cpu.cx_lowest
 is modified.
 .It Va hw.acpi.cpu.cx_lowest
-Zero-based index of the lowest CPU idle state to use.
-A scheduling algorithm will select between 0...index for the state
-to use during the next sleep.
+Lowest Cx state to use for idling the CPU.
+A scheduling algorithm will select states between C1 and this setting
+as system load dictates.
 To enable ACPI CPU idling control,
 .Va machdep.cpu_idle_hlt
 must be set to 1.
 .It Va hw.acpi.cpu.cx_supported
 List of supported CPU idle states and their transition latency
 in microseconds.
-Each state has a type, C1-3.
+Each state has a type (e.g., C2.)
 C1 is equivalent to the ia32 HLT instruction, C2 provides a deeper
 sleep with the same semantics, and C3 provides the deepest sleep
 but additionally requires bus mastering to be disabled.
+States greater than C3 provide even more power savings with the same
+semantics as the C3 state.
 Deeper sleeps provide more power savings but increased transition
 latency when an interrupt occurs.
 .El

==== //depot/projects/hammer/share/man/man5/link.5#4 (text+ko) ====

@@ -26,7 +26,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/share/man/man5/link.5,v 1.26 2003/09/08 19:57:20 ru Exp $
+.\" $FreeBSD: src/share/man/man5/link.5,v 1.27 2004/05/07 13:00:01 brueffer Exp $
 .\"
 .Dd October 23, 1993
 .Dt LINK 5
@@ -295,7 +295,7 @@
 .Fa sod
 structure that was responsible for loading this shared object.
 .It Fa som_sodbase
-Tossed in later versions the run-time linker.
+Tossed out in later versions of the run-time linker.
 .It Fa som_write
 Set if (some portion of) this object's text segment is currently writable.
 .It Fa som_dynamic
@@ -393,7 +393,7 @@
 Virtual address of next rt_symbol.
 .It Fa rt_link
 Next in hash bucket.
-Used by internally by
+Used internally by
 .Nm ld.so .
 .It Fa rt_srcaddr
 Location of the source of initialized data within a shared object.
@@ -436,7 +436,7 @@
 .It Fa dd_sym_loaded
 Set by the run-time linker whenever it adds symbols by loading shared objects.
 .It Fa dd_bpt_addr
-The address were a breakpoint will be set by the run-time linker to
+The address where a breakpoint will be set by the run-time linker to
 divert control to the debugger.
 This address is determined by the start-up
 module,

==== //depot/projects/hammer/share/man/man5/style.Makefile.5#4 (text+ko) ====

@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man5/style.Makefile.5,v 1.7 2003/09/08 19:57:20 ru Exp $
+.\" $FreeBSD: src/share/man/man5/style.Makefile.5,v 1.8 2004/05/07 09:59:03 des Exp $
 .\"
 .Dd February 28, 2003
 .Dt STYLE.MAKEFILE 5
@@ -70,7 +70,7 @@
 The general
 .Dq product
 order is:
-.Va PROG Ns / Ns Va LIB Ns / Ns Va SCRIPT
+.Va PROG Ns / Ns Oo Va SH Oc Ns Va LIB Ns / Ns Va SCRIPT
 .Va FILES
 .Va LINKS
 .Oo Va NO Oc Ns Va MAN
@@ -84,7 +84,7 @@
 The general
 .Dq build
 order is:
-.Va PROG Ns / Ns Va LIB Ns / Ns Va SCRIPT
+.Va PROG Ns / Ns Oo Va SH Oc Ns Va LIB Ns / Ns Va SCRIPT
 .Va SRCS
 .Va WARNS
 .Va CFLAGS

==== //depot/projects/hammer/share/mk/bsd.lib.mk#19 (text+ko) ====

@@ -1,5 +1,5 @@
 #	from: @(#)bsd.lib.mk	5.26 (Berkeley) 5/2/91
-# $FreeBSD: src/share/mk/bsd.lib.mk,v 1.159 2004/03/15 17:01:31 trhodes Exp $
+# $FreeBSD: src/share/mk/bsd.lib.mk,v 1.160 2004/05/07 09:58:36 des Exp $
 #
 
 .include <bsd.init.mk>
@@ -12,8 +12,11 @@
 .undef SHLIB_NAME
 .undef INSTALL_PIC_ARCHIVE
 .else
-.if !defined(SHLIB_NAME) && defined(LIB) && defined(SHLIB_MAJOR)
-SHLIB_NAME=	lib${LIB}.so.${SHLIB_MAJOR}
+.if !defined(SHLIB) && defined(LIB)
+SHLIB=		${LIB}
+.endif
+.if !defined(SHLIB_NAME) && defined(SHLIB) && defined(SHLIB_MAJOR)
+SHLIB_NAME=	lib${SHLIB}.so.${SHLIB_MAJOR}
 .endif
 .if defined(SHLIB_NAME) && !empty(SHLIB_NAME:M*.so.*)
 SHLIB_LINK?=	${SHLIB_NAME:R}

==== //depot/projects/hammer/sys/conf/files.ia64#17 (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.ia64,v 1.65 2004/03/20 21:06:20 alc Exp $
+# $FreeBSD: src/sys/conf/files.ia64,v 1.66 2004/05/07 03:56:00 marcel Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -36,13 +36,10 @@
 contrib/ia64/libuwx/src/uwx_context.c		standard
 contrib/ia64/libuwx/src/uwx_env.c		standard
 contrib/ia64/libuwx/src/uwx_scoreboard.c	standard
-#contrib/ia64/libuwx/src/uwx_self.c		standard
-#contrib/ia64/libuwx/src/uwx_self_context.s	standard
 contrib/ia64/libuwx/src/uwx_step.c		standard
 contrib/ia64/libuwx/src/uwx_str.c		standard
 contrib/ia64/libuwx/src/uwx_swap.c		standard
 contrib/ia64/libuwx/src/uwx_trace.c		standard
-#contrib/ia64/libuwx/src/uwx_ttrace.c		standard
 contrib/ia64/libuwx/src/uwx_uinfo.c		standard
 contrib/ia64/libuwx/src/uwx_utable.c		standard
 crypto/blowfish/bf_enc.c	optional	crypto

==== //depot/projects/hammer/sys/dev/acpica/acpi_cpu.c#18 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cpu.c,v 1.35 2004/05/06 17:25:23 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cpu.c,v 1.36 2004/05/07 05:22:37 njl Exp $");
 
 #include "opt_acpi.h"
 #include <sys/param.h>
@@ -739,10 +739,8 @@
 
     sc = device_get_softc(cpu_devices[0]);
     sbuf_new(&sb, cpu_cx_supported, sizeof(cpu_cx_supported), SBUF_FIXEDLEN);
-    for (i = 0; i < cpu_cx_count; i++) {
-	sbuf_printf(&sb, "C%d/%d ", sc->cpu_cx_states[i].type,
-		    sc->cpu_cx_states[i].trans_lat);
-    }
+    for (i = 0; i < cpu_cx_count; i++)
+	sbuf_printf(&sb, "C%d/%d ", i + 1, sc->cpu_cx_states[i].trans_lat);
     sbuf_trim(&sb);
     sbuf_finish(&sb);
     SYSCTL_ADD_STRING(&acpi_cpu_sysctl_ctx,
@@ -751,8 +749,8 @@
 		      0, "Cx/microsecond values for supported Cx states");
     SYSCTL_ADD_PROC(&acpi_cpu_sysctl_ctx,
 		    SYSCTL_CHILDREN(acpi_cpu_sysctl_tree),
-		    OID_AUTO, "cx_lowest", CTLTYPE_INT | CTLFLAG_RW,
-		    NULL, 0, acpi_cpu_cx_lowest_sysctl, "I",
+		    OID_AUTO, "cx_lowest", CTLTYPE_STRING | CTLFLAG_RW,
+		    NULL, 0, acpi_cpu_cx_lowest_sysctl, "A",
 		    "lowest Cx sleep state to use");
     SYSCTL_ADD_PROC(&acpi_cpu_sysctl_ctx,
 		    SYSCTL_CHILDREN(acpi_cpu_sysctl_tree),
@@ -1085,7 +1083,8 @@
     }
     sbuf_trim(&sb);
     sbuf_finish(&sb);
-    sysctl_handle_string(oidp, sbuf_data(&sb), 0, req);
+    sysctl_handle_string(oidp, sbuf_data(&sb), sbuf_len(&sb), req);
+    sbuf_delete(&sb);
 
     return (0);
 }
@@ -1094,13 +1093,17 @@
 acpi_cpu_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS)
 {
     struct	 acpi_cpu_softc *sc;
+    char	 state[8];
     int		 val, error, i;
 
     sc = device_get_softc(cpu_devices[0]);
-    val = cpu_cx_lowest;
-    error = sysctl_handle_int(oidp, &val, 0, req);
+    snprintf(state, sizeof(state), "C%d", cpu_cx_lowest + 1);
+    error = sysctl_handle_string(oidp, state, sizeof(state), req);
     if (error != 0 || req->newptr == NULL)
 	return (error);
+    if (strlen(state) < 2 || toupper(state[0]) != 'C')
+	return (EINVAL);
+    val = (int) strtol(state + 1, NULL, 10) - 1;
     if (val < 0 || val > cpu_cx_count - 1)
 	return (EINVAL);
 

==== //depot/projects/hammer/sys/dev/ctau/if_ct.c#2 (text+ko) ====

@@ -21,7 +21,7 @@
  * Cronyx Id: if_ct.c,v 1.1.2.22 2004/02/26 19:06:51 rik Exp $
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ctau/if_ct.c,v 1.2 2004/03/02 16:39:40 rik Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ctau/if_ct.c,v 1.4 2004/05/07 11:59:54 rik Exp $");
 
 #include <sys/param.h>
  
@@ -64,7 +64,7 @@
 #   include <i386/isa/intr_machdep.h>
 #   endif
 #endif
-#if __FreeBSD_version >= 500000
+#if __FreeBSD_version >= 400000
 #include <dev/cx/machdep.h>
 #include <dev/ctau/ctddk.h>
 #include <dev/cx/cronyxfw.h>
@@ -78,7 +78,7 @@
 #   include "opt_netgraph.h"
 #   include <netgraph/ng_message.h>
 #   include <netgraph/netgraph.h>
-#if __FreeBSD_version >= 500000
+#if __FreeBSD_version >= 400000
 #   include <dev/ctau/ng_ct.h>
 #else
 #   include <netgraph/ng_ct.h>
@@ -107,6 +107,11 @@
 #endif
 #endif
 
+/* If we don't have Cronyx's sppp version, we don't have fr support via sppp */
+#ifndef PP_FR
+#define PP_FR 0
+#endif
+
 #define CT_DEBUG(d,s)	({if (d->chan->debug) {\
 				printf ("%s: ", d->name); printf s;}})
 #define CT_DEBUG2(d,s)	({if (d->chan->debug>1) {\
@@ -1333,7 +1338,7 @@
 
 #ifndef NETGRAPH
 	case SERIAL_GETPROTO:
-	        strcpy ((char*)data, /*(d->pp.pp_flags & PP_FR) ? "fr" :*/
+	        strcpy ((char*)data, (d->pp.pp_flags & PP_FR) ? "fr" :
 	                (d->pp.pp_if.if_flags & PP_CISCO) ? "cisco" : "ppp");
 	        return 0;
 
@@ -1351,21 +1356,21 @@
 		if (d->pp.pp_if.if_flags & IFF_RUNNING)
 			return EBUSY;
 	        if (! strcmp ("cisco", (char*)data)) {
-/*	                d->pp.pp_flags &= ~(PP_FR);*/
+	                d->pp.pp_flags &= ~(PP_FR);
 	                d->pp.pp_flags |= PP_KEEPALIVE;
 	                d->pp.pp_if.if_flags |= PP_CISCO;
-/*	        } else if (! strcmp ("fr", (char*)data)) {
+	        } else if (! strcmp ("fr", (char*)data)) {
 	                d->pp.pp_if.if_flags &= ~(PP_CISCO);
-	                d->pp.pp_flags |= PP_FR | PP_KEEPALIVE;*/
+	                d->pp.pp_flags |= PP_FR | PP_KEEPALIVE;
 	        } else if (! strcmp ("ppp", (char*)data)) {
-	                d->pp.pp_flags &= ~(/*PP_FR | */PP_KEEPALIVE);
+	                d->pp.pp_flags &= ~(PP_FR | PP_KEEPALIVE);
 	                d->pp.pp_if.if_flags &= ~(PP_CISCO);
 	        } else
 			return EINVAL;
 	        return 0;
 
 	case SERIAL_GETKEEPALIVE:
-		if (/*(d->pp.pp_flags & PP_FR) ||*/
+		if ((d->pp.pp_flags & PP_FR) ||
 			(d->pp.pp_if.if_flags & PP_CISCO))
 			return EINVAL;
 	        *(int*)data = (d->pp.pp_flags & PP_KEEPALIVE) ? 1 : 0;
@@ -1382,7 +1387,7 @@
 #endif /* __FreeBSD_version >= 500000 */
 	        if (error)
 	                return error;
-		if (/*(d->pp.pp_flags & PP_FR) ||*/
+		if ((d->pp.pp_flags & PP_FR) ||
 			(d->pp.pp_if.if_flags & PP_CISCO))
 			return EINVAL;
 	        if (*(int*)data)

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

@@ -22,7 +22,7 @@
  * Cronyx Id: if_cx.c,v 1.1.2.23 2004/02/26 17:56:40 rik Exp $
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.7 2004/03/02 16:44:07 rik Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cx/if_cx.c,v 1.10 2004/05/07 11:45:25 rik Exp $");
 
 #include <sys/param.h>
 
@@ -67,7 +67,7 @@
 #       include <i386/isa/intr_machdep.h>
 #   endif
 #endif
-#if __FreeBSD_version >= 500000
+#if __FreeBSD_version >= 400000
 #   include <dev/cx/machdep.h>
 #   include <dev/cx/cxddk.h>
 #   include <dev/cx/cronyxfw.h>
@@ -81,7 +81,7 @@
 #   include "opt_netgraph.h"
 #   include <netgraph/ng_message.h>
 #   include <netgraph/netgraph.h>
-#   if __FreeBSD_version >= 500000
+#   if __FreeBSD_version >= 400000
 #       include <dev/cx/ng_cx.h>
 #   else
 #       include <netgraph/ng_cx.h>
@@ -91,7 +91,7 @@
 #   if __FreeBSD_version < 500000
 #   include "sppp.h"
 #   if NSPPP <= 0
-#	error The device cp requires sppp or netgraph.
+#	error The device cx requires sppp or netgraph.
 #   endif
 #   endif
 #   include <net/if_sppp.h>
@@ -110,6 +110,11 @@
 #endif
 #endif
 
+/* If we don't have Cronyx's sppp version, we don't have fr support via sppp */
+#ifndef PP_FR
+#define PP_FR 0
+#endif
+
 #define CX_DEBUG(d,s)	({if (d->chan->debug) {\
 				printf ("%s: ", d->name); printf s;}})
 #define CX_DEBUG2(d,s)	({if (d->chan->debug>1) {\
@@ -226,7 +231,6 @@
 static swihand_t cx_softintr;
 #else
 static void cx_softintr (void *);
-static void *cx_slow_ih;
 static void *cx_fast_ih;
 #endif
 static void cx_down (drv_t *d);
@@ -1810,7 +1814,7 @@
 	        CX_DEBUG2 (d, ("ioctl: getproto\n"));
 		s = splhigh ();
 	        strcpy ((char*)data, (c->mode == M_ASYNC) ? "async" :
-			/*(d->pp.pp_flags & PP_FR) ? "fr" :*/
+			(d->pp.pp_flags & PP_FR) ? "fr" :
 			(d->pp.pp_if.if_flags & PP_CISCO) ? "cisco" : "ppp");
 		splx (s);
 	        return 0;
@@ -1832,14 +1836,14 @@
 		if (d->pp.pp_if.if_flags & IFF_RUNNING)
 			return EBUSY;
 	        if (! strcmp ("cisco", (char*)data)) {
-/*	                d->pp.pp_flags &= ~(PP_FR);*/
+	                d->pp.pp_flags &= ~(PP_FR);
 	                d->pp.pp_flags |= PP_KEEPALIVE;
 	                d->pp.pp_if.if_flags |= PP_CISCO;
-/*	        } else if (! strcmp ("fr", (char*)data)) {*/
-/*	                d->pp.pp_if.if_flags &= ~(PP_CISCO);*/
-/*	                d->pp.pp_flags |= PP_FR | PP_KEEPALIVE;*/
+	        } else if (! strcmp ("fr", (char*)data)) {
+	                d->pp.pp_if.if_flags &= ~(PP_CISCO);
+	                d->pp.pp_flags |= PP_FR | PP_KEEPALIVE;
 	        } else if (! strcmp ("ppp", (char*)data)) {
-	                d->pp.pp_flags &= ~(/*PP_FR |*/ PP_KEEPALIVE);
+	                d->pp.pp_flags &= ~(PP_FR | PP_KEEPALIVE);
 	                d->pp.pp_if.if_flags &= ~(PP_CISCO);
 	        } else
 			return EINVAL;
@@ -1847,7 +1851,7 @@
 
 	case SERIAL_GETKEEPALIVE:
 	        CX_DEBUG2 (d, ("ioctl: getkeepalive\n"));
-	        if (/*(d->pp.pp_flags & PP_FR) ||*/
+	        if ((d->pp.pp_flags & PP_FR) ||
 		    (d->pp.pp_if.if_flags & PP_CISCO) ||
 		    (c->mode == M_ASYNC))
 			return EINVAL;
@@ -1868,7 +1872,7 @@
 #endif /* __FreeBSD_version >= 500000 */
 	        if (error)
 	                return error;
-	        if (/*(d->pp.pp_flags & PP_FR) ||*/
+	        if ((d->pp.pp_flags & PP_FR) ||
 			(d->pp.pp_if.if_flags & PP_CISCO))
 			return EINVAL;
 		s = splhigh ();
@@ -3145,8 +3149,6 @@
 #else
 		swi_add(&tty_ithd, "tty:cx", cx_softintr, NULL, SWI_TTY, 0,
 		    &cx_fast_ih);
-		swi_add(&clk_ithd, "tty:cx", cx_softintr, NULL, SWI_TTY, 0,
-		    &cx_slow_ih);
 #endif
 		break;
 	case MOD_UNLOAD:
@@ -3163,7 +3165,6 @@
 			untimeout (cx_timeout, 0, timeout_handle);
 #if __FreeBSD_version >= 500000
 		ithread_remove_handler (cx_fast_ih);
-		ithread_remove_handler (cx_slow_ih);
 #else
 		unregister_swi (SWI_TTY, cx_softintr);
 #endif

==== //depot/projects/hammer/sys/ia64/ia64/interrupt.c#14 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/ia64/ia64/interrupt.c,v 1.44 2004/01/20 02:35:46 marcel Exp $ */
+/* $FreeBSD: src/sys/ia64/ia64/interrupt.c,v 1.45 2004/05/07 05:29:12 marcel Exp $ */
 /* $NetBSD: interrupt.c,v 1.23 1998/02/24 07:38:01 thorpej Exp $ */
 
 /*
@@ -52,6 +52,7 @@
 
 #include <machine/clock.h>
 #include <machine/cpu.h>
+#include <machine/fpu.h>
 #include <machine/frame.h>
 #include <machine/intr.h>
 #include <machine/md_var.h>
@@ -132,6 +133,8 @@
 	int64_t delta;
 	int count;
 
+	ia64_set_fpsr(IA64_FPSR_DEFAULT);
+
 	td = curthread;
 	atomic_add_int(&td->td_intr_nesting_level, 1);
 

==== //depot/projects/hammer/sys/ia64/ia64/trap.c#24 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ia64/ia64/trap.c,v 1.98 2004/05/03 04:13:31 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/ia64/ia64/trap.c,v 1.99 2004/05/07 05:35:31 marcel Exp $");
 
 #include "opt_ddb.h"
 #include "opt_ktrace.h"
@@ -358,9 +358,6 @@
 
 	user = TRAPF_USERMODE(tf) ? 1 : 0;
 
-	/* Sanitize the FP state in case the user has trashed it. */
-	ia64_set_fpsr(IA64_FPSR_DEFAULT);
-
 	atomic_add_int(&cnt.v_trap, 1);
 
 	td = curthread;
@@ -368,6 +365,7 @@
 	ucode = 0;
 
 	if (user) {
+		ia64_set_fpsr(IA64_FPSR_DEFAULT);
 		sticks = td->td_sticks;
 		td->td_frame = tf;
 		if (td->td_ucred != p->p_ucred)
@@ -668,10 +666,11 @@
 		FPSWA_BUNDLE bundle;
 		char *ip;
 
+		/* Always fatal in kernel. Should never happen. */
+		if (!user)
+			trap_panic(vector, tf);
+
 		if (fpswa_interface == NULL) {
-			if (!user)
-				trap_panic(vector, tf);
-
 			sig = SIGFPE;
 			ucode = 0;
 			break;
@@ -681,15 +680,12 @@
 		if (vector == IA64_VEC_FLOATING_POINT_TRAP &&
 		    (tf->tf_special.psr & IA64_PSR_RI) == 0)
 			ip -= 16;
-		if (user) {
-			error = copyin(ip, &bundle, 16);
-			if (error) {
-				sig = SIGBUS;	/* EFAULT, basically */
-				ucode = 0;	/* exception summary */
-				break;
-			}
-		} else
-			bcopy(ip, &bundle, 16);
+		error = copyin(ip, &bundle, 16);
+		if (error) {
+			sig = SIGBUS;	/* EFAULT, basically */
+			ucode = 0;	/* exception summary */
+			break;
+		}
 
 		/* f6-f15 are saved in exception_save */
 		fp_state.bitmask_low64 = 0xffc0;	/* bits 6 - 15 */
@@ -741,12 +737,11 @@
 			printf("FATAL: FPSWA err1 %lx, err2 %lx, err3 %lx\n",
 			    fpswa_ret.err1, fpswa_ret.err2, fpswa_ret.err3);
 			panic("fpswa fatal error on fp fault");
-		} else if (user) {
+		} else {
 			sig = SIGFPE;
 			ucode = 0;		/* XXX exception summary */
 			break;
-		} else
-			goto out;
+		}
 	}
 
 	case IA64_VEC_IA32_EXCEPTION:
@@ -897,6 +892,8 @@
 	int code, error;
 	u_int sticks;
 
+	ia64_set_fpsr(IA64_FPSR_DEFAULT);
+
 	code = tf->tf_scratch.gr15;
 	args = &tf->tf_scratch.gr16;
 

==== //depot/projects/hammer/sys/vm/vm_glue.c#27 (text+ko) ====

@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/vm/vm_glue.c,v 1.196 2004/04/06 20:15:36 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/vm/vm_glue.c,v 1.197 2004/05/07 11:43:24 green Exp $");
 
 #include "opt_vm.h"
 #include "opt_kstack_pages.h"
@@ -216,7 +216,7 @@
 		return (EAGAIN);
 #endif
 	error = vm_map_wire(&curproc->p_vmspace->vm_map, start, end,
-	    VM_MAP_WIRE_USER | VM_MAP_WIRE_NOHOLES);
+	    VM_MAP_WIRE_SYSTEM | VM_MAP_WIRE_NOHOLES);
 	/*
 	 * Return EFAULT on error to match copy{in,out}() behaviour
 	 * rather than returning ENOMEM like mlock() would.


More information about the p4-projects mailing list