PERFORCE change 85454 for review

John Baldwin jhb at FreeBSD.org
Mon Oct 17 11:19:23 PDT 2005


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

Change 85454 by jhb at jhb_slimer on 2005/10/17 18:18:30

	IFC @85453.

Affected files ...

.. //depot/projects/smpng/sys/alpha/alpha/promcons.c#23 integrate
.. //depot/projects/smpng/sys/alpha/tlsb/zs_tlsb.c#19 integrate
.. //depot/projects/smpng/sys/amd64/amd64/identcpu.c#13 integrate
.. //depot/projects/smpng/sys/amd64/amd64/initcpu.c#5 integrate
.. //depot/projects/smpng/sys/amd64/include/md_var.h#11 integrate
.. //depot/projects/smpng/sys/amd64/include/specialreg.h#8 integrate
.. //depot/projects/smpng/sys/amd64/linux32/linux32_sysvec.c#10 integrate
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321_timer.c#6 integrate
.. //depot/projects/smpng/sys/boot/i386/boot2/boot2.c#28 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_misc.c#25 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_proto.h#21 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_syscall.h#21 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_syscalls.c#21 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_sysent.c#21 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/syscalls.master#21 integrate
.. //depot/projects/smpng/sys/dev/cx/if_cx.c#22 integrate
.. //depot/projects/smpng/sys/dev/cy/cy.c#7 integrate
.. //depot/projects/smpng/sys/dev/dcons/dcons_os.c#5 integrate
.. //depot/projects/smpng/sys/dev/digi/digi.c#30 integrate
.. //depot/projects/smpng/sys/dev/ed/if_ed_isa.c#13 integrate
.. //depot/projects/smpng/sys/dev/exca/exca.c#17 integrate
.. //depot/projects/smpng/sys/dev/mii/brgphy.c#26 integrate
.. //depot/projects/smpng/sys/dev/ofw/ofw_console.c#23 integrate
.. //depot/projects/smpng/sys/dev/pccard/pccardvarp.h#2 integrate
.. //depot/projects/smpng/sys/dev/rc/rc.c#16 integrate
.. //depot/projects/smpng/sys/dev/re/if_re.c#31 integrate
.. //depot/projects/smpng/sys/dev/rp/rp.c#20 integrate
.. //depot/projects/smpng/sys/dev/sab/sab.c#26 integrate
.. //depot/projects/smpng/sys/dev/si/si.c#20 integrate
.. //depot/projects/smpng/sys/dev/sio/sio.c#56 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_tty.c#14 integrate
.. //depot/projects/smpng/sys/dev/usb/ubser.c#10 integrate
.. //depot/projects/smpng/sys/dev/usb/ucom.c#25 integrate
.. //depot/projects/smpng/sys/dev/usb/ucycom.c#3 integrate
.. //depot/projects/smpng/sys/dev/zs/zs.c#20 integrate
.. //depot/projects/smpng/sys/fs/nullfs/null_vfsops.c#20 integrate
.. //depot/projects/smpng/sys/fs/nwfs/nwfs_vfsops.c#22 integrate
.. //depot/projects/smpng/sys/fs/nwfs/nwfs_vnops.c#16 integrate
.. //depot/projects/smpng/sys/fs/smbfs/smbfs_vfsops.c#30 integrate
.. //depot/projects/smpng/sys/fs/udf/udf_vfsops.c#24 integrate
.. //depot/projects/smpng/sys/fs/unionfs/union_vnops.c#30 integrate
.. //depot/projects/smpng/sys/gnu/fs/ext2fs/ext2_lookup.c#2 integrate
.. //depot/projects/smpng/sys/i386/i386/identcpu.c#37 integrate
.. //depot/projects/smpng/sys/i386/i386/initcpu.c#26 integrate
.. //depot/projects/smpng/sys/i386/include/md_var.h#30 integrate
.. //depot/projects/smpng/sys/i386/include/specialreg.h#9 integrate
.. //depot/projects/smpng/sys/i386/linux/linux_sysvec.c#46 integrate
.. //depot/projects/smpng/sys/i386/svr4/svr4_machdep.c#17 integrate
.. //depot/projects/smpng/sys/ia64/ia64/ssc.c#16 integrate
.. //depot/projects/smpng/sys/isofs/cd9660/cd9660_lookup.c#14 integrate
.. //depot/projects/smpng/sys/isofs/cd9660/cd9660_vfsops.c#39 integrate
.. //depot/projects/smpng/sys/kern/kern_time.c#35 integrate
.. //depot/projects/smpng/sys/kern/subr_param.c#21 integrate
.. //depot/projects/smpng/sys/kern/tty.c#61 integrate
.. //depot/projects/smpng/sys/kern/tty_compat.c#8 integrate
.. //depot/projects/smpng/sys/kern/uipc_syscalls.c#70 integrate
.. //depot/projects/smpng/sys/kern/vfs_subr.c#113 integrate
.. //depot/projects/smpng/sys/modules/3dfx/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/acpi/acpi/Makefile#8 integrate
.. //depot/projects/smpng/sys/modules/aha/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/ahb/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/an/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/ar/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/arcnet/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/arl/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/awi/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/bktr/bktr/Makefile#6 integrate
.. //depot/projects/smpng/sys/modules/cam/Makefile#11 integrate
.. //depot/projects/smpng/sys/modules/coda5/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/cp/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/ctau/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/cx/Makefile#5 integrate
.. //depot/projects/smpng/sys/modules/dcons/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/digi/digi/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/en/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/fatm/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/firewire/fwip/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/hatm/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/hifn/Makefile#5 integrate
.. //depot/projects/smpng/sys/modules/if_bridge/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/if_disc/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/if_ef/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/if_faith/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/if_gif/Makefile#6 integrate
.. //depot/projects/smpng/sys/modules/if_gre/Makefile#6 integrate
.. //depot/projects/smpng/sys/modules/if_ppp/Makefile#6 integrate
.. //depot/projects/smpng/sys/modules/if_sl/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/if_stf/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/if_tap/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/if_tun/Makefile#6 integrate
.. //depot/projects/smpng/sys/modules/if_vlan/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/ip_mroute_mod/Makefile#6 integrate
.. //depot/projects/smpng/sys/modules/ipfilter/Makefile#10 integrate
.. //depot/projects/smpng/sys/modules/kbdmux/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/linux/Makefile#13 integrate
.. //depot/projects/smpng/sys/modules/netgraph/gif/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/netgraph/iface/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/netgraph/mppc/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/netgraph/sync_ar/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/netgraph/sync_sr/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/nfs4client/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/nfsclient/Makefile#9 integrate
.. //depot/projects/smpng/sys/modules/nfsserver/Makefile#6 integrate
.. //depot/projects/smpng/sys/modules/nmdm/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/nwfs/Makefile#5 integrate
.. //depot/projects/smpng/sys/modules/osf1/Makefile#7 integrate
.. //depot/projects/smpng/sys/modules/patm/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/pf/Makefile#8 integrate
.. //depot/projects/smpng/sys/modules/rc/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/rp/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/safe/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/sio/Makefile#6 integrate
.. //depot/projects/smpng/sys/modules/smbfs/Makefile#9 integrate
.. //depot/projects/smpng/sys/modules/snc/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/sppp/Makefile#5 integrate
.. //depot/projects/smpng/sys/modules/sr/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/svr4/Makefile#5 integrate
.. //depot/projects/smpng/sys/modules/trm/Makefile#2 integrate
.. //depot/projects/smpng/sys/modules/ubsec/Makefile#5 integrate
.. //depot/projects/smpng/sys/modules/ukbd/Makefile#8 integrate
.. //depot/projects/smpng/sys/modules/vkbd/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/wi/Makefile#9 integrate
.. //depot/projects/smpng/sys/modules/wlan/Makefile#5 integrate
.. //depot/projects/smpng/sys/net/if_bridge.c#13 integrate
.. //depot/projects/smpng/sys/net/if_sl.c#30 integrate
.. //depot/projects/smpng/sys/net/ppp_tty.c#21 integrate
.. //depot/projects/smpng/sys/netgraph/bluetooth/drivers/h4/ng_h4.c#11 integrate
.. //depot/projects/smpng/sys/netgraph/ng_mppc.c#12 integrate
.. //depot/projects/smpng/sys/netgraph/ng_tty.c#18 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_mroute.c#22 integrate
.. //depot/projects/smpng/sys/netinet6/raw_ip6.c#36 integrate
.. //depot/projects/smpng/sys/pc98/cbus/sio.c#4 integrate
.. //depot/projects/smpng/sys/pc98/pc98/machdep.c#6 integrate
.. //depot/projects/smpng/sys/pci/if_rlreg.h#27 integrate
.. //depot/projects/smpng/sys/pci/if_sk.c#51 integrate
.. //depot/projects/smpng/sys/pci/if_skreg.h#13 integrate
.. //depot/projects/smpng/sys/sparc64/include/param.h#16 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/trap.c#63 integrate
.. //depot/projects/smpng/sys/sys/syscallsubr.h#23 integrate
.. //depot/projects/smpng/sys/sys/tty.h#19 integrate
.. //depot/projects/smpng/sys/ufs/ufs/ufs_lookup.c#23 integrate

