Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Aug 2008 12:51:26 GMT
From:      Ed Schouten <ed@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 146983 for review
Message-ID:  <200808091251.m79CpQLW079780@repoman.freebsd.org>

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

Change 146983 by ed@ed_dull on 2008/08/09 12:51:01

	IFC.

Affected files ...

.. //depot/projects/mpsafetty/etc/defaults/rc.conf#3 integrate
.. //depot/projects/mpsafetty/etc/freebsd-update.conf#3 integrate
.. //depot/projects/mpsafetty/etc/rc.d/kernel#2 integrate
.. //depot/projects/mpsafetty/lib/libc/stdlib/malloc.c#3 integrate
.. //depot/projects/mpsafetty/lib/libc/sys/setfib.2#3 integrate
.. //depot/projects/mpsafetty/lib/libgeom/geom_xml2tree.c#3 integrate
.. //depot/projects/mpsafetty/sbin/ifconfig/ifconfig.8#4 integrate
.. //depot/projects/mpsafetty/sbin/ifconfig/ifieee80211.c#4 integrate
.. //depot/projects/mpsafetty/sbin/ifconfig/regdomain.c#2 integrate
.. //depot/projects/mpsafetty/share/man/man4/Makefile#4 integrate
.. //depot/projects/mpsafetty/share/man/man4/cpuctl.4#1 branch
.. //depot/projects/mpsafetty/share/man/man5/rc.conf.5#2 integrate
.. //depot/projects/mpsafetty/sys/Makefile#4 integrate
.. //depot/projects/mpsafetty/sys/amd64/amd64/pmap.c#11 integrate
.. //depot/projects/mpsafetty/sys/amd64/amd64/support.S#2 integrate
.. //depot/projects/mpsafetty/sys/amd64/conf/NOTES#3 integrate
.. //depot/projects/mpsafetty/sys/amd64/include/cpufunc.h#2 integrate
.. //depot/projects/mpsafetty/sys/amd64/include/specialreg.h#2 integrate
.. //depot/projects/mpsafetty/sys/boot/i386/boot2/boot2.c#2 integrate
.. //depot/projects/mpsafetty/sys/boot/i386/btx/btx/btx.S#2 integrate
.. //depot/projects/mpsafetty/sys/boot/i386/gptboot/gptboot.c#2 integrate
.. //depot/projects/mpsafetty/sys/boot/i386/loader/main.c#2 integrate
.. //depot/projects/mpsafetty/sys/boot/pc98/loader/main.c#2 integrate
.. //depot/projects/mpsafetty/sys/conf/files.amd64#2 integrate
.. //depot/projects/mpsafetty/sys/conf/files.i386#2 integrate
.. //depot/projects/mpsafetty/sys/dev/acpi_support/acpi_asus.c#2 integrate
.. //depot/projects/mpsafetty/sys/dev/cpuctl/cpuctl.c#1 branch
.. //depot/projects/mpsafetty/sys/dev/io/iodev.c#2 integrate
.. //depot/projects/mpsafetty/sys/dev/led/led.c#2 integrate
.. //depot/projects/mpsafetty/sys/dev/pccbb/pccbb.c#2 integrate
.. //depot/projects/mpsafetty/sys/dev/pci/pci.c#4 integrate
.. //depot/projects/mpsafetty/sys/geom/concat/g_concat.c#2 integrate
.. //depot/projects/mpsafetty/sys/geom/geom_ccd.c#2 integrate
.. //depot/projects/mpsafetty/sys/geom/geom_ctl.c#2 integrate
.. //depot/projects/mpsafetty/sys/geom/geom_disk.c#2 integrate
.. //depot/projects/mpsafetty/sys/geom/geom_kern.c#2 integrate
.. //depot/projects/mpsafetty/sys/geom/geom_slice.c#2 integrate
.. //depot/projects/mpsafetty/sys/geom/geom_subr.c#2 integrate
.. //depot/projects/mpsafetty/sys/geom/part/g_part.c#2 integrate
.. //depot/projects/mpsafetty/sys/geom/stripe/g_stripe.c#2 integrate
.. //depot/projects/mpsafetty/sys/i386/conf/NOTES#3 integrate
.. //depot/projects/mpsafetty/sys/i386/i386/support.s#2 integrate
.. //depot/projects/mpsafetty/sys/i386/include/cpufunc.h#2 integrate
.. //depot/projects/mpsafetty/sys/i386/include/specialreg.h#2 integrate
.. //depot/projects/mpsafetty/sys/kern/kern_descrip.c#3 integrate
.. //depot/projects/mpsafetty/sys/kern/subr_sbuf.c#2 integrate
.. //depot/projects/mpsafetty/sys/kern/vfs_mount.c#3 integrate
.. //depot/projects/mpsafetty/sys/modules/Makefile#5 integrate
.. //depot/projects/mpsafetty/sys/modules/cpuctl/Makefile#1 branch
.. //depot/projects/mpsafetty/sys/net80211/ieee80211_ioctl.c#2 integrate
.. //depot/projects/mpsafetty/sys/netinet/sctp_bsd_addr.c#4 integrate
.. //depot/projects/mpsafetty/sys/security/mac_portacl/mac_portacl.c#2 integrate
.. //depot/projects/mpsafetty/sys/sys/cpuctl.h#1 branch
.. //depot/projects/mpsafetty/sys/sys/param.h#3 integrate
.. //depot/projects/mpsafetty/sys/sys/priv.h#2 integrate
.. //depot/projects/mpsafetty/sys/sys/sbuf.h#2 integrate
.. //depot/projects/mpsafetty/sys/sys/socket.h#3 integrate
.. //depot/projects/mpsafetty/tools/regression/geom/ConfCmp/ConfCmp.c#2 integrate
.. //depot/projects/mpsafetty/tools/regression/geom/MdLoad/MdLoad.c#2 integrate
.. //depot/projects/mpsafetty/tools/tools/nanobsd/nanobsd.sh#3 integrate
.. //depot/projects/mpsafetty/usr.sbin/Makefile#4 integrate
.. //depot/projects/mpsafetty/usr.sbin/cpucontrol/Makefile#1 branch
.. //depot/projects/mpsafetty/usr.sbin/cpucontrol/amd.c#1 branch
.. //depot/projects/mpsafetty/usr.sbin/cpucontrol/amd.h#1 branch
.. //depot/projects/mpsafetty/usr.sbin/cpucontrol/cpucontrol.8#1 branch
.. //depot/projects/mpsafetty/usr.sbin/cpucontrol/cpucontrol.c#1 branch
.. //depot/projects/mpsafetty/usr.sbin/cpucontrol/cpucontrol.h#1 branch
.. //depot/projects/mpsafetty/usr.sbin/cpucontrol/intel.c#1 branch
.. //depot/projects/mpsafetty/usr.sbin/cpucontrol/intel.h#1 branch

