Date: Mon, 17 Oct 2005 18:19:21 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 85454 for review Message-ID: <200510171819.j9HIJLmW094473@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=85454 Change 85454 by jhb@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) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510171819.j9HIJLmW094473>