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