Differences ...

==== //depot/projects/smpng/sys/alpha/alpha/promcons.c#23 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/promcons.c,v 1.44 2005/01/05 20:05:49 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/promcons.c,v 1.45 2005/10/16 20:58:21 phk Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -108,7 +108,6 @@
 	if ((tp->t_state & TS_ISOPEN) == 0) {
 		tp->t_state |= TS_CARR_ON;
 		ttyconsolemode(tp, 0);
-		ttsetwater(tp);
 
 		setuptimeout = 1;
 	} else if ((tp->t_state & TS_XCLUDE) && suser(td)) {

==== //depot/projects/smpng/sys/alpha/tlsb/zs_tlsb.c#19 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/tlsb/zs_tlsb.c,v 1.49 2004/10/18 21:51:24 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/tlsb/zs_tlsb.c,v 1.50 2005/10/16 20:58:21 phk Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -284,7 +284,6 @@
 	if ((tp->t_state & TS_ISOPEN) == 0) {
 		tp->t_state |= TS_CARR_ON;
 		ttyconsolemode(tp, 0);
-		ttsetwater(tp);
 		setuptimeout = 1;
 	} else if ((tp->t_state & TS_XCLUDE) && suser(td)) {
 		splx(s);

==== //depot/projects/smpng/sys/amd64/amd64/identcpu.c#13 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.136 2005/05/29 17:43:23 schweikh Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.139 2005/10/17 15:51:27 jkim Exp $");
 
 #include "opt_cpu.h"
 
@@ -165,6 +165,8 @@
 	    strcmp(cpu_vendor, "AuthenticAMD") == 0) {
 		printf("  Stepping = %u", cpu_id & 0xf);
 		if (cpu_high > 0) {
+			u_int cmp = 1, htt = 1;
+
 			/*
 			 * Here we should probably set up flags indicating
 			 * whether or not various features are available.
@@ -246,6 +248,16 @@
 				"\040<b31>"
 				);
 			}
+
+			/*
+			 * AMD64 Architecture Programmer's Manual Volume 3:
+			 * General-Purpose and System Instructions
+			 * http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24594.pdf
+			 *
+			 * IA-32 Intel Architecture Software Developer's Manual,
+			 * Volume 2A: Instruction Set Reference, A-M
+			 * ftp://download.intel.com/design/Pentium4/manuals/25366617.pdf
+			 */
 			if (amd_feature != 0) {
 				printf("\n  AMD Features=0x%b", amd_feature,
 				"\020"		/* in hex */
@@ -274,9 +286,9 @@
 				"\027MMX+"	/* AMD MMX Extensions */
 				"\030<s23>"	/* Same */
 				"\031<s24>"	/* Same */
-				"\032<b25>"	/* Undefined */
+				"\032FFXSR"	/* Fast FXSAVE/FXRSTOR */
 				"\033<b26>"	/* Undefined */
-				"\034<b27>"	/* Undefined */
+				"\034RDTSCP"	/* RDTSCP */
 				"\035<b28>"	/* Undefined */
 				"\036LM"	/* 64 bit long mode */
 				"\0373DNow+"	/* AMD 3DNow! Extensions */
@@ -284,14 +296,71 @@
 				);
 			}
 
+			if (amd_feature2 != 0) {
+				printf("\n  AMD Features2=0x%b", amd_feature2,
+				"\020"
+				"\001LAHF"	/* LAHF/SAHF in long mode */
+				"\002CMP"	/* CMP legacy */
+				"\003<b2>"
+				"\004<b3>"
+				"\005CR8"	/* CR8 in legacy mode */
+				"\006<b5>"
+				"\007<b6>"
+				"\010<b7>"
+				"\011<b8>"
+				"\012<b9>"
+				"\013<b10>"
+				"\014<b11>"
+				"\015<b12>"
+				"\016<b13>"
+				"\017<b14>"
+				"\020<b15>"
+				"\021<b16>"
+				"\022<b17>"
+				"\023<b18>"
+				"\024<b19>"
+				"\025<b20>"
+				"\026<b21>"
+				"\027<b22>"
+				"\030<b23>"
+				"\031<b24>"
+				"\032<b25>"
+				"\033<b26>"
+				"\034<b27>"
+				"\035<b28>"
+				"\036<b29>"
+				"\037<b30>"
+				"\040<b31>"
+				);
+			}
+
+			if (cpu_feature & CPUID_HTT && strcmp(cpu_vendor,
+			    "AuthenticAMD") == 0) {
+				cpu_feature &= ~CPUID_HTT;
+				if (bootverbose)
+	    				printf("\nHTT bit cleared - FreeBSD"
+					    " does not have licenseing issues"
+					    " requiring it.\n");
+			}
+
 			/*
-			 * If this CPU supports hyperthreading then mention
-			 * the number of logical CPU's it contains.
+			 * If this CPU supports HTT or CMP then mention the
+			 * number of physical/logical cores it contains.
 			 */
-			if (cpu_feature & CPUID_HTT &&
-			    (cpu_procinfo & CPUID_HTT_CORES) >> 16 > 1)
-				printf("\n  Hyperthreading: %d logical CPUs",
-				    (cpu_procinfo & CPUID_HTT_CORES) >> 16);
+			if (cpu_feature & CPUID_HTT)
+				htt = (cpu_procinfo & CPUID_HTT_CORES) >> 16;
+			if (strcmp(cpu_vendor, "AuthenticAMD") == 0 &&
+			    (amd_feature2 & AMDID2_CMP))
+				cmp = (cpu_procinfo2 & AMDID_CMP_CORES) + 1;
+			else if (strcmp(cpu_vendor, "GenuineIntel") == 0 &&
+			    (cpu_high >= 4)) {
+				cpuid_count(4, 0, regs);
+				cmp = ((regs[0] & 0xfc000000) >> 26) + 1;
+			}
+			if (cmp > 1)
+				printf("\n  Physical cores: %d", cmp);
+			if (htt > 1)
+				printf("\n  Logical cores: %d", htt);
 		}
 	}
 	/* Avoid ugly blank lines: only print newline when we have to. */
@@ -357,6 +426,11 @@
 	if (cpu_exthigh >= 0x80000001) {
 		do_cpuid(0x80000001, regs);
 		amd_feature = regs[3] & ~(cpu_feature & 0x0183f3ff);
+		amd_feature2 = regs[2];
+	}
+	if (cpu_exthigh >= 0x80000008) {
+		do_cpuid(0x80000008, regs);
+		cpu_procinfo2 = regs[2];
 	}
 
 	/* XXX */

==== //depot/projects/smpng/sys/amd64/amd64/initcpu.c#5 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/initcpu.c,v 1.48 2004/06/08 01:02:51 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/initcpu.c,v 1.49 2005/10/14 22:52:00 jkim Exp $");
 
 #include "opt_cpu.h"
 
@@ -51,11 +51,13 @@
 int	cpu;			/* Are we 386, 386sx, 486, etc? */
 u_int	cpu_feature;		/* Feature flags */
 u_int	cpu_feature2;		/* Feature flags */
-u_int	amd_feature;		/* Feature flags */
+u_int	amd_feature;		/* AMD feature flags */
+u_int	amd_feature2;		/* AMD feature flags */
 u_int	cpu_high;		/* Highest arg to CPUID */
 u_int	cpu_exthigh;		/* Highest arg to extended CPUID */
 u_int	cpu_id;			/* Stepping ID */
 u_int	cpu_procinfo;		/* HyperThreading Info / Brand Index / CLFUSH */
+u_int	cpu_procinfo2;		/* Multicore info */
 char	cpu_vendor[20];		/* CPU Origin code */
 u_int	cpu_fxsr;		/* SSE enabled */
 

==== //depot/projects/smpng/sys/amd64/include/md_var.h#11 (text+ko) ====

@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/include/md_var.h,v 1.75 2004/06/10 20:30:55 jhb Exp $
+ * $FreeBSD: src/sys/amd64/include/md_var.h,v 1.76 2005/10/14 22:52:00 jkim Exp $
  */
 
 #ifndef _MACHINE_MD_VAR_H_
@@ -43,10 +43,12 @@
 extern	u_int	cpu_feature;
 extern	u_int	cpu_feature2;
 extern	u_int	amd_feature;
+extern	u_int	amd_feature2;
 extern	u_int	cpu_fxsr;
 extern	u_int	cpu_high;
 extern	u_int	cpu_id;
 extern	u_int	cpu_procinfo;
+extern	u_int	cpu_procinfo2;
 extern	char	cpu_vendor[];
 extern	char	kstack[];
 extern	char	sigcode[];

==== //depot/projects/smpng/sys/amd64/include/specialreg.h#8 (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.30 2004/06/08 01:02:52 peter Exp $
+ * $FreeBSD: src/sys/amd64/include/specialreg.h,v 1.32 2005/10/15 00:44:56 jkim Exp $
  */
 
 #ifndef _MACHINE_SPECIALREG_H_
@@ -126,7 +126,16 @@
 #define AMDID_SYSCALL	0x00000800
 #define AMDID_MP	0x00080000
 #define AMDID_NX	0x00100000
+#define AMDID_EXT_MMX	0x00400000
+#define AMDID_FFXSR	0x01000000
+#define AMDID_RDTSCP	0x08000000
 #define AMDID_LM	0x20000000
+#define AMDID_EXT_3DNOW	0x40000000
+#define AMDID_3DNOW	0x80000000
+
+#define AMDID2_LAHF	0x00000001
+#define AMDID2_CMP	0x00000002
+#define AMDID2_CR8	0x00000010
 
 /*
  * CPUID instruction 1 ebx info
@@ -137,6 +146,11 @@
 #define	CPUID_LOCAL_APIC_ID	0xff000000
 
 /*
+ * AMD extended function 8000_0008h ecx info
+ */
+#define AMDID_CMP_CORES		0x000000ff
+
+/*
  * Model-specific registers for the i386 family
  */
 #define MSR_P5_MC_ADDR		0x000
@@ -198,14 +212,14 @@
 #define MSR_MC2_STATUS		0x409
 #define MSR_MC2_ADDR		0x40a
 #define MSR_MC2_MISC		0x40b
-#define MSR_MC4_CTL		0x40c
-#define MSR_MC4_STATUS		0x40d
-#define MSR_MC4_ADDR		0x40e
-#define MSR_MC4_MISC		0x40f
-#define MSR_MC3_CTL		0x410
-#define MSR_MC3_STATUS		0x411
-#define MSR_MC3_ADDR		0x412
-#define MSR_MC3_MISC		0x413
+#define MSR_MC3_CTL		0x40c
+#define MSR_MC3_STATUS		0x40d
+#define MSR_MC3_ADDR		0x40e
+#define MSR_MC3_MISC		0x40f
+#define MSR_MC4_CTL		0x410
+#define MSR_MC4_STATUS		0x411
+#define MSR_MC4_ADDR		0x412
+#define MSR_MC4_MISC		0x413
 
 /*
  * Constants related to MSR's.

==== //depot/projects/smpng/sys/amd64/linux32/linux32_sysvec.c#10 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.10 2005/10/14 12:43:43 davidxu Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.11 2005/10/14 20:22:57 jhb Exp $");
 
 /* XXX we use functions that might not exist. */
 #include "opt_compat.h"
@@ -293,7 +293,7 @@
 
 #ifdef DEBUG
 	if (ldebug(rt_sendsig))
-		printf(ARGS(rt_sendsig, "%p, %d, %p, %lu"),
+		printf(ARGS(rt_sendsig, "%p, %d, %p, %u"),
 		    catcher, sig, (void*)mask, code);
 #endif
 	/*
@@ -439,7 +439,7 @@
 
 #ifdef DEBUG
 	if (ldebug(sendsig))
-		printf(ARGS(sendsig, "%p, %d, %p, %lu"),
+		printf(ARGS(sendsig, "%p, %d, %p, %u"),
 		    catcher, sig, (void*)mask, code);
 #endif
 

==== //depot/projects/smpng/sys/arm/xscale/i80321/i80321_timer.c#6 (text+ko) ====

@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_timer.c,v 1.6 2005/10/03 14:19:55 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_timer.c,v 1.7 2005/10/17 14:51:01 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -72,8 +72,6 @@
 
 static uint32_t counts_per_hz;
 
-static uint32_t offset = 0;
-static uint32_t last = -1;
 static int ticked = 0;
 
 #define	COUNTS_PER_SEC		200000000	/* 200MHz */
@@ -83,7 +81,7 @@
 	i80321_timer_get_timecount, /* get_timecount */
 	NULL,			    /* no poll_pps */
 	~0u,			    /* counter_mask */
-	COUNTS_PER_SEC,	 	   /* frequency */
+	COUNTS_PER_SEC * 3,	 	   /* frequency */
 	"i80321 timer",		    /* name */
 	1000			    /* quality */
 };
@@ -236,19 +234,11 @@
 static unsigned
 i80321_timer_get_timecount(struct timecounter *tc)
 {
-	uint32_t cur = tcr0_read();
-	
-	if (cur > last && last != -1) {
-		offset += counts_per_hz;
-		if (ticked > 0)
-									                        ticked--;
-	}
-	if (ticked) {
-		offset += ticked * counts_per_hz;
-		ticked = 0;
-	}
-	last = cur;
-	return (counts_per_hz - cur + offset);
+	uint32_t ret;
+
+	__asm __volatile("mrc p14, 0, %0, c1, c0, 0\n"
+	    : "=r" (ret));
+	return (ret);
 }
 
 /*
@@ -329,6 +319,13 @@
 
 	tc_init(&i80321_timer_timecounter);
 	restore_interrupts(oldirqstate);
+	rid = 0;
+	/* Enable the clock count register. */
+	__asm __volatile("mrc p14, 0, %0, c0, c0, 0\n" : "=r" (rid));
+	rid &= ~(1 <<  3);
+	rid |= (1 << 2) | 1;
+	__asm __volatile("mcr p14, 0, %0, c0, c0, 0\n"
+	    : : "r" (rid));
 }
 
 

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