Differences ...

==== //depot/projects/mpsafetty/etc/defaults/rc.conf#3 (text+ko) ====

@@ -15,7 +15,7 @@
 # For a more detailed explanation of all the rc.conf variables, please
 # refer to the rc.conf(5) manual page.
 #
-# $FreeBSD: src/etc/defaults/rc.conf,v 1.338 2008/08/01 05:15:54 dougb Exp $
+# $FreeBSD: src/etc/defaults/rc.conf,v 1.339 2008/08/09 01:19:00 obrien Exp $
 
 ##############################################################
 ###  Important initial Boot-time options  ####################
@@ -542,6 +542,7 @@
 linux_enable="NO"	# Linux binary compatibility loaded at startup (or NO).
 svr4_enable="NO"	# SysVR4 emulation loaded at startup (or NO).
 
+kernel_enable="NO"	# Symlink kernel directory to /boot/kernel if not exist.
 clear_tmp_enable="NO"	# Clear /tmp at startup.
 clear_tmp_X="YES" 	# Clear and recreate X11-related directories in /tmp
 ldconfig_insecure="NO"	# Set to YES to disable ldconfig security checks

==== //depot/projects/mpsafetty/etc/freebsd-update.conf#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/etc/freebsd-update.conf,v 1.5 2008/08/02 00:11:43 cperciva Exp $
+# $FreeBSD: src/etc/freebsd-update.conf,v 1.6 2008/08/08 10:36:16 cperciva Exp $
 
 # Trusted keyprint.  Changing this is a Bad Idea unless you've received
 # a PGP-signed email from <security-officer@FreeBSD.org> telling you to
@@ -24,6 +24,9 @@
 # Paths which start with anything matching an entry in an IDSIgnorePaths
 # statement will be ignored by "freebsd-update IDS".
 IDSIgnorePaths /usr/share/man/cat
+IDSIgnorePaths /usr/share/man/whatis
+IDSIgnorePaths /var/db/locate.database
+IDSIgnorePaths /var/log
 
 # Paths which start with anything matching an entry in an UpdateIfUnmodified
 # statement will only be updated if the contents of the file have not been

==== //depot/projects/mpsafetty/etc/rc.d/kernel#2 (text) ====

@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $FreeBSD: src/etc/rc.d/kernel,v 1.2 2006/07/30 12:54:37 mckay Exp $
+# $FreeBSD: src/etc/rc.d/kernel,v 1.3 2008/08/09 01:19:00 obrien Exp $
 #
 
 # PROVIDE: kernel
@@ -10,6 +10,7 @@
 . /etc/rc.subr
 
 name="kernel"
+rcvar=`set_rcvar`
 start_cmd="kernel_start"
 stop_cmd=":"
 

==== //depot/projects/mpsafetty/lib/libc/stdlib/malloc.c#3 (text+ko) ====

@@ -128,7 +128,7 @@
 #define	MALLOC_DSS
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/stdlib/malloc.c,v 1.173 2008/07/18 19:35:44 jasone Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/stdlib/malloc.c,v 1.174 2008/08/08 20:42:42 cperciva Exp $");
 
 #include "libc_private.h"
 #ifdef MALLOC_DEBUG
@@ -2312,7 +2312,6 @@
 arena_chunk_alloc(arena_t *arena)
 {
 	arena_chunk_t *chunk;
-	arena_run_t *run;
 	size_t i;
 
 	if (arena->spare != NULL) {
@@ -2337,8 +2336,6 @@
 		/*
 		 * Initialize the map to contain one maximal free untouched run.
 		 */
-		run = (arena_run_t *)((uintptr_t)chunk +
-		    (arena_chunk_header_npages << pagesize_2pow));
 		for (i = 0; i < arena_chunk_header_npages; i++)
 			chunk->map[i].bits = 0;
 		chunk->map[i].bits = arena_maxclass | CHUNK_MAP_ZEROED;
@@ -3536,7 +3533,7 @@
 {
 	unsigned i;
 	arena_bin_t *bin;
-	size_t pow2_size, prev_run_size;
+	size_t prev_run_size;
 
 	if (malloc_spin_init(&arena->lock))
 		return (true);
@@ -3583,7 +3580,6 @@
 
 		bin->reg_size = quantum * (i - ntbins + 1);
 
-		pow2_size = pow2_ceil(quantum * (i - ntbins + 1));
 		prev_run_size = arena_bin_run_size_calc(bin, prev_run_size);
 
 #ifdef MALLOC_STATS

==== //depot/projects/mpsafetty/lib/libc/sys/setfib.2#3 (text+ko) ====

@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/lib/libc/sys/setfib.2,v 1.3 2008/07/25 01:09:36 julian Exp $
+.\" $FreeBSD: src/lib/libc/sys/setfib.2,v 1.4 2008/08/08 22:40:04 delphij Exp $
 .\"
-.Dd May 9, 2008
+.Dd August 8, 2008
 .Dt SETFIB 2
 .Os
 .Sh NAME
@@ -33,6 +33,7 @@
 .Sh LIBRARY
 .Lb libc
 .Sh SYNOPSIS
+.In sys/socket.h
 .Ft int
 .Fn setfib "int fib"
 .Sh DESCRIPTION

==== //depot/projects/mpsafetty/lib/libgeom/geom_xml2tree.c#3 (text+ko) ====

@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/lib/libgeom/geom_xml2tree.c,v 1.6 2008/07/08 17:34:50 lulf Exp $
+ * $FreeBSD: src/lib/libgeom/geom_xml2tree.c,v 1.7 2008/08/09 11:14:05 des Exp $
  */
 
 #include <stdio.h>
@@ -68,7 +68,7 @@
 
 	mt = userData;
 	mt->level++;
-	mt->sbuf[mt->level] = sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND);
+	mt->sbuf[mt->level] = sbuf_new_auto();
 	id = NULL;
 	ref = NULL;
 	for (i = 0; attr[i] != NULL; i += 2) {

==== //depot/projects/mpsafetty/sbin/ifconfig/ifconfig.8#4 (text+ko) ====

@@ -26,9 +26,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     From: @(#)ifconfig.8	8.3 (Berkeley) 1/5/94
-.\" $FreeBSD: src/sbin/ifconfig/ifconfig.8,v 1.150 2008/08/02 18:10:14 sam Exp $
+.\" $FreeBSD: src/sbin/ifconfig/ifconfig.8,v 1.151 2008/08/09 05:37:22 sam Exp $
 .\"
-.Dd July 30, 2008
+.Dd August 8, 2008
 .Dt IFCONFIG 8
 .Os
 .Sh NAME
@@ -1233,6 +1233,8 @@
 (station supports WME),
 .Cm WPA
 (station supports WPA),
+.Cm WPS
+(station supports WPS),
 .Cm RSN
 (station supports 802.11i/RSN),
 .Cm HTCAP

==== //depot/projects/mpsafetty/sbin/ifconfig/ifieee80211.c#4 (text+ko) ====

@@ -24,7 +24,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sbin/ifconfig/ifieee80211.c,v 1.55 2008/08/02 18:10:14 sam Exp $
+ * $FreeBSD: src/sbin/ifconfig/ifieee80211.c,v 1.56 2008/08/09 05:37:22 sam Exp $
  */
 
 /*-
@@ -2441,6 +2441,79 @@
 	}
 }
 
+/* XXX move to a public include file */
+#define IEEE80211_WPS_DEV_PASS_ID	0x1012
+#define IEEE80211_WPS_SELECTED_REG	0x1041
+#define IEEE80211_WPS_SETUP_STATE	0x1044
+#define IEEE80211_WPS_UUID_E		0x1047
+#define IEEE80211_WPS_VERSION		0x104a
+
+#define BE_READ_2(p)					\
+	((u_int16_t)					\
+	 ((((const u_int8_t *)(p))[1]      ) |		\
+	  (((const u_int8_t *)(p))[0] <<  8)))
+
+static void
+printwpsie(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
+{
+#define	N(a)	(sizeof(a) / sizeof(a[0]))
+	u_int8_t len = ie[1];
+
+	printf("%s", tag);
+	if (verbose) {
+		static const char *dev_pass_id[] = {
+			"D",	/* Default (PIN) */
+			"U",	/* User-specified */
+			"M",	/* Machine-specified */
+			"K",	/* Rekey */
+			"P",	/* PushButton */
+			"R"	/* Registrar-specified */
+		};
+		int n;
+
+		ie +=6, len -= 4;		/* NB: len is payload only */
+
+		/* WPS IE in Beacon and Probe Resp frames have different fields */
+		printf("<");
+		while (len) {
+			uint16_t tlv_type = BE_READ_2(ie);
+			uint16_t tlv_len  = BE_READ_2(ie + 2);
+
+			ie += 4, len -= 4;
+
+			switch (tlv_type) {
+			case IEEE80211_WPS_VERSION:
+				printf("v:%d.%d", *ie >> 4, *ie & 0xf);
+				break;
+			case IEEE80211_WPS_SETUP_STATE:
+				/* Only 1 and 2 are valid */
+				if (*ie == 0 || *ie >= 3)
+					printf(" state:B");
+				else
+					printf(" st:%s", *ie == 1 ? "N" : "C");
+				break;
+			case IEEE80211_WPS_SELECTED_REG:
+				printf(" sel:%s", *ie ? "T" : "F");
+				break;
+			case IEEE80211_WPS_DEV_PASS_ID:
+				n = LE_READ_2(ie);
+				if (n < N(dev_pass_id))
+					printf(" dpi:%s", dev_pass_id[n]);
+				break;
+			case IEEE80211_WPS_UUID_E:
+				printf(" uuid-e:");
+				for (n = 0; n < (tlv_len - 1); n++)
+					printf("%02x-", ie[n]);
+				printf("%02x", ie[n]);
+				break;
+			}
+			ie += tlv_len, len -= tlv_len;
+		}
+		printf(">");
+	}
+#undef N
+}
+
 /*
  * Copy the ssid string contents into buf, truncating to fit.  If the
  * ssid is entirely printable then just copy intact.  Otherwise convert
@@ -2563,6 +2636,12 @@
 	return frm[1] > 3 && LE_READ_4(frm+2) == ((ATH_OUI_TYPE<<24)|ATH_OUI);
 }
 
+static __inline int
+iswpsoui(const uint8_t *frm)
+{
+	return frm[1] > 3 && LE_READ_4(frm+2) == ((WPS_OUI_TYPE<<24)|WPA_OUI);
+}
+
 static const char *
 iename(int elemid)
 {
@@ -2624,6 +2703,8 @@
 				printwmeparam(" WME", vp, 2+vp[1], maxcols);
 			else if (isatherosoui(vp))
 				printathie(" ATH", vp, 2+vp[1], maxcols);
+			else if (iswpsoui(vp))
+				printwpsie(" WPS", vp, 2+vp[1], maxcols);
 			else if (verbose)
 				printie(" VEN", vp, 2+vp[1], maxcols);
 			break;

==== //depot/projects/mpsafetty/sbin/ifconfig/regdomain.c#2 (text+ko) ====

@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #ifndef lint
-static const char rcsid[] = "$FreeBSD: src/sbin/ifconfig/regdomain.c,v 1.2 2008/05/08 14:01:42 cokane Exp $";
+static const char rcsid[] = "$FreeBSD: src/sbin/ifconfig/regdomain.c,v 1.3 2008/08/09 11:14:05 des Exp $";
 #endif /* not lint */
 
 #include <sys/types.h>
@@ -78,7 +78,7 @@
 		/* XXX force parser to abort */
 		return;
 	}
-	mt->sbuf[mt->level] = sbuf_new(NULL, NULL, 0, SBUF_AUTOEXTEND);
+	mt->sbuf[mt->level] = sbuf_new_auto();
 	id = ref = mode = NULL;
 	for (i = 0; attr[i] != NULL; i += 2) {
 		if (iseq(attr[i], "id")) {

==== //depot/projects/mpsafetty/share/man/man4/Makefile#4 (text+ko) ====

@@ -1,5 +1,5 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/18/93
-# $FreeBSD: src/share/man/man4/Makefile,v 1.422 2008/07/14 18:15:43 brueffer Exp $
+# $FreeBSD: src/share/man/man4/Makefile,v 1.423 2008/08/08 16:26:53 stas Exp $
 
 MAN=	aac.4 \
 	acpi.4 \
@@ -52,6 +52,7 @@
 	cmx.4 \
 	coda.4 \
 	${_coretemp.4} \
+	${_cpuctl.4} \
 	cpufreq.4 \
 	crypto.4 \
 	cue.4 \
@@ -552,6 +553,7 @@
 _amdsmb.4=	amdsmb.4
 _asmc.4=	asmc.4
 _coretemp.4=	coretemp.4
+_cpuctl.4=	cpuctl.4
 _hptiop.4=	hptiop.4
 _hptmv.4=	hptmv.4
 _hptrr.4=	hptrr.4

==== //depot/projects/mpsafetty/share/man/man5/rc.conf.5#2 (text+ko) ====

@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man5/rc.conf.5,v 1.343 2008/06/21 13:53:35 simon Exp $
+.\" $FreeBSD: src/share/man/man5/rc.conf.5,v 1.344 2008/08/09 06:35:19 obrien Exp $
 .\"
 .Dd June 21, 2008
 .Dt RC.CONF 5
@@ -3116,6 +3116,16 @@
 If set to
 .Dq Li YES ,
 load System V IPC primitives at boot time.
+.It Va kernel_enable
+.Pq Vt bool
+Set to
+.Dq Li YES
+to symlink
+.Pa /boot/kernel
+to the directory that contains the kernel you booted from,
+unless
+.Pa /boot/kernel
+already exists and is not a symlink.
 .It Va clear_tmp_enable
 .Pq Vt bool
 Set to
@@ -3888,7 +3898,7 @@
 .It Va bthidd_hids
 .Pq Vt str
 Path to a file, where
-.Xr bthidd 8 
+.Xr bthidd 8
 will store information about known HID devices.
 Default
 .Pa /var/db/bthidd.hids .

==== //depot/projects/mpsafetty/sys/Makefile#4 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/Makefile,v 1.51 2008/07/20 09:16:00 maxim Exp $
+# $FreeBSD: src/sys/Makefile,v 1.52 2008/08/08 18:00:33 philip Exp $
 
 .include <bsd.own.mk>
 
@@ -44,4 +44,11 @@
 	rm -f ${.CURDIR}/TAGS
 	cd ${.CURDIR}; xargs etags -a < ${.CURDIR}/cscope.files
 
+# You need the textproc/glimpse ports for this.
+glimpse:
+	cd ${.CURDIR}; glimpseindex -H . -B -f -o .
+
+glimpse-clean:
+	cd ${.CURDIR}; rm -f .glimpse_*
+
 .include <bsd.subdir.mk>

==== //depot/projects/mpsafetty/sys/amd64/amd64/pmap.c#11 (text+ko) ====

@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.644 2008/08/07 04:56:29 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.645 2008/08/09 05:46:13 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -4417,6 +4417,25 @@
 	return (TRUE);
 }
 
+/*
+ * Changes the specified virtual address range's memory type to that given by
+ * the parameter "mode".  The specified virtual address range must be
+ * completely contained within either the direct map or the kernel map.  If
+ * the virtual address range is contained within the kernel map, then the
+ * memory type for each of the corresponding ranges of the direct map is also
+ * changed.  (The corresponding ranges of the direct map are those ranges that
+ * map the same physical pages as the specified virtual address range.)  These
+ * changes to the direct map are necessary because Intel describes the
+ * behavior of their processors as "undefined" if two or more mappings to the
+ * same physical page have different memory types.
+ *
+ * Returns zero if the change completed successfully, and either EINVAL or
+ * ENOMEM if the change failed.  Specifically, EINVAL is returned if some part
+ * of the virtual address range was not mapped, and ENOMEM is returned if
+ * there was insufficient memory available to complete the change.  In the
+ * latter case, the memory type may have been changed on some part of the
+ * virtual address range or the direct map.
+ */
 int
 pmap_change_attr(vm_offset_t va, vm_size_t size, int mode)
 {
@@ -4432,10 +4451,11 @@
 pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
 {
 	vm_offset_t base, offset, tmpva;
+	vm_paddr_t pa_start, pa_end;
 	pdp_entry_t *pdpe;
 	pd_entry_t *pde;
 	pt_entry_t *pte;
-	int cache_bits_pte, cache_bits_pde;
+	int cache_bits_pte, cache_bits_pde, error;
 	boolean_t changed;
 
 	PMAP_LOCK_ASSERT(kernel_pmap, MA_OWNED);
@@ -4521,11 +4541,13 @@
 			return (EINVAL);
 		tmpva += PAGE_SIZE;
 	}
+	error = 0;
 
 	/*
 	 * Ok, all the pages exist, so run through them updating their
 	 * cache mode if required.
 	 */
+	pa_start = pa_end = 0;
 	for (tmpva = base; tmpva < base + size; ) {
 		pdpe = pmap_pdpe(kernel_pmap, tmpva);
 		if (*pdpe & PG_PS) {
@@ -4536,6 +4558,25 @@
 				if (!changed)
 					changed = TRUE;
 			}
+			if (tmpva >= VM_MIN_KERNEL_ADDRESS) {
+				if (pa_start == pa_end) {
+					/* Start physical address run. */
+					pa_start = *pdpe & PG_PS_FRAME;
+					pa_end = pa_start + NBPDP;
+				} else if (pa_end == (*pdpe & PG_PS_FRAME))
+					pa_end += NBPDP;
+				else {
+					/* Run ended, update direct map. */
+					error = pmap_change_attr_locked(
+					    PHYS_TO_DMAP(pa_start),
+					    pa_end - pa_start, mode);
+					if (error != 0)
+						break;
+					/* Start physical address run. */
+					pa_start = *pdpe & PG_PS_FRAME;
+					pa_end = pa_start + NBPDP;
+				}
+			}
 			tmpva = trunc_1gpage(tmpva) + NBPDP;
 			continue;
 		}
@@ -4548,6 +4589,25 @@
 				if (!changed)
 					changed = TRUE;
 			}
+			if (tmpva >= VM_MIN_KERNEL_ADDRESS) {
+				if (pa_start == pa_end) {
+					/* Start physical address run. */
+					pa_start = *pde & PG_PS_FRAME;
+					pa_end = pa_start + NBPDR;
+				} else if (pa_end == (*pde & PG_PS_FRAME))
+					pa_end += NBPDR;
+				else {
+					/* Run ended, update direct map. */
+					error = pmap_change_attr_locked(
+					    PHYS_TO_DMAP(pa_start),
+					    pa_end - pa_start, mode);
+					if (error != 0)
+						break;
+					/* Start physical address run. */
+					pa_start = *pde & PG_PS_FRAME;
+					pa_end = pa_start + NBPDR;
+				}
+			}
 			tmpva = trunc_2mpage(tmpva) + NBPDR;
 		} else {
 			if (cache_bits_pte < 0)
@@ -4558,9 +4618,31 @@
 				if (!changed)
 					changed = TRUE;
 			}
+			if (tmpva >= VM_MIN_KERNEL_ADDRESS) {
+				if (pa_start == pa_end) {
+					/* Start physical address run. */
+					pa_start = *pte & PG_FRAME;
+					pa_end = pa_start + PAGE_SIZE;
+				} else if (pa_end == (*pte & PG_FRAME))
+					pa_end += PAGE_SIZE;
+				else {
+					/* Run ended, update direct map. */
+					error = pmap_change_attr_locked(
+					    PHYS_TO_DMAP(pa_start),
+					    pa_end - pa_start, mode);
+					if (error != 0)
+						break;
+					/* Start physical address run. */
+					pa_start = *pte & PG_FRAME;
+					pa_end = pa_start + PAGE_SIZE;
+				}
+			}
 			tmpva += PAGE_SIZE;
 		}
 	}
+	if (error == 0 && pa_start != pa_end)
+		error = pmap_change_attr_locked(PHYS_TO_DMAP(pa_start),
+		    pa_end - pa_start, mode);
 
 	/*
 	 * Flush CPU caches if required to make sure any data isn't cached that
@@ -4570,7 +4652,7 @@
 		pmap_invalidate_range(kernel_pmap, base, tmpva);
 		pmap_invalidate_cache();
 	}
-	return (0);
+	return (error);
 }
 
 /*

==== //depot/projects/mpsafetty/sys/amd64/amd64/support.S#2 (text+ko) ====

@@ -27,7 +27,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/amd64/support.S,v 1.128 2007/08/22 05:06:14 jkoshy Exp $
+ * $FreeBSD: src/sys/amd64/amd64/support.S,v 1.129 2008/08/08 16:26:53 stas Exp $
  */
 
 #include "opt_ddb.h"
@@ -716,3 +716,47 @@
 	movq	%rax,32(%rdi)
 	movq	%rdi,bbhead
 	NON_GPROF_RET
+
+/*
+ * Support for reading MSRs in the safe manner.
+ */
+ENTRY(rdmsr_safe)
+/* int rdmsr_safe(u_int msr, uint64_t *data) */
+	movq	PCPU(CURPCB),%r8
+	movq	$msr_onfault,PCB_ONFAULT(%r8)
+	movl	%edi,%ecx
+	rdmsr			/* Read MSR pointed by %ecx. Returns
+				   hi byte in edx, lo in %eax */
+	salq	$32,%rdx	/* sign-shift %rdx left */
+	cltq			/* sign-extend %eax -> %rax */
+	orq	%rdx,%rax
+	movq	%rax,(%rsi)
+	xorq	%rax,%rax
+	movq	%rax,PCB_ONFAULT(%r8)
+	ret
+
+/*
+ * Support for writing MSRs in the safe manner.
+ */
+ENTRY(wrmsr_safe)
+/* int wrmsr_safe(u_int msr, uint64_t data) */
+	movq	PCPU(CURPCB),%r8
+	movq	$msr_onfault,PCB_ONFAULT(%r8)
+	movl	%edi,%ecx
+	movl	%esi,%eax
+	sarq	$32,%rsi
+	movl	%esi,%edx
+	wrmsr			/* Write MSR pointed by %ecx. Accepts
+				   hi byte in edx, lo in %eax. */
+	xorq	%rax,%rax
+	movq	%rax,PCB_ONFAULT(%r8)
+	ret
+
+/*
+ * MSR operations fault handler
+ */
+	ALIGN_TEXT
+msr_onfault:
+	movq	$0,PCB_ONFAULT(%r8)
+	movl	$EFAULT,%eax
+	ret

==== //depot/projects/mpsafetty/sys/amd64/conf/NOTES#3 (text+ko) ====

@@ -4,7 +4,7 @@
 # This file contains machine dependent kernel configuration notes.  For
 # machine independent notes, look in /sys/conf/NOTES.
 #
-# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.81 2008/08/03 10:32:17 ed Exp $
+# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.82 2008/08/08 16:26:53 stas Exp $
 #
 
 #
@@ -401,6 +401,12 @@
 device		k8temp
 
 #
+# CPU control pseudo-device. Provides access to MSRs, CPUID info and
+# microcode update feature.
+#
+device		cpuctl
+
+#
 # System Management Bus (SMB)
 #
 options 	ENABLE_ALART		# Control alarm on Intel intpm driver

==== //depot/projects/mpsafetty/sys/amd64/include/cpufunc.h#2 (text+ko) ====

@@ -27,7 +27,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/include/cpufunc.h,v 1.149 2008/04/18 05:47:56 jeff Exp $
+ * $FreeBSD: src/sys/amd64/include/cpufunc.h,v 1.150 2008/08/08 16:26:53 stas Exp $
  */
 
 /*
@@ -790,4 +790,9 @@
 
 void	reset_dbregs(void);
 
+#ifdef _KERNEL
+int	rdmsr_safe(u_int msr, uint64_t *val);
+int	wrmsr_safe(u_int msr, uint64_t newval);
+#endif
+
 #endif /* !_MACHINE_CPUFUNC_H_ */

==== //depot/projects/mpsafetty/sys/amd64/include/specialreg.h#2 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)specialreg.h	7.1 (Berkeley) 5/9/91
- * $FreeBSD: src/sys/amd64/include/specialreg.h,v 1.45 2008/03/12 22:09:19 jhb Exp $
+ * $FreeBSD: src/sys/amd64/include/specialreg.h,v 1.46 2008/08/08 16:26:53 stas Exp $
  */
 
 #ifndef _MACHINE_SPECIALREG_H_
@@ -166,6 +166,12 @@
 #define	AMDID_CMP_CORES		0x000000ff
 
 /*
+ * CPUID manufacturers identifiers
+ */
+#define	INTEL_VENDOR_ID	"GenuineIntel"
+#define	AMD_VENDOR_ID	"AuthenticAMD"
+
+/*
  * Model-specific registers for the i386 family
  */
 #define	MSR_P5_MC_ADDR		0x000
@@ -414,5 +420,6 @@
 #define	MSR_IORRMASK1	0xc0010019
 #define	MSR_TOP_MEM	0xc001001a	/* boundary for ram below 4G */
 #define	MSR_TOP_MEM2	0xc001001d	/* boundary for ram above 4G */
+#define	MSR_K8_UCODE_UPDATE	0xc0010020	/* update microcode */
 
 #endif /* !_MACHINE_SPECIALREG_H_ */

==== //depot/projects/mpsafetty/sys/boot/i386/boot2/boot2.c#2 (text+ko) ====

@@ -14,7 +14,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.87 2008/07/01 11:18:51 nyan Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.88 2008/08/08 19:41:20 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/disklabel.h>
@@ -24,6 +24,7 @@
 
 #include <machine/bootinfo.h>
 #include <machine/elf.h>
+#include <machine/psl.h>
 
 #include <stdarg.h>
 
@@ -83,8 +84,8 @@
 #define NDEV		3
 #define MEM_BASE	0x12
 #define MEM_EXT 	0x15
-#define V86_CY(x)	((x) & 1)
-#define V86_ZR(x)	((x) & 0x40)
+#define V86_CY(x)	((x) & PSL_C)
+#define V86_ZR(x)	((x) & PSL_Z)
 
 #define DRV_HARD	0x80
 #define DRV_MASK	0x7f
@@ -237,6 +238,7 @@
 
     dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
     v86.ctl = V86_FLAGS;
+    v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
     dsk.drive = *(uint8_t *)PTOV(ARGS);
     dsk.type = dsk.drive & DRV_HARD ? TYPE_AD : TYPE_FD;
     dsk.unit = dsk.drive & DRV_MASK;

==== //depot/projects/mpsafetty/sys/boot/i386/btx/btx/btx.S#2 (text+ko) ====

@@ -12,7 +12,7 @@
  * warranties of merchantability and fitness for a particular
  * purpose.
  *
- * $FreeBSD: src/sys/boot/i386/btx/btx/btx.S,v 1.46 2008/03/10 21:43:31 jhb Exp $
+ * $FreeBSD: src/sys/boot/i386/btx/btx/btx.S,v 1.47 2008/08/08 19:39:11 jhb Exp $
  */
 
 /*
@@ -34,6 +34,13 @@
 		.set PAG_SIZ,0x1000		# Page size
 		.set PAG_CNT,0x1000		# Pages to map
 /*
+ * Fields in %eflags.
+ */
+		.set PSL_T,0x00000100		# Trap flag
+		.set PSL_I,0x00000200		# Interrupt enable flag
+		.set PSL_VM,0x00020000		# Virtual 8086 mode flag
+		.set PSL_AC,0x00040000		# Alignment check flag
+/*
  * Segment selectors.
  */
 		.set SEL_SCODE,0x8		# Supervisor code
@@ -369,7 +376,7 @@
 		je except.3			# Yes
 		cmpb $0x1,(%esp,1)		# Debug?
 		jne except.2a			# No
-		testl $0x100,0x10(%esp,1)	# Trap flag set?
+		testl $PSL_T,0x10(%esp,1)	# Trap flag set?
 		jnz except.3			# Yes
 except.2a:	jmp exit			# Exit
 except.3:	leal 0x8(%esp,1),%esp		# Discard err, int no
@@ -473,16 +480,13 @@
 		movl (%ebx),%ebp		# btx_v86 pointer
 		addl %ebp,%edx			# Flatten btx_v86 ptr
 		movl %edx,MEM_ESPR-0x08		# Save btx_v86 ptr
-		movl -0x08(%esi),%ebx		# Pass user flags to
-		movw %bx,MEM_ESPR-0x12		#  real mode target
 		movl V86_ADDR(%edx),%eax	# Get int no/address
 		movl V86_CTL(%edx),%edx		# Get control flags
 		jmp intusr.3			# Skip hardware interrupt
 /*
  * Hardware interrupts store a NULL btx_v86 pointer and use the address
  * (interrupt number) from the stack with empty flags.  Also, we clear
- * the segment registers for the interrupt handler and ensure interrupts
- * are disabled when the interrupt handler is invoked.
+ * the segment registers for the interrupt handler.
  */
 intusr.2:	xorl %edx,%edx			# Control flags
 		movl %edx,MEM_ESPR-0x08		# NULL btx_v86 ptr
@@ -490,17 +494,22 @@
 		movl %edx,-0x3c(%esi)		# Real mode %fs of 0
 		movl %edx,-0x40(%esi)		# Real mode %ds of 0
 		movl %edx,-0x44(%esi)		# Real mode %es of 0
-		movl -0x08(%esi),%ebx		# Pass user flags with
-		andl $~0x200,%ebx		#  interrupts disabled
-		movw %bx,MEM_ESPR-0x12		#  to real mode target
 /*
  * %eax now holds either the interrupt number or segment:offset of function.
  * %edx now holds the V86F_* flags.
+ *
+ * For interrupt handler invocations (either hardware interrupts or VM86
+ * INTx requests) we also disable interrupts, tracing, and alignment checking
+ * while the handler runs.
  */
-intusr.3:	testl $V86F_ADDR,%edx		# Segment:offset?
+intusr.3:	movl -0x08(%esi),%ebx		# Save user flags in %ebx
+		testl $V86F_ADDR,%edx		# Segment:offset?
 		jnz intusr.4			# Yes
 		shll $0x2,%eax			# Scale
 		movl (%eax),%eax		# Load int vector
+		andl $~(PSL_I|PSL_T|PSL_AC),%ebx # Disable interrupts, tracing,
+						#  and alignment checking for
+						#  interrupt handler
 		jmp intusr.5			# Skip CALLF test
 intusr.4:	testl $V86F_CALLF,%edx		# Far call?
 		jnz intusr.5			# Ok
@@ -513,10 +522,12 @@
 		popl %gs
 		popal				# Restore gp regs
 		jmp ex_noc			# Panic
+intusr.5:	movw %bx,MEM_ESPR-0x12		# Pass user flags to real mode
+						#  target
 /*
  * If this is a v86 call, copy the seg regs out of the btx_v86 structure.
  */
-intusr.5:	movl MEM_ESPR-0x08,%ecx		# Get btx_v86 ptr
+		movl MEM_ESPR-0x08,%ecx		# Get btx_v86 ptr
 		jecxz intusr.6			# Skip for hardware ints
 		leal -0x44(%esi),%edi		# %edi => kernel stack seg regs
 		pushl %esi			# Save
@@ -696,7 +707,7 @@
 dump.2: 	testb $DMP_MEM,%ch		# Dump memory?
 		jz dump.8			# No
 		pushl %ds			# Save
-		testb $0x2,0x52(%ebx)		# V86 mode?
+		testl $PSL_VM,0x50(%ebx)	# V86 mode?
 		jnz dump.3			# Yes
 		verr 0x4(%esi)	 		# Readable selector?
 		jnz dump.3			# No

==== //depot/projects/mpsafetty/sys/boot/i386/gptboot/gptboot.c#2 (text+ko) ====

@@ -14,7 +14,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/gptboot/gptboot.c,v 1.87 2008/02/28 17:08:05 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/gptboot/gptboot.c,v 1.88 2008/08/08 19:41:20 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/gpt.h>
@@ -23,6 +23,7 @@
 
 #include <machine/bootinfo.h>
 #include <machine/elf.h>
+#include <machine/psl.h>
 
 #include <stdarg.h>
 
@@ -81,8 +82,8 @@
 #define NDEV		3
 #define MEM_BASE	0x12
 #define MEM_EXT 	0x15
-#define V86_CY(x)	((x) & 1)
-#define V86_ZR(x)	((x) & 0x40)
+#define V86_CY(x)	((x) & PSL_C)
+#define V86_ZR(x)	((x) & PSL_Z)
 
 #define DRV_HARD	0x80
 #define DRV_MASK	0x7f
@@ -235,6 +236,7 @@
 
     dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
     v86.ctl = V86_FLAGS;
+    v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
     dsk.drive = *(uint8_t *)PTOV(ARGS);
     dsk.type = dsk.drive & DRV_HARD ? TYPE_AD : TYPE_FD;
     dsk.unit = dsk.drive & DRV_MASK;

==== //depot/projects/mpsafetty/sys/boot/i386/loader/main.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/loader/main.c,v 1.41 2007/10/24 04:03:25 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/loader/main.c,v 1.42 2008/08/08 19:41:20 jhb Exp $");
 
 /*
  * MD bootstrap main() and assorted miscellaneous
@@ -35,6 +35,7 @@
 #include <stand.h>
 #include <string.h>
 #include <machine/bootinfo.h>
+#include <machine/psl.h>
 #include <sys/reboot.h>
 
 #include "bootstrap.h"
@@ -86,6 +87,10 @@
     initial_bootdev = kargs->bootdev;
     initial_bootinfo = kargs->bootinfo ? (struct bootinfo *)PTOV(kargs->bootinfo) : NULL;
 
+    /* Initialize the v86 register set to a known-good state. */
+    bzero(&v86, sizeof(v86));
+    v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
+
     /* 
      * Initialise the heap as early as possible.  Once this is done, malloc() is usable.
      */

==== //depot/projects/mpsafetty/sys/boot/pc98/loader/main.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/pc98/loader/main.c,v 1.25 2007/10/24 11:54:04 nyan Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/pc98/loader/main.c,v 1.26 2008/08/08 19:41:20 jhb Exp $");
 
 /*
  * MD bootstrap main() and assorted miscellaneous
@@ -35,6 +35,7 @@
 #include <stand.h>
 #include <string.h>
 #include <machine/bootinfo.h>
+#include <machine/psl.h>
 #include <sys/reboot.h>
 
 #include "bootstrap.h"
@@ -86,6 +87,10 @@
     initial_bootdev = kargs->bootdev;

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



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