@@ -14,7 +14,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.75 2005/09/22 11:20:33 ru Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.78 2005/10/16 20:22:36 sobomax Exp $");
 
 #include <sys/param.h>
 #include <sys/disklabel.h>
@@ -60,6 +60,7 @@
 /* 0x12 is reserved for boot programs. */
 /* 0x13 is reserved for boot programs. */
 #define RBX_PAUSE	0x14	/* -p */
+#define RBX_QUIET	0x15	/* -q */
 #define RBX_NOINTR	0x1c	/* -n */
 /* 0x1d is reserved for log2(RB_MULTIPLE) and is just misnamed here. */
 #define RBX_DUAL	0x1d	/* -D */
@@ -73,7 +74,7 @@
 #define PATH_KERNEL	"/boot/kernel/kernel"
 
 #define ARGS		0x900
-#define NOPT		11
+#define NOPT		12
 #define NDEV		3
 #define MEM_BASE	0x12
 #define MEM_EXT 	0x15
@@ -88,9 +89,11 @@
 #define TYPE_MAXHARD	TYPE_DA
 #define TYPE_FD		2
 
+#define OPT_CHECK(opt)	((opts >> (opt)) & 1)
+
 extern uint32_t _end;
 
-static const char optstr[NOPT] = "DhaCgmnprsv"; /* Also 'P', 'S' */
+static const char optstr[NOPT] = "DhaCgmnpqrsv"; /* Also 'P', 'S' */
 static const unsigned char flags[NOPT] = {
     RBX_DUAL,
     RBX_SERIAL,
@@ -100,6 +103,7 @@
     RBX_MUTE,
     RBX_NOINTR,
     RBX_PAUSE,
+    RBX_QUIET,
     RBX_DFLTROOT,
     RBX_SINGLE,
     RBX_VERBOSE
@@ -158,7 +162,7 @@
 
 #include "ufsread.c"
 
-static int
+static inline int
 xfsread(ino_t inode, void *buf, size_t nbyte)
 {
     if ((size_t)fsread(inode, buf, nbyte) != nbyte) {
@@ -244,7 +248,8 @@
     if (*cmd) {
 	if (parse())
 	    autoboot = 0;
-	printf("%s: %s", PATH_CONFIG, cmd);
+	if (!OPT_CHECK(RBX_QUIET))
+	    printf("%s: %s", PATH_CONFIG, cmd);
 	/* Do not process this command twice */
 	*cmd = 0;
     }
@@ -265,16 +270,17 @@
     /* Present the user with the boot2 prompt. */
 
     for (;;) {
-	printf("\nFreeBSD/i386 boot\n"
-	       "Default: %u:%s(%u,%c)%s\n"
-	       "boot: ",
-	       dsk.drive & DRV_MASK, dev_nm[dsk.type], dsk.unit,
-	       'a' + dsk.part, kname);
+	if (!autoboot || !OPT_CHECK(RBX_QUIET))
+	    printf("\nFreeBSD/i386 boot\n"
+		   "Default: %u:%s(%u,%c)%s\n"
+		   "boot: ",
+		   dsk.drive & DRV_MASK, dev_nm[dsk.type], dsk.unit,
+		   'a' + dsk.part, kname);
 	if (ioctrl & IO_SERIAL)
 	    sio_flush();
 	if (!autoboot || keyhit(5*SECOND))
 	    getstr();
-	else
+	else if (!autoboot || !OPT_CHECK(RBX_QUIET))
 	    putchar('\n');
 	autoboot = 0;
 	if (parse())
@@ -297,8 +303,8 @@
 	struct exec ex;
 	Elf32_Ehdr eh;
     } hdr;
-    Elf32_Phdr ep[2];
-    Elf32_Shdr es[2];
+    static Elf32_Phdr ep[2];
+    static Elf32_Shdr es[2];
     caddr_t p;
     ino_t ino;
     uint32_t addr, x;
@@ -596,7 +602,8 @@
 {
     static unsigned c = 0x2d5c7c2f;
 
-    printf("%c\b", c = c << 8 | c >> 24);
+    if (!OPT_CHECK(RBX_QUIET))
+	printf("%c\b", c = c << 8 | c >> 24);
     v86.ctl = V86_ADDR | V86_CALLF | V86_FLAGS;
     v86.addr = XREADORG;		/* call to xread in boot1 */
     v86.es = VTOPSEG(buf);
@@ -618,7 +625,7 @@
 {
     uint32_t t0, t1;
 
-    if (opts & 1 << RBX_NOINTR)
+    if (OPT_CHECK(RBX_NOINTR))
 	return 0;
     t0 = 0;
     for (;;) {
@@ -645,7 +652,7 @@
 static int
 xgetc(int fn)
 {
-    if (opts & 1 << RBX_NOINTR)
+    if (OPT_CHECK(RBX_NOINTR))
 	return 0;
     for (;;) {
 	if (ioctrl & IO_KEYBOARD && getc(1))

==== //depot/projects/smpng/sys/compat/freebsd32/freebsd32_misc.c#25 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/freebsd32/freebsd32_misc.c,v 1.40 2005/10/03 18:34:17 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/freebsd32/freebsd32_misc.c,v 1.43 2005/10/15 05:57:06 ps Exp $");
 
 #include "opt_compat.h"
 
@@ -797,6 +797,171 @@
 	return (error);
 }
 
+static int
+freebsd32_copyiniov(struct iovec32 *iovp, u_int iovcnt, struct iovec **iov,
+    int error)
+{
+	struct iovec32 iov32;
+	int i;
+
+	u_int iovlen;
+
+	*iov = NULL;
+	if (iovcnt > UIO_MAXIOV)
+		return (error);
+	iovlen = iovcnt * sizeof(struct iovec);
+	*iov = malloc(iovlen, M_IOV, M_WAITOK);
+	for (i = 0; i < iovcnt; i++) {
+		error = copyin(&iovp[i], &iov32, sizeof(struct iovec32));
+		if (error) {
+			free(*iov, M_IOV);
+			*iov = NULL;
+			return (error);
+		}
+		iov[i]->iov_base = PTRIN(iov32.iov_base);
+		iov[i]->iov_len = iov32.iov_len;
+	}
+	return (0);
+}
+
+struct msghdr32 {
+	u_int32_t	 msg_name;
+	socklen_t	 msg_namelen;
+	u_int32_t	 msg_iov;
+	int		 msg_iovlen;
+	u_int32_t	 msg_control;
+	socklen_t	 msg_controllen;
+	int		 msg_flags;
+};
+CTASSERT(sizeof(struct msghdr32) == 28);
+
+static int
+freebsd32_copyinmsghdr(struct msghdr32 *msg32, struct msghdr *msg)
+{
+	struct msghdr32 m32;
+	int error;
+
+	error = copyin(msg32, &m32, sizeof(m32));
+	if (error)
+		return (error);
+	msg->msg_name = PTRIN(m32.msg_name);
+	msg->msg_namelen = m32.msg_namelen;
+	msg->msg_iov = PTRIN(m32.msg_iov);
+	msg->msg_iovlen = m32.msg_iovlen;
+	msg->msg_control = PTRIN(m32.msg_control);
+	msg->msg_controllen = m32.msg_controllen;
+	msg->msg_flags = m32.msg_flags;
+	return (freebsd32_copyiniov((struct iovec32 *)(uintptr_t)m32.msg_iov, m32.msg_iovlen, &msg->msg_iov,
+	    EMSGSIZE));
+}
+
+static int
+freebsd32_copyoutmsghdr(struct msghdr *msg, struct msghdr32 *msg32)
+{
+	struct msghdr32 m32;
+	int error;
+
+	m32.msg_name = PTROUT(msg->msg_name);
+	m32.msg_namelen = msg->msg_namelen;
+	m32.msg_iov = PTROUT(msg->msg_iov);
+	m32.msg_iovlen = msg->msg_iovlen;
+	m32.msg_control = PTROUT(msg->msg_control);
+	m32.msg_controllen = msg->msg_controllen;
+	m32.msg_flags = msg->msg_flags;
+	error = copyout(&m32, msg32, sizeof(m32));
+	return (error);
+}
+
+int
+freebsd32_recvmsg(td, uap)
+	struct thread *td;
+	struct freebsd32_recvmsg_args /* {
+		int	s;
+		struct	msghdr32 *msg;
+		int	flags;
+	} */ *uap;
+{
+	struct msghdr msg;
+	struct msghdr32 m32;
+	struct iovec *uiov, *iov;
+	int error;
+
+	error = copyin(uap->msg, &m32, sizeof(m32));
+	if (error)
+		return (error);
+	error = freebsd32_copyinmsghdr(uap->msg, &msg);
+	if (error)
+		return (error);
+	error = freebsd32_copyiniov((struct iovec32 *)(uintptr_t)m32.msg_iov,
+	    m32.msg_iovlen, &iov, EMSGSIZE);
+	if (error)
+		return (error);
+	msg.msg_flags = uap->flags;
+	uiov = msg.msg_iov;
+	msg.msg_iov = iov;
+	error = kern_recvit(td, uap->s, &msg, NULL, UIO_SYSSPACE);
+	if (error == 0) {
+		msg.msg_iov = uiov;
+		error = freebsd32_copyoutmsghdr(&msg, uap->msg);
+	}
+	free(iov, M_IOV);
+	free(uiov, M_IOV);
+	return (error);
+}
+
+int
+freebsd32_sendmsg(struct thread *td,
+		  struct freebsd32_sendmsg_args *uap)
+{
+	struct msghdr msg;
+	struct msghdr32 m32;
+	struct iovec *iov;
+	int error;
+
+	error = copyin(uap->msg, &m32, sizeof(m32));
+	if (error)
+		return (error);
+	error = freebsd32_copyinmsghdr(uap->msg, &msg);
+	if (error)
+		return (error);
+	error = freebsd32_copyiniov((struct iovec32 *)(uintptr_t)m32.msg_iov,
+	    m32.msg_iovlen, &iov, EMSGSIZE);
+	if (error)
+		return (error);
+	msg.msg_iov = iov;
+	error = kern_sendit(td, uap->s, &msg, uap->flags, NULL, UIO_SYSSPACE);
+	free(iov, M_IOV);
+	return (error);
+}
+
+int
+freebsd32_recvfrom(struct thread *td,
+		   struct freebsd32_recvfrom_args *uap)
+{
+	struct msghdr msg;
+	struct iovec aiov;
+	int error;
+
+	if (uap->fromlenaddr) {
+		error = copyin((void *)(uintptr_t)uap->fromlenaddr,
+		    &msg.msg_namelen, sizeof(msg.msg_namelen));
+		if (error)
+			return (error);
+	} else {
+		msg.msg_namelen = 0;
+	}
+
+	msg.msg_name = (void *)(uintptr_t)uap->from;
+	msg.msg_iov = &aiov;
+	msg.msg_iovlen = 1;
+	aiov.iov_base = (void *)(uintptr_t)uap->buf;
+	aiov.iov_len = uap->len;
+	msg.msg_control = 0;
+	msg.msg_flags = uap->flags;
+	error = kern_recvit(td, uap->s, &msg, (void *)(uintptr_t)uap->fromlenaddr, UIO_USERSPACE);
+	return (error);
+}
+
 int
 freebsd32_settimeofday(struct thread *td,
 		       struct freebsd32_settimeofday_args *uap)
@@ -1236,7 +1401,7 @@
 	struct timespec rmt, rqt;
 	int error;
 
-	error = copyin(uap->rqtp, &rqt32, sizeof(rqt));
+	error = copyin(uap->rqtp, &rqt32, sizeof(rqt32));
 	if (error)
 		return (error);
 
@@ -1253,13 +1418,66 @@
 		CP(rmt, rmt32, tv_sec);
 		CP(rmt, rmt32, tv_nsec);
 
-		error2 = copyout(&rmt32, uap->rmtp, sizeof(rmt));
+		error2 = copyout(&rmt32, uap->rmtp, sizeof(rmt32));
 		if (error2)
 			error = error2;
 	}
 	return (error);
 }
 
+int
+freebsd32_clock_gettime(struct thread *td,
+			struct freebsd32_clock_gettime_args *uap)
+{
+	struct timespec	ats;
+	struct timespec32 ats32;
+	int error;
+
+	error = kern_clock_gettime(td, uap->clock_id, &ats);
+	if (error == 0) {
+		CP(ats, ats32, tv_sec);
+		CP(ats, ats32, tv_nsec);
+		error = copyout(&ats32, uap->tp, sizeof(ats32));
+	}
+	return (error);
+}
+
+int
+freebsd32_clock_settime(struct thread *td,
+			struct freebsd32_clock_settime_args *uap)
+{
+	struct timespec	ats;
+	struct timespec32 ats32;
+	int error;
+
+	error = copyin(uap->tp, &ats32, sizeof(ats32));
+	if (error)
+		return (error);
+	CP(ats32, ats, tv_sec);
+	CP(ats32, ats, tv_nsec);
+
+	return (kern_clock_settime(td, uap->clock_id, &ats));
+}
+
+int
+freebsd32_clock_getres(struct thread *td,
+		       struct freebsd32_clock_getres_args *uap)
+{
+	struct timespec	ts;
+	struct timespec32 ts32;
+	int error;
+
+	if (uap->tp == NULL)
+		return (0);
+	error = kern_clock_getres(td, uap->clock_id, &ts);
+	if (error == 0) {
+		CP(ts, ts32, tv_sec);
+		CP(ts, ts32, tv_nsec);
+		error = copyout(&ts32, uap->tp, sizeof(ts32));
+	}
+	return (error);
+}
+
 #if 0
 
 int

==== //depot/projects/smpng/sys/compat/freebsd32/freebsd32_proto.h#21 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.40 2005/09/27 18:04:52 peter Exp $
- * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.52 2005/09/27 18:04:20 peter Exp 
+ * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.43 2005/10/15 05:57:34 ps Exp $
+ * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.55 2005/10/15 05:57:06 ps Exp 
  */
 
 #ifndef _FREEBSD32_SYSPROTO_H_
@@ -38,6 +38,24 @@
 	char options_l_[PADL_(int)]; int options; char options_r_[PADR_(int)];
 	char rusage_l_[PADL_(struct rusage32 *)]; struct rusage32 * rusage; char rusage_r_[PADR_(struct rusage32 *)];
 };
+struct freebsd32_recvmsg_args {
+	char s_l_[PADL_(int)]; int s; char s_r_[PADR_(int)];
+	char msg_l_[PADL_(struct msghdr32 *)]; struct msghdr32 * msg; char msg_r_[PADR_(struct msghdr32 *)];
+	char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
+};
+struct freebsd32_sendmsg_args {
+	char s_l_[PADL_(int)]; int s; char s_r_[PADR_(int)];
+	char msg_l_[PADL_(struct msghdr32 *)]; struct msghdr32 * msg; char msg_r_[PADR_(struct msghdr32 *)];
+	char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
+};
+struct freebsd32_recvfrom_args {
+	char s_l_[PADL_(int)]; int s; char s_r_[PADR_(int)];
+	char buf_l_[PADL_(u_int32_t)]; u_int32_t buf; char buf_r_[PADR_(u_int32_t)];
+	char len_l_[PADL_(u_int32_t)]; u_int32_t len; char len_r_[PADR_(u_int32_t)];
+	char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
+	char from_l_[PADL_(u_int32_t)]; u_int32_t from; char from_r_[PADR_(u_int32_t)];
+	char fromlenaddr_l_[PADL_(u_int32_t)]; u_int32_t fromlenaddr; char fromlenaddr_r_[PADR_(u_int32_t)];
+};
 struct freebsd32_sigaltstack_args {
 	char ss_l_[PADL_(struct sigaltstack32 *)]; struct sigaltstack32 * ss; char ss_r_[PADR_(struct sigaltstack32 *)];
 	char oss_l_[PADL_(struct sigaltstack32 *)]; struct sigaltstack32 * oss; char oss_r_[PADR_(struct sigaltstack32 *)];
@@ -179,9 +197,21 @@
 	char new_l_[PADL_(void *)]; void * new; char new_r_[PADR_(void *)];
 	char newlen_l_[PADL_(u_int32_t)]; u_int32_t newlen; char newlen_r_[PADR_(u_int32_t)];
 };
+struct freebsd32_clock_gettime_args {
+	char clock_id_l_[PADL_(clockid_t)]; clockid_t clock_id; char clock_id_r_[PADR_(clockid_t)];
+	char tp_l_[PADL_(struct timespec32 *)]; struct timespec32 * tp; char tp_r_[PADR_(struct timespec32 *)];
+};
+struct freebsd32_clock_settime_args {
+	char clock_id_l_[PADL_(clockid_t)]; clockid_t clock_id; char clock_id_r_[PADR_(clockid_t)];
+	char tp_l_[PADL_(const struct timespec32 *)]; const struct timespec32 * tp; char tp_r_[PADR_(const struct timespec32 *)];
+};
+struct freebsd32_clock_getres_args {
+	char clock_id_l_[PADL_(clockid_t)]; clockid_t clock_id; char clock_id_r_[PADR_(clockid_t)];
+	char tp_l_[PADL_(struct timespec32 *)]; struct timespec32 * tp; char tp_r_[PADR_(struct timespec32 *)];
+};
 struct freebsd32_nanosleep_args {
-	char rqtp_l_[PADL_(const struct timespec *)]; const struct timespec * rqtp; char rqtp_r_[PADR_(const struct timespec *)];
-	char rmtp_l_[PADL_(struct timespec *)]; struct timespec * rmtp; char rmtp_r_[PADR_(struct timespec *)];
+	char rqtp_l_[PADL_(const struct timespec32 *)]; const struct timespec32 * rqtp; char rqtp_r_[PADR_(const struct timespec32 *)];
+	char rmtp_l_[PADL_(struct timespec32 *)]; struct timespec32 * rmtp; char rmtp_r_[PADR_(struct timespec32 *)];
 };
 struct freebsd32_preadv_args {
 	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];

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


More information about the p4-projects mailing list