From owner-svn-src-projects@FreeBSD.ORG Mon Jun 6 21:38:40 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A8A881065675; Mon, 6 Jun 2011 21:38:40 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 956CF8FC15; Mon, 6 Jun 2011 21:38:40 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p56Lcerr049855; Mon, 6 Jun 2011 21:38:40 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p56LceaR049824; Mon, 6 Jun 2011 21:38:40 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106062138.p56LceaR049824@svn.freebsd.org> From: Attilio Rao Date: Mon, 6 Jun 2011 21:38:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222783 - in projects/largeSMP: bin/sh contrib/top etc lib/libiconv release/ia64 sbin/geom/class/part sbin/geom/class/sched sbin/ifconfig sbin/ipfw sbin/mount sbin/rcorder share/man/man... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jun 2011 21:38:40 -0000 Author: attilio Date: Mon Jun 6 21:38:39 2011 New Revision: 222783 URL: http://svn.freebsd.org/changeset/base/222783 Log: MFC Added: projects/largeSMP/sys/netinet/in_pcbgroup.c - copied unchanged from r222782, head/sys/netinet/in_pcbgroup.c projects/largeSMP/sys/netinet6/in6_pcbgroup.c - copied unchanged from r222782, head/sys/netinet6/in6_pcbgroup.c projects/largeSMP/tools/regression/bin/sh/expansion/heredoc1.0 - copied unchanged from r222782, head/tools/regression/bin/sh/expansion/heredoc1.0 projects/largeSMP/tools/regression/bin/sh/expansion/heredoc2.0 - copied unchanged from r222782, head/tools/regression/bin/sh/expansion/heredoc2.0 Modified: projects/largeSMP/bin/sh/eval.c projects/largeSMP/bin/sh/options.c projects/largeSMP/etc/network.subr projects/largeSMP/lib/libiconv/Makefile projects/largeSMP/release/ia64/mkisoimages.sh projects/largeSMP/sbin/geom/class/part/gpart.8 projects/largeSMP/sbin/geom/class/sched/Makefile projects/largeSMP/sbin/ifconfig/af_inet6.c projects/largeSMP/sbin/ifconfig/af_nd6.c projects/largeSMP/sbin/ipfw/main.c projects/largeSMP/sbin/mount/mount.8 projects/largeSMP/sbin/rcorder/rcorder.8 projects/largeSMP/share/man/man4/amdsbwd.4 projects/largeSMP/sys/amd64/amd64/mp_machdep.c projects/largeSMP/sys/cddl/compat/opensolaris/sys/atomic.h projects/largeSMP/sys/conf/files projects/largeSMP/sys/conf/options projects/largeSMP/sys/dev/ath/if_ath.c projects/largeSMP/sys/dev/cardbus/cardbus_cis.c projects/largeSMP/sys/dev/cxgbe/adapter.h projects/largeSMP/sys/dev/cxgbe/t4_main.c projects/largeSMP/sys/dev/cxgbe/t4_sge.c projects/largeSMP/sys/dev/pccard/pccard.c projects/largeSMP/sys/dev/pci/pci.c projects/largeSMP/sys/dev/puc/pucdata.c projects/largeSMP/sys/fs/nfs/nfs_var.h projects/largeSMP/sys/fs/nfsclient/nfs_clport.c projects/largeSMP/sys/fs/nfsclient/nfs_clrpcops.c projects/largeSMP/sys/fs/nfsclient/nfs_clstate.c projects/largeSMP/sys/fs/nfsclient/nfs_clvnops.c projects/largeSMP/sys/i386/i386/mp_machdep.c projects/largeSMP/sys/ia64/acpica/acpi_machdep.c projects/largeSMP/sys/ia64/ia64/machdep.c projects/largeSMP/sys/ia64/ia64/pal.S projects/largeSMP/sys/kern/subr_rman.c projects/largeSMP/sys/netinet/icmp6.h projects/largeSMP/sys/netinet/in_pcb.c projects/largeSMP/sys/netinet/in_pcb.h projects/largeSMP/sys/netinet/ip_divert.c projects/largeSMP/sys/netinet/ipfw/ip_fw2.c projects/largeSMP/sys/netinet/ipfw/ip_fw_sockopt.c projects/largeSMP/sys/netinet/raw_ip.c projects/largeSMP/sys/netinet/tcp_subr.c projects/largeSMP/sys/netinet/tcp_syncache.c projects/largeSMP/sys/netinet/udp_usrreq.c projects/largeSMP/sys/netinet6/in6.c projects/largeSMP/sys/netinet6/in6.h projects/largeSMP/sys/netinet6/in6_pcb.c projects/largeSMP/sys/netinet6/in6_pcb.h projects/largeSMP/sys/netinet6/in6_proto.c projects/largeSMP/sys/netinet6/ip6_var.h projects/largeSMP/sys/netinet6/nd6.c projects/largeSMP/sys/netinet6/nd6.h projects/largeSMP/sys/netinet6/nd6_nbr.c projects/largeSMP/sys/netinet6/nd6_rtr.c projects/largeSMP/sys/netinet6/send.h projects/largeSMP/sys/sys/mbuf.h projects/largeSMP/sys/sys/soundcard.h projects/largeSMP/sys/ufs/ffs/ffs_alloc.c projects/largeSMP/usr.bin/calendar/io.c projects/largeSMP/usr.bin/grep/Makefile projects/largeSMP/usr.bin/iconv/Makefile projects/largeSMP/usr.bin/kdump/mksubr projects/largeSMP/usr.bin/rctl/Makefile projects/largeSMP/usr.bin/su/su.1 projects/largeSMP/usr.sbin/bluetooth/ath3kfw/Makefile projects/largeSMP/usr.sbin/bsdinstall/scripts/netconfig_ipv6 projects/largeSMP/usr.sbin/bsnmpd/modules/snmp_wlan/Makefile projects/largeSMP/usr.sbin/lastlogin/lastlogin.8 projects/largeSMP/usr.sbin/lastlogin/lastlogin.c projects/largeSMP/usr.sbin/rtadvd/advcap.c projects/largeSMP/usr.sbin/rtadvd/config.c projects/largeSMP/usr.sbin/rtadvd/config.h projects/largeSMP/usr.sbin/rtadvd/dump.c projects/largeSMP/usr.sbin/rtadvd/dump.h projects/largeSMP/usr.sbin/rtadvd/if.c projects/largeSMP/usr.sbin/rtadvd/if.h projects/largeSMP/usr.sbin/rtadvd/pathnames.h projects/largeSMP/usr.sbin/rtadvd/rrenum.c projects/largeSMP/usr.sbin/rtadvd/rrenum.h projects/largeSMP/usr.sbin/rtadvd/rtadvd.8 projects/largeSMP/usr.sbin/rtadvd/rtadvd.c projects/largeSMP/usr.sbin/rtadvd/rtadvd.conf projects/largeSMP/usr.sbin/rtadvd/rtadvd.conf.5 projects/largeSMP/usr.sbin/rtadvd/rtadvd.h projects/largeSMP/usr.sbin/rtadvd/timer.c projects/largeSMP/usr.sbin/rtadvd/timer.h projects/largeSMP/usr.sbin/rtsold/Makefile projects/largeSMP/usr.sbin/rtsold/dump.c projects/largeSMP/usr.sbin/rtsold/if.c projects/largeSMP/usr.sbin/rtsold/probe.c projects/largeSMP/usr.sbin/rtsold/rtsock.c projects/largeSMP/usr.sbin/rtsold/rtsol.c projects/largeSMP/usr.sbin/rtsold/rtsold.8 projects/largeSMP/usr.sbin/rtsold/rtsold.c projects/largeSMP/usr.sbin/rtsold/rtsold.h projects/largeSMP/usr.sbin/tcpdrop/tcpdrop.c Directory Properties: projects/largeSMP/ (props changed) projects/largeSMP/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/contrib/bind9/ (props changed) projects/largeSMP/contrib/binutils/ (props changed) projects/largeSMP/contrib/bzip2/ (props changed) projects/largeSMP/contrib/compiler-rt/ (props changed) projects/largeSMP/contrib/dialog/ (props changed) projects/largeSMP/contrib/ee/ (props changed) projects/largeSMP/contrib/expat/ (props changed) projects/largeSMP/contrib/file/ (props changed) projects/largeSMP/contrib/gcc/ (props changed) projects/largeSMP/contrib/gdb/ (props changed) projects/largeSMP/contrib/gdtoa/ (props changed) projects/largeSMP/contrib/gnu-sort/ (props changed) projects/largeSMP/contrib/groff/ (props changed) projects/largeSMP/contrib/less/ (props changed) projects/largeSMP/contrib/libpcap/ (props changed) projects/largeSMP/contrib/libstdc++/ (props changed) projects/largeSMP/contrib/llvm/ (props changed) projects/largeSMP/contrib/llvm/tools/clang/ (props changed) projects/largeSMP/contrib/ncurses/ (props changed) projects/largeSMP/contrib/netcat/ (props changed) projects/largeSMP/contrib/ntp/ (props changed) projects/largeSMP/contrib/one-true-awk/ (props changed) projects/largeSMP/contrib/openbsm/ (props changed) projects/largeSMP/contrib/openpam/ (props changed) projects/largeSMP/contrib/pf/ (props changed) projects/largeSMP/contrib/sendmail/ (props changed) projects/largeSMP/contrib/tcpdump/ (props changed) projects/largeSMP/contrib/tcsh/ (props changed) projects/largeSMP/contrib/top/ (props changed) projects/largeSMP/contrib/top/install-sh (props changed) projects/largeSMP/contrib/tzcode/stdtime/ (props changed) projects/largeSMP/contrib/tzcode/zic/ (props changed) projects/largeSMP/contrib/tzdata/ (props changed) projects/largeSMP/contrib/wpa/ (props changed) projects/largeSMP/contrib/xz/ (props changed) projects/largeSMP/crypto/openssh/ (props changed) projects/largeSMP/crypto/openssl/ (props changed) projects/largeSMP/gnu/lib/ (props changed) projects/largeSMP/gnu/usr.bin/binutils/ (props changed) projects/largeSMP/gnu/usr.bin/cc/cc_tools/ (props changed) projects/largeSMP/gnu/usr.bin/gdb/ (props changed) projects/largeSMP/lib/libc/ (props changed) projects/largeSMP/lib/libc/stdtime/ (props changed) projects/largeSMP/lib/libutil/ (props changed) projects/largeSMP/lib/libz/ (props changed) projects/largeSMP/sbin/ (props changed) projects/largeSMP/sbin/ipfw/ (props changed) projects/largeSMP/share/mk/bsd.arch.inc.mk (props changed) projects/largeSMP/share/zoneinfo/ (props changed) projects/largeSMP/sys/ (props changed) projects/largeSMP/sys/amd64/include/xen/ (props changed) projects/largeSMP/sys/boot/ (props changed) projects/largeSMP/sys/boot/i386/efi/ (props changed) projects/largeSMP/sys/boot/ia64/efi/ (props changed) projects/largeSMP/sys/boot/ia64/ski/ (props changed) projects/largeSMP/sys/boot/powerpc/boot1.chrp/ (props changed) projects/largeSMP/sys/boot/powerpc/ofw/ (props changed) projects/largeSMP/sys/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/sys/conf/ (props changed) projects/largeSMP/sys/contrib/dev/acpica/ (props changed) projects/largeSMP/sys/contrib/octeon-sdk/ (props changed) projects/largeSMP/sys/contrib/pf/ (props changed) projects/largeSMP/sys/contrib/x86emu/ (props changed) projects/largeSMP/usr.bin/calendar/ (props changed) projects/largeSMP/usr.bin/csup/ (props changed) projects/largeSMP/usr.bin/procstat/ (props changed) projects/largeSMP/usr.sbin/ndiscvt/ (props changed) projects/largeSMP/usr.sbin/zic/ (props changed) Modified: projects/largeSMP/bin/sh/eval.c ============================================================================== --- projects/largeSMP/bin/sh/eval.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/bin/sh/eval.c Mon Jun 6 21:38:39 2011 (r222783) @@ -409,6 +409,7 @@ evalsubshell(union node *n, int flags) struct job *jp; int backgnd = (n->type == NBACKGND); + oexitstatus = exitstatus; expredir(n->nredir.redirect); if ((!backgnd && flags & EV_EXIT && !have_traps()) || forkshell(jp = makejob(n, 1), n, backgnd) == 0) { @@ -436,6 +437,7 @@ evalredir(union node *n, int flags) struct jmploc *savehandler; volatile int in_redirect = 1; + oexitstatus = exitstatus; expredir(n->nredir.redirect); savehandler = handler; if (setjmp(jmploc.loc)) { @@ -478,7 +480,6 @@ expredir(union node *n) for (redir = n ; redir ; redir = redir->nfile.next) { struct arglist fn; fn.lastp = &fn.list; - oexitstatus = exitstatus; switch (redir->type) { case NFROM: case NTO: Modified: projects/largeSMP/bin/sh/options.c ============================================================================== --- projects/largeSMP/bin/sh/options.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/bin/sh/options.c Mon Jun 6 21:38:39 2011 (r222783) @@ -83,6 +83,7 @@ void procargs(int argc, char **argv) { int i; + char *scriptname; argptr = argv; if (argc > 0) @@ -105,8 +106,9 @@ procargs(int argc, char **argv) optlist[i].val = 0; arg0 = argv[0]; if (sflag == 0 && minusc == NULL) { - commandname = arg0 = *argptr++; - setinputfile(commandname, 0); + scriptname = *argptr++; + setinputfile(scriptname, 0); + commandname = arg0 = scriptname; } /* POSIX 1003.2: first arg after -c cmd is $0, remainder $1... */ if (argptr && minusc && *argptr) Modified: projects/largeSMP/etc/network.subr ============================================================================== --- projects/largeSMP/etc/network.subr Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/etc/network.subr Mon Jun 6 21:38:39 2011 (r222783) @@ -100,25 +100,19 @@ ifconfig_up() # inet6 specific if afexists inet6; then - if ipv6if $1; then - if checkyesno ipv6_gateway_enable; then - _ipv6_opts="-accept_rtadv" - fi - else - if checkyesno ipv6_activate_all_interfaces; then - _ipv6_opts="-ifdisabled" - else - _ipv6_opts="ifdisabled" - fi - - # backward compatibility: $ipv6_enable - case $ipv6_enable in - [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) - _ipv6_opts="${_ipv6_opts} accept_rtadv" - ;; - esac + if checkyesno ipv6_activate_all_interfaces; then + _ipv6_opts="-ifdisabled" + elif [ "$1" != "lo0" ]; then + _ipv6_opts="ifdisabled" fi + # backward compatibility: $ipv6_enable + case $ipv6_enable in + [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) + _ipv6_opts="${_ipv6_opts} accept_rtadv" + ;; + esac + if [ -n "${_ipv6_opts}" ]; then ifconfig $1 inet6 ${_ipv6_opts} fi Modified: projects/largeSMP/lib/libiconv/Makefile ============================================================================== --- projects/largeSMP/lib/libiconv/Makefile Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/lib/libiconv/Makefile Mon Jun 6 21:38:39 2011 (r222783) @@ -19,7 +19,6 @@ SRCS= citrus_bcs.c citrus_bcs_strtol.c c citrus_module.c citrus_none.c citrus_pivot_factory.c \ citrus_prop.c citrus_stdenc.c iconv.c -WARNS?= 6 CFLAGS+= --param max-inline-insns-single=128 -I ${.CURDIR}/../../include -I${.CURDIR}/../libc/include .include Modified: projects/largeSMP/release/ia64/mkisoimages.sh ============================================================================== --- projects/largeSMP/release/ia64/mkisoimages.sh Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/release/ia64/mkisoimages.sh Mon Jun 6 21:38:39 2011 (r222783) @@ -48,28 +48,32 @@ EFIPART=efipart.sys if [ $bootable = yes ]; then EFISZ=65536 MNT=/mnt - dd if=/dev/zero of=$BASE/$EFIPART count=$EFISZ - md=`mdconfig -a -t vnode -f $BASE/$EFIPART` + dd if=/dev/zero of=$EFIPART count=$EFISZ + md=`mdconfig -a -t vnode -f $EFIPART` newfs_msdos -F 12 -S 512 -h 4 -o 0 -s $EFISZ -u 16 $md mount -t msdosfs /dev/$md $MNT mkdir -p $MNT/efi/boot $MNT/boot $MNT/boot/kernel cp -R $BASE/boot/defaults $MNT/boot cp $BASE/boot/kernel/kernel $MNT/boot/kernel - cp $BASE/boot/kernel/ispfw.ko $MNT/boot/kernel + if [ -s $BASE/boot/kernel/ispfw.ko ]; then + cp $BASE/boot/kernel/ispfw.ko $MNT/boot/kernel + fi cp $BASE/boot/device.hints $MNT/boot cp $BASE/boot/loader.* $MNT/boot - cp $BASE/boot/mfsroot.gz $MNT/boot + if [ -s $BASE/boot/mfsroot.gz ]; then + cp $BASE/boot/mfsroot.gz $MNT/boot + fi cp $BASE/boot/support.4th $MNT/boot mv $MNT/boot/loader.efi $MNT/efi/boot/bootia64.efi umount $MNT mdconfig -d -u $md - BOOTOPTS="-b bootimage=i386;$EFIPART -o no-emul-boot" + BOOTOPTS="-o bootimage=i386;$EFIPART -o no-emul-boot" else BOOTOPTS="" fi -echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > $1/etc/fstab +echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > $BASE/etc/fstab makefs -t cd9660 $BOOTOPTS -o rockridge -o label=$LABEL $NAME $BASE $* -rm -f $BASE/$EFIPART -rm $1/etc/fstab +rm $BASE/etc/fstab +rm -f $EFIPART exit 0 Modified: projects/largeSMP/sbin/geom/class/part/gpart.8 ============================================================================== --- projects/largeSMP/sbin/geom/class/part/gpart.8 Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sbin/geom/class/part/gpart.8 Mon Jun 6 21:38:39 2011 (r222783) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 30, 2011 +.Dd June 6, 2011 .Dt GPART 8 .Os .Sh NAME @@ -530,16 +530,17 @@ about its use. .El .\" .Sh PARTITION TYPES +Partition types are identified on disk by particular strings or magic +values. The .Nm -utility uses symbolic names for common partition types to avoid that the -user needs to know what the partitioning scheme in question is and what -the actual number or identification needs to be used for a particular -type. +utility uses symbolic names for common partition types to avoid the +user needing to know these values or other details of the partitioning +scheme in question. The .Nm utility also allows the user to specify scheme-specific partition types -for partition types that do not have symbol names. +for partition types that do not have symbolic names. The symbolic names currently understood are: .Bl -tag -width ".Cm freebsd-vinum" .It Cm bios-boot @@ -740,30 +741,30 @@ action or reverted with the .Cm undo action. .Sh RECOVERING -The GEOM class PART supports recovering of partition tables only for GPT. +The GEOM PART class supports recovering of partition tables only for GPT. The GUID partition table has a primary and secondary (backup) copy of -metadata for redundance. -They are stored in the begining and in the end of device respectively. -Therefore it is acceptable to have some corruptions in the metadata that -are not fatal to work with GPT. -When kernel detects corrupt metadata it marks this table as corrupt and -reports about corruption. -Any changes in corrupt table are prohibited except +metadata for redundance, these are stored at the begining and the end +of the device respectively. +As a result of having two copies, it is acceptable to have some corruption +within the metadata that is not fatal to the working of GPT. +When the kernel detects corrupt metadata it marks this table as corrupt and +reports the corruption. +Any operations on corrupt tables are prohibited except for .Cm destroy and .Cm recover . .Pp -In case when only first sector is corrupt kernel can not detect GPT even -if partition table is not corrupt. -You can write protective MBR with +If the first sector of a provider is corrupt, the kernel can not detect GPT +even if partition table itself is not corrupt. +You can rewrite the protective MBR using the .Xr dd 1 -command to restore ability of GPT detection. -The copy of protective MBR is usually located in the +command, to restore the ability to detect the GPT. +The copy of the protective MBR is usually located in the .Pa /boot/pmbr file. .Pp -In case when some of metadata is corrupt you will get to know about this -from kernel's messages like these: +If one GPT header appears to be corrupt but the other copy remains intact, +the kernel will log the following: .Bd -literal -offset indent GEOM: provider: the primary GPT table is corrupt or invalid. GEOM: provider: using the secondary instead -- recovery strongly advised. @@ -777,32 +778,31 @@ GEOM: provider: using the primary only - .Pp Also .Nm -commands like +commands such as .Cm show , status and .Cm list -will report about corrupt table. +will report about corrupt tables. .Pp -In case when the size of device has changed (e.g.\& volume expansion) the -secondary GPT header will become located not in the last sector. +If the size of the device has changed (e.g.\& volume expansion) the +secondary GPT header will no longer be located in the last sector. This is not a metadata corruption, but it is dangerous because any -corruption of the primary GPT will lead to lost of partition table. -Kernel reports about this problem with message: +corruption of the primary GPT will lead to loss of partition table. +This problem is reported by the kernel with the message: .Bd -literal -offset indent GEOM: provider: the secondary GPT header is not in the last LBA. .Ed .Pp -A corrupt table can be recovered with +This situation can be recovered with the .Cm recover command. -This command does reconstruction of corrupt metadata using -known valid metadata. -Also it can relocate secondary GPT to the end of device. +This command reconstructs the corrupt metadata using known valid +metadata and relocates the secondary GPT to the end of the device. .Pp .Em NOTE : -The GEOM class PART can detect the same partition table on different GEOM -providers and some of them will be marked as corrupt. -Be careful when choosing a provider for recovering. +The GEOM PART class can detect the same partition table visible through +different GEOM providers, and some of them will be marked as corrupt. +Be careful when choosing a provider for recovery. If you choose incorrectly you can destroy the metadata of another GEOM class, e.g.\& GEOM MIRROR or GEOM LABEL. .Sh SYSCTL VARIABLES @@ -815,11 +815,11 @@ The default value is shown next to each .Bl -tag -width indent .It Va kern.geom.part.check_integrity : No 1 This variable controls the behaviour of metadata integrity checks. -When integrity checks are enabled +When integrity checks are enabled, the .Nm PART -GEOM class verifies all generic partition parameters that it gets from the +GEOM class verifies all generic partition parameters obtained from the disk metadata. -If some inconsistency is detected, partition table will be +If some inconsistency is detected, the partition table will be rejected with a diagnostic message: .Sy "GEOM_PART: Integrity check failed (provider, scheme)" . .El Modified: projects/largeSMP/sbin/geom/class/sched/Makefile ============================================================================== --- projects/largeSMP/sbin/geom/class/sched/Makefile Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sbin/geom/class/sched/Makefile Mon Jun 6 21:38:39 2011 (r222783) @@ -5,6 +5,4 @@ GEOM_CLASS= sched -WARNS?= 6 - .include Modified: projects/largeSMP/sbin/ifconfig/af_inet6.c ============================================================================== --- projects/largeSMP/sbin/ifconfig/af_inet6.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sbin/ifconfig/af_inet6.c Mon Jun 6 21:38:39 2011 (r222783) @@ -69,6 +69,7 @@ static int explicit_prefix = 0; extern void setnd6flags(const char *, int, int, const struct afswtch *); extern void setnd6defif(const char *, int, int, const struct afswtch *); +extern void nd6_status(int); static char addr_buf[MAXHOSTNAMELEN *2 + 1]; /*for getnameinfo()*/ @@ -498,6 +499,8 @@ static struct cmd inet6_cmds[] = { DEF_CMD("-autoconf", -IN6_IFF_AUTOCONF, setip6flags), DEF_CMD("accept_rtadv", ND6_IFF_ACCEPT_RTADV, setnd6flags), DEF_CMD("-accept_rtadv",-ND6_IFF_ACCEPT_RTADV, setnd6flags), + DEF_CMD("no_radr", ND6_IFF_NO_RADR, setnd6flags), + DEF_CMD("-no_radr", -ND6_IFF_NO_RADR, setnd6flags), DEF_CMD("defaultif", 1, setnd6defif), DEF_CMD("-defaultif", -1, setnd6defif), DEF_CMD("ifdisabled", ND6_IFF_IFDISABLED, setnd6flags), @@ -519,6 +522,7 @@ static struct afswtch af_inet6 = { .af_status = in6_status, .af_getaddr = in6_getaddr, .af_getprefix = in6_getprefix, + .af_other_status = nd6_status, .af_postproc = in6_postproc, .af_status_tunnel = in6_status_tunnel, .af_settunnel = in6_set_tunnel, Modified: projects/largeSMP/sbin/ifconfig/af_nd6.c ============================================================================== --- projects/largeSMP/sbin/ifconfig/af_nd6.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sbin/ifconfig/af_nd6.c Mon Jun 6 21:38:39 2011 (r222783) @@ -58,11 +58,12 @@ static const char rcsid[] = #define MAX_SYSCTL_TRY 5 #define ND6BITS "\020\001PERFORMNUD\002ACCEPT_RTADV\003PREFER_SOURCE" \ "\004IFDISABLED\005DONT_SET_IFROUTE\006AUTO_LINKLOCAL" \ - "\020DEFAULTIF" + "\007NO_RADR\020DEFAULTIF" static int isnd6defif(int); void setnd6flags(const char *, int, int, const struct afswtch *); void setnd6defif(const char *, int, int, const struct afswtch *); +void nd6_status(int); void setnd6flags(const char *dummyaddr __unused, @@ -136,64 +137,13 @@ isnd6defif(int s) return (ndifreq.ifindex == ifindex); } -static void +void nd6_status(int s) { struct in6_ndireq nd; - struct rt_msghdr *rtm; - size_t needed; - char *buf, *next; - int mib[6], ntry; int s6; int error; - int isinet6, isdefif; - - /* Check if the interface has at least one IPv6 address. */ - mib[0] = CTL_NET; - mib[1] = PF_ROUTE; - mib[2] = 0; - mib[3] = AF_INET6; - mib[4] = NET_RT_IFLIST; - mib[5] = if_nametoindex(ifr.ifr_name); - - /* Try to prevent a race between two sysctls. */ - ntry = 0; - do { - error = sysctl(mib, 6, NULL, &needed, NULL, 0); - if (error) { - warn("sysctl(NET_RT_IFLIST)/estimate"); - return; - } - buf = malloc(needed); - if (buf == NULL) { - warn("malloc for sysctl(NET_RT_IFLIST) failed"); - return; - } - if ((error = sysctl(mib, 6, buf, &needed, NULL, 0)) < 0) { - if (errno != ENOMEM || ++ntry >= MAX_SYSCTL_TRY) { - warn("sysctl(NET_RT_IFLIST)/get"); - free(buf); - return; - } - free(buf); - buf = NULL; - } - } while (buf == NULL); - - isinet6 = 0; - for (next = buf; next < buf + needed; next += rtm->rtm_msglen) { - rtm = (struct rt_msghdr *)next; - - if (rtm->rtm_version != RTM_VERSION) - continue; - if (rtm->rtm_type == RTM_NEWADDR) { - isinet6 = 1; - break; - } - } - free(buf); - if (!isinet6) - return; + int isdefif; memset(&nd, 0, sizeof(nd)); strncpy(nd.ifname, ifr.ifr_name, sizeof(nd.ifname)); @@ -215,19 +165,3 @@ nd6_status(int s) (unsigned int)(nd.ndi.flags | (isdefif << 15)), ND6BITS); putchar('\n'); } - -static struct afswtch af_nd6 = { - .af_name = "nd6", - .af_af = AF_LOCAL, - .af_other_status= nd6_status, -}; - -static __constructor void -nd6_ctor(void) -{ - - if (!feature_present("inet6")) - return; - - af_register(&af_nd6); -} Modified: projects/largeSMP/sbin/ipfw/main.c ============================================================================== --- projects/largeSMP/sbin/ipfw/main.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sbin/ipfw/main.c Mon Jun 6 21:38:39 2011 (r222783) @@ -356,6 +356,7 @@ ipfw_main(int oldac, char **oldav) */ co.do_nat = 0; co.do_pipe = 0; + co.use_set = 0; if (!strncmp(*av, "nat", strlen(*av))) co.do_nat = 1; else if (!strncmp(*av, "pipe", strlen(*av))) @@ -444,7 +445,7 @@ static void ipfw_readfile(int ac, char *av[]) { #define MAX_ARGS 32 - char buf[BUFSIZ]; + char buf[4096]; char *progname = av[0]; /* original program name */ const char *cmd = NULL; /* preprocessor name, if any */ const char *filename = av[ac-1]; /* file to read */ @@ -552,7 +553,7 @@ ipfw_readfile(int ac, char *av[]) } } - while (fgets(buf, BUFSIZ, f)) { /* read commands */ + while (fgets(buf, sizeof(buf), f)) { /* read commands */ char linename[20]; char *args[2]; Modified: projects/largeSMP/sbin/mount/mount.8 ============================================================================== --- projects/largeSMP/sbin/mount/mount.8 Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sbin/mount/mount.8 Mon Jun 6 21:38:39 2011 (r222783) @@ -28,7 +28,7 @@ .\" @(#)mount.8 8.8 (Berkeley) 6/16/94 .\" $FreeBSD$ .\" -.Dd April 28, 2011 +.Dd June 6, 2011 .Dt MOUNT 8 .Os .Sh NAME @@ -348,7 +348,6 @@ option) may be passed as a comma separat distinguished by a leading .Dq \&- (dash). -Options that take a value are specified using the syntax -option=value. For example, the .Nm command: @@ -363,6 +362,16 @@ to execute the equivalent of: /sbin/mount_cd9660 -e /dev/cd0 /cdrom .Ed .Pp +Options that take a value are specified using the -option=value syntax: +.Bd -literal -offset indent +mount -t msdosfs -o -u=fred,-g=wheel /dev/da0s1 /mnt +.Ed +.Pp +is equivalent to +.Bd -literal -offset indent +/sbin/mount_msdosfs -u fred -g wheel /dev/da0s1 /mnt +.Ed +.Pp Additional options specific to file system types which are not internally known (see the description of the Modified: projects/largeSMP/sbin/rcorder/rcorder.8 ============================================================================== --- projects/largeSMP/sbin/rcorder/rcorder.8 Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sbin/rcorder/rcorder.8 Mon Jun 6 21:38:39 2011 (r222783) @@ -31,7 +31,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 9, 2008 +.Dd June 6, 2011 .Dt RCORDER 8 .Os .Sh NAME @@ -89,6 +89,12 @@ and lines may appear, but all such lines must appear in a sequence without any intervening lines, as once a line that does not follow the format is reached, parsing stops. +Note that for historical reasons, +.Dq Li REQUIRES , +.Dq Li PROVIDES , +and +.Dq Li KEYWORDS +are also accepted in addition to the above. .Pp The options are as follows: .Bl -tag -width indent Modified: projects/largeSMP/share/man/man4/amdsbwd.4 ============================================================================== --- projects/largeSMP/share/man/man4/amdsbwd.4 Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/share/man/man4/amdsbwd.4 Mon Jun 6 21:38:39 2011 (r222783) @@ -61,12 +61,14 @@ AMD SB600 and SB7xx south bridge chips. The .Nm driver first appeared in -.Fx 9.0 . +.Fx 7.3 +and +.Fx 8.1 . .Sh AUTHORS .An -nosplit The .Nm driver was written by -.An Andiry Gapon Aq avg@FreeBSD.org . +.An Andriy Gapon Aq avg@FreeBSD.org . This manual page was written by -.An Andiry Gapon Aq avg@FreeBSD.org . +.An Andriy Gapon Aq avg@FreeBSD.org . Modified: projects/largeSMP/sys/amd64/amd64/mp_machdep.c ============================================================================== --- projects/largeSMP/sys/amd64/amd64/mp_machdep.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/amd64/amd64/mp_machdep.c Mon Jun 6 21:38:39 2011 (r222783) @@ -242,8 +242,11 @@ topo_probe_0x4(void) * logical processors that belong to the same core * as BSP thus deducing number of threads per core. */ - cpuid_count(0x04, 0, p); - max_cores = ((p[0] >> 26) & 0x3f) + 1; + if (cpu_high >= 0x4) { + cpuid_count(0x04, 0, p); + max_cores = ((p[0] >> 26) & 0x3f) + 1; + } else + max_cores = 1; core_id_bits = mask_width(max_logical/max_cores); if (core_id_bits < 0) return; Modified: projects/largeSMP/sys/cddl/compat/opensolaris/sys/atomic.h ============================================================================== --- projects/largeSMP/sys/cddl/compat/opensolaris/sys/atomic.h Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/cddl/compat/opensolaris/sys/atomic.h Mon Jun 6 21:38:39 2011 (r222783) @@ -40,8 +40,6 @@ extern void atomic_add_64(volatile uint64_t *target, int64_t delta); extern void atomic_dec_64(volatile uint64_t *target); #endif -#ifndef __LP64__ -#endif #ifndef __sparc64__ extern uint32_t atomic_cas_32(volatile uint32_t *target, uint32_t cmp, uint32_t newval); Modified: projects/largeSMP/sys/conf/files ============================================================================== --- projects/largeSMP/sys/conf/files Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/conf/files Mon Jun 6 21:38:39 2011 (r222783) @@ -2748,6 +2748,7 @@ netinet/ip_gre.c optional gre inet netinet/ip_id.c optional inet netinet/in_mcast.c optional inet netinet/in_pcb.c optional inet | inet6 +netinet/in_pcbgroup.c optional inet pcbgroup | inet6 pcbgroup netinet/in_proto.c optional inet | inet6 \ compile-with "${NORMAL_C} -I$S/contrib/pf" netinet/in_rmx.c optional inet @@ -2825,6 +2826,7 @@ netinet6/in6_gif.c optional gif inet6 | netinet6/in6_ifattach.c optional inet6 netinet6/in6_mcast.c optional inet6 netinet6/in6_pcb.c optional inet6 +netinet6/in6_pcbgroup.c optional inet6 pcbgroup netinet6/in6_proto.c optional inet6 netinet6/in6_rmx.c optional inet6 netinet6/in6_src.c optional inet6 Modified: projects/largeSMP/sys/conf/options ============================================================================== --- projects/largeSMP/sys/conf/options Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/conf/options Mon Jun 6 21:38:39 2011 (r222783) @@ -419,6 +419,7 @@ MROUTING opt_mrouting.h NCP NETATALK opt_atalk.h NFSLOCKD +PCBGROUP opt_pcbgroup.h RADIX_MPATH opt_mpath.h ROUTETABLES opt_route.h SLIP_IFF_OPTS opt_slip.h Modified: projects/largeSMP/sys/dev/ath/if_ath.c ============================================================================== --- projects/largeSMP/sys/dev/ath/if_ath.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/dev/ath/if_ath.c Mon Jun 6 21:38:39 2011 (r222783) @@ -3473,7 +3473,15 @@ ath_rx_proc(void *arg, int npending) if (rs->rs_status & HAL_RXERR_PHY) { sc->sc_stats.ast_rx_phyerr++; /* Process DFS radar events */ - ath_dfs_process_phy_err(sc, mtod(m, char *), tsf, rs); + if ((rs->rs_phyerr == HAL_PHYERR_RADAR) || + (rs->rs_phyerr == HAL_PHYERR_FALSE_RADAR_EXT)) { + /* Since we're touching the frame data, sync it */ + bus_dmamap_sync(sc->sc_dmat, + bf->bf_dmamap, + BUS_DMASYNC_POSTREAD); + /* Now pass it to the radar processing code */ + ath_dfs_process_phy_err(sc, mtod(m, char *), tsf, rs); + } /* Be suitably paranoid about receiving phy errors out of the stats array bounds */ if (rs->rs_phyerr < 64) Modified: projects/largeSMP/sys/dev/cardbus/cardbus_cis.c ============================================================================== --- projects/largeSMP/sys/dev/cardbus/cardbus_cis.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/dev/cardbus/cardbus_cis.c Mon Jun 6 21:38:39 2011 (r222783) @@ -324,7 +324,7 @@ decode_tuple_bar(device_t cbdev, device_ * hint when the cardbus bridge is a child of pci0 (the main * bus). The PC Card spec seems to indicate that this should * only be done on x86 based machines, which suggests that on - * non-x86 machines the adddresses can be anywhere. Since the + * non-x86 machines the addresses can be anywhere. Since the * hardware can do it on non-x86 machines, it should be able * to do it on x86 machines too. Therefore, we can and should * ignore this hint. Furthermore, the PC Card spec recommends @@ -430,7 +430,6 @@ cardbus_read_tuple_finish(device_t cbdev { if (res != CIS_CONFIG_SPACE) { bus_release_resource(child, SYS_RES_MEMORY, rid, res); - bus_delete_resource(child, SYS_RES_MEMORY, rid); } } @@ -467,7 +466,7 @@ cardbus_read_tuple_init(device_t cbdev, } /* allocate the memory space to read CIS */ - res = bus_alloc_resource(child, SYS_RES_MEMORY, rid, 0, ~0, 1, + res = bus_alloc_resource_any(child, SYS_RES_MEMORY, rid, rman_make_alignment_flags(4096) | RF_ACTIVE); if (res == NULL) { device_printf(cbdev, "Unable to allocate resource " Modified: projects/largeSMP/sys/dev/cxgbe/adapter.h ============================================================================== --- projects/largeSMP/sys/dev/cxgbe/adapter.h Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/dev/cxgbe/adapter.h Mon Jun 6 21:38:39 2011 (r222783) @@ -396,6 +396,7 @@ struct sge_ctrlq { struct sge { uint16_t timer_val[SGE_NTIMERS]; uint8_t counter_val[SGE_NCOUNTERS]; + int fl_starve_threshold; int nrxq; /* total rx queues (all ports and the rest) */ int ntxq; /* total tx queues (all ports and the rest) */ Modified: projects/largeSMP/sys/dev/cxgbe/t4_main.c ============================================================================== --- projects/largeSMP/sys/dev/cxgbe/t4_main.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/dev/cxgbe/t4_main.c Mon Jun 6 21:38:39 2011 (r222783) @@ -492,6 +492,8 @@ t4_attach(device_t dev) V_RXTSHIFTMAXR2(15) | V_PERSHIFTBACKOFFMAX(8) | V_PERSHIFTMAX(8) | V_KEEPALIVEMAXR1(4) | V_KEEPALIVEMAXR2(9)); t4_write_reg(sc, A_ULP_RX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12)); + t4_set_reg_field(sc, A_TP_PARA_REG3, F_TUNNELCNGDROP0 | + F_TUNNELCNGDROP1 | F_TUNNELCNGDROP2 | F_TUNNELCNGDROP3, 0); setup_memwin(sc); Modified: projects/largeSMP/sys/dev/cxgbe/t4_sge.c ============================================================================== --- projects/largeSMP/sys/dev/cxgbe/t4_sge.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/dev/cxgbe/t4_sge.c Mon Jun 6 21:38:39 2011 (r222783) @@ -203,6 +203,9 @@ t4_sge_init(struct adapter *sc) FL_BUF_SIZE(i)); } + i = t4_read_reg(sc, A_SGE_CONM_CTRL); + s->fl_starve_threshold = G_EGRTHRESHOLD(i) * 2 + 1; + t4_write_reg(sc, A_SGE_INGRESS_RX_THRESHOLD, V_THRESHOLD_0(s->counter_val[0]) | V_THRESHOLD_1(s->counter_val[1]) | @@ -1233,7 +1236,8 @@ alloc_iq_fl(struct port_info *pi, struct sc->sge.eqmap[cntxt_id] = (void *)fl; FL_LOCK(fl); - refill_fl(sc, fl, -1, 8); + /* Just enough to make sure it doesn't starve right away. */ + refill_fl(sc, fl, roundup(sc->sge.fl_starve_threshold, 8), 8); FL_UNLOCK(fl); } @@ -1389,6 +1393,10 @@ alloc_rxq(struct port_info *pi, struct s if (rc != 0) return (rc); + FL_LOCK(&rxq->fl); + refill_fl(pi->adapter, &rxq->fl, rxq->fl.needed / 8, 8); + FL_UNLOCK(&rxq->fl); + #ifdef INET rc = tcp_lro_init(&rxq->lro); if (rc != 0) Modified: projects/largeSMP/sys/dev/pccard/pccard.c ============================================================================== --- projects/largeSMP/sys/dev/pccard/pccard.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/dev/pccard/pccard.c Mon Jun 6 21:38:39 2011 (r222783) @@ -1405,8 +1405,8 @@ pccard_ccr_read_impl(device_t brdev, dev struct pccard_ivar *devi = PCCARD_IVAR(child); *val = pccard_ccr_read(devi->pf, offset); - device_printf(child, "ccr_read of %#x (%#x) is %#x\n", offset, - devi->pf->pf_ccr_offset, *val); + DEVPRINTF((child, "ccr_read of %#x (%#x) is %#x\n", offset, + devi->pf->pf_ccr_offset, *val)); return 0; } @@ -1421,8 +1421,8 @@ pccard_ccr_write_impl(device_t brdev, de * Can't use pccard_ccr_write since client drivers may access * registers not contained in the 'mask' if they are non-standard. */ - device_printf(child, "ccr_write of %#x to %#x (%#x)\n", val, offset, - devi->pf->pf_ccr_offset); + DEVPRINTF((child, "ccr_write of %#x to %#x (%#x)\n", val, offset, + devi->pf->pf_ccr_offset)); bus_space_write_1(pf->pf_ccrt, pf->pf_ccrh, pf->pf_ccr_offset + offset, val); return 0; Modified: projects/largeSMP/sys/dev/pci/pci.c ============================================================================== --- projects/largeSMP/sys/dev/pci/pci.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/dev/pci/pci.c Mon Jun 6 21:38:39 2011 (r222783) @@ -2576,6 +2576,17 @@ pci_add_map(device_t bus, device_t dev, uint16_t cmd; struct resource *res; + /* + * The BAR may already exist if the device is a CardBus card + * whose CIS is stored in this BAR. + */ + pm = pci_find_bar(dev, reg); + if (pm != NULL) { + maprange = pci_maprange(pm->pm_value); + barlen = maprange == 64 ? 2 : 1; + return (barlen); + } + pci_read_bar(dev, reg, &map, &testval); if (PCI_BAR_MEM(map)) { type = SYS_RES_MEMORY; Modified: projects/largeSMP/sys/dev/puc/pucdata.c ============================================================================== --- projects/largeSMP/sys/dev/puc/pucdata.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/dev/puc/pucdata.c Mon Jun 6 21:38:39 2011 (r222783) @@ -51,12 +51,12 @@ static puc_config_f puc_config_amc; static puc_config_f puc_config_diva; static puc_config_f puc_config_exar; static puc_config_f puc_config_icbook; +static puc_config_f puc_config_oxford_pcie; static puc_config_f puc_config_quatech; static puc_config_f puc_config_syba; static puc_config_f puc_config_siig; static puc_config_f puc_config_timedia; static puc_config_f puc_config_titan; -static puc_config_f puc_config_oxford_pcie; const struct puc_cfg puc_pci_devices[] = { @@ -1366,14 +1366,12 @@ puc_config_oxford_pcie(struct puc_softc bar = puc_get_bar(sc, cfg->rid); if (bar == NULL) return (ENXIO); - for (idx = 0; idx < sc->sc_nports; idx++) { - value = bus_read_1(bar->b_res, 0x1000 + (idx << 9) - + 0x92); + value = bus_read_1(bar->b_res, 0x1000 + (idx << 9) + + 0x92); bus_write_1(bar->b_res, 0x1000 + (idx << 9) + 0x92, - value | 0x10); + value | 0x10); } - return (0); case PUC_CFG_GET_LEN: *res = 0x200; Modified: projects/largeSMP/sys/fs/nfs/nfs_var.h ============================================================================== --- projects/largeSMP/sys/fs/nfs/nfs_var.h Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/fs/nfs/nfs_var.h Mon Jun 6 21:38:39 2011 (r222783) @@ -401,10 +401,10 @@ int nfsrpc_readdirplus(vnode_t, struct u int nfsrpc_commit(vnode_t, u_quad_t, int, struct ucred *, NFSPROC_T *, u_char *, struct nfsvattr *, int *, void *); int nfsrpc_advlock(vnode_t, off_t, int, struct flock *, int, - struct ucred *, NFSPROC_T *); + struct ucred *, NFSPROC_T *, void *, int); int nfsrpc_lockt(struct nfsrv_descript *, vnode_t, struct nfsclclient *, u_int64_t, u_int64_t, struct flock *, - struct ucred *, NFSPROC_T *); + struct ucred *, NFSPROC_T *, void *, int); int nfsrpc_lock(struct nfsrv_descript *, struct nfsmount *, vnode_t, u_int8_t *, int, struct nfscllockowner *, int, int, u_int64_t, u_int64_t, short, struct ucred *, NFSPROC_T *, int); @@ -439,16 +439,16 @@ struct nfsclclient *nfscl_findcl(struct void nfscl_clientrelease(struct nfsclclient *); void nfscl_freelock(struct nfscllock *, int); int nfscl_getbytelock(vnode_t, u_int64_t, u_int64_t, short, - struct ucred *, NFSPROC_T *, struct nfsclclient *, int, u_int8_t *, - u_int8_t *, struct nfscllockowner **, int *, int *); + struct ucred *, NFSPROC_T *, struct nfsclclient *, int, void *, int, + u_int8_t *, u_int8_t *, struct nfscllockowner **, int *, int *); int nfscl_relbytelock(vnode_t, u_int64_t, u_int64_t, struct ucred *, NFSPROC_T *, int, struct nfsclclient *, - struct nfscllockowner **, int *); + void *, int, struct nfscllockowner **, int *); int nfscl_checkwritelocked(vnode_t, struct flock *, - struct ucred *, NFSPROC_T *); + struct ucred *, NFSPROC_T *, void *, int); void nfscl_lockrelease(struct nfscllockowner *, int, int); void nfscl_fillclid(u_int64_t, char *, u_int8_t *, u_int16_t); -void nfscl_filllockowner(NFSPROC_T *, u_int8_t *); +void nfscl_filllockowner(void *, u_int8_t *, int); void nfscl_freeopen(struct nfsclopen *, int); void nfscl_umount(struct nfsmount *, NFSPROC_T *); void nfscl_renewthread(struct nfsclclient *, NFSPROC_T *); @@ -466,9 +466,10 @@ void nfscl_lockexcl(struct nfsv4lock *, void nfscl_lockunlock(struct nfsv4lock *); void nfscl_lockderef(struct nfsv4lock *); void nfscl_docb(struct nfsrv_descript *, NFSPROC_T *); -void nfscl_releasealllocks(struct nfsclclient *, vnode_t, NFSPROC_T *); +void nfscl_releasealllocks(struct nfsclclient *, vnode_t, NFSPROC_T *, void *, + int); int nfscl_lockt(vnode_t, struct nfsclclient *, u_int64_t, - u_int64_t, struct flock *, NFSPROC_T *); + u_int64_t, struct flock *, NFSPROC_T *, void *, int); int nfscl_mustflush(vnode_t); int nfscl_nodeleg(vnode_t, int); int nfscl_removedeleg(vnode_t, NFSPROC_T *, nfsv4stateid_t *); Modified: projects/largeSMP/sys/fs/nfsclient/nfs_clport.c ============================================================================== --- projects/largeSMP/sys/fs/nfsclient/nfs_clport.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/fs/nfsclient/nfs_clport.c Mon Jun 6 21:38:39 2011 (r222783) @@ -500,7 +500,7 @@ nfscl_fillclid(u_int64_t clval, char *uu * Fill in a lock owner name. For now, pid + the process's creation time. */ void -nfscl_filllockowner(struct thread *td, u_int8_t *cp) +nfscl_filllockowner(void *id, u_int8_t *cp, int flags) { union { u_int32_t lval; @@ -508,37 +508,35 @@ nfscl_filllockowner(struct thread *td, u } tl; struct proc *p; -if (td == NULL) { - printf("NULL td\n"); - bzero(cp, 12); - return; -} - p = td->td_proc; -if (p == NULL) { - printf("NULL pid\n"); - bzero(cp, 12); - return; -} - tl.lval = p->p_pid; - *cp++ = tl.cval[0]; - *cp++ = tl.cval[1]; - *cp++ = tl.cval[2]; - *cp++ = tl.cval[3]; -if (p->p_stats == NULL) { - printf("pstats null\n"); - bzero(cp, 8); - return; -} - tl.lval = p->p_stats->p_start.tv_sec; - *cp++ = tl.cval[0]; - *cp++ = tl.cval[1]; - *cp++ = tl.cval[2]; - *cp++ = tl.cval[3]; - tl.lval = p->p_stats->p_start.tv_usec; - *cp++ = tl.cval[0]; - *cp++ = tl.cval[1]; - *cp++ = tl.cval[2]; - *cp = tl.cval[3]; + if (id == NULL) { + printf("NULL id\n"); + bzero(cp, NFSV4CL_LOCKNAMELEN); + return; + } + if ((flags & F_POSIX) != 0) { + p = (struct proc *)id; + tl.lval = p->p_pid; + *cp++ = tl.cval[0]; + *cp++ = tl.cval[1]; + *cp++ = tl.cval[2]; + *cp++ = tl.cval[3]; + tl.lval = p->p_stats->p_start.tv_sec; + *cp++ = tl.cval[0]; + *cp++ = tl.cval[1]; + *cp++ = tl.cval[2]; + *cp++ = tl.cval[3]; + tl.lval = p->p_stats->p_start.tv_usec; + *cp++ = tl.cval[0]; + *cp++ = tl.cval[1]; + *cp++ = tl.cval[2]; + *cp = tl.cval[3]; + } else if ((flags & F_FLOCK) != 0) { + bcopy(&id, cp, sizeof(id)); + bzero(&cp[sizeof(id)], NFSV4CL_LOCKNAMELEN - sizeof(id)); + } else { + printf("nfscl_filllockowner: not F_POSIX or F_FLOCK\n"); + bzero(cp, NFSV4CL_LOCKNAMELEN); + } } /* @@ -943,6 +941,7 @@ nfscl_getmyip(struct nfsmount *nmp, int sad.sin_family = AF_INET; sad.sin_len = sizeof (struct sockaddr_in); sad.sin_addr.s_addr = sin->sin_addr.s_addr; + CURVNET_SET(CRED_TO_VNET(nmp->nm_sockreq.nr_cred)); rt = rtalloc1((struct sockaddr *)&sad, 0, 0UL); if (rt != NULL) { if (rt->rt_ifp != NULL && @@ -956,6 +955,7 @@ nfscl_getmyip(struct nfsmount *nmp, int } RTFREE_LOCKED(rt); } + CURVNET_RESTORE(); #ifdef INET6 } else if (nmp->nm_nam->sa_family == AF_INET6) { struct sockaddr_in6 sad6, *sin6; @@ -966,6 +966,7 @@ nfscl_getmyip(struct nfsmount *nmp, int sad6.sin6_family = AF_INET6; sad6.sin6_len = sizeof (struct sockaddr_in6); sad6.sin6_addr = sin6->sin6_addr; + CURVNET_SET(CRED_TO_VNET(nmp->nm_sockreq.nr_cred)); rt = rtalloc1((struct sockaddr *)&sad6, 0, 0UL); if (rt != NULL) { if (rt->rt_ifp != NULL && @@ -980,6 +981,7 @@ nfscl_getmyip(struct nfsmount *nmp, int } RTFREE_LOCKED(rt); } + CURVNET_RESTORE(); #endif } return (retp); Modified: projects/largeSMP/sys/fs/nfsclient/nfs_clrpcops.c ============================================================================== --- projects/largeSMP/sys/fs/nfsclient/nfs_clrpcops.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/fs/nfsclient/nfs_clrpcops.c Mon Jun 6 21:38:39 2011 (r222783) @@ -3459,7 +3459,7 @@ nfsmout: */ APPLESTATIC int nfsrpc_advlock(vnode_t vp, off_t size, int op, struct flock *fl, - int reclaim, struct ucred *cred, NFSPROC_T *p) + int reclaim, struct ucred *cred, NFSPROC_T *p, void *id, int flags) { struct nfscllockowner *lp; struct nfsclclient *clp; @@ -3511,11 +3511,11 @@ nfsrpc_advlock(vnode_t vp, off_t size, i error = nfscl_getcl(vp, cred, p, &clp); if (error) return (error); - error = nfscl_lockt(vp, clp, off, len, fl, p); + error = nfscl_lockt(vp, clp, off, len, fl, p, id, flags); if (!error) { clidrev = clp->nfsc_clientidrev; error = nfsrpc_lockt(nd, vp, clp, off, len, fl, cred, - p); + p, id, flags); } else if (error == -1) { error = 0; } @@ -3530,7 +3530,7 @@ nfsrpc_advlock(vnode_t vp, off_t size, i return (error); do { error = nfscl_relbytelock(vp, off, len, cred, p, callcnt, - clp, &lp, &dorpc); + clp, id, flags, &lp, &dorpc); /* * If it returns a NULL lp, we're done. */ @@ -3538,7 +3538,7 @@ nfsrpc_advlock(vnode_t vp, off_t size, i if (callcnt == 0) nfscl_clientrelease(clp); else - nfscl_releasealllocks(clp, vp, p); + nfscl_releasealllocks(clp, vp, p, id, flags); return (error); } if (nmp->nm_clp != NULL) @@ -3572,10 +3572,10 @@ nfsrpc_advlock(vnode_t vp, off_t size, i } callcnt++; } while (error == 0 && nd->nd_repstat == 0); - nfscl_releasealllocks(clp, vp, p); + nfscl_releasealllocks(clp, vp, p, id, flags); } else if (op == F_SETLK) { error = nfscl_getbytelock(vp, off, len, fl->l_type, cred, p, - NULL, 0, NULL, NULL, &lp, &newone, &donelocally); + NULL, 0, id, flags, NULL, NULL, &lp, &newone, &donelocally); if (error || donelocally) { return (error); } @@ -3625,7 +3625,7 @@ nfsrpc_advlock(vnode_t vp, off_t size, i APPLESTATIC int nfsrpc_lockt(struct nfsrv_descript *nd, vnode_t vp, struct nfsclclient *clp, u_int64_t off, u_int64_t len, struct flock *fl, - struct ucred *cred, NFSPROC_T *p) + struct ucred *cred, NFSPROC_T *p, void *id, int flags) { u_int32_t *tl; int error, type, size; @@ -3643,7 +3643,7 @@ nfsrpc_lockt(struct nfsrv_descript *nd, tl += 2; *tl++ = clp->nfsc_clientid.lval[0]; *tl = clp->nfsc_clientid.lval[1]; - nfscl_filllockowner(p, own); + nfscl_filllockowner(id, own, flags); (void) nfsm_strtom(nd, own, NFSV4CL_LOCKNAMELEN); error = nfscl_request(nd, vp, p, cred, NULL); if (error) Modified: projects/largeSMP/sys/fs/nfsclient/nfs_clstate.c ============================================================================== --- projects/largeSMP/sys/fs/nfsclient/nfs_clstate.c Mon Jun 6 21:24:07 2011 (r222782) +++ projects/largeSMP/sys/fs/nfsclient/nfs_clstate.c Mon Jun 6 21:38:39 2011 (r222783) @@ -226,7 +226,7 @@ nfscl_open(vnode_t vp, u_int8_t *nfhp, i * If none found, add the new one or return error, depending upon * "create". *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Mon Jun 6 22:06:43 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F40AF106566B; Mon, 6 Jun 2011 22:06:42 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DAA318FC08; Mon, 6 Jun 2011 22:06:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p56M6gIG051107; Mon, 6 Jun 2011 22:06:42 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p56M6gdc051097; Mon, 6 Jun 2011 22:06:42 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106062206.p56M6gdc051097@svn.freebsd.org> From: Attilio Rao Date: Mon, 6 Jun 2011 22:06:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222791 - in projects/largeSMP: contrib/top share/mk sys/dev/usb sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jun 2011 22:06:43 -0000 Author: attilio Date: Mon Jun 6 22:06:42 2011 New Revision: 222791 URL: http://svn.freebsd.org/changeset/base/222791 Log: MFC Modified: projects/largeSMP/sys/dev/usb/usb_device.h projects/largeSMP/sys/dev/usb/usb_freebsd.h projects/largeSMP/sys/dev/usb/usb_generic.c projects/largeSMP/sys/dev/usb/usb_hub.c projects/largeSMP/sys/dev/usb/usb_request.c projects/largeSMP/sys/dev/usb/usb_request.h projects/largeSMP/sys/dev/usb/usb_transfer.c projects/largeSMP/sys/dev/usb/usbdi.h projects/largeSMP/sys/netinet/in_pcb.h Directory Properties: projects/largeSMP/ (props changed) projects/largeSMP/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/contrib/bind9/ (props changed) projects/largeSMP/contrib/binutils/ (props changed) projects/largeSMP/contrib/bzip2/ (props changed) projects/largeSMP/contrib/compiler-rt/ (props changed) projects/largeSMP/contrib/dialog/ (props changed) projects/largeSMP/contrib/ee/ (props changed) projects/largeSMP/contrib/expat/ (props changed) projects/largeSMP/contrib/file/ (props changed) projects/largeSMP/contrib/gcc/ (props changed) projects/largeSMP/contrib/gdb/ (props changed) projects/largeSMP/contrib/gdtoa/ (props changed) projects/largeSMP/contrib/gnu-sort/ (props changed) projects/largeSMP/contrib/groff/ (props changed) projects/largeSMP/contrib/less/ (props changed) projects/largeSMP/contrib/libpcap/ (props changed) projects/largeSMP/contrib/libstdc++/ (props changed) projects/largeSMP/contrib/llvm/ (props changed) projects/largeSMP/contrib/llvm/tools/clang/ (props changed) projects/largeSMP/contrib/ncurses/ (props changed) projects/largeSMP/contrib/netcat/ (props changed) projects/largeSMP/contrib/ntp/ (props changed) projects/largeSMP/contrib/one-true-awk/ (props changed) projects/largeSMP/contrib/openbsm/ (props changed) projects/largeSMP/contrib/openpam/ (props changed) projects/largeSMP/contrib/pf/ (props changed) projects/largeSMP/contrib/sendmail/ (props changed) projects/largeSMP/contrib/tcpdump/ (props changed) projects/largeSMP/contrib/tcsh/ (props changed) projects/largeSMP/contrib/top/ (props changed) projects/largeSMP/contrib/top/install-sh (props changed) projects/largeSMP/contrib/tzcode/stdtime/ (props changed) projects/largeSMP/contrib/tzcode/zic/ (props changed) projects/largeSMP/contrib/tzdata/ (props changed) projects/largeSMP/contrib/wpa/ (props changed) projects/largeSMP/contrib/xz/ (props changed) projects/largeSMP/crypto/openssh/ (props changed) projects/largeSMP/crypto/openssl/ (props changed) projects/largeSMP/gnu/lib/ (props changed) projects/largeSMP/gnu/usr.bin/binutils/ (props changed) projects/largeSMP/gnu/usr.bin/cc/cc_tools/ (props changed) projects/largeSMP/gnu/usr.bin/gdb/ (props changed) projects/largeSMP/lib/libc/ (props changed) projects/largeSMP/lib/libc/stdtime/ (props changed) projects/largeSMP/lib/libutil/ (props changed) projects/largeSMP/lib/libz/ (props changed) projects/largeSMP/sbin/ (props changed) projects/largeSMP/sbin/ipfw/ (props changed) projects/largeSMP/share/mk/bsd.arch.inc.mk (props changed) projects/largeSMP/share/zoneinfo/ (props changed) projects/largeSMP/sys/ (props changed) projects/largeSMP/sys/amd64/include/xen/ (props changed) projects/largeSMP/sys/boot/ (props changed) projects/largeSMP/sys/boot/i386/efi/ (props changed) projects/largeSMP/sys/boot/ia64/efi/ (props changed) projects/largeSMP/sys/boot/ia64/ski/ (props changed) projects/largeSMP/sys/boot/powerpc/boot1.chrp/ (props changed) projects/largeSMP/sys/boot/powerpc/ofw/ (props changed) projects/largeSMP/sys/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/sys/conf/ (props changed) projects/largeSMP/sys/contrib/dev/acpica/ (props changed) projects/largeSMP/sys/contrib/octeon-sdk/ (props changed) projects/largeSMP/sys/contrib/pf/ (props changed) projects/largeSMP/sys/contrib/x86emu/ (props changed) projects/largeSMP/usr.bin/calendar/ (props changed) projects/largeSMP/usr.bin/csup/ (props changed) projects/largeSMP/usr.bin/procstat/ (props changed) projects/largeSMP/usr.sbin/ndiscvt/ (props changed) projects/largeSMP/usr.sbin/zic/ (props changed) Modified: projects/largeSMP/sys/dev/usb/usb_device.h ============================================================================== --- projects/largeSMP/sys/dev/usb/usb_device.h Mon Jun 6 22:03:09 2011 (r222790) +++ projects/largeSMP/sys/dev/usb/usb_device.h Mon Jun 6 22:06:42 2011 (r222791) @@ -187,6 +187,8 @@ struct usb_device { struct usb_host_endpoint *linux_endpoint_end; uint16_t devnum; #endif + + uint32_t clear_stall_errors; /* number of clear-stall failures */ }; /* globals */ Modified: projects/largeSMP/sys/dev/usb/usb_freebsd.h ============================================================================== --- projects/largeSMP/sys/dev/usb/usb_freebsd.h Mon Jun 6 22:03:09 2011 (r222790) +++ projects/largeSMP/sys/dev/usb/usb_freebsd.h Mon Jun 6 22:06:42 2011 (r222791) @@ -66,6 +66,7 @@ #define USB_HUB_MAX_DEPTH 5 #define USB_EP0_BUFSIZE 1024 /* bytes */ +#define USB_CS_RESET_LIMIT 20 /* failures = 20 * 50 ms = 1sec */ typedef uint32_t usb_timeout_t; /* milliseconds */ typedef uint32_t usb_frlength_t; /* bytes */ Modified: projects/largeSMP/sys/dev/usb/usb_generic.c ============================================================================== --- projects/largeSMP/sys/dev/usb/usb_generic.c Mon Jun 6 22:03:09 2011 (r222790) +++ projects/largeSMP/sys/dev/usb/usb_generic.c Mon Jun 6 22:06:42 2011 (r222791) @@ -966,10 +966,8 @@ ugen_re_enumerate(struct usb_fifo *f) /* ignore any errors */ DPRINTFN(6, "no FIFOs\n"); } - if (udev->re_enumerate_wait == 0) { - udev->re_enumerate_wait = 1; - usb_needs_explore(udev->bus, 0); - } + /* start re-enumeration of device */ + usbd_start_re_enumerate(udev); return (0); } Modified: projects/largeSMP/sys/dev/usb/usb_hub.c ============================================================================== --- projects/largeSMP/sys/dev/usb/usb_hub.c Mon Jun 6 22:03:09 2011 (r222790) +++ projects/largeSMP/sys/dev/usb/usb_hub.c Mon Jun 6 22:06:42 2011 (r222791) @@ -242,9 +242,14 @@ uhub_explore_sub(struct uhub_softc *sc, if (child->flags.usb_mode == USB_MODE_HOST) { usbd_enum_lock(child); if (child->re_enumerate_wait) { - err = usbd_set_config_index(child, USB_UNCONFIG_INDEX); - if (err == 0) - err = usbd_req_re_enumerate(child, NULL); + err = usbd_set_config_index(child, + USB_UNCONFIG_INDEX); + if (err != 0) { + DPRINTF("Unconfigure failed: " + "%s: Ignored.\n", + usbd_errstr(err)); + } + err = usbd_req_re_enumerate(child, NULL); if (err == 0) err = usbd_set_config_index(child, 0); if (err == 0) { @@ -2471,3 +2476,19 @@ usbd_filter_power_mode(struct usb_device /* use fixed power mode given by hardware driver */ return (temp); } + +/*------------------------------------------------------------------------* + * usbd_start_re_enumerate + * + * This function starts re-enumeration of the given USB device. This + * function does not need to be called BUS-locked. This function does + * not wait until the re-enumeration is completed. + *------------------------------------------------------------------------*/ +void +usbd_start_re_enumerate(struct usb_device *udev) +{ + if (udev->re_enumerate_wait == 0) { + udev->re_enumerate_wait = 1; + usb_needs_explore(udev->bus, 0); + } +} Modified: projects/largeSMP/sys/dev/usb/usb_request.c ============================================================================== --- projects/largeSMP/sys/dev/usb/usb_request.c Mon Jun 6 22:03:09 2011 (r222790) +++ projects/largeSMP/sys/dev/usb/usb_request.c Mon Jun 6 22:06:42 2011 (r222791) @@ -238,6 +238,10 @@ usb_do_clear_stall_callback(struct usb_x switch (USB_GET_STATE(xfer)) { case USB_ST_TRANSFERRED: + + /* reset error counter */ + udev->clear_stall_errors = 0; + if (ep == NULL) goto tr_setup; /* device was unconfigured */ if (ep->edesc && @@ -289,8 +293,23 @@ tr_setup: goto tr_setup; default: - if (xfer->error == USB_ERR_CANCELLED) { + if (error == USB_ERR_CANCELLED) break; + + DPRINTF("Clear stall failed.\n"); + if (udev->clear_stall_errors == USB_CS_RESET_LIMIT) + goto tr_setup; + + if (error == USB_ERR_TIMEOUT) { + udev->clear_stall_errors = USB_CS_RESET_LIMIT; + DPRINTF("Trying to re-enumerate.\n"); + usbd_start_re_enumerate(udev); + } else { + udev->clear_stall_errors++; + if (udev->clear_stall_errors == USB_CS_RESET_LIMIT) { + DPRINTF("Trying to re-enumerate.\n"); + usbd_start_re_enumerate(udev); + } } goto tr_setup; } @@ -1936,6 +1955,23 @@ usbd_req_re_enumerate(struct usb_device return (USB_ERR_INVAL); } retry: + /* + * Try to reset the High Speed parent HUB of a LOW- or FULL- + * speed device, if any. + */ + if (udev->parent_hs_hub != NULL && + udev->speed != USB_SPEED_HIGH) { + DPRINTF("Trying to reset parent High Speed TT.\n"); + err = usbd_req_reset_tt(udev->parent_hs_hub, NULL, + udev->hs_port_no); + if (err) { + DPRINTF("Resetting parent High " + "Speed TT failed (%s).\n", + usbd_errstr(err)); + } + } + + /* Try to reset the parent HUB port. */ err = usbd_req_reset_port(parent_hub, mtx, udev->port_no); if (err) { DPRINTFN(0, "addr=%d, port reset failed, %s\n", @@ -2033,3 +2069,65 @@ usbd_req_set_device_feature(struct usb_d USETW(req.wLength, 0); return (usbd_do_request(udev, mtx, &req, 0)); } + +/*------------------------------------------------------------------------* + * usbd_req_reset_tt + * + * Returns: + * 0: Success + * Else: Failure + *------------------------------------------------------------------------*/ +usb_error_t +usbd_req_reset_tt(struct usb_device *udev, struct mtx *mtx, + uint8_t port) +{ + struct usb_device_request req; + + /* For single TT HUBs the port should be 1 */ + + if (udev->ddesc.bDeviceClass == UDCLASS_HUB && + udev->ddesc.bDeviceProtocol == UDPROTO_HSHUBSTT) + port = 1; + + req.bmRequestType = UT_WRITE_CLASS_OTHER; + req.bRequest = UR_RESET_TT; + USETW(req.wValue, 0); + req.wIndex[0] = port; + req.wIndex[1] = 0; + USETW(req.wLength, 0); + return (usbd_do_request(udev, mtx, &req, 0)); +} + +/*------------------------------------------------------------------------* + * usbd_req_clear_tt_buffer + * + * For single TT HUBs the port should be 1. + * + * Returns: + * 0: Success + * Else: Failure + *------------------------------------------------------------------------*/ +usb_error_t +usbd_req_clear_tt_buffer(struct usb_device *udev, struct mtx *mtx, + uint8_t port, uint8_t addr, uint8_t type, uint8_t endpoint) +{ + struct usb_device_request req; + uint16_t wValue; + + /* For single TT HUBs the port should be 1 */ + + if (udev->ddesc.bDeviceClass == UDCLASS_HUB && + udev->ddesc.bDeviceProtocol == UDPROTO_HSHUBSTT) + port = 1; + + wValue = (endpoint & 0xF) | ((addr & 0x7F) << 4) | + ((endpoint & 0x80) << 8) | ((type & 3) << 12); + + req.bmRequestType = UT_WRITE_CLASS_OTHER; + req.bRequest = UR_CLEAR_TT_BUFFER; + USETW(req.wValue, wValue); + req.wIndex[0] = port; + req.wIndex[1] = 0; + USETW(req.wLength, 0); + return (usbd_do_request(udev, mtx, &req, 0)); +} Modified: projects/largeSMP/sys/dev/usb/usb_request.h ============================================================================== --- projects/largeSMP/sys/dev/usb/usb_request.h Mon Jun 6 22:03:09 2011 (r222790) +++ projects/largeSMP/sys/dev/usb/usb_request.h Mon Jun 6 22:06:42 2011 (r222791) @@ -85,5 +85,9 @@ usb_error_t usbd_req_set_hub_u2_timeout( struct mtx *mtx, uint8_t port, uint8_t timeout); usb_error_t usbd_req_set_hub_depth(struct usb_device *udev, struct mtx *mtx, uint16_t depth); +usb_error_t usbd_req_reset_tt(struct usb_device *udev, struct mtx *mtx, + uint8_t port); +usb_error_t usbd_req_clear_tt_buffer(struct usb_device *udev, struct mtx *mtx, + uint8_t port, uint8_t addr, uint8_t type, uint8_t endpoint); #endif /* _USB_REQUEST_H_ */ Modified: projects/largeSMP/sys/dev/usb/usb_transfer.c ============================================================================== --- projects/largeSMP/sys/dev/usb/usb_transfer.c Mon Jun 6 22:03:09 2011 (r222790) +++ projects/largeSMP/sys/dev/usb/usb_transfer.c Mon Jun 6 22:06:42 2011 (r222791) @@ -2928,6 +2928,11 @@ repeat: usbd_transfer_unsetup(udev->ctrl_xfer, USB_CTRL_XFER_MAX); /* + * Reset clear stall error counter. + */ + udev->clear_stall_errors = 0; + + /* * Try to setup a new USB transfer for the * default control endpoint: */ Modified: projects/largeSMP/sys/dev/usb/usbdi.h ============================================================================== --- projects/largeSMP/sys/dev/usb/usbdi.h Mon Jun 6 22:03:09 2011 (r222790) +++ projects/largeSMP/sys/dev/usb/usbdi.h Mon Jun 6 22:06:42 2011 (r222791) @@ -542,6 +542,7 @@ void usbd_m_copy_in(struct usb_page_cach struct mbuf *m, usb_size_t src_offset, usb_frlength_t src_len); void usbd_frame_zero(struct usb_page_cache *cache, usb_frlength_t offset, usb_frlength_t len); +void usbd_start_re_enumerate(struct usb_device *udev); int usb_fifo_attach(struct usb_device *udev, void *priv_sc, struct mtx *priv_mtx, struct usb_fifo_methods *pm, Modified: projects/largeSMP/sys/netinet/in_pcb.h ============================================================================== --- projects/largeSMP/sys/netinet/in_pcb.h Mon Jun 6 22:03:09 2011 (r222790) +++ projects/largeSMP/sys/netinet/in_pcb.h Mon Jun 6 22:06:42 2011 (r222791) @@ -44,6 +44,7 @@ #include #ifdef _KERNEL +#include #include #include #include From owner-svn-src-projects@FreeBSD.ORG Tue Jun 7 08:05:23 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C1870106564A; Tue, 7 Jun 2011 08:05:23 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B3BE18FC12; Tue, 7 Jun 2011 08:05:23 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5785NLE072032; Tue, 7 Jun 2011 08:05:23 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5785NkA072030; Tue, 7 Jun 2011 08:05:23 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106070805.p5785NkA072030@svn.freebsd.org> From: Attilio Rao Date: Tue, 7 Jun 2011 08:05:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222810 - projects/largeSMP/sys/amd64/include X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 08:05:23 -0000 Author: attilio Date: Tue Jun 7 08:05:23 2011 New Revision: 222810 URL: http://svn.freebsd.org/changeset/base/222810 Log: Bring back the number of CPU to 32. Modified: projects/largeSMP/sys/amd64/include/param.h Modified: projects/largeSMP/sys/amd64/include/param.h ============================================================================== --- projects/largeSMP/sys/amd64/include/param.h Tue Jun 7 06:57:22 2011 (r222809) +++ projects/largeSMP/sys/amd64/include/param.h Tue Jun 7 08:05:23 2011 (r222810) @@ -64,7 +64,7 @@ #endif #if defined(SMP) || defined(KLD_MODULE) -#define MAXCPU 64 +#define MAXCPU 32 #else #define MAXCPU 1 #endif From owner-svn-src-projects@FreeBSD.ORG Tue Jun 7 08:07:41 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F1B88106564A; Tue, 7 Jun 2011 08:07:41 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E3F518FC0A; Tue, 7 Jun 2011 08:07:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5787f2k072135; Tue, 7 Jun 2011 08:07:41 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5787fgi072133; Tue, 7 Jun 2011 08:07:41 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106070807.p5787fgi072133@svn.freebsd.org> From: Attilio Rao Date: Tue, 7 Jun 2011 08:07:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222811 - projects/largeSMP X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 08:07:42 -0000 Author: attilio Date: Tue Jun 7 08:07:41 2011 New Revision: 222811 URL: http://svn.freebsd.org/changeset/base/222811 Log: Add an UPDATE entry. Modified: projects/largeSMP/UPDATING Modified: projects/largeSMP/UPDATING ============================================================================== --- projects/largeSMP/UPDATING Tue Jun 7 08:05:23 2011 (r222810) +++ projects/largeSMP/UPDATING Tue Jun 7 08:07:41 2011 (r222811) @@ -22,6 +22,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9. machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20110607: + cpumask_t type is retired and cpuset_t is used in order to describe + a mask of CPUs. + 20110513: Support for sun4v architecture is officially dropped From owner-svn-src-projects@FreeBSD.ORG Tue Jun 7 08:24:29 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DAB7B106566B; Tue, 7 Jun 2011 08:24:29 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C88328FC12; Tue, 7 Jun 2011 08:24:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p578OTwx072758; Tue, 7 Jun 2011 08:24:29 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p578OTmJ072734; Tue, 7 Jun 2011 08:24:29 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106070824.p578OTmJ072734@svn.freebsd.org> From: Attilio Rao Date: Tue, 7 Jun 2011 08:24:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222812 - in projects/largeSMP: contrib/top share/man/man4 share/misc share/mk sys/boot/ia64/common sys/boot/ia64/efi sys/ddb sys/dev/amdsbwd sys/dev/atkbdc sys/ia64/ia64 sys/kern sys/n... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 08:24:29 -0000 Author: attilio Date: Tue Jun 7 08:24:29 2011 New Revision: 222812 URL: http://svn.freebsd.org/changeset/base/222812 Log: MFC Added: projects/largeSMP/sys/boot/ia64/common/icache.c - copied unchanged from r222811, head/sys/boot/ia64/common/icache.c Modified: projects/largeSMP/share/man/man4/amdsbwd.4 projects/largeSMP/share/man/man4/atkbd.4 projects/largeSMP/share/misc/committers-ports.dot projects/largeSMP/sys/boot/ia64/common/Makefile projects/largeSMP/sys/boot/ia64/common/exec.c projects/largeSMP/sys/boot/ia64/common/libia64.h projects/largeSMP/sys/boot/ia64/efi/efimd.c projects/largeSMP/sys/boot/ia64/efi/main.c projects/largeSMP/sys/boot/ia64/efi/version projects/largeSMP/sys/ddb/db_command.c projects/largeSMP/sys/dev/amdsbwd/amdsbwd.c projects/largeSMP/sys/dev/atkbdc/atkbd.c projects/largeSMP/sys/dev/atkbdc/atkbdreg.h projects/largeSMP/sys/ia64/ia64/machdep.c projects/largeSMP/sys/kern/kern_shutdown.c projects/largeSMP/sys/kern/ksched.c projects/largeSMP/sys/kern/subr_prf.c projects/largeSMP/sys/netgraph/ng_nat.c projects/largeSMP/sys/netinet/ipfw/ip_fw_nat.c projects/largeSMP/sys/netinet/libalias/alias_sctp.h projects/largeSMP/sys/sys/conf.h projects/largeSMP/usr.sbin/rtsold/Makefile Directory Properties: projects/largeSMP/ (props changed) projects/largeSMP/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/contrib/bind9/ (props changed) projects/largeSMP/contrib/binutils/ (props changed) projects/largeSMP/contrib/bzip2/ (props changed) projects/largeSMP/contrib/compiler-rt/ (props changed) projects/largeSMP/contrib/dialog/ (props changed) projects/largeSMP/contrib/ee/ (props changed) projects/largeSMP/contrib/expat/ (props changed) projects/largeSMP/contrib/file/ (props changed) projects/largeSMP/contrib/gcc/ (props changed) projects/largeSMP/contrib/gdb/ (props changed) projects/largeSMP/contrib/gdtoa/ (props changed) projects/largeSMP/contrib/gnu-sort/ (props changed) projects/largeSMP/contrib/groff/ (props changed) projects/largeSMP/contrib/less/ (props changed) projects/largeSMP/contrib/libpcap/ (props changed) projects/largeSMP/contrib/libstdc++/ (props changed) projects/largeSMP/contrib/llvm/ (props changed) projects/largeSMP/contrib/llvm/tools/clang/ (props changed) projects/largeSMP/contrib/ncurses/ (props changed) projects/largeSMP/contrib/netcat/ (props changed) projects/largeSMP/contrib/ntp/ (props changed) projects/largeSMP/contrib/one-true-awk/ (props changed) projects/largeSMP/contrib/openbsm/ (props changed) projects/largeSMP/contrib/openpam/ (props changed) projects/largeSMP/contrib/pf/ (props changed) projects/largeSMP/contrib/sendmail/ (props changed) projects/largeSMP/contrib/tcpdump/ (props changed) projects/largeSMP/contrib/tcsh/ (props changed) projects/largeSMP/contrib/top/ (props changed) projects/largeSMP/contrib/top/install-sh (props changed) projects/largeSMP/contrib/tzcode/stdtime/ (props changed) projects/largeSMP/contrib/tzcode/zic/ (props changed) projects/largeSMP/contrib/tzdata/ (props changed) projects/largeSMP/contrib/wpa/ (props changed) projects/largeSMP/contrib/xz/ (props changed) projects/largeSMP/crypto/openssh/ (props changed) projects/largeSMP/crypto/openssl/ (props changed) projects/largeSMP/gnu/lib/ (props changed) projects/largeSMP/gnu/usr.bin/binutils/ (props changed) projects/largeSMP/gnu/usr.bin/cc/cc_tools/ (props changed) projects/largeSMP/gnu/usr.bin/gdb/ (props changed) projects/largeSMP/lib/libc/ (props changed) projects/largeSMP/lib/libc/stdtime/ (props changed) projects/largeSMP/lib/libutil/ (props changed) projects/largeSMP/lib/libz/ (props changed) projects/largeSMP/sbin/ (props changed) projects/largeSMP/sbin/ipfw/ (props changed) projects/largeSMP/share/mk/bsd.arch.inc.mk (props changed) projects/largeSMP/share/zoneinfo/ (props changed) projects/largeSMP/sys/ (props changed) projects/largeSMP/sys/amd64/include/xen/ (props changed) projects/largeSMP/sys/boot/ (props changed) projects/largeSMP/sys/boot/i386/efi/ (props changed) projects/largeSMP/sys/boot/ia64/efi/ (props changed) projects/largeSMP/sys/boot/ia64/ski/ (props changed) projects/largeSMP/sys/boot/powerpc/boot1.chrp/ (props changed) projects/largeSMP/sys/boot/powerpc/ofw/ (props changed) projects/largeSMP/sys/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/sys/conf/ (props changed) projects/largeSMP/sys/contrib/dev/acpica/ (props changed) projects/largeSMP/sys/contrib/octeon-sdk/ (props changed) projects/largeSMP/sys/contrib/pf/ (props changed) projects/largeSMP/sys/contrib/x86emu/ (props changed) projects/largeSMP/usr.bin/calendar/ (props changed) projects/largeSMP/usr.bin/csup/ (props changed) projects/largeSMP/usr.bin/procstat/ (props changed) projects/largeSMP/usr.sbin/ndiscvt/ (props changed) projects/largeSMP/usr.sbin/zic/ (props changed) Modified: projects/largeSMP/share/man/man4/amdsbwd.4 ============================================================================== --- projects/largeSMP/share/man/man4/amdsbwd.4 Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/share/man/man4/amdsbwd.4 Tue Jun 7 08:24:29 2011 (r222812) @@ -25,12 +25,12 @@ .\" .\" $FreeBSD$ .\" -.Dd November 30, 2009 +.Dd June 7, 2011 .Dt AMDSBWD 4 .Os .Sh NAME .Nm amdsbwd -.Nd device driver for the AMD SB600/SB700/SB710/SB750 watchdog timer +.Nd device driver for the AMD SB600/SB7xx/SB8xx watchdog timers .Sh SYNOPSIS To compile this driver into the kernel, place the following line in your @@ -51,7 +51,7 @@ The driver provides .Xr watchdog 4 support for the watchdog timers present on -AMD SB600 and SB7xx south bridge chips. +AMD SB600, SB7xx and SB8xx southbridges. .Sh SEE ALSO .Xr watchdog 4 , .Xr watchdog 8 , Modified: projects/largeSMP/share/man/man4/atkbd.4 ============================================================================== --- projects/largeSMP/share/man/man4/atkbd.4 Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/share/man/man4/atkbd.4 Tue Jun 7 08:24:29 2011 (r222812) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 20, 2011 +.Dd January 29, 2008 .Dt ATKBD 4 .Os .Sh NAME @@ -176,11 +176,6 @@ When this option is given, the .Nm driver will not test the keyboard port during the probe routine. Some machines hang during boot when this test is performed. -.It bit 4 (PROBE_TYPEMATIC) -When this option is given, the -.Nm -driver will try to probe the keyboard typematic rate on boot. -Some machines hang during boot when this test is performed. .El .\".Sh FILES .Sh EXAMPLES Modified: projects/largeSMP/share/misc/committers-ports.dot ============================================================================== --- projects/largeSMP/share/misc/committers-ports.dot Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/share/misc/committers-ports.dot Tue Jun 7 08:24:29 2011 (r222812) @@ -97,6 +97,7 @@ itetcu [label="Ion-Mihai Tetcu\nitetcu@F jacula [label="Giuseppe Pilichi\njacula@FreeBSD.org\n2010/04/05"] jadawin [label="Philippe Audeoud\njadawin@FreeBSD.org\n2008/03/02"] jkim [label="Jung-uk Kim\njkim@FreeBSD.org\n2007/09/12"] +jlaffaye [label="Julien Laffaye\njlaffaye@FreeBSD.org\n2011/06/06"] jmelo [label="Jean Milanez Melo\njmelo@FreeBSD.org\n2006/03/31"] joerg [label="Joerg Wunsch\njoerg@FreeBSD.org\n1994/08/22"] johans [label="Johan Selst\njohans@FreeBSD.org\n2006/04/01"] Modified: projects/largeSMP/sys/boot/ia64/common/Makefile ============================================================================== --- projects/largeSMP/sys/boot/ia64/common/Makefile Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/boot/ia64/common/Makefile Tue Jun 7 08:24:29 2011 (r222812) @@ -6,7 +6,7 @@ MK_SSP= no LIB= ia64 INTERNALLIB= -SRCS= autoload.c bootinfo.c copy.c devicename.c exec.c +SRCS= autoload.c bootinfo.c copy.c devicename.c exec.c icache.c CFLAGS+= -I${.CURDIR}/../../efi/include CFLAGS+= -I${.CURDIR}/../../efi/include/${MACHINE_CPUARCH} Modified: projects/largeSMP/sys/boot/ia64/common/exec.c ============================================================================== --- projects/largeSMP/sys/boot/ia64/common/exec.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/boot/ia64/common/exec.c Tue Jun 7 08:24:29 2011 (r222812) @@ -258,6 +258,8 @@ ia64_loadseg(Elf_Ehdr *eh, Elf_Phdr *ph, if (ph->p_flags & PF_X) { ia64_text_start = ph->p_vaddr + delta; ia64_text_size = ph->p_memsz; + + ia64_sync_icache(ia64_text_start, ia64_text_size); } else { ia64_data_start = ph->p_vaddr + delta; ia64_data_size = ph->p_memsz; Copied: projects/largeSMP/sys/boot/ia64/common/icache.c (from r222811, head/sys/boot/ia64/common/icache.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/largeSMP/sys/boot/ia64/common/icache.c Tue Jun 7 08:24:29 2011 (r222812, copy of r222811, head/sys/boot/ia64/common/icache.c) @@ -0,0 +1,51 @@ +/*- + * Copyright (c) 2011 Marcel Moolenaar + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#include "libia64.h" + +void +ia64_sync_icache(vm_offset_t va, size_t sz) +{ + uintptr_t pa; + size_t cnt, max; + + while (sz > 0) { + max = sz; + pa = (uintptr_t)ia64_va2pa(va, &max); + for (cnt = 0; cnt < max; cnt += 32) + ia64_fc_i(pa + cnt); + ia64_sync_i(); + va += max; + sz -= max; + } + ia64_srlz_i(); +} Modified: projects/largeSMP/sys/boot/ia64/common/libia64.h ============================================================================== --- projects/largeSMP/sys/boot/ia64/common/libia64.h Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/boot/ia64/common/libia64.h Tue Jun 7 08:24:29 2011 (r222812) @@ -64,6 +64,7 @@ void ia64_loadseg(void *, void *, uint64 ssize_t ia64_copyin(const void *, vm_offset_t, size_t); ssize_t ia64_copyout(vm_offset_t, void *, size_t); +void ia64_sync_icache(vm_offset_t, size_t); ssize_t ia64_readin(int, vm_offset_t, size_t); void *ia64_va2pa(vm_offset_t, size_t *); Modified: projects/largeSMP/sys/boot/ia64/efi/efimd.c ============================================================================== --- projects/largeSMP/sys/boot/ia64/efi/efimd.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/boot/ia64/efi/efimd.c Tue Jun 7 08:24:29 2011 (r222812) @@ -230,3 +230,35 @@ ia64_platform_enter(const char *kernel) return (0); } + +COMMAND_SET(pbvm, "pbvm", "show PBVM details", command_pbvm); + +static int +command_pbvm(int argc, char *argv[]) +{ + uint64_t limit, pg, start; + u_int idx; + + printf("Page table @ %p, size %x\n", ia64_pgtbl, ia64_pgtblsz); + + if (ia64_pgtbl == NULL) + return (0); + + limit = ~0; + start = ~0; + idx = 0; + while (ia64_pgtbl[idx] != 0) { + pg = ia64_pgtbl[idx]; + if (pg != limit) { + if (start != ~0) + printf("%#lx-%#lx\n", start, limit); + start = pg; + } + limit = pg + IA64_PBVM_PAGE_SIZE; + idx++; + } + if (start != ~0) + printf("%#lx-%#lx\n", start, limit); + + return (0); +} Modified: projects/largeSMP/sys/boot/ia64/efi/main.c ============================================================================== --- projects/largeSMP/sys/boot/ia64/efi/main.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/boot/ia64/efi/main.c Tue Jun 7 08:24:29 2011 (r222812) @@ -153,9 +153,7 @@ main(int argc, CHAR16 *argv[]) */ cons_probe(); - printf("\n"); - printf("%s, Revision %s\n", bootprog_name, bootprog_rev); - printf("(%s, %s)\n", bootprog_maker, bootprog_date); + printf("\n%s, Revision %s\n", bootprog_name, bootprog_rev); find_pal_proc(); @@ -214,6 +212,18 @@ static int command_quit(int argc, char *argv[]) { exit(0); + /* NOTREACHED */ + return (CMD_OK); +} + +COMMAND_SET(reboot, "reboot", "reboot the system", command_reboot); + +static int +command_reboot(int argc, char *argv[]) +{ + + RS->ResetSystem(EfiResetWarm, EFI_SUCCESS, 0, NULL); + /* NOTREACHED */ return (CMD_OK); } @@ -585,3 +595,24 @@ command_hcdp(int argc, char *argv[]) printf("\n"); return (CMD_OK); } + +COMMAND_SET(about, "about", "about the loader", command_about); + +extern uint64_t _start_plabel[]; + +static int +command_about(int argc, char *argv[]) +{ + EFI_LOADED_IMAGE *img; + + printf("%s\n", bootprog_name); + printf("revision %s\n", bootprog_rev); + printf("built by %s\n", bootprog_maker); + printf("built on %s\n", bootprog_date); + + printf("\n"); + + BS->HandleProtocol(IH, &imgid, (VOID**)&img); + printf("image loaded at %p\n", img->ImageBase); + printf("entry at %#lx (%#lx)\n", _start_plabel[0], _start_plabel[1]); +} Modified: projects/largeSMP/sys/boot/ia64/efi/version ============================================================================== --- projects/largeSMP/sys/boot/ia64/efi/version Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/boot/ia64/efi/version Tue Jun 7 08:24:29 2011 (r222812) @@ -3,6 +3,8 @@ $FreeBSD$ NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this file is important. Make sure the current version number is on line 6. +3.1: Add the about, reboot and pbvm commands. + I-cache coherency is maintained. 3.0: Add support for PBVM. 2.2: Create direct mapping based on start address instead of mapping first 256M. Modified: projects/largeSMP/sys/ddb/db_command.c ============================================================================== --- projects/largeSMP/sys/ddb/db_command.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/ddb/db_command.c Tue Jun 7 08:24:29 2011 (r222812) @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -64,6 +65,7 @@ db_addr_t db_last_addr; db_addr_t db_prev; db_addr_t db_next; +static db_cmdfcn_t db_dump; static db_cmdfcn_t db_fncall; static db_cmdfcn_t db_gdb; static db_cmdfcn_t db_halt; @@ -102,6 +104,7 @@ static struct command db_cmds[] = { { "w", db_write_cmd, CS_MORE|CS_SET_DOT, 0 }, { "delete", db_delete_cmd, 0, 0 }, { "d", db_delete_cmd, 0, 0 }, + { "dump", db_dump, 0, 0 }, { "break", db_breakpoint_cmd, 0, 0 }, { "b", db_breakpoint_cmd, 0, 0 }, { "dwatch", db_deletewatch_cmd, 0, 0 }, @@ -526,6 +529,27 @@ db_error(s) kdb_reenter(); } +static void +db_dump(db_expr_t dummy, boolean_t dummy2, db_expr_t dummy3, char *dummy4) +{ + int error; + + error = doadump(FALSE); + if (error) { + db_printf("Cannot dump: "); + switch (error) { + case EBUSY: + db_printf("debugger got invoked while dumping.\n"); + break; + case ENXIO: + db_printf("no dump device specified.\n"); + break; + default: + db_printf("unknown error (error=%d).\n", error); + break; + } + } +} /* * Call random function: Modified: projects/largeSMP/sys/dev/amdsbwd/amdsbwd.c ============================================================================== --- projects/largeSMP/sys/dev/amdsbwd/amdsbwd.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/dev/amdsbwd/amdsbwd.c Tue Jun 7 08:24:29 2011 (r222812) @@ -25,8 +25,8 @@ */ /* - * This is a driver for watchdog timer present in AMD SB600/SB7xx - * south bridges and other watchdog timers advertised via WDRT ACPI table. + * This is a driver for watchdog timer present in AMD SB600/SB7xx/SB8xx + * southbridges. * Please see the following specifications for the descriptions of the * registers and flags: * - AMD SB600 Register Reference Guide, Public Version, Rev. 3.03 (SB600 RRG) @@ -35,11 +35,13 @@ * http://developer.amd.com/assets/43009_sb7xx_rrg_pub_1.00.pdf * - AMD SB700/710/750 Register Programming Requirements (RPR) * http://developer.amd.com/assets/42413_sb7xx_rpr_pub_1.00.pdf + * - AMD SB800-Series Southbridges Register Reference Guide (RRG) + * http://support.amd.com/us/Embedded_TechDocs/45482.pdf * Please see the following for Watchdog Resource Table specification: * - Watchdog Timer Hardware Requirements for Windows Server 2003 (WDRT) * http://www.microsoft.com/whdc/system/sysinternals/watchdog.mspx - * AMD SB600/SB7xx watchdog hardware seems to conform to the above, - * but my system doesn't provide the table. + * AMD SB600/SB7xx/SB8xx watchdog hardware seems to conform to the above + * specifications, but the table hasn't been spotted in the wild yet. */ #include @@ -59,15 +61,15 @@ __FBSDID("$FreeBSD$"); #include #include -/* RRG 2.3.3.1.1, page 161. */ +/* SB7xx RRG 2.3.3.1.1. */ #define AMDSB_PMIO_INDEX 0xcd6 #define AMDSB_PMIO_DATA (PMIO_INDEX + 1) #define AMDSB_PMIO_WIDTH 2 -/* RRG 2.3.3.2, page 181. */ +/* SB7xx RRG 2.3.3.2. */ #define AMDSB_PM_RESET_STATUS0 0x44 #define AMDSB_PM_RESET_STATUS1 0x45 #define AMDSB_WD_RST_STS 0x02 -/* RRG 2.3.3.2, page 188; RPR 2.36, page 30. */ +/* SB7xx RRG 2.3.3.2, RPR 2.36. */ #define AMDSB_PM_WDT_CTRL 0x69 #define AMDSB_WDT_DISABLE 0x01 #define AMDSB_WDT_RES_MASK (0x02 | 0x04) @@ -77,7 +79,18 @@ __FBSDID("$FreeBSD$"); #define AMDSB_WDT_RES_1S 0x06 #define AMDSB_PM_WDT_BASE_LSB 0x6c #define AMDSB_PM_WDT_BASE_MSB 0x6f -/* RRG 2.3.4, page 223, WDRT. */ +/* SB8xx RRG 2.3.3. */ +#define AMDSB8_PM_WDT_EN 0x48 +#define AMDSB8_WDT_DEC_EN 0x01 +#define AMDSB8_WDT_DISABLE 0x02 +#define AMDSB8_PM_WDT_CTRL 0x4c +#define AMDSB8_WDT_32KHZ 0x00 +#define AMDSB8_WDT_1HZ 0x03 +#define AMDSB8_WDT_RES_MASK 0x03 +#define AMDSB8_PM_RESET_STATUS0 0xC0 +#define AMDSB8_PM_RESET_STATUS1 0xC1 +#define AMDSB8_WD_RST_STS 0x20 +/* SB7xx RRG 2.3.4, WDRT. */ #define AMDSB_WD_CTRL 0x00 #define AMDSB_WD_RUN 0x01 #define AMDSB_WD_FIRED 0x02 @@ -90,8 +103,9 @@ __FBSDID("$FreeBSD$"); #define AMDSB_WDIO_REG_WIDTH 4 /* WDRT */ #define MAXCOUNT_MIN_VALUE 511 -/* RRG 2.3.1.1, page 122; SB600 RRG 2.3.1.1, page 97. */ -#define AMDSB7xx_SMBUS_DEVID 0x43851002 +/* SB7xx RRG 2.3.1.1, SB600 RRG 2.3.1.1, SB8xx RRG 2.3.1. */ +#define AMDSB_SMBUS_DEVID 0x43851002 +#define AMDSB8_SMBUS_REVID 0x40 #define amdsbwd_verbose_printf(dev, ...) \ do { \ @@ -265,7 +279,7 @@ amdsbwd_identify(driver_t *driver, devic smb_dev = pci_find_bsf(0, 20, 0); if (smb_dev == NULL) return; - if (pci_get_devid(smb_dev) != AMDSB7xx_SMBUS_DEVID) + if (pci_get_devid(smb_dev) != AMDSB_SMBUS_DEVID) return; child = BUS_ADD_CHILD(parent, ISA_ORDER_SPECULATIVE, "amdsbwd", -1); @@ -273,15 +287,102 @@ amdsbwd_identify(driver_t *driver, devic device_printf(parent, "add amdsbwd child failed\n"); } + +static void +amdsbwd_probe_sb7xx(device_t dev, struct resource *pmres, uint32_t *addr) +{ + uint32_t val; + int i; + + /* Report cause of previous reset for user's convenience. */ + val = pmio_read(pmres, AMDSB_PM_RESET_STATUS0); + if (val != 0) + amdsbwd_verbose_printf(dev, "ResetStatus0 = %#04x\n", val); + val = pmio_read(pmres, AMDSB_PM_RESET_STATUS1); + if (val != 0) + amdsbwd_verbose_printf(dev, "ResetStatus1 = %#04x\n", val); + if ((val & AMDSB_WD_RST_STS) != 0) + device_printf(dev, "Previous Reset was caused by Watchdog\n"); + + /* Find base address of memory mapped WDT registers. */ + for (*addr = 0, i = 0; i < 4; i++) { + *addr <<= 8; + *addr |= pmio_read(pmres, AMDSB_PM_WDT_BASE_MSB - i); + } + /* Set watchdog timer tick to 1s. */ + val = pmio_read(pmres, AMDSB_PM_WDT_CTRL); + val &= ~AMDSB_WDT_RES_MASK; + val |= AMDSB_WDT_RES_10MS; + pmio_write(pmres, AMDSB_PM_WDT_CTRL, val); + + /* Enable watchdog device (in stopped state). */ + val = pmio_read(pmres, AMDSB_PM_WDT_CTRL); + val &= ~AMDSB_WDT_DISABLE; + pmio_write(pmres, AMDSB_PM_WDT_CTRL, val); + + /* + * XXX TODO: Ensure that watchdog decode is enabled + * (register 0x41, bit 3). + */ + device_set_desc(dev, "AMD SB600/SB7xx Watchdog Timer"); +} + +static void +amdsbwd_probe_sb8xx(device_t dev, struct resource *pmres, uint32_t *addr) +{ + uint32_t val; + int i; + + /* Report cause of previous reset for user's convenience. */ + val = pmio_read(pmres, AMDSB8_PM_RESET_STATUS0); + if (val != 0) + amdsbwd_verbose_printf(dev, "ResetStatus0 = %#04x\n", val); + val = pmio_read(pmres, AMDSB8_PM_RESET_STATUS1); + if (val != 0) + amdsbwd_verbose_printf(dev, "ResetStatus1 = %#04x\n", val); + if ((val & AMDSB8_WD_RST_STS) != 0) + device_printf(dev, "Previous Reset was caused by Watchdog\n"); + + /* Find base address of memory mapped WDT registers. */ + for (*addr = 0, i = 0; i < 4; i++) { + *addr <<= 8; + *addr |= pmio_read(pmres, AMDSB8_PM_WDT_EN + 3 - i); + } + *addr &= ~0x07u; + + /* Set watchdog timer tick to 1s. */ + val = pmio_read(pmres, AMDSB8_PM_WDT_CTRL); + val &= ~AMDSB8_WDT_RES_MASK; + val |= AMDSB8_WDT_1HZ; + pmio_write(pmres, AMDSB8_PM_WDT_CTRL, val); +#ifdef AMDSBWD_DEBUG + val = pmio_read(pmres, AMDSB8_PM_WDT_CTRL); + amdsbwd_verbose_printf(dev, "AMDSB8_PM_WDT_CTRL value = %#02x\n", val); +#endif + + /* + * Enable watchdog device (in stopped state) + * and decoding of its address. + */ + val = pmio_read(pmres, AMDSB8_PM_WDT_EN); + val &= ~AMDSB8_WDT_DISABLE; + val |= AMDSB8_WDT_DEC_EN; + pmio_write(pmres, AMDSB8_PM_WDT_EN, val); +#ifdef AMDSBWD_DEBUG + val = pmio_read(pmres, AMDSB8_PM_WDT_EN); + device_printf(dev, "AMDSB8_PM_WDT_EN value = %#02x\n", val); +#endif + device_set_desc(dev, "AMD SB8xx Watchdog Timer"); +} + static int amdsbwd_probe(device_t dev) { struct resource *res; + device_t smb_dev; uint32_t addr; - uint32_t val; int rid; int rc; - int i; /* Do not claim some ISA PnP device by accident. */ if (isa_get_logicalid(dev) != 0) @@ -301,21 +402,16 @@ amdsbwd_probe(device_t dev) return (ENXIO); } - /* Report cause of previous reset for user's convenience. */ - val = pmio_read(res, AMDSB_PM_RESET_STATUS0); - if (val != 0) - amdsbwd_verbose_printf(dev, "ResetStatus0 = %#04x\n", val); - val = pmio_read(res, AMDSB_PM_RESET_STATUS1); - if (val != 0) - amdsbwd_verbose_printf(dev, "ResetStatus1 = %#04x\n", val); - if ((val & AMDSB_WD_RST_STS) != 0) - device_printf(dev, "Previous Reset was caused by Watchdog\n"); + smb_dev = pci_find_bsf(0, 20, 0); + KASSERT(smb_dev != NULL, ("can't find SMBus PCI device\n")); + if (pci_get_revid(smb_dev) < AMDSB8_SMBUS_REVID) + amdsbwd_probe_sb7xx(dev, res, &addr); + else + amdsbwd_probe_sb8xx(dev, res, &addr); + + bus_release_resource(dev, SYS_RES_IOPORT, rid, res); + bus_delete_resource(dev, SYS_RES_IOPORT, rid); - /* Find base address of memory mapped WDT registers. */ - for (addr = 0, i = 0; i < 4; i++) { - addr <<= 8; - addr |= pmio_read(res, AMDSB_PM_WDT_BASE_MSB - i); - } amdsbwd_verbose_printf(dev, "memory base address = %#010x\n", addr); rc = bus_set_resource(dev, SYS_RES_MEMORY, 0, addr + AMDSB_WD_CTRL, AMDSB_WDIO_REG_WIDTH); @@ -330,36 +426,25 @@ amdsbwd_probe(device_t dev) return (ENXIO); } - /* Set watchdog timer tick to 10ms. */ - val = pmio_read(res, AMDSB_PM_WDT_CTRL); - val &= ~AMDSB_WDT_RES_MASK; - val |= AMDSB_WDT_RES_10MS; - pmio_write(res, AMDSB_PM_WDT_CTRL, val); - - /* Enable watchdog device (in stopped state). */ - val = pmio_read(res, AMDSB_PM_WDT_CTRL); - val &= ~AMDSB_WDT_DISABLE; - pmio_write(res, AMDSB_PM_WDT_CTRL, val); - - /* - * XXX TODO: Ensure that watchdog decode is enabled - * (register 0x41, bit 3). - */ - bus_release_resource(dev, SYS_RES_IOPORT, rid, res); - bus_delete_resource(dev, SYS_RES_IOPORT, rid); - - device_set_desc(dev, "AMD SB600/SB7xx Watchdog Timer"); return (0); } static int amdsbwd_attach_sb(device_t dev, struct amdsbwd_softc *sc) { + device_t smb_dev; + sc->max_ticks = UINT16_MAX; - sc->ms_per_tick = 10; sc->rid_ctrl = 0; sc->rid_count = 1; + smb_dev = pci_find_bsf(0, 20, 0); + KASSERT(smb_dev != NULL, ("can't find SMBus PCI device\n")); + if (pci_get_revid(smb_dev) < AMDSB8_SMBUS_REVID) + sc->ms_per_tick = 10; + else + sc->ms_per_tick = 1000; + sc->res_ctrl = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->rid_ctrl, RF_ACTIVE); if (sc->res_ctrl == NULL) { @@ -388,6 +473,11 @@ amdsbwd_attach(device_t dev) if (rc != 0) goto fail; +#ifdef AMDSBWD_DEBUG + device_printf(dev, "wd ctrl = %#04x\n", wdctrl_read(sc)); + device_printf(dev, "wd count = %#04x\n", wdcount_read(sc)); +#endif + /* Setup initial state of Watchdog Control. */ wdctrl_write(sc, AMDSB_WD_FIRED); Modified: projects/largeSMP/sys/dev/atkbdc/atkbd.c ============================================================================== --- projects/largeSMP/sys/dev/atkbdc/atkbd.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/dev/atkbdc/atkbd.c Tue Jun 7 08:24:29 2011 (r222812) @@ -1097,10 +1097,8 @@ get_typematic(keyboard_t *kbd) x86regs_t regs; uint8_t *p; - if (!(kbd->kb_config & KB_CONF_PROBE_TYPEMATIC)) - return (ENODEV); - - if (x86bios_get_intr(0x15) == 0 || x86bios_get_intr(0x16) == 0) + if (x86bios_get_intr(0x15) != 0xf000f859 || + x86bios_get_intr(0x16) != 0xf000e82e) return (ENODEV); /* Is BIOS system configuration table supported? */ Modified: projects/largeSMP/sys/dev/atkbdc/atkbdreg.h ============================================================================== --- projects/largeSMP/sys/dev/atkbdc/atkbdreg.h Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/dev/atkbdc/atkbdreg.h Tue Jun 7 08:24:29 2011 (r222812) @@ -36,7 +36,6 @@ #define KB_CONF_NO_RESET (1 << 1) /* don't reset the keyboard */ #define KB_CONF_ALT_SCANCODESET (1 << 2) /* assume the XT type keyboard */ #define KB_CONF_NO_PROBE_TEST (1 << 3) /* don't test keyboard during probe */ -#define KB_CONF_PROBE_TYPEMATIC (1 << 4) /* probe keyboard typematic */ #ifdef _KERNEL Modified: projects/largeSMP/sys/ia64/ia64/machdep.c ============================================================================== --- projects/largeSMP/sys/ia64/ia64/machdep.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/ia64/ia64/machdep.c Tue Jun 7 08:24:29 2011 (r222812) @@ -786,6 +786,8 @@ ia64_init(void) ia64_sal_init(); calculate_frequencies(); + set_cputicker(ia64_get_itc, (u_long)itc_freq * 1000000, 0); + /* * Setup the PCPU data for the bootstrap processor. It is needed * by printf(). Also, since printf() has critical sections, we Modified: projects/largeSMP/sys/kern/kern_shutdown.c ============================================================================== --- projects/largeSMP/sys/kern/kern_shutdown.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/kern/kern_shutdown.c Tue Jun 7 08:24:29 2011 (r222812) @@ -233,30 +233,32 @@ print_uptime(void) printf("%lds\n", (long)ts.tv_sec); } -static void -doadump(void) +int +doadump(boolean_t textdump) { + boolean_t coredump; - /* - * Sometimes people have to call this from the kernel debugger. - * (if 'panic' can not dump) - * Give them a clue as to why they can't dump. - */ - if (dumper.dumper == NULL) { - printf("Cannot dump. Device not defined or unavailable.\n"); - return; - } + if (dumping) + return (EBUSY); + if (dumper.dumper == NULL) + return (ENXIO); savectx(&dumppcb); dumptid = curthread->td_tid; dumping++; + + coredump = TRUE; #ifdef DDB - if (textdump_pending) + if (textdump && textdump_pending) { + coredump = FALSE; textdump_dumpsys(&dumper); - else + } #endif + if (coredump) dumpsys(&dumper); + dumping--; + return (0); } static int @@ -425,7 +427,7 @@ kern_reboot(int howto) EVENTHANDLER_INVOKE(shutdown_post_sync, howto); if ((howto & (RB_HALT|RB_DUMP)) == RB_DUMP && !cold && !dumping) - doadump(); + doadump(TRUE); /* Now that we're going to really halt the system... */ EVENTHANDLER_INVOKE(shutdown_final, howto); Modified: projects/largeSMP/sys/kern/ksched.c ============================================================================== --- projects/largeSMP/sys/kern/ksched.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/kern/ksched.c Tue Jun 7 08:24:29 2011 (r222812) @@ -206,7 +206,7 @@ ksched_setscheduler(struct ksched *ksche if (param->sched_priority >= 0 && param->sched_priority <= (PRI_MAX_TIMESHARE - PRI_MIN_TIMESHARE)) { rtp.type = RTP_PRIO_NORMAL; - rtp.prio = p4prio_to_rtpprio(param->sched_priority); + rtp.prio = p4prio_to_tsprio(param->sched_priority); rtp_to_pri(&rtp, td); } else e = EINVAL; Modified: projects/largeSMP/sys/kern/subr_prf.c ============================================================================== --- projects/largeSMP/sys/kern/subr_prf.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/kern/subr_prf.c Tue Jun 7 08:24:29 2011 (r222812) @@ -163,6 +163,7 @@ uprintf(const char *fmt, ...) goto out; } pca.flags = TOTTY; + pca.p_bufr = NULL; va_start(ap, fmt); tty_lock(pca.tty); retval = kvprintf(fmt, putchar, &pca, 10, ap); @@ -206,6 +207,7 @@ tprintf(struct proc *p, int pri, const c pca.pri = pri; pca.tty = tp; pca.flags = flags; + pca.p_bufr = NULL; va_start(ap, fmt); if (pca.tty != NULL) tty_lock(pca.tty); @@ -234,6 +236,7 @@ ttyprintf(struct tty *tp, const char *fm va_start(ap, fmt); pca.tty = tp; pca.flags = TOTTY; + pca.p_bufr = NULL; retval = kvprintf(fmt, putchar, &pca, 10, ap); va_end(ap); return (retval); Modified: projects/largeSMP/sys/netgraph/ng_nat.c ============================================================================== --- projects/largeSMP/sys/netgraph/ng_nat.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/netgraph/ng_nat.c Tue Jun 7 08:24:29 2011 (r222812) @@ -43,6 +43,7 @@ #include #include +#include #include #include @@ -696,22 +697,35 @@ ng_nat_rcvdata(hook_p hook, item_p item KASSERT(m->m_pkthdr.len == ntohs(ip->ip_len), ("ng_nat: ip_len != m_pkthdr.len")); + /* + * We drop packet when: + * 1. libalias returns PKT_ALIAS_ERROR; + * 2. For incoming packets: + * a) for unresolved fragments; + * b) libalias returns PKT_ALIAS_IGNORED and + * PKT_ALIAS_DENY_INCOMING flag is set. + */ if (hook == priv->in) { rval = LibAliasIn(priv->lib, c, m->m_len + M_TRAILINGSPACE(m)); - if (rval != PKT_ALIAS_OK && - rval != PKT_ALIAS_FOUND_HEADER_FRAGMENT) { + if (rval == PKT_ALIAS_ERROR || + rval == PKT_ALIAS_UNRESOLVED_FRAGMENT || + (rval == PKT_ALIAS_IGNORED && + (priv->lib->packetAliasMode & + PKT_ALIAS_DENY_INCOMING) != 0)) { NG_FREE_ITEM(item); return (EINVAL); } } else if (hook == priv->out) { rval = LibAliasOut(priv->lib, c, m->m_len + M_TRAILINGSPACE(m)); - if (rval != PKT_ALIAS_OK) { + if (rval == PKT_ALIAS_ERROR) { NG_FREE_ITEM(item); return (EINVAL); } } else panic("ng_nat: unknown hook!\n"); + if (rval == PKT_ALIAS_RESPOND) + m->m_flags |= M_SKIP_FIREWALL; m->m_pkthdr.len = m->m_len = ntohs(ip->ip_len); if ((ip->ip_off & htons(IP_OFFMASK)) == 0 && Modified: projects/largeSMP/sys/netinet/ipfw/ip_fw_nat.c ============================================================================== --- projects/largeSMP/sys/netinet/ipfw/ip_fw_nat.c Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/netinet/ipfw/ip_fw_nat.c Tue Jun 7 08:24:29 2011 (r222812) @@ -262,17 +262,27 @@ ipfw_nat(struct ip_fw_args *args, struct else retval = LibAliasOut(t->lib, c, mcl->m_len + M_TRAILINGSPACE(mcl)); - if (retval == PKT_ALIAS_RESPOND) { - m->m_flags |= M_SKIP_FIREWALL; - retval = PKT_ALIAS_OK; - } - if (retval != PKT_ALIAS_OK && - retval != PKT_ALIAS_FOUND_HEADER_FRAGMENT) { + + /* + * We drop packet when: + * 1. libalias returns PKT_ALIAS_ERROR; + * 2. For incoming packets: + * a) for unresolved fragments; + * b) libalias returns PKT_ALIAS_IGNORED and + * PKT_ALIAS_DENY_INCOMING flag is set. + */ + if (retval == PKT_ALIAS_ERROR || + (args->oif == NULL && (retval == PKT_ALIAS_UNRESOLVED_FRAGMENT || + (retval == PKT_ALIAS_IGNORED && + (t->lib->packetAliasMode & PKT_ALIAS_DENY_INCOMING) != 0)))) { /* XXX - should i add some logging? */ m_free(mcl); args->m = NULL; return (IP_FW_DENY); } + + if (retval == PKT_ALIAS_RESPOND) + m->m_flags |= M_SKIP_FIREWALL; mcl->m_pkthdr.len = mcl->m_len = ntohs(ip->ip_len); /* Modified: projects/largeSMP/sys/netinet/libalias/alias_sctp.h ============================================================================== --- projects/largeSMP/sys/netinet/libalias/alias_sctp.h Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/netinet/libalias/alias_sctp.h Tue Jun 7 08:24:29 2011 (r222812) @@ -135,13 +135,13 @@ struct sctp_nat_assoc { struct in_addr a_addr; /**< alias ip address */ int state; /**< current state of NAT association */ int TableRegister; /**< stores which look up tables association is registered in */ - int exp; /**< timer expiration in seconds from uptime */ + int exp; /**< timer expiration in seconds from uptime */ int exp_loc; /**< current location in timer_Q */ int num_Gaddr; /**< number of global IP addresses in the list */ LIST_HEAD(sctpGlobalAddresshead,sctp_GlobalAddress) Gaddr; /**< List of global addresses */ - LIST_ENTRY (sctp_nat_assoc) list_L; /**< Linked list of pointers for Local table*/ - LIST_ENTRY (sctp_nat_assoc) list_G; /**< Linked list of pointers for Global table */ - LIST_ENTRY (sctp_nat_assoc) timer_Q; /**< Linked list of pointers for timer Q */ + LIST_ENTRY (sctp_nat_assoc) list_L; /**< Linked list of pointers for Local table*/ + LIST_ENTRY (sctp_nat_assoc) list_G; /**< Linked list of pointers for Global table */ + LIST_ENTRY (sctp_nat_assoc) timer_Q; /**< Linked list of pointers for timer Q */ //Using libalias locking }; Modified: projects/largeSMP/sys/sys/conf.h ============================================================================== --- projects/largeSMP/sys/sys/conf.h Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/sys/sys/conf.h Tue Jun 7 08:24:29 2011 (r222812) @@ -332,6 +332,7 @@ struct dumperinfo { int set_dumper(struct dumperinfo *); int dump_write(struct dumperinfo *, void *, vm_offset_t, off_t, size_t); void dumpsys(struct dumperinfo *); +int doadump(boolean_t); extern int dumping; /* system is dumping */ #endif /* _KERNEL */ Modified: projects/largeSMP/usr.sbin/rtsold/Makefile ============================================================================== --- projects/largeSMP/usr.sbin/rtsold/Makefile Tue Jun 7 08:07:41 2011 (r222811) +++ projects/largeSMP/usr.sbin/rtsold/Makefile Tue Jun 7 08:24:29 2011 (r222812) @@ -19,6 +19,7 @@ MAN= rtsold.8 MLINKS= rtsold.8 rtsol.8 SRCS= rtsold.c rtsol.c if.c probe.c dump.c rtsock.c +WARNS?= 3 CFLAGS+= -DHAVE_ARC4RANDOM -DHAVE_POLL_H DPADD= ${LIBKVM} LDADD= -lkvm From owner-svn-src-projects@FreeBSD.ORG Tue Jun 7 09:02:26 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 64ED01065670; Tue, 7 Jun 2011 09:02:26 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3D50C8FC15; Tue, 7 Jun 2011 09:02:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5792Qlq074006; Tue, 7 Jun 2011 09:02:26 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5792QUw074005; Tue, 7 Jun 2011 09:02:26 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106070902.p5792QUw074005@svn.freebsd.org> From: Attilio Rao Date: Tue, 7 Jun 2011 09:02:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222814 - projects/largeSMP X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 09:02:26 -0000 Author: attilio Date: Tue Jun 7 09:02:25 2011 New Revision: 222814 URL: http://svn.freebsd.org/changeset/base/222814 Log: After reintegration the branch must be removed. Deleted: projects/largeSMP/ From owner-svn-src-projects@FreeBSD.ORG Tue Jun 7 09:03:41 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C01DF1065783; Tue, 7 Jun 2011 09:03:41 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 981F18FC16; Tue, 7 Jun 2011 09:03:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5793flp074124; Tue, 7 Jun 2011 09:03:41 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5793fT9074123; Tue, 7 Jun 2011 09:03:41 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106070903.p5793fT9074123@svn.freebsd.org> From: Attilio Rao Date: Tue, 7 Jun 2011 09:03:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222816 - projects/largeSMP X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 09:03:41 -0000 Author: attilio Date: Tue Jun 7 09:03:41 2011 New Revision: 222816 URL: http://svn.freebsd.org/changeset/base/222816 Log: Regenerate the largeSMP branch for finishing the job. Added: - copied from r222814, head/ Directory Properties: projects/largeSMP/ (props changed) From owner-svn-src-projects@FreeBSD.ORG Tue Jun 7 09:37:09 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DCFAA106564A; Tue, 7 Jun 2011 09:37:08 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C37E08FC08; Tue, 7 Jun 2011 09:37:08 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p579b8la075262; Tue, 7 Jun 2011 09:37:08 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p579b8wv075251; Tue, 7 Jun 2011 09:37:08 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106070937.p579b8wv075251@svn.freebsd.org> From: Attilio Rao Date: Tue, 7 Jun 2011 09:37:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222818 - in projects/largeSMP: contrib/top share/misc share/mk sys/dev/ath sys/dev/ath/ath_hal sys/dev/ath/ath_hal/ar5212 sys/dev/ath/ath_hal/ar5416 usr.bin/calendar/calendars X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 09:37:09 -0000 Author: attilio Date: Tue Jun 7 09:37:08 2011 New Revision: 222818 URL: http://svn.freebsd.org/changeset/base/222818 Log: MFC Modified: projects/largeSMP/share/misc/committers-ports.dot projects/largeSMP/sys/dev/ath/ath_hal/ah.h projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212.h projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416.h projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c projects/largeSMP/sys/dev/ath/if_athvar.h projects/largeSMP/usr.bin/calendar/calendars/calendar.freebsd Directory Properties: projects/largeSMP/ (props changed) projects/largeSMP/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/contrib/bind9/ (props changed) projects/largeSMP/contrib/binutils/ (props changed) projects/largeSMP/contrib/bzip2/ (props changed) projects/largeSMP/contrib/compiler-rt/ (props changed) projects/largeSMP/contrib/dialog/ (props changed) projects/largeSMP/contrib/ee/ (props changed) projects/largeSMP/contrib/expat/ (props changed) projects/largeSMP/contrib/file/ (props changed) projects/largeSMP/contrib/gcc/ (props changed) projects/largeSMP/contrib/gdb/ (props changed) projects/largeSMP/contrib/gdtoa/ (props changed) projects/largeSMP/contrib/gnu-sort/ (props changed) projects/largeSMP/contrib/groff/ (props changed) projects/largeSMP/contrib/less/ (props changed) projects/largeSMP/contrib/libpcap/ (props changed) projects/largeSMP/contrib/libstdc++/ (props changed) projects/largeSMP/contrib/llvm/ (props changed) projects/largeSMP/contrib/llvm/tools/clang/ (props changed) projects/largeSMP/contrib/ncurses/ (props changed) projects/largeSMP/contrib/netcat/ (props changed) projects/largeSMP/contrib/ntp/ (props changed) projects/largeSMP/contrib/one-true-awk/ (props changed) projects/largeSMP/contrib/openbsm/ (props changed) projects/largeSMP/contrib/openpam/ (props changed) projects/largeSMP/contrib/pf/ (props changed) projects/largeSMP/contrib/sendmail/ (props changed) projects/largeSMP/contrib/tcpdump/ (props changed) projects/largeSMP/contrib/tcsh/ (props changed) projects/largeSMP/contrib/top/ (props changed) projects/largeSMP/contrib/top/install-sh (props changed) projects/largeSMP/contrib/tzcode/stdtime/ (props changed) projects/largeSMP/contrib/tzcode/zic/ (props changed) projects/largeSMP/contrib/tzdata/ (props changed) projects/largeSMP/contrib/wpa/ (props changed) projects/largeSMP/contrib/xz/ (props changed) projects/largeSMP/crypto/openssh/ (props changed) projects/largeSMP/crypto/openssl/ (props changed) projects/largeSMP/gnu/lib/ (props changed) projects/largeSMP/gnu/usr.bin/binutils/ (props changed) projects/largeSMP/gnu/usr.bin/cc/cc_tools/ (props changed) projects/largeSMP/gnu/usr.bin/gdb/ (props changed) projects/largeSMP/lib/libc/ (props changed) projects/largeSMP/lib/libc/stdtime/ (props changed) projects/largeSMP/lib/libutil/ (props changed) projects/largeSMP/lib/libz/ (props changed) projects/largeSMP/sbin/ (props changed) projects/largeSMP/sbin/ipfw/ (props changed) projects/largeSMP/share/mk/bsd.arch.inc.mk (props changed) projects/largeSMP/share/zoneinfo/ (props changed) projects/largeSMP/sys/ (props changed) projects/largeSMP/sys/amd64/include/xen/ (props changed) projects/largeSMP/sys/boot/ (props changed) projects/largeSMP/sys/boot/i386/efi/ (props changed) projects/largeSMP/sys/boot/ia64/efi/ (props changed) projects/largeSMP/sys/boot/ia64/ski/ (props changed) projects/largeSMP/sys/boot/powerpc/boot1.chrp/ (props changed) projects/largeSMP/sys/boot/powerpc/ofw/ (props changed) projects/largeSMP/sys/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/sys/conf/ (props changed) projects/largeSMP/sys/contrib/dev/acpica/ (props changed) projects/largeSMP/sys/contrib/octeon-sdk/ (props changed) projects/largeSMP/sys/contrib/pf/ (props changed) projects/largeSMP/sys/contrib/x86emu/ (props changed) projects/largeSMP/usr.bin/calendar/ (props changed) projects/largeSMP/usr.bin/csup/ (props changed) projects/largeSMP/usr.bin/procstat/ (props changed) projects/largeSMP/usr.sbin/ndiscvt/ (props changed) projects/largeSMP/usr.sbin/zic/ (props changed) Modified: projects/largeSMP/share/misc/committers-ports.dot ============================================================================== --- projects/largeSMP/share/misc/committers-ports.dot Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/share/misc/committers-ports.dot Tue Jun 7 09:37:08 2011 (r222818) @@ -205,6 +205,8 @@ arved -> stefan asami -> obrien +bapt -> jlaffaye + beat -> decke beech -> glarkin @@ -402,6 +404,7 @@ tabthorpe -> dhn tabthorpe -> fluffy tabthorpe -> jacula tabthorpe -> jadawin +tabthorpe -> jlaffaye tabthorpe -> pgj tabthorpe -> rene Modified: projects/largeSMP/sys/dev/ath/ath_hal/ah.h ============================================================================== --- projects/largeSMP/sys/dev/ath/ath_hal/ah.h Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/sys/dev/ath/ath_hal/ah.h Tue Jun 7 09:37:08 2011 (r222818) @@ -745,6 +745,17 @@ typedef enum { HAL_QUIET_ADD_SWBA_RESP_TIME = 0x4, /* add beacon response time to next_start offset */ } HAL_QUIET_FLAG; +#define HAL_DFS_EVENT_PRICH 0x0000001 + +struct dfs_event { + uint64_t re_full_ts; /* 64-bit full timestamp from interrupt time */ + uint32_t re_ts; /* Original 15 bit recv timestamp */ + uint8_t re_rssi; /* rssi of radar event */ + uint8_t re_dur; /* duration of radar pulse */ + uint32_t re_flags; /* Flags (see above) */ +}; +typedef struct dfs_event HAL_DFS_EVENT; + /* * Hardware Access Layer (HAL) API. * @@ -928,6 +939,9 @@ struct ath_hal { HAL_PHYERR_PARAM *pe); void __ahdecl(*ah_getDfsThresh)(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); + HAL_BOOL __ahdecl(*ah_procRadarEvent)(struct ath_hal *ah, + struct ath_rx_status *rxs, uint64_t fulltsf, + const char *buf, HAL_DFS_EVENT *event); /* Key Cache Functions */ uint32_t __ahdecl(*ah_getKeyCacheSize)(struct ath_hal*); Modified: projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212.h ============================================================================== --- projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212.h Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212.h Tue Jun 7 09:37:08 2011 (r222818) @@ -622,5 +622,8 @@ extern HAL_BOOL ar5212IsNFCalInProgress( extern HAL_BOOL ar5212WaitNFCalComplete(struct ath_hal *ah, int i); extern void ar5212EnableDfs(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); extern void ar5212GetDfsThresh(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); +extern HAL_BOOL ar5212ProcessRadarEvent(struct ath_hal *ah, + struct ath_rx_status *rxs, uint64_t fulltsf, const char *buf, + HAL_DFS_EVENT *event); #endif /* _ATH_AR5212_H_ */ Modified: projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c ============================================================================== --- projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c Tue Jun 7 09:37:08 2011 (r222818) @@ -132,6 +132,7 @@ static const struct ath_hal_private ar52 /* DFS Functions */ .ah_enableDfs = ar5212EnableDfs, .ah_getDfsThresh = ar5212GetDfsThresh, + .ah_procRadarEvent = ar5212ProcessRadarEvent, /* Key Cache Functions */ .ah_getKeyCacheSize = ar5212GetKeyCacheSize, Modified: projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c ============================================================================== --- projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c Tue Jun 7 09:37:08 2011 (r222818) @@ -1180,3 +1180,47 @@ ar5212GetDfsThresh(struct ath_hal *ah, H pe->pe_extchannel = AH_FALSE; } +/* + * Process the radar phy error and extract the pulse duration. + */ +HAL_BOOL +ar5212ProcessRadarEvent(struct ath_hal *ah, struct ath_rx_status *rxs, + uint64_t fulltsf, const char *buf, HAL_DFS_EVENT *event) +{ + uint8_t dur; + uint8_t rssi; + + /* Check whether the given phy error is a radar event */ + if ((rxs->rs_phyerr != HAL_PHYERR_RADAR) && + (rxs->rs_phyerr != HAL_PHYERR_FALSE_RADAR_EXT)) + return AH_FALSE; + + /* + * The first byte is the pulse width - if there's + * no data, simply set the duration to 0 + */ + if (rxs->rs_datalen >= 1) + /* The pulse width is byte 0 of the data */ + dur = ((uint8_t) buf[0]) & 0xff; + else + dur = 0; + + /* Pulse RSSI is the normal reported RSSI */ + rssi = (uint8_t) rxs->rs_rssi; + + /* 0 duration/rssi is not a valid radar event */ + if (dur == 0 && rssi == 0) + return AH_FALSE; + + HALDEBUG(ah, HAL_DEBUG_DFS, "%s: rssi=%d, dur=%d\n", + __func__, rssi, dur); + + /* Record the event */ + event->re_full_ts = fulltsf; + event->re_ts = rxs->rs_tstamp; + event->re_rssi = rssi; + event->re_dur = dur; + event->re_flags = HAL_DFS_EVENT_PRICH; + + return AH_TRUE; +} Modified: projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416.h ============================================================================== --- projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416.h Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416.h Tue Jun 7 09:37:08 2011 (r222818) @@ -205,6 +205,9 @@ extern HAL_BOOL ar5416SetRifsDelay(struc const struct ieee80211_channel *chan, HAL_BOOL enable); extern void ar5416EnableDfs(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); extern void ar5416GetDfsThresh(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); +extern HAL_BOOL ar5416ProcessRadarEvent(struct ath_hal *ah, + struct ath_rx_status *rxs, uint64_t fulltsf, const char *buf, + HAL_DFS_EVENT *event); extern HAL_BOOL ar5416SetPowerMode(struct ath_hal *ah, HAL_POWER_MODE mode, int setChip); Modified: projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c ============================================================================== --- projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Tue Jun 7 09:37:08 2011 (r222818) @@ -147,6 +147,7 @@ ar5416InitState(struct ath_hal_5416 *ahp /* DFS Functions */ ah->ah_enableDfs = ar5416EnableDfs; ah->ah_getDfsThresh = ar5416GetDfsThresh; + ah->ah_procRadarEvent = ar5416ProcessRadarEvent; /* Power Management Functions */ ah->ah_setPowerMode = ar5416SetPowerMode; Modified: projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c ============================================================================== --- projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c Tue Jun 7 09:37:08 2011 (r222818) @@ -692,3 +692,19 @@ ar5416EnableDfs(struct ath_hal *ah, HAL_ OS_REG_WRITE(ah, AR_PHY_RADAR_1, val); } } + +/* + * Extract the radar event information from the given phy error. + * + * Returns AH_TRUE if the phy error was actually a phy error, + * AH_FALSE if the phy error wasn't a phy error. + */ +HAL_BOOL +ar5416ProcessRadarEvent(struct ath_hal *ah, struct ath_rx_status *rxs, + uint64_t fulltsf, const char *buf, HAL_DFS_EVENT *event) +{ + /* + * For now, this isn't implemented. + */ + return AH_FALSE; +} Modified: projects/largeSMP/sys/dev/ath/if_athvar.h ============================================================================== --- projects/largeSMP/sys/dev/ath/if_athvar.h Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/sys/dev/ath/if_athvar.h Tue Jun 7 09:37:08 2011 (r222818) @@ -709,6 +709,8 @@ void ath_intr(void *); ((*(_ah)->ah_enableDfs)((_ah), (_param))) #define ath_hal_getdfsthresh(_ah, _param) \ ((*(_ah)->ah_getDfsThresh)((_ah), (_param))) +#define ath_hal_procradarevent(_ah, _rxs, _fulltsf, _buf, _event) \ + ((*(_ah)->ah_procRadarEvent)((_ah), (_rxs), (_fulltsf), (_buf), (_event))) #define ath_hal_gpioCfgOutput(_ah, _gpio, _type) \ ((*(_ah)->ah_gpioCfgOutput)((_ah), (_gpio), (_type))) Modified: projects/largeSMP/usr.bin/calendar/calendars/calendar.freebsd ============================================================================== --- projects/largeSMP/usr.bin/calendar/calendars/calendar.freebsd Tue Jun 7 09:06:15 2011 (r222817) +++ projects/largeSMP/usr.bin/calendar/calendars/calendar.freebsd Tue Jun 7 09:37:08 2011 (r222818) @@ -294,6 +294,7 @@ 10/22 Jean-Sebastien Pedron born in Redon, Ille-et-Vilaine, France, 1980 10/23 Mario Sergio Fujikawa Ferreira born in Brasilia, Distrito Federal, Brazil, 1976 10/25 Eric Melville born in Los Gatos, California, United States, 1980 +10/25 Julien Laffaye born in Toulouse, France, 1988 10/26 Philip M. Gollucci born in Silver Spring, Maryland, United States, 1979 10/27 Takanori Watanabe born in Numazu, Shizuoka, Japan, 1972 11/05 M. Warner Losh born in Kansas City, Kansas, United States, 1966 From owner-svn-src-projects@FreeBSD.ORG Tue Jun 7 18:35:45 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C0EF1106564A; Tue, 7 Jun 2011 18:35:45 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A68738FC12; Tue, 7 Jun 2011 18:35:45 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p57IZjGX095527; Tue, 7 Jun 2011 18:35:45 GMT (envelope-from grehan@svn.freebsd.org) Received: (from grehan@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p57IZjan095524; Tue, 7 Jun 2011 18:35:45 GMT (envelope-from grehan@svn.freebsd.org) Message-Id: <201106071835.p57IZjan095524@svn.freebsd.org> From: Peter Grehan Date: Tue, 7 Jun 2011 18:35:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222830 - projects/bhyve/usr.sbin/bhyve X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 18:35:45 -0000 Author: grehan Date: Tue Jun 7 18:35:45 2011 New Revision: 222830 URL: http://svn.freebsd.org/changeset/base/222830 Log: Allow access to the device's config area with any size i/o access at any offset. This is now spec-compliant. Modified: projects/bhyve/usr.sbin/bhyve/pci_virtio_block.c projects/bhyve/usr.sbin/bhyve/pci_virtio_net.c Modified: projects/bhyve/usr.sbin/bhyve/pci_virtio_block.c ============================================================================== --- projects/bhyve/usr.sbin/bhyve/pci_virtio_block.c Tue Jun 7 17:40:33 2011 (r222829) +++ projects/bhyve/usr.sbin/bhyve/pci_virtio_block.c Tue Jun 7 18:35:45 2011 (r222830) @@ -439,6 +439,7 @@ uint32_t pci_vtblk_read(struct pci_devinst *pi, int baridx, int offset, int size) { struct pci_vtblk_softc *sc = pi->pi_arg; + void *ptr; uint32_t value; if (offset + size > VTBLK_REGSZ) { @@ -481,8 +482,15 @@ pci_vtblk_read(struct pci_devinst *pi, i sc->vbsc_isr = 0; /* a read clears this flag */ break; case VTBLK_R_CFG ... VTBLK_R_CFG_END: - assert(size == 1); - value = *((uint8_t *)&sc->vbsc_cfg + offset - VTBLK_R_CFG); + assert(size + offset <= (VTBLK_R_CFG_END + 1)); + ptr = (uint8_t *)&sc->vbsc_cfg + offset - VTBLK_R_CFG; + if (size == 1) { + value = *(uint8_t *) ptr; + } else if (size == 2) { + value = *(uint16_t *) ptr; + } else { + value = *(uint32_t *) ptr; + } break; default: DPRINTF(("vtblk: unknown i/o read offset %d\n\r", offset)); Modified: projects/bhyve/usr.sbin/bhyve/pci_virtio_net.c ============================================================================== --- projects/bhyve/usr.sbin/bhyve/pci_virtio_net.c Tue Jun 7 17:40:33 2011 (r222829) +++ projects/bhyve/usr.sbin/bhyve/pci_virtio_net.c Tue Jun 7 18:35:45 2011 (r222830) @@ -594,7 +594,8 @@ pci_vtnet_write(struct pci_devinst *pi, uint32_t value) { struct pci_vtnet_softc *sc = pi->pi_arg; - + void *ptr; + if (offset + size > VTNET_REGSZ) { DPRINTF(("vtnet_write: 2big, offset %d size %d\n", offset, size)); @@ -632,11 +633,19 @@ pci_vtnet_write(struct pci_devinst *pi, case VTNET_R_CFG3: case VTNET_R_CFG4: case VTNET_R_CFG5: + assert((size + offset) <= (VTNET_R_CFG5 + 1)); + ptr = &sc->vsc_macaddr[offset - VTNET_R_CFG0]; /* * The driver is allowed to change the MAC address */ - assert(size == 1); sc->vsc_macaddr[offset - VTNET_R_CFG0] = value; + if (size == 1) { + *(uint8_t *) ptr = value; + } else if (size == 2) { + *(uint16_t *) ptr = value; + } else { + *(uint32_t *) ptr = value; + } break; case VTCFG_R_HOSTCAP: case VTCFG_R_QNUM: @@ -658,6 +667,7 @@ uint32_t pci_vtnet_read(struct pci_devinst *pi, int baridx, int offset, int size) { struct pci_vtnet_softc *sc = pi->pi_arg; + void *ptr; uint32_t value; if (offset + size > VTNET_REGSZ) { @@ -708,16 +718,23 @@ pci_vtnet_read(struct pci_devinst *pi, i case VTNET_R_CFG3: case VTNET_R_CFG4: case VTNET_R_CFG5: - assert(size == 1); - value = sc->vsc_macaddr[offset - VTNET_R_CFG0]; + assert((size + offset) <= (VTNET_R_CFG5 + 1)); + ptr = &sc->vsc_macaddr[offset - VTNET_R_CFG0]; + if (size == 1) { + value = *(uint8_t *) ptr; + } else if (size == 2) { + value = *(uint16_t *) ptr; + } else { + value = *(uint32_t *) ptr; + } break; case VTNET_R_CFG6: - assert(size == 1); - value = 0x01; /* XXX link always up */ + assert(size != 4); + value = 0x01; /* XXX link always up */ break; case VTNET_R_CFG7: assert(size == 1); - value = 0; /* link status is in the LSB */ + value = 0; /* XXX link status in LSB */ break; default: DPRINTF(("vtnet: unknown i/o read offset %d\n\r", offset)); From owner-svn-src-projects@FreeBSD.ORG Tue Jun 7 20:49:29 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 831B21065672; Tue, 7 Jun 2011 20:49:29 +0000 (UTC) (envelope-from gibbs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5BCBC8FC15; Tue, 7 Jun 2011 20:49:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p57KnTRq099917; Tue, 7 Jun 2011 20:49:29 GMT (envelope-from gibbs@svn.freebsd.org) Received: (from gibbs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p57KnT08099916; Tue, 7 Jun 2011 20:49:29 GMT (envelope-from gibbs@svn.freebsd.org) Message-Id: <201106072049.p57KnT08099916@svn.freebsd.org> From: "Justin T. Gibbs" Date: Tue, 7 Jun 2011 20:49:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222836 - projects/zfsd X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 20:49:29 -0000 Author: gibbs Date: Tue Jun 7 20:49:29 2011 New Revision: 222836 URL: http://svn.freebsd.org/changeset/base/222836 Log: Create a project branch for intergration of the ZFS fault monitoring and management daemon. Added: projects/zfsd/ - copied from r222835, head/ Directory Properties: projects/zfsd/head/ (props changed) From owner-svn-src-projects@FreeBSD.ORG Thu Jun 9 00:34:56 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DCCFA106566B; Thu, 9 Jun 2011 00:34:56 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C994C8FC0C; Thu, 9 Jun 2011 00:34:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p590YuBd054112; Thu, 9 Jun 2011 00:34:56 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p590YukG054089; Thu, 9 Jun 2011 00:34:56 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106090034.p590YukG054089@svn.freebsd.org> From: Attilio Rao Date: Thu, 9 Jun 2011 00:34:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222885 - in projects/largeSMP: . contrib/groff/tmac contrib/top gnu/usr.bin gnu/usr.bin/groff/tmac libexec/comsat libexec/rtld-elf sbin/geom/class/part sbin/mount sbin/rtsol share/man/... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jun 2011 00:34:56 -0000 Author: attilio Date: Thu Jun 9 00:34:56 2011 New Revision: 222885 URL: http://svn.freebsd.org/changeset/base/222885 Log: MFC Added: projects/largeSMP/tools/regression/bin/sh/execution/set-x1.0 - copied unchanged from r222884, head/tools/regression/bin/sh/execution/set-x1.0 projects/largeSMP/tools/regression/bin/sh/execution/set-x2.0 - copied unchanged from r222884, head/tools/regression/bin/sh/execution/set-x2.0 Modified: projects/largeSMP/UPDATING projects/largeSMP/contrib/groff/tmac/doc-common projects/largeSMP/contrib/groff/tmac/doc-syms projects/largeSMP/contrib/groff/tmac/doc.tmac projects/largeSMP/gnu/usr.bin/Makefile projects/largeSMP/gnu/usr.bin/groff/tmac/mdoc.local projects/largeSMP/libexec/comsat/comsat.c projects/largeSMP/libexec/rtld-elf/Makefile projects/largeSMP/sbin/geom/class/part/geom_part.c projects/largeSMP/sbin/mount/mount.c projects/largeSMP/sbin/rtsol/Makefile projects/largeSMP/share/man/man5/fstab.5 projects/largeSMP/sys/amd64/amd64/machdep.c projects/largeSMP/sys/amd64/amd64/mp_machdep.c projects/largeSMP/sys/amd64/include/smp.h projects/largeSMP/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c projects/largeSMP/sys/dev/bxe/bxe_debug.h projects/largeSMP/sys/dev/bxe/bxe_link.c projects/largeSMP/sys/dev/bxe/if_bxe.c projects/largeSMP/sys/dev/bxe/if_bxe.h projects/largeSMP/sys/dev/iicbus/ad7417.c projects/largeSMP/sys/dev/sound/pcm/sound.c projects/largeSMP/sys/i386/i386/machdep.c projects/largeSMP/sys/i386/i386/mp_machdep.c projects/largeSMP/sys/i386/include/smp.h projects/largeSMP/sys/kern/kern_shutdown.c projects/largeSMP/sys/kern/uipc_syscalls.c projects/largeSMP/sys/net/bridgestp.c projects/largeSMP/sys/net/bridgestp.h projects/largeSMP/sys/netinet/ip_input.c projects/largeSMP/sys/netinet/ip_ipsec.c projects/largeSMP/sys/netinet6/ip6_input.c projects/largeSMP/sys/netinet6/ip6_ipsec.c projects/largeSMP/sys/pc98/pc98/machdep.c projects/largeSMP/sys/sparc64/include/ktr.h projects/largeSMP/sys/sparc64/sparc64/exception.S projects/largeSMP/sys/sparc64/sparc64/mp_exception.S projects/largeSMP/sys/sparc64/sparc64/mp_locore.S projects/largeSMP/sys/sparc64/sparc64/mp_machdep.c projects/largeSMP/sys/x86/x86/tsc.c projects/largeSMP/usr.sbin/rtadvd/advcap.c projects/largeSMP/usr.sbin/rtadvd/config.c projects/largeSMP/usr.sbin/rtsold/dump.c projects/largeSMP/usr.sbin/rtsold/rtsol.c projects/largeSMP/usr.sbin/rtsold/rtsold.c projects/largeSMP/usr.sbin/rtsold/rtsold.h Directory Properties: projects/largeSMP/ (props changed) projects/largeSMP/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/contrib/bind9/ (props changed) projects/largeSMP/contrib/binutils/ (props changed) projects/largeSMP/contrib/bzip2/ (props changed) projects/largeSMP/contrib/compiler-rt/ (props changed) projects/largeSMP/contrib/dialog/ (props changed) projects/largeSMP/contrib/ee/ (props changed) projects/largeSMP/contrib/expat/ (props changed) projects/largeSMP/contrib/file/ (props changed) projects/largeSMP/contrib/gcc/ (props changed) projects/largeSMP/contrib/gdb/ (props changed) projects/largeSMP/contrib/gdtoa/ (props changed) projects/largeSMP/contrib/gnu-sort/ (props changed) projects/largeSMP/contrib/groff/ (props changed) projects/largeSMP/contrib/less/ (props changed) projects/largeSMP/contrib/libpcap/ (props changed) projects/largeSMP/contrib/libstdc++/ (props changed) projects/largeSMP/contrib/llvm/ (props changed) projects/largeSMP/contrib/llvm/tools/clang/ (props changed) projects/largeSMP/contrib/ncurses/ (props changed) projects/largeSMP/contrib/netcat/ (props changed) projects/largeSMP/contrib/ntp/ (props changed) projects/largeSMP/contrib/one-true-awk/ (props changed) projects/largeSMP/contrib/openbsm/ (props changed) projects/largeSMP/contrib/openpam/ (props changed) projects/largeSMP/contrib/pf/ (props changed) projects/largeSMP/contrib/sendmail/ (props changed) projects/largeSMP/contrib/tcpdump/ (props changed) projects/largeSMP/contrib/tcsh/ (props changed) projects/largeSMP/contrib/top/ (props changed) projects/largeSMP/contrib/top/install-sh (props changed) projects/largeSMP/contrib/tzcode/stdtime/ (props changed) projects/largeSMP/contrib/tzcode/zic/ (props changed) projects/largeSMP/contrib/tzdata/ (props changed) projects/largeSMP/contrib/wpa/ (props changed) projects/largeSMP/contrib/xz/ (props changed) projects/largeSMP/crypto/openssh/ (props changed) projects/largeSMP/crypto/openssl/ (props changed) projects/largeSMP/gnu/lib/ (props changed) projects/largeSMP/gnu/usr.bin/binutils/ (props changed) projects/largeSMP/gnu/usr.bin/cc/cc_tools/ (props changed) projects/largeSMP/gnu/usr.bin/gdb/ (props changed) projects/largeSMP/lib/libc/ (props changed) projects/largeSMP/lib/libc/stdtime/ (props changed) projects/largeSMP/lib/libutil/ (props changed) projects/largeSMP/lib/libz/ (props changed) projects/largeSMP/sbin/ (props changed) projects/largeSMP/sbin/ipfw/ (props changed) projects/largeSMP/share/mk/bsd.arch.inc.mk (props changed) projects/largeSMP/share/zoneinfo/ (props changed) projects/largeSMP/sys/ (props changed) projects/largeSMP/sys/amd64/include/xen/ (props changed) projects/largeSMP/sys/boot/ (props changed) projects/largeSMP/sys/boot/i386/efi/ (props changed) projects/largeSMP/sys/boot/ia64/efi/ (props changed) projects/largeSMP/sys/boot/ia64/ski/ (props changed) projects/largeSMP/sys/boot/powerpc/boot1.chrp/ (props changed) projects/largeSMP/sys/boot/powerpc/ofw/ (props changed) projects/largeSMP/sys/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/sys/conf/ (props changed) projects/largeSMP/sys/contrib/dev/acpica/ (props changed) projects/largeSMP/sys/contrib/octeon-sdk/ (props changed) projects/largeSMP/sys/contrib/pf/ (props changed) projects/largeSMP/sys/contrib/x86emu/ (props changed) projects/largeSMP/usr.bin/calendar/ (props changed) projects/largeSMP/usr.bin/csup/ (props changed) projects/largeSMP/usr.bin/procstat/ (props changed) projects/largeSMP/usr.sbin/ndiscvt/ (props changed) projects/largeSMP/usr.sbin/zic/ (props changed) Modified: projects/largeSMP/UPDATING ============================================================================== --- projects/largeSMP/UPDATING Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/UPDATING Thu Jun 9 00:34:56 2011 (r222885) @@ -22,10 +22,33 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9. machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20110608: + The following sysctls and tunables are retired on x86 platforms: + machdep.hlt_cpus + machdep.hlt_logical_cpus + The following sysctl is retired: + machdep.hyperthreading_allowed + The sysctls were supposed to provide a way to dynamically offline and + online selected CPUs on x86 platforms, but the implementation has not + been reliable especially with SCHED_ULE scheduler. + machdep.hyperthreading_allowed tunable is still available to ignore + hyperthreading CPUs at OS level. + Individual CPUs can be disabled using hint.lapic.X.disabled tunable, + where X is an APIC ID of a CPU. Be advised, though, that disabling + CPUs in non-uniform fashion will result in non-uniform topology and + may lead to sub-optimal system performance with SCHED_ULE, which is + a default scheduler. + 20110607: cpumask_t type is retired and cpuset_t is used in order to describe a mask of CPUs. +20110531: + Changes to ifconfig(8) for dynamic address family detection mandate + that you are running a kernel of 20110525 or later. Make sure to + follow the update procedure to boot a new kernel before installing + world. + 20110513: Support for sun4v architecture is officially dropped Modified: projects/largeSMP/contrib/groff/tmac/doc-common ============================================================================== --- projects/largeSMP/contrib/groff/tmac/doc-common Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/contrib/groff/tmac/doc-common Thu Jun 9 00:34:56 2011 (r222885) @@ -543,6 +543,7 @@ .ds doc-operating-system-FreeBSD-7.3 7.3 .ds doc-operating-system-FreeBSD-8.0 8.0 .ds doc-operating-system-FreeBSD-8.1 8.1 +.ds doc-operating-system-FreeBSD-8.2 8.2 . .ds doc-operating-system-Darwin-8.0.0 8.0.0 .ds doc-operating-system-Darwin-8.1.0 8.1.0 @@ -563,6 +564,17 @@ .ds doc-operating-system-Darwin-9.4.0 9.4.0 .ds doc-operating-system-Darwin-9.5.0 9.5.0 .ds doc-operating-system-Darwin-9.6.0 9.6.0 +.ds doc-operating-system-Darwin-9.7.0 9.7.0 +.ds doc-operating-system-Darwin-9.8.0 9.8.0 +.ds doc-operating-system-Darwin-10.6.0 10.6.0 +.ds doc-operating-system-Darwin-10.1.0 10.1.0 +.ds doc-operating-system-Darwin-10.2.0 10.2.0 +.ds doc-operating-system-Darwin-10.3.0 10.3.0 +.ds doc-operating-system-Darwin-10.4.0 10.4.0 +.ds doc-operating-system-Darwin-10.5.0 10.5.0 +.ds doc-operating-system-Darwin-10.6.0 10.6.0 +.ds doc-operating-system-Darwin-10.7.0 10.7.0 +.ds doc-operating-system-Darwin-11.0.0 11.0.0 . .ds doc-operating-system-DragonFly-1.0 1.0 .ds doc-operating-system-DragonFly-1.1 1.1 Modified: projects/largeSMP/contrib/groff/tmac/doc-syms ============================================================================== --- projects/largeSMP/contrib/groff/tmac/doc-syms Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/contrib/groff/tmac/doc-syms Thu Jun 9 00:34:56 2011 (r222885) @@ -617,6 +617,8 @@ .\" POSIX Part 1: System API .ds doc-str-St--p1003.1 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1 .as doc-str-St--p1003.1 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq]) +.ds doc-str-St--p1003.1b \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b +.as doc-str-St--p1003.1b " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq]) .ds doc-str-St--p1003.1-88 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-1988 .as doc-str-St--p1003.1-88 " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq]) .ds doc-str-St--p1003.1-90 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1990 @@ -754,6 +756,7 @@ . .ds doc-str-Lb-libarm ARM Architecture Library (libarm, \-larm) .ds doc-str-Lb-libarm32 ARM32 Architecture Library (libarm32, \-larm32) +.ds doc-str-Lb-libbsm Basic Security Module Library (libbsm, \-lbsm) .ds doc-str-Lb-libc Standard C\~Library (libc, \-lc) .ds doc-str-Lb-libcdk Curses Development Kit Library (libcdk, \-lcdk) .ds doc-str-Lb-libcompat Compatibility Library (libcompat, \-lcompat) @@ -779,6 +782,7 @@ .ds doc-str-Lb-libpthread \*[Px] \*[doc-str-Lb]Threads Library (libpthread, \-lpthread) .ds doc-str-Lb-libresolv DNS Resolver Library (libresolv, \-lresolv) .ds doc-str-Lb-librt \*[Px] \*[doc-str-Lb]Real-time Library (librt, \-lrt) +.ds doc-str-Lb-libSystem System Library (libSystem, \-lSystem) .ds doc-str-Lb-libtermcap Termcap Access Library (libtermcap, \-ltermcap) .ds doc-str-Lb-libusbhid USB Human Interface Devices Library (libusbhid, \-lusbhid) .ds doc-str-Lb-libutil System Utilities Library (libutil, \-lutil) Modified: projects/largeSMP/contrib/groff/tmac/doc.tmac ============================================================================== --- projects/largeSMP/contrib/groff/tmac/doc.tmac Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/contrib/groff/tmac/doc.tmac Thu Jun 9 00:34:56 2011 (r222885) @@ -1197,8 +1197,14 @@ . if !\n[doc-arg-limit] \ . ds doc-macro-name Aq . -. ds doc-quote-left < -. ds doc-quote-right > +. ie "\*[doc-macro-name]"An" \{\ +. ds doc-quote-left < +. ds doc-quote-right > +. \} +. el \{\ +. ds doc-quote-left \[la] +. ds doc-quote-right \[ra] +. \} . . doc-enclose-string \$@ .. @@ -1527,7 +1533,10 @@ . if !\n[doc-arg-limit] \ . ds doc-macro-name Ao . -. ds doc-quote-left \[la] +. ie "\*[doc-macro-name]"An" \ +. ds doc-quote-left < +. el \ +. ds doc-quote-left \[la] . . doc-enclose-open \$@ .. @@ -1546,7 +1555,10 @@ . if !\n[doc-arg-limit] \ . ds doc-macro-name Ac . -. ds doc-quote-right \[ra] +. ie "\*[doc-macro-name]"An" \ +. ds doc-quote-right > +. el \ +. ds doc-quote-right \[ra] . . doc-enclose-close \$@ .. Modified: projects/largeSMP/gnu/usr.bin/Makefile ============================================================================== --- projects/largeSMP/gnu/usr.bin/Makefile Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/gnu/usr.bin/Makefile Thu Jun 9 00:34:56 2011 (r222885) @@ -11,7 +11,7 @@ SUBDIR= ${_binutils} \ ${_dtc} \ ${_gdb} \ ${_gperf} \ - ${_grep} \ + grep \ ${_groff} \ patch \ ${_rcs} \ @@ -27,8 +27,6 @@ _groff= groff .endif .endif -_grep= grep - .if ${MK_CVS} != "no" _cvs= cvs .endif Modified: projects/largeSMP/gnu/usr.bin/groff/tmac/mdoc.local ============================================================================== --- projects/largeSMP/gnu/usr.bin/groff/tmac/mdoc.local Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/gnu/usr.bin/groff/tmac/mdoc.local Thu Jun 9 00:34:56 2011 (r222885) @@ -34,7 +34,6 @@ .\" FreeBSD .Lb values .ds doc-str-Lb-libarchive Streaming Archive Library (libarchive, \-larchive) .ds doc-str-Lb-libbluetooth Bluetooth User Library (libbluetooth, \-lbluetooth) -.ds doc-str-Lb-libbsm Basic Security Module User Library (libbsm, \-lbsm) .ds doc-str-Lb-libc_r Reentrant C\~Library (libc_r, \-lc_r) .ds doc-str-Lb-libcalendar Calendar Arithmetic Library (libcalendar, \-lcalendar) .ds doc-str-Lb-libcam Common Access Method User Library (libcam, \-lcam) @@ -75,7 +74,7 @@ . .\" FreeBSD releases not found in doc-common .ds doc-operating-system-FreeBSD-7.4 7.4 -.ds doc-operating-system-FreeBSD-8.2 8.2 +.ds doc-operating-system-FreeBSD-8.3 8.3 .ds doc-operating-system-FreeBSD-9.0 9.0 . .\" Definitions not (yet) in doc-syms Modified: projects/largeSMP/libexec/comsat/comsat.c ============================================================================== --- projects/largeSMP/libexec/comsat/comsat.c Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/libexec/comsat/comsat.c Thu Jun 9 00:34:56 2011 (r222885) @@ -180,7 +180,7 @@ notify(struct utmpx *utp, char file[], o dsyslog(LOG_DEBUG, "%s: wrong mode on %s", utp->ut_user, tty); return; } - dsyslog(LOG_DEBUG, "notify %s on %s\n", utp->ut_user, tty); + dsyslog(LOG_DEBUG, "notify %s on %s", utp->ut_user, tty); switch (fork()) { case -1: syslog(LOG_NOTICE, "fork failed (%m)"); Modified: projects/largeSMP/libexec/rtld-elf/Makefile ============================================================================== --- projects/largeSMP/libexec/rtld-elf/Makefile Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/libexec/rtld-elf/Makefile Thu Jun 9 00:34:56 2011 (r222885) @@ -17,6 +17,7 @@ RTLD_ARCH= ${MACHINE_CPUARCH} .endif CFLAGS+= -I${.CURDIR}/${RTLD_ARCH} -I${.CURDIR} .if ${MACHINE_ARCH} == "powerpc64" +CFLAGS+= -mcall-aixdesc LDFLAGS+= -nostdlib -e _rtld_start .else LDFLAGS+= -nostdlib -e .rtld_start Modified: projects/largeSMP/sbin/geom/class/part/geom_part.c ============================================================================== --- projects/largeSMP/sbin/geom/class/part/geom_part.c Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sbin/geom/class/part/geom_part.c Thu Jun 9 00:34:56 2011 (r222885) @@ -341,9 +341,10 @@ gpart_autofill_resize(struct gctl_req *r errc(EXIT_FAILURE, error, "Invalid alignment param"); if (alignment == 0) errx(EXIT_FAILURE, "Invalid alignment param"); + } else { lba = pp->lg_stripesize / pp->lg_sectorsize; if (lba > 0) - alignment = g_lcm(lba, alignment); + alignment = lba; } error = gctl_delete_param(req, "alignment"); if (error) @@ -491,13 +492,9 @@ gpart_autofill(struct gctl_req *req) if (has_size && has_start && !has_alignment) goto done; - /* - * If stripesize is not zero, then recalculate alignment value. - * Use LCM from stripesize and user specified alignment. - */ len = pp->lg_stripesize / pp->lg_sectorsize; - if (len > 0 ) - alignment = g_lcm(len, alignment); + if (len > 0 && !has_alignment) + alignment = len; /* Adjust parameters to stripeoffset */ offset = pp->lg_stripeoffset / pp->lg_sectorsize; Modified: projects/largeSMP/sbin/mount/mount.c ============================================================================== --- projects/largeSMP/sbin/mount/mount.c Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sbin/mount/mount.c Thu Jun 9 00:34:56 2011 (r222885) @@ -243,7 +243,7 @@ main(int argc, char *argv[]) const char *mntfromname, **vfslist, *vfstype; struct fstab *fs; struct statfs *mntbuf; - int all, ch, i, init_flags, late, mntsize, rval, have_fstab, ro; + int all, ch, i, init_flags, late, failok, mntsize, rval, have_fstab, ro; char *cp, *ep, *options; all = init_flags = late = 0; @@ -328,6 +328,10 @@ main(int argc, char *argv[]) continue; if (hasopt(fs->fs_mntops, "late") && !late) continue; + if (hasopt(fs->fs_mntops, "failok")) + failok = 1; + else + failok = 0; if (!(init_flags & MNT_UPDATE) && ismounted(fs, mntbuf, mntsize)) continue; @@ -335,7 +339,7 @@ main(int argc, char *argv[]) mntbuf->f_flags); if (mountfs(fs->fs_vfstype, fs->fs_spec, fs->fs_file, init_flags, options, - fs->fs_mntops)) + fs->fs_mntops) && !failok) rval = 1; } } else if (fstab_style) { @@ -717,6 +721,14 @@ mangle(char *options, struct cpa *a) * before mountd starts. */ continue; + } else if (strcmp(p, "failok") == 0) { + /* + * "failok" is used to prevent certain file + * systems from being causing the system to + * drop into single user mode in the boot + * cycle, and is not a real mount option. + */ + continue; } else if (strncmp(p, "mountprog", 9) == 0) { /* * "mountprog" is used to force the use of Modified: projects/largeSMP/sbin/rtsol/Makefile ============================================================================== --- projects/largeSMP/sbin/rtsol/Makefile Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sbin/rtsol/Makefile Thu Jun 9 00:34:56 2011 (r222885) @@ -19,7 +19,7 @@ SRCDIR= ${.CURDIR}/../../usr.sbin/rtsold .PATH: ${SRCDIR} PROG= rtsol -SRCS= rtsold.c rtsol.c if.c probe.c rtsock.c +SRCS= rtsold.c rtsol.c if.c probe.c dump.c rtsock.c NO_MAN= WARNS?= 3 Modified: projects/largeSMP/share/man/man5/fstab.5 ============================================================================== --- projects/largeSMP/share/man/man5/fstab.5 Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/share/man/man5/fstab.5 Thu Jun 9 00:34:56 2011 (r222885) @@ -32,7 +32,7 @@ .\" @(#)fstab.5 8.1 (Berkeley) 6/5/93 .\" $FreeBSD$ .\" -.Dd November 23, 2008 +.Dd June 7, 2011 .Dt FSTAB 5 .Os .Sh NAME @@ -70,7 +70,8 @@ remote file system to be mounted. The second field, .Pq Fa fs_file , describes the mount point for the file system. -For swap partitions, this field should be specified as ``none''. +For swap partitions, this field should be specified as +.Dq none . .Pp The third field, .Pq Fa fs_vfstype , @@ -125,7 +126,11 @@ sync,noatime,-m=644,-M=755,-u=foo,-g=bar in the option field of .Nm . .Pp -If the options ``userquota'' and/or ``groupquota'' are specified, +If the options +.Dq userquota +and/or +.Dq groupquota +are specified, the file system is automatically processed by the .Xr quotacheck 8 command, and user and/or group disk quotas are enabled with @@ -147,7 +152,18 @@ this location can be specified as: userquota=/var/quotas/tmp.user .Ed .Pp -If the option ``noauto'' is specified, the file system will not be automatically +If the option +.Dq failok +is specified, +the system will ignore any error which happens during the mount of that filesystem, +which would otherwise cause the system to drop into single user mode. +This option is implemented by the +.Xr mount 8 +command and will not be passed to the kernel. +.Pp +If the option +.Dq noauto +is specified, the file system will not be automatically mounted at system startup. Note that, for network file systems of third party types @@ -170,13 +186,19 @@ field (it is not deleted from the field). If .Fa fs_type -is ``rw'' or ``ro'' then the file system whose name is given in the +is +.Dq rw +or +.Dq ro +then the file system whose name is given in the .Fa fs_file field is normally mounted read-write or read-only on the specified special file. If .Fa fs_type -is ``sw'' then the special file is made available as a piece of swap +is +.Dq sw +then the special file is made available as a piece of swap space by the .Xr swapon 8 command at the end of the system reboot procedure. @@ -187,7 +209,9 @@ and are unused. If .Fa fs_type -is specified as ``xx'' the entry is ignored. +is specified as +.Dq xx +the entry is ignored. This is useful to show disk partitions which are currently unused. .Pp The fifth field, Modified: projects/largeSMP/sys/amd64/amd64/machdep.c ============================================================================== --- projects/largeSMP/sys/amd64/amd64/machdep.c Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sys/amd64/amd64/machdep.c Thu Jun 9 00:34:56 2011 (r222885) @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #include "opt_isa.h" #include "opt_kstack_pages.h" #include "opt_maxmem.h" +#include "opt_mp_watchdog.h" #include "opt_perfmon.h" #include "opt_sched.h" #include "opt_kdtrace.h" @@ -116,6 +117,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -734,9 +736,8 @@ cpu_idle(int busy) CTR2(KTR_SPARE2, "cpu_idle(%d) at %d", busy, curcpu); -#ifdef SMP - if (mp_grab_cpu_hlt()) - return; +#ifdef MP_WATCHDOG + ap_watchdog(PCPU_GET(cpuid)); #endif /* If we are busy - try to use fast methods. */ if (busy) { Modified: projects/largeSMP/sys/amd64/amd64/mp_machdep.c ============================================================================== --- projects/largeSMP/sys/amd64/amd64/mp_machdep.c Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sys/amd64/amd64/mp_machdep.c Thu Jun 9 00:34:56 2011 (r222885) @@ -29,7 +29,6 @@ __FBSDID("$FreeBSD$"); #include "opt_cpu.h" #include "opt_kstack_pages.h" -#include "opt_mp_watchdog.h" #include "opt_sched.h" #include "opt_smp.h" @@ -64,7 +63,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -160,11 +158,8 @@ static int start_all_aps(void); static int start_ap(int apic_id); static void release_aps(void *dummy); -static int hlt_logical_cpus; static u_int hyperthreading_cpus; /* logical cpus sharing L1 cache */ -static cpuset_t hyperthreading_cpus_mask; static int hyperthreading_allowed = 1; -static struct sysctl_ctx_list logical_cpu_clist; static u_int bootMP_size; static void @@ -748,11 +743,6 @@ init_secondary(void) if (cpu_logical > 1 && PCPU_GET(apic_id) % cpu_logical != 0) CPU_OR(&logical_cpus_mask, &tcpuset); - /* Determine if we are a hyperthread. */ - if (hyperthreading_cpus > 1 && - PCPU_GET(apic_id) % hyperthreading_cpus != 0) - CPU_OR(&hyperthreading_cpus_mask, &tcpuset); - /* Build our map of 'other' CPUs. */ tallcpus = all_cpus; CPU_NAND(&tallcpus, &tcpuset); @@ -843,7 +833,7 @@ assign_cpu_ids(void) if (hyperthreading_cpus > 1 && i % hyperthreading_cpus != 0) { cpu_info[i].cpu_hyperthread = 1; -#if defined(SCHED_ULE) + /* * Don't use HT CPU if it has been disabled by a * tunable. @@ -852,7 +842,6 @@ assign_cpu_ids(void) cpu_info[i].cpu_disabled = 1; continue; } -#endif } /* Don't use this CPU if it has been disabled by a tunable. */ @@ -862,6 +851,11 @@ assign_cpu_ids(void) } } + if (hyperthreading_allowed == 0 && hyperthreading_cpus > 1) { + hyperthreading_cpus = 0; + cpu_logical = 1; + } + /* * Assign CPU IDs to local APIC IDs and disable any CPUs * beyond MAXCPU. CPU 0 is always assigned to the BSP. @@ -1487,159 +1481,6 @@ release_aps(void *dummy __unused) } SYSINIT(start_aps, SI_SUB_SMP, SI_ORDER_FIRST, release_aps, NULL); -static int -sysctl_hlt_cpus(SYSCTL_HANDLER_ARGS) -{ - cpuset_t mask; - int error; - - mask = hlt_cpus_mask; - error = sysctl_handle_opaque(oidp, &mask, sizeof(mask), req); - if (error || !req->newptr) - return (error); - - if (!CPU_EMPTY(&logical_cpus_mask) && - CPU_SUBSET(&mask, &logical_cpus_mask)) - hlt_logical_cpus = 1; - else - hlt_logical_cpus = 0; - - if (! hyperthreading_allowed) - CPU_OR(&mask, &hyperthreading_cpus_mask); - - if (CPU_SUBSET(&mask, &all_cpus)) - CPU_CLR(0, &mask); - hlt_cpus_mask = mask; - return (error); -} -SYSCTL_PROC(_machdep, OID_AUTO, hlt_cpus, - CTLTYPE_STRUCT | CTLFLAG_RW | CTLFLAG_MPSAFE, 0, 0, sysctl_hlt_cpus, "S", - "Bitmap of CPUs to halt. 101 (binary) will halt CPUs 0 and 2."); - -static int -sysctl_hlt_logical_cpus(SYSCTL_HANDLER_ARGS) -{ - int disable, error; - - disable = hlt_logical_cpus; - error = sysctl_handle_int(oidp, &disable, 0, req); - if (error || !req->newptr) - return (error); - - if (disable) - CPU_OR(&hlt_cpus_mask, &logical_cpus_mask); - else - CPU_NAND(&hlt_cpus_mask, &logical_cpus_mask); - - if (! hyperthreading_allowed) - CPU_OR(&hlt_cpus_mask, &hyperthreading_cpus_mask); - - if (CPU_SUBSET(&hlt_cpus_mask, &all_cpus)) - CPU_CLR(0, &hlt_cpus_mask); - - hlt_logical_cpus = disable; - return (error); -} - -static int -sysctl_hyperthreading_allowed(SYSCTL_HANDLER_ARGS) -{ - int allowed, error; - - allowed = hyperthreading_allowed; - error = sysctl_handle_int(oidp, &allowed, 0, req); - if (error || !req->newptr) - return (error); - -#ifdef SCHED_ULE - /* - * SCHED_ULE doesn't allow enabling/disabling HT cores at - * run-time. - */ - if (allowed != hyperthreading_allowed) - return (ENOTSUP); - return (error); -#endif - - if (allowed) - CPU_NAND(&hlt_cpus_mask, &hyperthreading_cpus_mask); - else - CPU_OR(&hlt_cpus_mask, &hyperthreading_cpus_mask); - - if (!CPU_EMPTY(&logical_cpus_mask) && - CPU_SUBSET(&hlt_cpus_mask, &logical_cpus_mask)) - hlt_logical_cpus = 1; - else - hlt_logical_cpus = 0; - - if (CPU_SUBSET(&hlt_cpus_mask, &all_cpus)) - CPU_CLR(0, &hlt_cpus_mask); - - hyperthreading_allowed = allowed; - return (error); -} - -static void -cpu_hlt_setup(void *dummy __unused) -{ - - if (!CPU_EMPTY(&logical_cpus_mask)) { - TUNABLE_INT_FETCH("machdep.hlt_logical_cpus", - &hlt_logical_cpus); - sysctl_ctx_init(&logical_cpu_clist); - SYSCTL_ADD_PROC(&logical_cpu_clist, - SYSCTL_STATIC_CHILDREN(_machdep), OID_AUTO, - "hlt_logical_cpus", CTLTYPE_INT|CTLFLAG_RW, 0, 0, - sysctl_hlt_logical_cpus, "IU", ""); - SYSCTL_ADD_UINT(&logical_cpu_clist, - SYSCTL_STATIC_CHILDREN(_machdep), OID_AUTO, - "logical_cpus_mask", CTLTYPE_INT|CTLFLAG_RD, - &logical_cpus_mask, 0, ""); - - if (hlt_logical_cpus) - CPU_OR(&hlt_cpus_mask, &logical_cpus_mask); - - /* - * If necessary for security purposes, force - * hyperthreading off, regardless of the value - * of hlt_logical_cpus. - */ - if (!CPU_EMPTY(&hyperthreading_cpus_mask)) { - SYSCTL_ADD_PROC(&logical_cpu_clist, - SYSCTL_STATIC_CHILDREN(_machdep), OID_AUTO, - "hyperthreading_allowed", CTLTYPE_INT|CTLFLAG_RW, - 0, 0, sysctl_hyperthreading_allowed, "IU", ""); - if (! hyperthreading_allowed) - CPU_OR(&hlt_cpus_mask, - &hyperthreading_cpus_mask); - } - } -} -SYSINIT(cpu_hlt, SI_SUB_SMP, SI_ORDER_ANY, cpu_hlt_setup, NULL); - -int -mp_grab_cpu_hlt(void) -{ - cpuset_t mask; -#ifdef MP_WATCHDOG - u_int cpuid; -#endif - int retval; - - mask = PCPU_GET(cpumask); -#ifdef MP_WATCHDOG - cpuid = PCPU_GET(cpuid); - ap_watchdog(cpuid); -#endif - - retval = 0; - while (CPU_OVERLAP(&mask, &hlt_cpus_mask)) { - retval = 1; - __asm __volatile("sti; hlt" : : : "memory"); - } - return (retval); -} - #ifdef COUNT_IPIS /* * Setup interrupt counters for IPI handlers. Modified: projects/largeSMP/sys/amd64/include/smp.h ============================================================================== --- projects/largeSMP/sys/amd64/include/smp.h Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sys/amd64/include/smp.h Thu Jun 9 00:34:56 2011 (r222885) @@ -65,7 +65,6 @@ void ipi_cpu(int cpu, u_int ipi); int ipi_nmi_handler(void); void ipi_selected(cpuset_t cpus, u_int ipi); u_int mp_bootaddress(u_int); -int mp_grab_cpu_hlt(void); void smp_cache_flush(void); void smp_invlpg(vm_offset_t addr); void smp_masked_invlpg(cpuset_t mask, vm_offset_t addr); Modified: projects/largeSMP/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c ============================================================================== --- projects/largeSMP/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c Thu Jun 9 00:34:56 2011 (r222885) @@ -500,9 +500,11 @@ spa_history_log_version(spa_t *spa, hist utsname.nodename, utsname.release, utsname.version, utsname.machine); } +#if 0 cmn_err(CE_CONT, "!%s version %llu pool %s using %llu", event == LOG_POOL_IMPORT ? "imported" : event == LOG_POOL_CREATE ? "created" : "accessed", (u_longlong_t)current_vers, spa_name(spa), SPA_VERSION); #endif +#endif } Modified: projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c ============================================================================== --- projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c Thu Jun 9 00:34:56 2011 (r222885) @@ -21,9 +21,7 @@ #include "ah.h" #include "ah_internal.h" #include "ah_devid.h" -#ifdef AH_DEBUG #include "ah_desc.h" /* NB: for HAL_PHYERR* */ -#endif #include "ar5212/ar5212.h" #include "ar5212/ar5212reg.h" Modified: projects/largeSMP/sys/dev/bxe/bxe_debug.h ============================================================================== --- projects/largeSMP/sys/dev/bxe/bxe_debug.h Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sys/dev/bxe/bxe_debug.h Thu Jun 9 00:34:56 2011 (r222885) @@ -41,21 +41,22 @@ extern uint32_t bxe_debug; * Debugging macros and definitions. */ -#define BXE_CP_LOAD 0x00000001 -#define BXE_CP_SEND 0x00000002 -#define BXE_CP_RECV 0x00000004 -#define BXE_CP_INTR 0x00000008 -#define BXE_CP_UNLOAD 0x00000010 -#define BXE_CP_RESET 0x00000020 -#define BXE_CP_IOCTL 0x00000040 -#define BXE_CP_STATS 0x00000080 -#define BXE_CP_MISC 0x00000100 -#define BXE_CP_PHY 0x00000200 -#define BXE_CP_RAMROD 0x00000400 -#define BXE_CP_NVRAM 0x00000800 -#define BXE_CP_REGS 0x00001000 -#define BXE_CP_ALL 0x00FFFFFF -#define BXE_CP_MASK 0x00FFFFFF +#define BXE_CP_LOAD 0x00000001 +#define BXE_CP_SEND 0x00000002 +#define BXE_CP_RECV 0x00000004 +#define BXE_CP_INTR 0x00000008 +#define BXE_CP_UNLOAD 0x00000010 +#define BXE_CP_RESET 0x00000020 +#define BXE_CP_IOCTL 0x00000040 +#define BXE_CP_STATS 0x00000080 +#define BXE_CP_MISC 0x00000100 +#define BXE_CP_PHY 0x00000200 +#define BXE_CP_RAMROD 0x00000400 +#define BXE_CP_NVRAM 0x00000800 +#define BXE_CP_REGS 0x00001000 +#define BXE_CP_TPA 0x00002000 +#define BXE_CP_ALL 0x00FFFFFF +#define BXE_CP_MASK 0x00FFFFFF #define BXE_LEVEL_FATAL 0x00000000 #define BXE_LEVEL_WARN 0x01000000 @@ -144,12 +145,18 @@ extern uint32_t bxe_debug; #define BXE_EXTREME_REGS (BXE_CP_REGS | BXE_LEVEL_EXTREME) #define BXE_INSANE_REGS (BXE_CP_REGS | BXE_LEVEL_INSANE) -#define BXE_FATAL (BXE_CP_ALL | BXE_LEVEL_FATAL) -#define BXE_WARN (BXE_CP_ALL | BXE_LEVEL_WARN) -#define BXE_INFO (BXE_CP_ALL | BXE_LEVEL_INFO) -#define BXE_VERBOSE (BXE_CP_ALL | BXE_LEVEL_VERBOSE) -#define BXE_EXTREME (BXE_CP_ALL | BXE_LEVEL_EXTREME) -#define BXE_INSANE (BXE_CP_ALL | BXE_LEVEL_INSANE) +#define BXE_WARN_TPA (BXE_CP_TPA | BXE_LEVEL_WARN) +#define BXE_INFO_TPA (BXE_CP_TPA | BXE_LEVEL_INFO) +#define BXE_VERBOSE_TPA (BXE_CP_TPA | BXE_LEVEL_VERBOSE) +#define BXE_EXTREME_TPA (BXE_CP_TPA | BXE_LEVEL_EXTREME) +#define BXE_INSANE_TPA (BXE_CP_TPA | BXE_LEVEL_INSANE) + +#define BXE_FATAL (BXE_CP_ALL | BXE_LEVEL_FATAL) +#define BXE_WARN (BXE_CP_ALL | BXE_LEVEL_WARN) +#define BXE_INFO (BXE_CP_ALL | BXE_LEVEL_INFO) +#define BXE_VERBOSE (BXE_CP_ALL | BXE_LEVEL_VERBOSE) +#define BXE_EXTREME (BXE_CP_ALL | BXE_LEVEL_EXTREME) +#define BXE_INSANE (BXE_CP_ALL | BXE_LEVEL_INSANE) #define BXE_CODE_PATH(cp) ((cp & BXE_CP_MASK) & bxe_debug) #define BXE_MSG_LEVEL(lv) ((lv & BXE_LEVEL_MASK) <= (bxe_debug & BXE_LEVEL_MASK)) Modified: projects/largeSMP/sys/dev/bxe/bxe_link.c ============================================================================== --- projects/largeSMP/sys/dev/bxe/bxe_link.c Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sys/dev/bxe/bxe_link.c Thu Jun 9 00:34:56 2011 (r222885) @@ -1168,15 +1168,17 @@ bxe_set_parallel_detection(struct link_p control2 |= MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN; else control2 &= ~MDIO_SERDES_DIGITAL_A_1000X_CONTROL2_PRL_DT_EN; - DBPRINT(sc, 1, "params->speed_cap_mask = 0x%x, control2 = 0x%x\n", - params->speed_cap_mask, control2); + + DBPRINT(sc, BXE_VERBOSE_PHY, "%s(): params->speed_cap_mask = 0x%x, " + "control2 = 0x%x\n", __FUNCTION__, params->speed_cap_mask, control2); + CL45_WR_OVER_CL22(sc, params->port, params->phy_addr, MDIO_REG_BANK_SERDES_DIGITAL, MDIO_SERDES_DIGITAL_A_1000X_CONTROL2, control2); if ((phy_flags & PHY_XGXS_FLAG) && (params->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_10G)) { - DBPRINT(sc, BXE_INFO, "XGXS\n"); + DBPRINT(sc, BXE_VERBOSE_PHY, "%s(): XGXS\n", __FUNCTION__); CL45_WR_OVER_CL22(sc, params->port, params->phy_addr, MDIO_REG_BANK_10G_PARALLEL_DETECT, @@ -1688,7 +1690,9 @@ bxe_flow_ctrl_resolve(struct link_params } bxe_pause_resolve(vars, pause_result); } - DBPRINT(sc, BXE_INFO, "flow_ctrl 0x%x\n", vars->flow_ctrl); + + DBPRINT(sc, BXE_VERBOSE_PHY, "%s(): flow_ctrl 0x%x\n", + __FUNCTION__, vars->flow_ctrl); } static void @@ -1698,13 +1702,16 @@ bxe_check_fallback_to_cl37(struct link_p uint16_t rx_status, ustat_val, cl37_fsm_recieved; sc = params->sc; - DBPRINT(sc, BXE_INFO, "bxe_check_fallback_to_cl37\n"); + + DBPRINT(sc, BXE_VERBOSE_PHY, "%s(): IEEE 802.3 Clause 37 Fallback\n", + __FUNCTION__); + CL45_RD_OVER_CL22(sc, params->port, params->phy_addr, MDIO_REG_BANK_RX0, MDIO_RX0_RX_STATUS, &rx_status); if ((rx_status & MDIO_RX0_RX_STATUS_SIGDET) != (MDIO_RX0_RX_STATUS_SIGDET)) { DBPRINT(sc, BXE_VERBOSE_PHY, - "Signal is not detected. Restoring CL73." + "No signal detected. Restoring CL73." "rx_status(0x80b0) = 0x%x\n", rx_status); CL45_WR_OVER_CL22(sc, params->port, params->phy_addr, MDIO_REG_BANK_CL73_IEEEB0, MDIO_CL73_IEEEB0_CL73_AN_CONTROL, @@ -1738,7 +1745,9 @@ bxe_check_fallback_to_cl37(struct link_p CL45_WR_OVER_CL22(sc, params->port, params->phy_addr, MDIO_REG_BANK_CL73_IEEEB0, MDIO_CL73_IEEEB0_CL73_AN_CONTROL, 0); bxe_restart_autoneg(params, 0); - DBPRINT(sc, BXE_INFO, "Disabling CL73, and restarting CL37 autoneg\n"); + + DBPRINT(sc, BXE_INFO, "%s(): Disabling CL73 and restarting CL37 " + "autoneg\n", __FUNCTION__); } static void @@ -3391,7 +3400,8 @@ bxe_init_internal_phy(struct link_params ((XGXS_EXT_PHY_TYPE(params->ext_phy_config) == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) && params->loopback_mode == LOOPBACK_EXT)) { - DBPRINT(sc, BXE_INFO, "not SGMII, no AN\n"); + DBPRINT(sc, BXE_VERBOSE_PHY, "%s(): Not SGMII, no AN\n", + __FUNCTION__); /* Disable autoneg. */ bxe_set_autoneg(params, vars, 0); @@ -5338,9 +5348,6 @@ bxe_set_led(struct link_params *params, emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); - DBPRINT(sc, BXE_INFO, "bxe_set_led: port %x, mode %d\n", port, mode); - DBPRINT(sc, BXE_VERBOSE_PHY, "speed 0x%x, hw_led_mode 0x%x\n", speed, - hw_led_mode); switch (mode) { case LED_MODE_OFF: REG_WR(sc, NIG_REG_LED_10G_P0 + port * 4, 0); @@ -5382,7 +5389,7 @@ bxe_set_led(struct link_params *params, default: rc = -EINVAL; DBPRINT(sc, BXE_VERBOSE_PHY, - "bxe_set_led: Invalid led mode %d\n", mode); + "%s(): Invalid led mode (%d)!\n", __FUNCTION__, mode); break; } return (rc); @@ -5635,7 +5642,10 @@ bxe_link_reset(struct link_params *param ext_phy_type = XGXS_EXT_PHY_TYPE(ext_phy_config); val = REG_RD(sc, params->shmem_base + offsetof(struct shmem_region, dev_info.port_feature_config[params->port].config)); - DBPRINT(sc, BXE_INFO, "Resetting the link of port %d\n", port); + + DBPRINT(sc, BXE_INFO, "%s(): Resetting port %d link.\n", + __FUNCTION__, port); + /* Disable attentions. */ vars->link_status = 0; bxe_update_mng(params, vars->link_status); Modified: projects/largeSMP/sys/dev/bxe/if_bxe.c ============================================================================== --- projects/largeSMP/sys/dev/bxe/if_bxe.c Wed Jun 8 23:44:59 2011 (r222884) +++ projects/largeSMP/sys/dev/bxe/if_bxe.c Thu Jun 9 00:34:56 2011 (r222885) @@ -70,7 +70,6 @@ __FBSDID("$FreeBSD$"); #ifdef BXE_DEBUG uint32_t bxe_debug = BXE_WARN; - /* 0 = Never */ /* 1 = 1 in 2,147,483,648 */ /* 256 = 1 in 8,388,608 */ @@ -84,12 +83,9 @@ uint32_t bxe_debug = BXE_WARN; /* Controls how often to simulate an mbuf allocation failure. */ int bxe_debug_mbuf_allocation_failure = 0; -/* Controls how often to simulate a DMA mapping failure. */ +/* Controls how often to simulate a DMA mapping failure. */ int bxe_debug_dma_map_addr_failure = 0; -/* Controls how often to received frame error. */ -int bxe_debug_received_frame_error = 0; - /* Controls how often to simulate a bootcode failure. */ int bxe_debug_bootcode_running_failure = 0; #endif @@ -103,7 +99,7 @@ int bxe_debug_bootcode_running_failure = /* BXE Build Time Options */ /* #define BXE_NVRAM_WRITE 1 */ -#define USE_DMAE 1 +#define BXE_USE_DMAE 1 /* * PCI Device ID Table @@ -132,14 +128,17 @@ static int bxe_attach(device_t); static int bxe_detach(device_t); static int bxe_shutdown(device_t); -static void bxe_set_tunables(struct bxe_softc *); +/* + * Driver local functions. + */ +static void bxe_tunables_set(struct bxe_softc *); static void bxe_print_adapter_info(struct bxe_softc *); static void bxe_probe_pci_caps(struct bxe_softc *); static void bxe_link_settings_supported(struct bxe_softc *, uint32_t); static void bxe_link_settings_requested(struct bxe_softc *); -static int bxe_get_function_hwinfo(struct bxe_softc *); -static void bxe_get_port_hwinfo(struct bxe_softc *); -static void bxe_get_common_hwinfo(struct bxe_softc *); +static int bxe_hwinfo_function_get(struct bxe_softc *); +static int bxe_hwinfo_port_get(struct bxe_softc *); +static int bxe_hwinfo_common_get(struct bxe_softc *); static void bxe_undi_unload(struct bxe_softc *); static int bxe_setup_leading(struct bxe_softc *); static int bxe_stop_leading(struct bxe_softc *); @@ -241,8 +240,8 @@ static int bxe_tx_encap(struct bxe_fast static void bxe_tx_start(struct ifnet *); static void bxe_tx_start_locked(struct ifnet *, struct bxe_fastpath *); static int bxe_tx_mq_start(struct ifnet *, struct mbuf *); -static int bxe_tx_mq_start_locked(struct ifnet *, struct bxe_fastpath *, - struct mbuf *); +static int bxe_tx_mq_start_locked(struct ifnet *, + struct bxe_fastpath *, struct mbuf *); static void bxe_mq_flush(struct ifnet *ifp); static int bxe_ioctl(struct ifnet *, u_long, caddr_t); static __inline int bxe_has_rx_work(struct bxe_fastpath *); @@ -254,33 +253,34 @@ static void bxe_intr_sp(void *); static void bxe_task_fp(void *, int); static void bxe_intr_fp(void *); static void bxe_zero_sb(struct bxe_softc *, int); -static void bxe_init_sb(struct bxe_softc *, struct host_status_block *, - bus_addr_t, int); +static void bxe_init_sb(struct bxe_softc *, + struct host_status_block *, bus_addr_t, int); static void bxe_zero_def_sb(struct bxe_softc *); -static void bxe_init_def_sb(struct bxe_softc *, struct host_def_status_block *, - bus_addr_t, int); +static void bxe_init_def_sb(struct bxe_softc *, + struct host_def_status_block *, bus_addr_t, int); static void bxe_update_coalesce(struct bxe_softc *); static __inline void bxe_update_rx_prod(struct bxe_softc *, - struct bxe_fastpath *, uint16_t, uint16_t, uint16_t); + struct bxe_fastpath *, uint16_t, uint16_t, uint16_t); static void bxe_clear_sge_mask_next_elems(struct bxe_fastpath *); static __inline void bxe_init_sge_ring_bit_mask(struct bxe_fastpath *); -static __inline void bxe_free_tpa_pool(struct bxe_fastpath *, int); -static __inline void bxe_free_rx_sge(struct bxe_softc *, struct bxe_fastpath *, - uint16_t); -static __inline void bxe_free_rx_sge_range(struct bxe_softc *, - struct bxe_fastpath *, int); -static struct mbuf *bxe_alloc_mbuf(struct bxe_fastpath *, int); -static int bxe_map_mbuf(struct bxe_fastpath *, struct mbuf *, bus_dma_tag_t, - bus_dmamap_t, bus_dma_segment_t *); -static struct mbuf *bxe_alloc_tpa_mbuf(struct bxe_fastpath *, int, int); -static void bxe_alloc_mutexes(struct bxe_softc *); -static void bxe_free_mutexes(struct bxe_softc *); -static int bxe_alloc_rx_sge(struct bxe_softc *, struct bxe_fastpath *, - uint16_t); -static void bxe_init_rx_chains(struct bxe_softc *); +static int bxe_alloc_tpa_mbuf(struct bxe_fastpath *, int); +static int bxe_fill_tpa_pool(struct bxe_fastpath *); +static void bxe_free_tpa_pool(struct bxe_fastpath *); + +static int bxe_alloc_rx_sge_mbuf(struct bxe_fastpath *, uint16_t); +static int bxe_fill_sg_chain(struct bxe_fastpath *); +static void bxe_free_sg_chain(struct bxe_fastpath *); + +static int bxe_alloc_rx_bd_mbuf(struct bxe_fastpath *, uint16_t); +static int bxe_fill_rx_bd_chain(struct bxe_fastpath *); +static void bxe_free_rx_bd_chain(struct bxe_fastpath *); + +static void bxe_mutexes_alloc(struct bxe_softc *); +static void bxe_mutexes_free(struct bxe_softc *); +static void bxe_clear_rx_chains(struct bxe_softc *); +static int bxe_init_rx_chains(struct bxe_softc *); +static void bxe_clear_tx_chains(struct bxe_softc *); static void bxe_init_tx_chains(struct bxe_softc *); -static void bxe_free_rx_chains(struct bxe_softc *); -static void bxe_free_tx_chains(struct bxe_softc *); static void bxe_init_sp_ring(struct bxe_softc *); static void bxe_init_context(struct bxe_softc *); static void bxe_init_ind_table(struct bxe_softc *); @@ -291,8 +291,7 @@ static void bxe_init_internal_port(struc static void bxe_init_internal_func(struct bxe_softc *); static void bxe_init_internal(struct bxe_softc *, uint32_t); -static void bxe_init_nic(struct bxe_softc *, uint32_t); -static int bxe_gunzip_init(struct bxe_softc *); +static int bxe_init_nic(struct bxe_softc *, uint32_t); static void bxe_lb_pckt(struct bxe_softc *); static int bxe_int_mem_test(struct bxe_softc *); static void bxe_enable_blocks_attention (struct bxe_softc *); @@ -304,13 +303,9 @@ static void bxe_ilt_wr(struct bxe_softc static int bxe_init_func(struct bxe_softc *); static int bxe_init_hw(struct bxe_softc *, uint32_t); static int bxe_fw_command(struct bxe_softc *, uint32_t); -static void bxe_dma_free(struct bxe_softc *); -static void bxe_dmamem_free(struct bxe_softc *, bus_dma_tag_t, caddr_t, - bus_dmamap_t); +static void bxe_host_structures_free(struct bxe_softc *); static void bxe_dma_map_addr(void *, bus_dma_segment_t *, int, int); -static int bxe_dma_alloc(device_t); -static int bxe_dmamem_alloc(struct bxe_softc *, bus_dma_tag_t, bus_dmamap_t, - void *, uint32_t, bus_addr_t *); +static int bxe_host_structures_alloc(device_t); static void bxe_set_mac_addr_e1(struct bxe_softc *, int); static void bxe_set_mac_addr_e1h(struct bxe_softc *, int); static void bxe_set_rx_mode(struct bxe_softc *); @@ -330,15 +325,12 @@ static void bxe_tpa_stop(struct bxe_soft int, int, union eth_rx_cqe *, uint16_t); static void bxe_rxeof(struct bxe_fastpath *); static void bxe_txeof(struct bxe_fastpath *); -static int bxe_get_buf(struct bxe_fastpath *, struct mbuf *, uint16_t); static int bxe_watchdog(struct bxe_fastpath *fp); -static int bxe_change_mtu(struct bxe_softc *, int); static void bxe_tick(void *); static void bxe_add_sysctls(struct bxe_softc *); -static void bxe_gunzip_end(struct bxe_softc *); -static void bxe_write_dmae_phys_len(struct bxe_softc *, bus_addr_t, uint32_t, - uint32_t); +static void bxe_write_dmae_phys_len(struct bxe_softc *, + bus_addr_t, uint32_t, uint32_t); void bxe_write_dmae(struct bxe_softc *, bus_addr_t, uint32_t, uint32_t); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Thu Jun 9 21:29:16 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 55491106566B; Thu, 9 Jun 2011 21:29:16 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2D23D8FC1D; Thu, 9 Jun 2011 21:29:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p59LTGx3095347; Thu, 9 Jun 2011 21:29:16 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p59LTGpP095346; Thu, 9 Jun 2011 21:29:16 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106092129.p59LTGpP095346@svn.freebsd.org> From: Marcel Moolenaar Date: Thu, 9 Jun 2011 21:29:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222901 - projects/llvm-ia64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jun 2011 21:29:16 -0000 Author: marcel Date: Thu Jun 9 21:29:15 2011 New Revision: 222901 URL: http://svn.freebsd.org/changeset/base/222901 Log: Bootstrap the llvm-ia64 branch. Added: - copied from r222900, head/ Directory Properties: projects/llvm-ia64/ (props changed) From owner-svn-src-projects@FreeBSD.ORG Thu Jun 9 22:17:27 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CD0B6106564A; Thu, 9 Jun 2011 22:17:27 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B9E238FC12; Thu, 9 Jun 2011 22:17:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p59MHRjC096843; Thu, 9 Jun 2011 22:17:27 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p59MHRsf096814; Thu, 9 Jun 2011 22:17:27 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106092217.p59MHRsf096814@svn.freebsd.org> From: Marcel Moolenaar Date: Thu, 9 Jun 2011 22:17:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222902 - in projects/llvm-ia64: contrib/llvm/include/llvm/ADT contrib/llvm/lib/Support contrib/llvm/lib/Target/IA64 contrib/llvm/lib/Target/IA64/TargetInfo lib/clang lib/clang/include/... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jun 2011 22:17:27 -0000 Author: marcel Date: Thu Jun 9 22:17:27 2011 New Revision: 222902 URL: http://svn.freebsd.org/changeset/base/222902 Log: Add a skeletal IA64 backend. Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/TargetInfo/ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/TargetInfo/IA64TargetInfo.cpp projects/llvm-ia64/lib/clang/libllvmia64codegen/ projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile projects/llvm-ia64/lib/clang/libllvmia64info/ projects/llvm-ia64/lib/clang/libllvmia64info/Makefile Modified: projects/llvm-ia64/contrib/llvm/include/llvm/ADT/Triple.h projects/llvm-ia64/contrib/llvm/lib/Support/Triple.cpp projects/llvm-ia64/lib/clang/Makefile projects/llvm-ia64/lib/clang/clang.build.mk projects/llvm-ia64/lib/clang/include/llvm/Config/Targets.def projects/llvm-ia64/usr.bin/clang/clang/Makefile Modified: projects/llvm-ia64/contrib/llvm/include/llvm/ADT/Triple.h ============================================================================== --- projects/llvm-ia64/contrib/llvm/include/llvm/ADT/Triple.h Thu Jun 9 21:29:15 2011 (r222901) +++ projects/llvm-ia64/contrib/llvm/include/llvm/ADT/Triple.h Thu Jun 9 22:17:27 2011 (r222902) @@ -50,6 +50,7 @@ public: arm, // ARM; arm, armv.*, xscale bfin, // Blackfin: bfin cellspu, // CellSPU: spu, cellspu + ia64, // IA-64: ia64 mips, // MIPS: mips, mipsallegrex mipsel, // MIPSEL: mipsel, mipsallegrexel, psp msp430, // MSP430: msp430 Modified: projects/llvm-ia64/contrib/llvm/lib/Support/Triple.cpp ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Support/Triple.cpp Thu Jun 9 21:29:15 2011 (r222901) +++ projects/llvm-ia64/contrib/llvm/lib/Support/Triple.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -27,6 +27,7 @@ const char *Triple::getArchTypeName(Arch case arm: return "arm"; case bfin: return "bfin"; case cellspu: return "cellspu"; + case ia64: return "ia64"; case mips: return "mips"; case mipsel: return "mipsel"; case msp430: return "msp430"; @@ -62,6 +63,8 @@ const char *Triple::getArchTypePrefix(Ar case cellspu: return "spu"; + case ia64: return "ia64"; + case ppc64: case ppc: return "ppc"; @@ -139,6 +142,8 @@ Triple::ArchType Triple::getArchTypeForL return bfin; if (Name == "cellspu") return cellspu; + if (Name == "ia64") + return ia64; if (Name == "mips") return mips; if (Name == "mipsel") @@ -279,6 +284,8 @@ Triple::ArchType Triple::ParseArch(Strin return alpha; else if (ArchName == "spu" || ArchName == "cellspu") return cellspu; + else if (ArchName == "ia64") + return ia64; else if (ArchName == "msp430") return msp430; else if (ArchName == "mips" || ArchName == "mipsallegrex") Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.h Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,23 @@ +#ifndef LLVM_TARGET_IA64_H +#define LLVM_TARGET_IA64_H + +#include "llvm/Target/TargetMachine.h" + +namespace llvm { + + class FunctionPass; + class IA64TargetMachine; + + FunctionPass *createIA64ISelDag(IA64TargetMachine &TM, + CodeGenOpt::Level OptLevel); + + FunctionPass *createIA64BundleSelectionPass(); + + extern Target TheIA64Target; + +} // namespace llvm + +#include "IA64GenRegisterNames.inc" +#include "IA64GenInstrNames.inc" + +#endif // LLVM_TARGET_IA64_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,55 @@ +include "llvm/Target/Target.td" + +// +// Subtargets +// +class IA64Impl features> : + Processor; + +def : IA64Impl<"merced", []>; +def : IA64Impl<"mckinley", []>; + +// +// Registers +// +class IA64Register : Register { + let Namespace = "IA64"; +} + +def F0 : IA64Register<"f0">; +def F1 : IA64Register<"f1">; + +def P0 : IA64Register<"p0">; + +def R0 : IA64Register<"r0">; + +// +// Register classes +// +class IA64RegisterClass types, int align, list regs> + : RegisterClass<"IA64", types, align, regs> { +} + +def FloatingPoint : IA64RegisterClass<[f128], 128, [F0, F1]>; +def General : IA64RegisterClass<[i64], 64, [R0]>; +def Predicate : IA64RegisterClass<[i1], 0, [P0]>; + +// +// Instructions +// +class IA64Instruction : Instruction { + let Namespace = "IA64"; + let OutOperandList = outs; + let InOperandList = ins; +} + +def NOP : IA64Instruction<(outs), (ins)>; + +def IA64InstrInfo : InstrInfo; + +// +// Target for the Itanium Processor Family (IPF) +// +def IA64 : Target { + let InstructionSet = IA64InstrInfo; +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,56 @@ +#include "IA64.h" + +#include "llvm/Module.h" +#include "llvm/Type.h" +#include "llvm/CodeGen/AsmPrinter.h" +#include "llvm/CodeGen/DwarfWriter.h" +#include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/MC/MCAsmInfo.h" +#include "llvm/Target/TargetRegistry.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/FormattedStream.h" +#include "llvm/ADT/Statistic.h" + +using namespace llvm; + +namespace { + class IA64AsmPrinter : public AsmPrinter { + std::set ExternalFunctionNames, ExternalObjectNames; + public: + explicit IA64AsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, + const MCAsmInfo *T, bool V) : + AsmPrinter(O, TM, T, V) {} + + virtual const char *getPassName() const { + return "IA64 Assembly Printer"; + } + + static const char *getRegisterName(unsigned RegNo); + + void PrintGlobalVariable(const GlobalVariable *GVar); + + void printInstruction(const MachineInstr *MI); + bool runOnMachineFunction(MachineFunction &F); + }; +} // end of anonymous namespace + +#include "IA64GenAsmWriter.inc" + +void +IA64AsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) +{ + llvm_unreachable(__func__); +} + +bool +IA64AsmPrinter::runOnMachineFunction(MachineFunction &MF) +{ + llvm_unreachable(__func__); +} + + +extern "C" void +LLVMInitializeIA64AsmPrinter() +{ + RegisterAsmPrinter X(TheIA64Target); +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,33 @@ +#include "IA64FrameLowering.h" +#include "IA64InstrInfo.h" + +#include "llvm/Function.h" +#include "llvm/CodeGen/MachineFrameInfo.h" +#include "llvm/CodeGen/MachineFunction.h" +#include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/CodeGen/MachineModuleInfo.h" +#include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/Target/TargetData.h" +#include "llvm/Target/TargetOptions.h" +#include "llvm/Support/CommandLine.h" + +using namespace llvm; + +void +IA64FrameLowering::emitPrologue(MachineFunction &MF) const +{ + llvm_unreachable(__func__); +} + +void +IA64FrameLowering::emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) + const +{ + llvm_unreachable(__func__); +} + +bool +IA64FrameLowering::hasFP(const MachineFunction &MF) const +{ + llvm_unreachable(__func__); +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,31 @@ +#ifndef LLVM_TARGET_IA64_FRAMELOWERING_H +#define LLVM_TARGET_IA64_FRAMELOWERING_H + +#include "IA64.h" +#include "IA64Subtarget.h" +#include "llvm/Target/TargetFrameLowering.h" + +namespace llvm { + + class IA64Subtarget; + + class IA64FrameLowering : public TargetFrameLowering { + protected: + const IA64Subtarget &STI; + + public: + explicit IA64FrameLowering(const IA64Subtarget &sti) : + TargetFrameLowering(TargetFrameLowering::StackGrowsDown, 2, -2), + STI(sti) + { + } + + void emitPrologue(MachineFunction &MF) const; + void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; + + bool hasFP(const MachineFunction &MF) const; + }; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_FRAMELOWERING_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,22 @@ +#include "IA64.h" +#include "IA64InstrInfo.h" +#include "IA64TargetMachine.h" + +#include "llvm/Function.h" +#include "llvm/CodeGen/MachineFrameInfo.h" +#include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/PseudoSourceValue.h" +#include "llvm/Support/ErrorHandling.h" + +#include "IA64GenInstrInfo.inc" + +using namespace llvm; + +IA64InstrInfo::IA64InstrInfo(IA64TargetMachine &tm) : + TargetInstrInfoImpl(IA64Insts, array_lengthof(IA64Insts)), + RI(tm, *this), + TM(tm) +{ + // nothing to do +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64InstrInfo.h Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,29 @@ +#ifndef LLVM_TARGET_IA64_INSTRINFO_H +#define LLVM_TARGET_IA64_INSTRINFO_H + +#include "IA64RegisterInfo.h" + +#include "llvm/Target/TargetInstrInfo.h" + +namespace llvm { + + class IA64TargetMachine; + + class IA64InstrInfo : public TargetInstrInfoImpl { + const IA64RegisterInfo RI; + IA64TargetMachine &TM; + + public: + explicit IA64InstrInfo(IA64TargetMachine &TM); + + /// getRegisterInfo - TargetInstrInfo is a superset of MRegister info. As + /// such, whenever a client has an instance of instruction info, it should + /// always be able to get register info as well (through this method). + /// + virtual const TargetRegisterInfo &getRegisterInfo() const { return RI; } + + }; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_INSTRINFO_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,14 @@ +#include "IA64MCAsmInfo.h" + +using namespace llvm; + +IA64MCAsmInfo::IA64MCAsmInfo(const Target &T, StringRef TT) { + AsciiDirective = "\tstring\t"; + AscizDirective = "\tstringz\t"; + CommentString = "//"; + Data8bitsDirective = "\tdata1\t"; + Data16bitsDirective = "\tdata2\t"; + Data32bitsDirective = "\tdata4\t"; + Data64bitsDirective = "\tdata8\t"; + ZeroDirective = NULL; +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCAsmInfo.h Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,16 @@ +#ifndef LLVM_TARGET_IA64_MCASMINFO_H +#define LLVM_TARGET_IA64_MCASMINFO_H + +#include "llvm/ADT/StringRef.h" +#include "llvm/MC/MCAsmInfo.h" + +namespace llvm { + class Target; + + struct IA64MCAsmInfo : public MCAsmInfo { + explicit IA64MCAsmInfo(const Target &T, StringRef TT); + }; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_MCASMINFO_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,63 @@ +#include "IA64.h" +#include "IA64RegisterInfo.h" +#include "IA64TargetMachine.h" + +#include "llvm/Function.h" +#include "llvm/CodeGen/MachineFrameInfo.h" +#include "llvm/CodeGen/MachineFunction.h" +#include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/Target/TargetMachine.h" +#include "llvm/Target/TargetOptions.h" +#include "llvm/ADT/BitVector.h" +#include "llvm/Support/ErrorHandling.h" + +using namespace llvm; + +// FIXME: Provide proper call frame setup / destroy opcodes. +IA64RegisterInfo::IA64RegisterInfo(IA64TargetMachine &tm, + const TargetInstrInfo &tii) : + IA64GenRegisterInfo(IA64::NOP, IA64::NOP), + TM(tm), + TII(tii) +{ + StackAlign = TM.getFrameLowering()->getStackAlignment(); +} + +const unsigned * +IA64RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const +{ + llvm_unreachable(__func__); +} + +BitVector +IA64RegisterInfo::getReservedRegs(const MachineFunction &MF) const +{ + llvm_unreachable(__func__); +} + +void +IA64RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj, + RegScavenger *RS) const +{ + llvm_unreachable(__func__); +} + +int +IA64RegisterInfo::getDwarfRegNum(unsigned RegNum, bool isEH) const +{ + return IA64GenRegisterInfo::getDwarfRegNumFull(RegNum, 0); +} + +unsigned +IA64RegisterInfo::getFrameRegister(const MachineFunction &MF) const +{ + llvm_unreachable(__func__); +} + +unsigned +IA64RegisterInfo::getRARegister() const +{ + llvm_unreachable(__func__); +} + +#include "IA64GenRegisterInfo.inc" Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.h Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,40 @@ +#ifndef LLVM_TARGET_IA64_REGISTERINFO_H +#define LLVM_TARGET_IA64_REGISTERINFO_H + +#include "llvm/Target/TargetRegisterInfo.h" + +#include "IA64GenRegisterInfo.h.inc" + +namespace llvm { + + class TargetInstrInfo; + class IA64TargetMachine; + + struct IA64RegisterInfo : public IA64GenRegisterInfo { + private: + IA64TargetMachine &TM; + const TargetInstrInfo &TII; + + /// StackAlign - Default stack alignment. + /// + unsigned StackAlign; + + public: + IA64RegisterInfo(IA64TargetMachine &tm, const TargetInstrInfo &tii); + + const unsigned *getCalleeSavedRegs(const MachineFunction *MF = 0) const; + + BitVector getReservedRegs(const MachineFunction &MF) const; + + void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj, + RegScavenger *RS = NULL) const; + + int getDwarfRegNum(unsigned RegNum, bool isEH) const; + + unsigned getFrameRegister(const MachineFunction &MF) const; + unsigned getRARegister() const; + }; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_REGISTERINFO_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,12 @@ +#include "IA64TargetMachine.h" + +using namespace llvm; + +IA64SelectionDAGInfo::IA64SelectionDAGInfo(const IA64TargetMachine &TM) : + TargetSelectionDAGInfo(TM) +{ +} + +IA64SelectionDAGInfo::~IA64SelectionDAGInfo() +{ +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64SelectionDAGInfo.h Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,18 @@ +#ifndef LLVM_TARGET_IA64_SELECTIONDAGINFO_H +#define LLVM_TARGET_IA64_SELECTIONDAGINFO_H + +#include "llvm/Target/TargetSelectionDAGInfo.h" + +namespace llvm { + + class IA64TargetMachine; + + class IA64SelectionDAGInfo : public TargetSelectionDAGInfo { + public: + explicit IA64SelectionDAGInfo(const IA64TargetMachine &TM); + ~IA64SelectionDAGInfo(); +}; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_SELECTIONDAGINFO_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,13 @@ +#include "IA64.h" +#include "IA64Subtarget.h" + +#include "IA64GenSubtarget.inc" + +using namespace llvm; + +IA64Subtarget::IA64Subtarget(const std::string &TT, const std::string &FS) { + std::string CPU = "generic"; + + // Parse features string. + ParseSubtargetFeatures(FS, CPU); +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,26 @@ +#ifndef LLVM_TARGET_IA64_SUBTARGET_H +#define LLVM_TARGET_IA64_SUBTARGET_H + +#include "llvm/Target/TargetSubtarget.h" + +#include + +namespace llvm { + + class IA64Subtarget : public TargetSubtarget { + bool ExtendedInsts; + + public: + /// This constructor initializes the data members to match that + /// of the specified triple. + IA64Subtarget(const std::string &TT, const std::string &FS); + + /// ParseSubtargetFeatures - Parses features string setting specified + /// subtarget options. Definition of function is auto generated by tblgen. + std::string ParseSubtargetFeatures(const std::string &FS, + const std::string &CPU); + }; + +} // End llvm namespace + +#endif // LLVM_TARGET_IA64_SUBTARGET_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,53 @@ +#include "IA64.h" +#include "IA64Subtarget.h" +#include "IA64TargetLowering.h" +#include "IA64TargetMachine.h" + +#include "llvm/DerivedTypes.h" +#include "llvm/Function.h" +#include "llvm/Intrinsics.h" +#include "llvm/CallingConv.h" +#include "llvm/GlobalVariable.h" +#include "llvm/GlobalAlias.h" +#include "llvm/CodeGen/CallingConvLower.h" +#include "llvm/CodeGen/MachineFrameInfo.h" +#include "llvm/CodeGen/MachineFunction.h" +#include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/PseudoSourceValue.h" +#include "llvm/CodeGen/SelectionDAGISel.h" +#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" +#include "llvm/CodeGen/ValueTypes.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/ADT/VectorExtras.h" + +using namespace llvm; + +IA64TargetLowering::IA64TargetLowering(IA64TargetMachine &tm) : + TargetLowering(tm, new TargetLoweringObjectFileELF()), + Subtarget(*tm.getSubtargetImpl()), + TM(tm) +{ + TD = getTargetData(); + + // Set up the register classes. + addRegisterClass(MVT::f128, &IA64::FloatingPointRegClass); + addRegisterClass(MVT::i64, &IA64::GeneralRegClass); + addRegisterClass(MVT::i1, &IA64::PredicateRegClass); + + // Compute derived properties from the register classes + computeRegisterProperties(); +} + +unsigned +IA64TargetLowering::getFunctionAlignment(const Function *F) const +{ + // Functions must have at least 16-byte alignment, but 32-byte alignment + // is better because branch targets should be aligned on 32-byte boundaries + // to ensure that the front-end can deliver 2 bundles per cycle to the + // back-end. + return F->hasFnAttr(Attribute::OptimizeForSize) ? 4 : 5; +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetLowering.h Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,26 @@ +#ifndef LLVM_TARGET_IA64_TARGETLOWERING_H +#define LLVM_TARGET_IA64_TARGETLOWERING_H + +#include "IA64.h" +#include "llvm/CodeGen/SelectionDAG.h" +#include "llvm/Target/TargetLowering.h" + +namespace llvm { + + class IA64Subtarget; + class IA64TargetMachine; + + class IA64TargetLowering : public TargetLowering { + const TargetData *TD; + const IA64Subtarget &Subtarget; + const IA64TargetMachine &TM; + + public: + explicit IA64TargetLowering(IA64TargetMachine &TM); + + virtual unsigned getFunctionAlignment(const Function *F) const; + }; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_TARGETLOWERING_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,45 @@ +#include "IA64.h" +#include "IA64MCAsmInfo.h" +#include "IA64TargetMachine.h" + +#include "llvm/PassManager.h" +#include "llvm/CodeGen/Passes.h" +#include "llvm/MC/MCAsmInfo.h" +#include "llvm/Target/TargetRegistry.h" + +using namespace llvm; + +extern "C" void +LLVMInitializeIA64Target() { + RegisterTargetMachine X(TheIA64Target); + RegisterAsmInfo Z(TheIA64Target); +} + +IA64TargetMachine::IA64TargetMachine(const Target &T, const std::string &TT, + const std::string &FS) : + LLVMTargetMachine(T, TT), + Subtarget(TT, FS), + DataLayout("e-i64:64:64-f80:128:128-f128:128:128-n8:16:32:64"), + InstrInfo(*this), + TLInfo(*this), + TSInfo(*this), + FrameLowering(Subtarget) +{ + // Nothing to do. +} + +bool +IA64TargetMachine::addInstSelector(PassManagerBase &PM, + CodeGenOpt::Level OptLevel) +{ + // PM.add(createIA64ISelDag(*this, OptLevel)); + return false; +} + +bool +IA64TargetMachine::addPreEmitPass(PassManagerBase &PM, + CodeGenOpt::Level OptLevel) +{ + // PM.add(createIA64BundleSelectionPass()); + return false; +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64TargetMachine.h Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,59 @@ +#ifndef LLVM_TARGET_IA64_TARGETMACHINE_H +#define LLVM_TARGET_IA64_TARGETMACHINE_H + +#include "IA64FrameLowering.h" +#include "IA64InstrInfo.h" +#include "IA64SelectionDAGInfo.h" +#include "IA64Subtarget.h" +#include "IA64TargetLowering.h" + +#include "llvm/Target/TargetData.h" +#include "llvm/Target/TargetFrameLowering.h" +#include "llvm/Target/TargetMachine.h" + +namespace llvm { + + class IA64TargetMachine : public LLVMTargetMachine { + IA64Subtarget Subtarget; + const TargetData DataLayout; // Calculates type size & alignment + IA64InstrInfo InstrInfo; + IA64TargetLowering TLInfo; + IA64SelectionDAGInfo TSInfo; + IA64FrameLowering FrameLowering; + + public: + IA64TargetMachine(const Target &T, const std::string &TT, + const std::string &FS); + + virtual const TargetFrameLowering *getFrameLowering() const { + return &FrameLowering; + } + + virtual const IA64InstrInfo *getInstrInfo() const { return &InstrInfo; } + virtual const TargetData *getTargetData() const { return &DataLayout;} + + virtual const IA64Subtarget *getSubtargetImpl() const { + return &Subtarget; + } + + virtual const TargetRegisterInfo *getRegisterInfo() const { + return &InstrInfo.getRegisterInfo(); + } + + virtual const IA64TargetLowering *getTargetLowering() const { + return &TLInfo; + } + + virtual const IA64SelectionDAGInfo* getSelectionDAGInfo() const { + return &TSInfo; + } + + virtual bool addInstSelector(PassManagerBase &PM, + CodeGenOpt::Level OptLevel); + virtual bool addPreEmitPass(PassManagerBase &PM, + CodeGenOpt::Level OptLevel); + }; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_TARGETMACHINE_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/TargetInfo/IA64TargetInfo.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/TargetInfo/IA64TargetInfo.cpp Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,14 @@ +#include "IA64.h" +#include "llvm/Module.h" +#include "llvm/Target/TargetRegistry.h" + +using namespace llvm; + +Target llvm::TheIA64Target; + +extern "C" void +LLVMInitializeIA64TargetInfo() +{ + RegisterTarget + X(TheIA64Target, "ia64", "Itanium Processor Family"); +} Modified: projects/llvm-ia64/lib/clang/Makefile ============================================================================== --- projects/llvm-ia64/lib/clang/Makefile Thu Jun 9 21:29:15 2011 (r222901) +++ projects/llvm-ia64/lib/clang/Makefile Thu Jun 9 22:17:27 2011 (r222902) @@ -42,6 +42,8 @@ SUBDIR= libclanganalysis \ libllvmarmdisassembler \ libllvmarminfo \ libllvmarminstprinter \ + libllvmia64codegen \ + libllvmia64info \ libllvmmipscodegen \ libllvmmipsinfo \ libllvmpowerpccodegen \ Modified: projects/llvm-ia64/lib/clang/clang.build.mk ============================================================================== --- projects/llvm-ia64/lib/clang/clang.build.mk Thu Jun 9 21:29:15 2011 (r222901) +++ projects/llvm-ia64/lib/clang/clang.build.mk Thu Jun 9 22:17:27 2011 (r222902) @@ -40,7 +40,7 @@ Intrinsics.inc.h: ${LLVM_SRCS}/include/l ${TBLGEN} -gen-intrinsic \ ${LLVM_SRCS}/include/llvm/Intrinsics.td > ${.TARGET} .for arch in \ - ARM/ARM Mips/Mips PowerPC/PPC X86/X86 + ARM/ARM IA64/IA64 Mips/Mips PowerPC/PPC X86/X86 . for hdr in \ AsmMatcher/-gen-asm-matcher \ AsmWriter1/-gen-asm-writer,-asmwriternum=1 \ Modified: projects/llvm-ia64/lib/clang/include/llvm/Config/Targets.def ============================================================================== --- projects/llvm-ia64/lib/clang/include/llvm/Config/Targets.def Thu Jun 9 21:29:15 2011 (r222901) +++ projects/llvm-ia64/lib/clang/include/llvm/Config/Targets.def Thu Jun 9 22:17:27 2011 (r222902) @@ -1,6 +1,7 @@ /* $FreeBSD$ */ LLVM_TARGET(ARM) +LLVM_TARGET(IA64) LLVM_TARGET(Mips) LLVM_TARGET(PowerPC) LLVM_TARGET(X86) Added: projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,25 @@ +# $FreeBSD$ + +LIB= llvmia64codegen + +SRCDIR= lib/Target/IA64 +SRCS= \ + IA64FrameLowering.cpp \ + IA64InstrInfo.cpp \ + IA64TargetLowering.cpp \ + IA64MCAsmInfo.cpp \ + IA64RegisterInfo.cpp \ + IA64SelectionDAGInfo.cpp \ + IA64Subtarget.cpp \ + IA64TargetMachine.cpp + +TGHDRS= \ + Intrinsics \ + IA64GenInstrInfo \ + IA64GenInstrNames \ + IA64GenRegisterInfo \ + IA64GenRegisterInfo.h \ + IA64GenRegisterNames \ + IA64GenSubtarget + +.include "../clang.lib.mk" Added: projects/llvm-ia64/lib/clang/libllvmia64info/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/lib/clang/libllvmia64info/Makefile Thu Jun 9 22:17:27 2011 (r222902) @@ -0,0 +1,13 @@ +# $FreeBSD: head/lib/clang/libllvmx86info/Makefile 212847 2010-09-19 10:54:58Z dim $ + +LIB= llvmia64info + +SRCDIR= lib/Target/IA64/TargetInfo/ +INCDIR= lib/Target/IA64 +SRCS= IA64TargetInfo.cpp + +TGHDRS= \ + IA64GenInstrNames \ + IA64GenRegisterNames + +.include "../clang.lib.mk" Modified: projects/llvm-ia64/usr.bin/clang/clang/Makefile ============================================================================== --- projects/llvm-ia64/usr.bin/clang/clang/Makefile Thu Jun 9 21:29:15 2011 (r222901) +++ projects/llvm-ia64/usr.bin/clang/clang/Makefile Thu Jun 9 22:17:27 2011 (r222902) @@ -45,6 +45,8 @@ LIBDEPS=clangfrontendtool \ llvmarmcodegen \ llvmarminstprinter \ llvmarminfo \ + llvmia64codegen \ + llvmia64info \ llvmmipscodegen \ llvmmipsinfo \ llvmpowerpccodegen \ From owner-svn-src-projects@FreeBSD.ORG Thu Jun 9 22:38:38 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E1151106566C; Thu, 9 Jun 2011 22:38:38 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B85728FC15; Thu, 9 Jun 2011 22:38:38 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p59MccKp097521; Thu, 9 Jun 2011 22:38:38 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p59Mcc6T097520; Thu, 9 Jun 2011 22:38:38 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106092238.p59Mcc6T097520@svn.freebsd.org> From: Marcel Moolenaar Date: Thu, 9 Jun 2011 22:38:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222903 - projects/llvm-ia64/lib/clang/include X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jun 2011 22:38:39 -0000 Author: marcel Date: Thu Jun 9 22:38:38 2011 New Revision: 222903 URL: http://svn.freebsd.org/changeset/base/222903 Log: Add file missed in previous commit. Added: projects/llvm-ia64/lib/clang/include/IA64GenSubtarget.inc Added: projects/llvm-ia64/lib/clang/include/IA64GenSubtarget.inc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/lib/clang/include/IA64GenSubtarget.inc Thu Jun 9 22:38:38 2011 (r222903) @@ -0,0 +1,2 @@ +/* $FreeBSD$ */ +#include "IA64GenSubtarget.inc.h" From owner-svn-src-projects@FreeBSD.ORG Fri Jun 10 02:07:22 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E8286106564A; Fri, 10 Jun 2011 02:07:21 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CEDBE8FC0C; Fri, 10 Jun 2011 02:07:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5A27LYr004877; Fri, 10 Jun 2011 02:07:21 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5A27LHQ004875; Fri, 10 Jun 2011 02:07:21 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106100207.p5A27LHQ004875@svn.freebsd.org> From: Marcel Moolenaar Date: Fri, 10 Jun 2011 02:07:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222910 - projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2011 02:07:22 -0000 Author: marcel Date: Fri Jun 10 02:07:21 2011 New Revision: 222910 URL: http://svn.freebsd.org/changeset/base/222910 Log: Teach Clang about ia64. Should be about right for as much as it is complete. Modified: projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic/Targets.cpp Modified: projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic/Targets.cpp ============================================================================== --- projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic/Targets.cpp Fri Jun 10 01:15:23 2011 (r222909) +++ projects/llvm-ia64/contrib/llvm/tools/clang/lib/Basic/Targets.cpp Fri Jun 10 02:07:21 2011 (r222910) @@ -244,6 +244,7 @@ public: case llvm::Triple::x86_64: this->MCountName = ".mcount"; break; + case llvm::Triple::ia64: case llvm::Triple::mips: case llvm::Triple::mipsel: case llvm::Triple::ppc: @@ -2459,6 +2460,73 @@ namespace { } namespace { + class IA64TargetInfo : public TargetInfo { + static const char * const GCCRegNames[]; + public: + IA64TargetInfo(const std::string& triple) : TargetInfo(triple) { + NoAsmVariants = false; // XXX what does this mean + PointerWidth = PointerAlign = 64; + LongWidth = LongAlign = 64; + LongDoubleWidth = LongDoubleAlign = 128; + Int64Type = SignedLong; + SigAtomicType = SignedLong; + LongDoubleFormat = &llvm::APFloat::IEEEdouble; + DescriptionString = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-" + "i64:64:64-f32:32:32-f64:64:64-f80:128:128-f128:128:128-" + "n8:16:32:64"; + } + virtual void getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const { + Builder.defineMacro("__ia64"); + Builder.defineMacro("__ia64__"); + Builder.defineMacro("__itanium__"); + Builder.defineMacro("_LP64"); + Builder.defineMacro("__LP64__"); + } + virtual void getTargetBuiltins(const Builtin::Info *&Records, + unsigned &NumRecords) const { + Records = 0; + NumRecords = 0; + } + virtual void getGCCRegNames(const char * const *&Names, + unsigned &NumNames) const; + virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, + unsigned &NumAliases) const { + // No aliases. + Aliases = 0; + NumAliases = 0; + } + virtual bool validateAsmConstraint(const char *&Name, + TargetInfo::ConstraintInfo &info) const { + // No target constraints for now. + return false; + } + virtual const char *getClobbers() const { + // FIXME: Is this really right? + return ""; + } + virtual const char *getVAListDeclaration() const { + // FIXME: implement + return "typedef char* __builtin_va_list;"; + } + }; + + const char * const IA64TargetInfo::GCCRegNames[] = { + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31" + }; + + void IA64TargetInfo::getGCCRegNames(const char * const *&Names, + unsigned &NumNames) const { + Names = GCCRegNames; + NumNames = llvm::array_lengthof(GCCRegNames); + } +} + + +namespace { // LLVM and Clang cannot be used directly to output native binaries for // target, but is used to compile C code to llvm bitcode with correct @@ -2710,6 +2778,11 @@ static TargetInfo *AllocateTarget(const case llvm::Triple::bfin: return new BlackfinTargetInfo(T); + case llvm::Triple::ia64: + if (os == llvm::Triple::FreeBSD) + return new FreeBSDTargetInfo(T); + return new IA64TargetInfo(T); + case llvm::Triple::msp430: return new MSP430TargetInfo(T); From owner-svn-src-projects@FreeBSD.ORG Fri Jun 10 02:40:03 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9D330106566B; Fri, 10 Jun 2011 02:40:03 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 84D4B8FC1F; Fri, 10 Jun 2011 02:40:03 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5A2e3IC005850; Fri, 10 Jun 2011 02:40:03 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5A2e1oQ005821; Fri, 10 Jun 2011 02:40:01 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201106100240.p5A2e1oQ005821@svn.freebsd.org> From: Attilio Rao Date: Fri, 10 Jun 2011 02:40:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222911 - in projects/largeSMP: bin/sh contrib/less contrib/top games/fortune/datfiles lib/libstand share/mk sys/conf sys/dev/ata tools/regression/bin/sh/execution tools/tools tools/too... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2011 02:40:03 -0000 Author: attilio Date: Fri Jun 10 02:40:01 2011 New Revision: 222911 URL: http://svn.freebsd.org/changeset/base/222911 Log: MFC Added: projects/largeSMP/tools/regression/bin/sh/execution/set-x3.0 - copied unchanged from r222910, head/tools/regression/bin/sh/execution/set-x3.0 projects/largeSMP/tools/tools/cxgbetool/ - copied from r222910, head/tools/tools/cxgbetool/ Modified: projects/largeSMP/bin/sh/eval.c projects/largeSMP/bin/sh/expand.c projects/largeSMP/bin/sh/parser.c projects/largeSMP/bin/sh/parser.h projects/largeSMP/bin/sh/sh.1 projects/largeSMP/contrib/less/NEWS projects/largeSMP/contrib/less/README projects/largeSMP/contrib/less/command.c projects/largeSMP/contrib/less/funcs.h projects/largeSMP/contrib/less/less.man projects/largeSMP/contrib/less/less.nro projects/largeSMP/contrib/less/lessecho.man projects/largeSMP/contrib/less/lessecho.nro projects/largeSMP/contrib/less/lesskey.man projects/largeSMP/contrib/less/lesskey.nro projects/largeSMP/contrib/less/optfunc.c projects/largeSMP/contrib/less/opttbl.c projects/largeSMP/contrib/less/version.c projects/largeSMP/games/fortune/datfiles/fortunes projects/largeSMP/lib/libstand/bswap.c projects/largeSMP/sys/conf/Makefile.powerpc projects/largeSMP/sys/dev/ata/ata-sata.c projects/largeSMP/tools/tools/README projects/largeSMP/usr.sbin/mfiutil/mfi_config.c projects/largeSMP/usr.sbin/mfiutil/mfi_drive.c projects/largeSMP/usr.sbin/mfiutil/mfi_evt.c projects/largeSMP/usr.sbin/mfiutil/mfi_flash.c projects/largeSMP/usr.sbin/mfiutil/mfi_patrol.c projects/largeSMP/usr.sbin/mfiutil/mfi_show.c projects/largeSMP/usr.sbin/mfiutil/mfi_volume.c Directory Properties: projects/largeSMP/ (props changed) projects/largeSMP/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/contrib/bind9/ (props changed) projects/largeSMP/contrib/binutils/ (props changed) projects/largeSMP/contrib/bzip2/ (props changed) projects/largeSMP/contrib/compiler-rt/ (props changed) projects/largeSMP/contrib/dialog/ (props changed) projects/largeSMP/contrib/ee/ (props changed) projects/largeSMP/contrib/expat/ (props changed) projects/largeSMP/contrib/file/ (props changed) projects/largeSMP/contrib/gcc/ (props changed) projects/largeSMP/contrib/gdb/ (props changed) projects/largeSMP/contrib/gdtoa/ (props changed) projects/largeSMP/contrib/gnu-sort/ (props changed) projects/largeSMP/contrib/groff/ (props changed) projects/largeSMP/contrib/less/ (props changed) projects/largeSMP/contrib/libpcap/ (props changed) projects/largeSMP/contrib/libstdc++/ (props changed) projects/largeSMP/contrib/llvm/ (props changed) projects/largeSMP/contrib/llvm/tools/clang/ (props changed) projects/largeSMP/contrib/ncurses/ (props changed) projects/largeSMP/contrib/netcat/ (props changed) projects/largeSMP/contrib/ntp/ (props changed) projects/largeSMP/contrib/one-true-awk/ (props changed) projects/largeSMP/contrib/openbsm/ (props changed) projects/largeSMP/contrib/openpam/ (props changed) projects/largeSMP/contrib/pf/ (props changed) projects/largeSMP/contrib/sendmail/ (props changed) projects/largeSMP/contrib/tcpdump/ (props changed) projects/largeSMP/contrib/tcsh/ (props changed) projects/largeSMP/contrib/top/ (props changed) projects/largeSMP/contrib/top/install-sh (props changed) projects/largeSMP/contrib/tzcode/stdtime/ (props changed) projects/largeSMP/contrib/tzcode/zic/ (props changed) projects/largeSMP/contrib/tzdata/ (props changed) projects/largeSMP/contrib/wpa/ (props changed) projects/largeSMP/contrib/xz/ (props changed) projects/largeSMP/crypto/openssh/ (props changed) projects/largeSMP/crypto/openssl/ (props changed) projects/largeSMP/gnu/lib/ (props changed) projects/largeSMP/gnu/usr.bin/binutils/ (props changed) projects/largeSMP/gnu/usr.bin/cc/cc_tools/ (props changed) projects/largeSMP/gnu/usr.bin/gdb/ (props changed) projects/largeSMP/lib/libc/ (props changed) projects/largeSMP/lib/libc/stdtime/ (props changed) projects/largeSMP/lib/libutil/ (props changed) projects/largeSMP/lib/libz/ (props changed) projects/largeSMP/sbin/ (props changed) projects/largeSMP/sbin/ipfw/ (props changed) projects/largeSMP/share/mk/bsd.arch.inc.mk (props changed) projects/largeSMP/share/zoneinfo/ (props changed) projects/largeSMP/sys/ (props changed) projects/largeSMP/sys/amd64/include/xen/ (props changed) projects/largeSMP/sys/boot/ (props changed) projects/largeSMP/sys/boot/i386/efi/ (props changed) projects/largeSMP/sys/boot/ia64/efi/ (props changed) projects/largeSMP/sys/boot/ia64/ski/ (props changed) projects/largeSMP/sys/boot/powerpc/boot1.chrp/ (props changed) projects/largeSMP/sys/boot/powerpc/ofw/ (props changed) projects/largeSMP/sys/cddl/contrib/opensolaris/ (props changed) projects/largeSMP/sys/conf/ (props changed) projects/largeSMP/sys/contrib/dev/acpica/ (props changed) projects/largeSMP/sys/contrib/octeon-sdk/ (props changed) projects/largeSMP/sys/contrib/pf/ (props changed) projects/largeSMP/sys/contrib/x86emu/ (props changed) projects/largeSMP/usr.bin/calendar/ (props changed) projects/largeSMP/usr.bin/csup/ (props changed) projects/largeSMP/usr.bin/procstat/ (props changed) projects/largeSMP/usr.sbin/ndiscvt/ (props changed) projects/largeSMP/usr.sbin/zic/ (props changed) Modified: projects/largeSMP/bin/sh/eval.c ============================================================================== --- projects/largeSMP/bin/sh/eval.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/bin/sh/eval.c Fri Jun 10 02:40:01 2011 (r222911) @@ -745,8 +745,9 @@ evalcommand(union node *cmd, int flags, /* Print the command if xflag is set. */ if (xflag) { char sep = 0; - const char *p; - out2str(ps4val()); + const char *p, *ps4; + ps4 = expandstr(ps4val()); + out2str(ps4 != NULL ? ps4 : ps4val()); for (sp = varlist.list ; sp ; sp = sp->next) { if (sep != 0) out2c(' '); Modified: projects/largeSMP/bin/sh/expand.c ============================================================================== --- projects/largeSMP/bin/sh/expand.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/bin/sh/expand.c Fri Jun 10 02:40:01 2011 (r222911) @@ -174,6 +174,7 @@ expandarg(union node *arg, struct arglis ifslastp = NULL; argstr(arg->narg.text, flag); if (arglist == NULL) { + STACKSTRNUL(expdest); return; /* here document expanded */ } STPUTC('\0', expdest); Modified: projects/largeSMP/bin/sh/parser.c ============================================================================== --- projects/largeSMP/bin/sh/parser.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/bin/sh/parser.c Fri Jun 10 02:40:01 2011 (r222911) @@ -2029,3 +2029,47 @@ getprompt(void *unused __unused) ps[i] = '\0'; return (ps); } + + +const char * +expandstr(char *ps) +{ + union node n; + struct jmploc jmploc; + struct jmploc *const savehandler = handler; + const int saveprompt = doprompt; + struct parsefile *const savetopfile = getcurrentfile(); + struct parser_temp *const saveparser_temp = parser_temp; + const char *result = NULL; + + if (!setjmp(jmploc.loc)) { + handler = &jmploc; + parser_temp = NULL; + setinputstring(ps, 1); + doprompt = 0; + readtoken1(pgetc(), DQSYNTAX, "\n\n", 0); + if (backquotelist != NULL) + error("Command substitution not allowed here"); + + n.narg.type = NARG; + n.narg.next = NULL; + n.narg.text = wordtext; + n.narg.backquote = backquotelist; + + expandarg(&n, NULL, 0); + result = stackblock(); + INTOFF; + } + handler = savehandler; + doprompt = saveprompt; + popfilesupto(savetopfile); + if (parser_temp != saveparser_temp) { + parser_temp_free_all(); + parser_temp = saveparser_temp; + } + if (result != NULL) { + INTON; + } else if (exception == EXINT) + raise(SIGINT); + return result; +} Modified: projects/largeSMP/bin/sh/parser.h ============================================================================== --- projects/largeSMP/bin/sh/parser.h Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/bin/sh/parser.h Fri Jun 10 02:40:01 2011 (r222911) @@ -82,3 +82,4 @@ void fixredir(union node *, const char * int goodname(const char *); int isassignment(const char *); char *getprompt(void *); +const char *expandstr(char *); Modified: projects/largeSMP/bin/sh/sh.1 ============================================================================== --- projects/largeSMP/bin/sh/sh.1 Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/bin/sh/sh.1 Fri Jun 10 02:40:01 2011 (r222911) @@ -32,7 +32,7 @@ .\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95 .\" $FreeBSD$ .\" -.Dd May 21, 2011 +.Dd June 9, 2011 .Dt SH 1 .Os .Sh NAME @@ -324,7 +324,7 @@ Useful for debugging. Write each command (preceded by the value of the .Va PS4 -variable) +variable subjected to parameter expansion and arithmetic expansion) to standard error before it is executed. Useful for debugging. .El Modified: projects/largeSMP/contrib/less/NEWS ============================================================================== --- projects/largeSMP/contrib/less/NEWS Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/NEWS Fri Jun 10 02:40:01 2011 (r222911) @@ -12,6 +12,15 @@ ====================================================================== + Major changes between "less" versions 443 and 444 + +* Fix bug in unget handling that can cause strange effects on the + command line. + +* Remove vestiges of obsolete -l option that can cause a crash. + +====================================================================== + Major changes between "less" versions 436 and 443 * Change search behavior such that when a search is given an explicit Modified: projects/largeSMP/contrib/less/README ============================================================================== --- projects/largeSMP/contrib/less/README Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/README Fri Jun 10 02:40:01 2011 (r222911) @@ -7,9 +7,9 @@ ************************************************************************** ************************************************************************** - Less, version 443 + Less, version 444 - This is the distribution of less, version 443, released 09 Apr 2011. + This is the distribution of less, version 444, released 09 Jun 2011. This program is part of the GNU project (http://www.gnu.org). This program is free software. You may redistribute it and/or Modified: projects/largeSMP/contrib/less/command.c ============================================================================== --- projects/largeSMP/contrib/less/command.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/command.c Fri Jun 10 02:40:01 2011 (r222911) @@ -302,7 +302,7 @@ is_erase_char(c) */ static int mca_opt_first_char(c) - int c; + int c; { int flag = (optflag & ~OPT_NO_PROMPT); if (flag == OPT_NO_TOGGLE) @@ -846,6 +846,7 @@ ungetcc(c) ug->ug_char = c; ug->ug_next = ungot; ungot = ug; + unget_end = 0; } /* Modified: projects/largeSMP/contrib/less/funcs.h ============================================================================== --- projects/largeSMP/contrib/less/funcs.h Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/funcs.h Fri Jun 10 02:40:01 2011 (r222911) @@ -194,7 +194,6 @@ public void unmark (); public void opt_o (); public void opt__O (); - public void opt_l (); public void opt_j (); public void calc_jump_sline (); public void opt_shift (); Modified: projects/largeSMP/contrib/less/less.man ============================================================================== --- projects/largeSMP/contrib/less/less.man Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/less.man Fri Jun 10 02:40:01 2011 (r222911) @@ -1156,7 +1156,7 @@ LESS(1) next 8bcccbcc18b95.bb125.bb If neither LESSCHARSET nor LESSCHARDEF is set, but any of the strings - "UTF-8", "UTF8", "utf-8" or "utf8" is found in the LC_ALL, LC_TYPE or + "UTF-8", "UTF8", "utf-8" or "utf8" is found in the LC_ALL, LC_CTYPE or LANG environment variables, then the default character set is utf-8. If that string is not found, but your system supports the setlocale @@ -1580,4 +1580,4 @@ LESS(1) - Version 443: 09 Apr 2011 LESS(1) + Version 444: 09 Jun 2011 LESS(1) Modified: projects/largeSMP/contrib/less/less.nro ============================================================================== --- projects/largeSMP/contrib/less/less.nro Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/less.nro Fri Jun 10 02:40:01 2011 (r222911) @@ -1,4 +1,4 @@ -.TH LESS 1 "Version 443: 09 Apr 2011" +.TH LESS 1 "Version 444: 09 Jun 2011" .SH NAME less \- opposite of more .SH SYNOPSIS @@ -1276,7 +1276,7 @@ to each of the possible values for LESSC .PP If neither LESSCHARSET nor LESSCHARDEF is set, but any of the strings "UTF-8", "UTF8", "utf-8" or "utf8" -is found in the LC_ALL, LC_TYPE or LANG +is found in the LC_ALL, LC_CTYPE or LANG environment variables, then the default character set is utf-8. .PP If that string is not found, but your system supports the Modified: projects/largeSMP/contrib/less/lessecho.man ============================================================================== --- projects/largeSMP/contrib/less/lessecho.man Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/lessecho.man Fri Jun 10 02:40:01 2011 (r222911) @@ -46,4 +46,4 @@ LESSECHO(1) - Version 443: 09 Apr 2011 LESSECHO(1) + Version 444: 09 Jun 2011 LESSECHO(1) Modified: projects/largeSMP/contrib/less/lessecho.nro ============================================================================== --- projects/largeSMP/contrib/less/lessecho.nro Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/lessecho.nro Fri Jun 10 02:40:01 2011 (r222911) @@ -1,4 +1,4 @@ -.TH LESSECHO 1 "Version 443: 09 Apr 2011" +.TH LESSECHO 1 "Version 444: 09 Jun 2011" .SH NAME lessecho \- expand metacharacters .SH SYNOPSIS Modified: projects/largeSMP/contrib/less/lesskey.man ============================================================================== --- projects/largeSMP/contrib/less/lesskey.man Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/lesskey.man Fri Jun 10 02:40:01 2011 (r222911) @@ -354,4 +354,4 @@ LESSKEY(1) - Version 443: 09 Apr 2011 LESSKEY(1) + Version 444: 09 Jun 2011 LESSKEY(1) Modified: projects/largeSMP/contrib/less/lesskey.nro ============================================================================== --- projects/largeSMP/contrib/less/lesskey.nro Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/lesskey.nro Fri Jun 10 02:40:01 2011 (r222911) @@ -1,4 +1,4 @@ -.TH LESSKEY 1 "Version 443: 09 Apr 2011" +.TH LESSKEY 1 "Version 444: 09 Jun 2011" .SH NAME lesskey \- specify key bindings for less .SH SYNOPSIS Modified: projects/largeSMP/contrib/less/optfunc.c ============================================================================== --- projects/largeSMP/contrib/less/optfunc.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/optfunc.c Fri Jun 10 02:40:01 2011 (r222911) @@ -132,34 +132,6 @@ opt__O(type, s) #endif /* - * Handlers for -l option. - */ - public void -opt_l(type, s) - int type; - char *s; -{ - int err; - int n; - char *t; - - switch (type) - { - case INIT: - t = s; - n = getnum(&t, "l", &err); - if (err || n <= 0) - { - error("Line number is required after -l", NULL_PARG); - return; - } - plusoption = TRUE; - ungetsc(s); - break; - } -} - -/* * Handlers for -j option. */ public void Modified: projects/largeSMP/contrib/less/opttbl.c ============================================================================== --- projects/largeSMP/contrib/less/opttbl.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/opttbl.c Fri Jun 10 02:40:01 2011 (r222911) @@ -263,10 +263,6 @@ static struct loption option[] = NULL } }, - { 'l', NULL, - STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_l, - { NULL, NULL, NULL } - }, { 'L', &L__optname, BOOL, OPT_ON, &use_lessopen, NULL, { Modified: projects/largeSMP/contrib/less/version.c ============================================================================== --- projects/largeSMP/contrib/less/version.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/contrib/less/version.c Fri Jun 10 02:40:01 2011 (r222911) @@ -742,6 +742,7 @@ v441 1/21/11 Fix semi-infinite loop i v442 3/2/11 Fix search bug. Add ctrl-G line edit command. v443 4/9/11 Fix Windows build. +v444 6/8/11 Fix ungetc bug; remove vestiges of obsolete -l option. */ -char version[] = "443"; +char version[] = "444"; Modified: projects/largeSMP/games/fortune/datfiles/fortunes ============================================================================== --- projects/largeSMP/games/fortune/datfiles/fortunes Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/games/fortune/datfiles/fortunes Fri Jun 10 02:40:01 2011 (r222911) @@ -2057,7 +2057,7 @@ promised me faithfully that you'd be bac nine. It just can't take that long to play 18 holes of golf." "Honey, wait," said Harry. "Let me explain. I know what I promised you, but I have a very good reason for being late. Fred and I tee'd off -right on time and everything was find for the first three holes. Then, on +right on time and everything was fine for the first three holes. Then, on the fourth tee Fred had a stroke. I ran back to the clubhouse but couldn't find a doctor. And, by the time I got back to Fred, he was dead. So, for the next 15 holes, it was hit the ball, drag Fred, hit the ball, drag Fred... @@ -25523,7 +25523,9 @@ him, prussic acid could solve our popula % If everybody minded their own business, the world would go around a deal faster. - -- The Duchess, "Through the Looking Glass" + -- The Duchess; Lewis Carroll, + "Through the Looking-Glass, + and What Alice Found There" (1871) % If everything is coming your way then you're in the wrong lane. % @@ -42420,7 +42422,7 @@ in peoples' memories never really happen Some of them want to use you, Some of them want to be used by you, ...Everybody's looking for something. - -- Eurythmics + -- Eurythmics, "Sweet Dreams (Are Made Of This)" % Some of us are becoming the men we wanted to marry. -- Gloria Steinem Modified: projects/largeSMP/lib/libstand/bswap.c ============================================================================== --- projects/largeSMP/lib/libstand/bswap.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/lib/libstand/bswap.c Fri Jun 10 02:40:01 2011 (r222911) @@ -8,7 +8,7 @@ __FBSDID("$FreeBSD$"); #if defined(LIBC_SCCS) && !defined(lint) static char *rcsid = "$NetBSD: bswap32.c,v 1.1 1997/10/09 15:42:33 bouyer Exp $"; -static char *rcsid = "$NetBSD: bswap64.c,v 1.1 1997/10/09 15:42:33 bouyer Exp $"; +static char *rcsid = "$NetBSD: bswap64.c,v 1.3 2009/03/16 05:59:21 cegger Exp $"; #endif #include @@ -30,12 +30,28 @@ bswap32(u_int32_t x) u_int64_t bswap64(u_int64_t x) -{ - u_int32_t *p = (u_int32_t*)&x; - u_int32_t t; - t = bswap32(p[0]); - p[0] = bswap32(p[1]); - p[1] = t; - return x; -} - +{ +#ifdef _LP64 + /* + * Assume we have wide enough registers to do it without touching + * memory. + */ + return ( (x << 56) & 0xff00000000000000UL ) | + ( (x << 40) & 0x00ff000000000000UL ) | + ( (x << 24) & 0x0000ff0000000000UL ) | + ( (x << 8) & 0x000000ff00000000UL ) | + ( (x >> 8) & 0x00000000ff000000UL ) | + ( (x >> 24) & 0x0000000000ff0000UL ) | + ( (x >> 40) & 0x000000000000ff00UL ) | + ( (x >> 56) & 0x00000000000000ffUL ); +#else + /* + * Split the operation in two 32bit steps. + */ + u_int32_t tl, th; + + th = bswap32((u_int32_t)(x & 0x00000000ffffffffULL)); + tl = bswap32((u_int32_t)((x >> 32) & 0x00000000ffffffffULL)); + return ((u_int64_t)th << 32) | tl; +#endif +} Modified: projects/largeSMP/sys/conf/Makefile.powerpc ============================================================================== --- projects/largeSMP/sys/conf/Makefile.powerpc Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/sys/conf/Makefile.powerpc Fri Jun 10 02:40:01 2011 (r222911) @@ -35,7 +35,7 @@ LDSCRIPT_NAME?= ldscript.${MACHINE_ARCH} INCLUDES+= -I$S/contrib/libfdt -CFLAGS+= -msoft-float +CFLAGS+= -msoft-float -Wa,-many DDB_ENABLED!= grep DDB opt_ddb.h || true .if !empty(DDB_ENABLED) Modified: projects/largeSMP/sys/dev/ata/ata-sata.c ============================================================================== --- projects/largeSMP/sys/dev/ata/ata-sata.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/sys/dev/ata/ata-sata.c Fri Jun 10 02:40:01 2011 (r222911) @@ -54,6 +54,11 @@ ata_sata_phy_check_events(device_t dev, u_int32_t error, status; ata_sata_scr_read(ch, port, ATA_SERROR, &error); + + /* Check that SError value is sane. */ + if (error == 0xffffffff) + return; + /* Clear set error bits/interrupt. */ if (error) ata_sata_scr_write(ch, port, ATA_SERROR, error); @@ -163,18 +168,18 @@ ata_sata_phy_reset(device_t dev, int por if (bootverbose) { if (port < 0) { - device_printf(dev, "hardware reset ...\n"); + device_printf(dev, "hard reset ...\n"); } else { - device_printf(dev, "p%d: hardware reset ...\n", port); + device_printf(dev, "p%d: hard reset ...\n", port); } } for (retry = 0; retry < 10; retry++) { for (loop = 0; loop < 10; loop++) { if (ata_sata_scr_write(ch, port, ATA_SCONTROL, ATA_SC_DET_RESET)) - return (0); + goto fail; ata_udelay(100); if (ata_sata_scr_read(ch, port, ATA_SCONTROL, &val)) - return (0); + goto fail; if ((val & ATA_SC_DET_MASK) == ATA_SC_DET_RESET) break; } @@ -183,15 +188,26 @@ ata_sata_phy_reset(device_t dev, int por if (ata_sata_scr_write(ch, port, ATA_SCONTROL, ATA_SC_DET_IDLE | ((ch->pm_level > 0) ? 0 : ATA_SC_IPM_DIS_PARTIAL | ATA_SC_IPM_DIS_SLUMBER))) - return (0); + goto fail; ata_udelay(100); if (ata_sata_scr_read(ch, port, ATA_SCONTROL, &val)) - return (0); + goto fail; if ((val & ATA_SC_DET_MASK) == 0) return ata_sata_connect(ch, port, 0); } } - return 0; +fail: + /* Clear SATA error register. */ + ata_sata_scr_write(ch, port, ATA_SERROR, 0xffffffff); + + if (bootverbose) { + if (port < 0) { + device_printf(dev, "hard reset failed\n"); + } else { + device_printf(dev, "p%d: hard reset failed\n", port); + } + } + return (0); } int Copied: projects/largeSMP/tools/regression/bin/sh/execution/set-x3.0 (from r222910, head/tools/regression/bin/sh/execution/set-x3.0) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/largeSMP/tools/regression/bin/sh/execution/set-x3.0 Fri Jun 10 02:40:01 2011 (r222911, copy of r222910, head/tools/regression/bin/sh/execution/set-x3.0) @@ -0,0 +1,9 @@ +# $FreeBSD$ + +key='must contain this' +PS4='$key+ ' +{ r=`set -x; { :; } 2>&1 >/dev/null`; } 2>/dev/null +case $r in +*"$key"*) true ;; +*) false ;; +esac Modified: projects/largeSMP/tools/tools/README ============================================================================== --- projects/largeSMP/tools/tools/README Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/tools/tools/README Fri Jun 10 02:40:01 2011 (r222911) @@ -16,6 +16,7 @@ cfi Common Flash Interface (CFI) tool commitsdb A tool for reconstructing commit history using md5 checksums of the commit logs. crypto Test and exercise tools related to the crypto framework +cxgbetool A tool for the cxgbe(4) driver. diffburst OBSOLETE: equivalent functionality is available via split -p. For example: "split -p ^diff < patchfile". See split(1). editing Editor modes and the like to help editing FreeBSD code. Modified: projects/largeSMP/usr.sbin/mfiutil/mfi_config.c ============================================================================== --- projects/largeSMP/usr.sbin/mfiutil/mfi_config.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/usr.sbin/mfiutil/mfi_config.c Fri Jun 10 02:40:01 2011 (r222911) @@ -85,6 +85,7 @@ mfi_config_read(int fd, struct mfi_confi { struct mfi_config_data *config; uint32_t config_size; + int error; /* * Keep fetching the config in a loop until we have a large enough @@ -97,8 +98,12 @@ fetch: if (config == NULL) return (-1); if (mfi_dcmd_command(fd, MFI_DCMD_CFG_READ, config, - config_size, NULL, 0, NULL) < 0) + config_size, NULL, 0, NULL) < 0) { + error = errno; + free(config); + errno = error; return (-1); + } if (config->size > config_size) { config_size = config->size; @@ -162,12 +167,14 @@ clear_config(int ac, char **av) if (!mfi_reconfig_supported()) { warnx("The current mfi(4) driver does not support " "configuration changes."); + close(fd); return (EOPNOTSUPP); } if (mfi_ld_get_list(fd, &list, NULL) < 0) { error = errno; warn("Failed to get volume list"); + close(fd); return (error); } @@ -175,6 +182,7 @@ clear_config(int ac, char **av) if (mfi_volume_busy(fd, list.ld_list[i].ld.v.target_id)) { warnx("Volume %s is busy and cannot be deleted", mfi_volume_name(fd, list.ld_list[i].ld.v.target_id)); + close(fd); return (EBUSY); } } @@ -185,12 +193,14 @@ clear_config(int ac, char **av) ch = getchar(); if (ch != 'y' && ch != 'Y') { printf("\nAborting\n"); + close(fd); return (0); } if (mfi_dcmd_command(fd, MFI_DCMD_CFG_CLEAR, NULL, 0, NULL, 0, NULL) < 0) { error = errno; warn("Failed to clear configuration"); + close(fd); return (error); } @@ -336,17 +346,21 @@ parse_array(int fd, int raid_type, char for (pinfo = info->drives; (cp = strsep(&array_str, ",")) != NULL; pinfo++) { error = mfi_lookup_drive(fd, cp, &device_id); - if (error) + if (error) { + free(info->drives); return (error); + } if (mfi_pd_get_info(fd, device_id, pinfo, NULL) < 0) { error = errno; warn("Failed to fetch drive info for drive %s", cp); + free(info->drives); return (error); } if (pinfo->fw_state != MFI_PD_STATE_UNCONFIGURED_GOOD) { warnx("Drive %u is not available", device_id); + free(info->drives); return (EINVAL); } } @@ -551,7 +565,12 @@ create_volume(int ac, char **av) return (EINVAL); } - + bzero(&state, sizeof(state)); + config = NULL; + arrays = NULL; + narrays = 0; + error = 0; + fd = mfi_open(mfi_unit); if (fd < 0) { error = errno; @@ -562,7 +581,8 @@ create_volume(int ac, char **av) if (!mfi_reconfig_supported()) { warnx("The current mfi(4) driver does not support " "configuration changes."); - return (EOPNOTSUPP); + error = EOPNOTSUPP; + goto error; } /* Lookup the RAID type first. */ @@ -575,7 +595,8 @@ create_volume(int ac, char **av) if (raid_type == -1) { warnx("Unknown or unsupported volume type %s", av[1]); - return (EINVAL); + error = EINVAL; + goto error; } /* Parse any options. */ @@ -603,7 +624,8 @@ create_volume(int ac, char **av) break; case '?': default: - return (EINVAL); + error = EINVAL; + goto error; } } ac -= optind; @@ -613,7 +635,8 @@ create_volume(int ac, char **av) narrays = ac; if (narrays == 0) { warnx("At least one drive list is required"); - return (EINVAL); + error = EINVAL; + goto error; } switch (raid_type) { case RT_RAID0: @@ -623,7 +646,8 @@ create_volume(int ac, char **av) case RT_CONCAT: if (narrays != 1) { warnx("Only one drive list can be specified"); - return (EINVAL); + error = EINVAL; + goto error; } break; case RT_RAID10: @@ -632,24 +656,27 @@ create_volume(int ac, char **av) if (narrays < 1) { warnx("RAID10, RAID50, and RAID60 require at least " "two drive lists"); - return (EINVAL); + error = EINVAL; + goto error; } if (narrays > MFI_MAX_SPAN_DEPTH) { warnx("Volume spans more than %d arrays", MFI_MAX_SPAN_DEPTH); - return (EINVAL); + error = EINVAL; + goto error; } break; } arrays = calloc(narrays, sizeof(*arrays)); if (arrays == NULL) { warnx("malloc failed"); - return (ENOMEM); + error = ENOMEM; + goto error; } for (i = 0; i < narrays; i++) { error = parse_array(fd, raid_type, av[i], &arrays[i]); if (error) - return (error); + goto error; } switch (raid_type) { @@ -660,7 +687,8 @@ create_volume(int ac, char **av) if (arrays[i].drive_count != arrays[0].drive_count) { warnx("All arrays must contain the same " "number of drives"); - return (EINVAL); + error = EINVAL; + goto error; } } break; @@ -673,7 +701,7 @@ create_volume(int ac, char **av) if (mfi_config_read(fd, &config) < 0) { error = errno; warn("Failed to read configuration"); - return (error); + goto error; } p = (char *)config->array; state.array_ref = 0xffff; @@ -683,7 +711,8 @@ create_volume(int ac, char **av) state.arrays = calloc(config->array_count, sizeof(int)); if (state.arrays == NULL) { warnx("malloc failed"); - return (ENOMEM); + error = ENOMEM; + goto error; } for (i = 0; i < config->array_count; i++) { ar = (struct mfi_array *)p; @@ -699,7 +728,8 @@ create_volume(int ac, char **av) state.volumes = calloc(config->log_drv_count, sizeof(int)); if (state.volumes == NULL) { warnx("malloc failed"); - return (ENOMEM); + error = ENOMEM; + goto error; } for (i = 0; i < config->log_drv_count; i++) { ld = (struct mfi_ld_config *)p; @@ -739,7 +769,8 @@ create_volume(int ac, char **av) config = calloc(1, config_size); if (config == NULL) { warnx("malloc failed"); - return (ENOMEM); + error = ENOMEM; + goto error; } config->size = config_size; config->array_count = narrays; @@ -776,21 +807,20 @@ create_volume(int ac, char **av) NULL, 0, NULL) < 0) { error = errno; warn("Failed to add volume"); - return (error); + /* FALLTHROUGH */ } +error: /* Clean up. */ free(config); - if (state.log_drv_count > 0) - free(state.volumes); - if (state.array_count > 0) - free(state.arrays); + free(state.volumes); + free(state.arrays); for (i = 0; i < narrays; i++) free(arrays[i].drives); free(arrays); close(fd); - return (0); + return (error); } MFI_COMMAND(top, create, create_volume); @@ -831,24 +861,28 @@ delete_volume(int ac, char **av) if (!mfi_reconfig_supported()) { warnx("The current mfi(4) driver does not support " "configuration changes."); + close(fd); return (EOPNOTSUPP); } if (mfi_lookup_volume(fd, av[1], &target_id) < 0) { error = errno; warn("Invalid volume %s", av[1]); + close(fd); return (error); } if (mfi_ld_get_info(fd, target_id, &info, NULL) < 0) { error = errno; warn("Failed to get info for volume %d", target_id); + close(fd); return (error); } if (mfi_volume_busy(fd, target_id)) { warnx("Volume %s is busy and cannot be deleted", mfi_volume_name(fd, target_id)); + close(fd); return (EBUSY); } @@ -857,6 +891,7 @@ delete_volume(int ac, char **av) sizeof(mbox), NULL) < 0) { error = errno; warn("Failed to delete volume"); + close(fd); return (error); } @@ -891,40 +926,44 @@ add_spare(int ac, char **av) return (error); } + config = NULL; + spare = NULL; error = mfi_lookup_drive(fd, av[1], &device_id); if (error) - return (error); + goto error; if (mfi_pd_get_info(fd, device_id, &info, NULL) < 0) { error = errno; warn("Failed to fetch drive info"); - return (error); + goto error; } if (info.fw_state != MFI_PD_STATE_UNCONFIGURED_GOOD) { warnx("Drive %u is not available", device_id); - return (EINVAL); + error = EINVAL; + goto error; } if (ac > 2) { if (mfi_lookup_volume(fd, av[2], &target_id) < 0) { error = errno; warn("Invalid volume %s", av[2]); - return (error); + goto error; } } if (mfi_config_read(fd, &config) < 0) { error = errno; warn("Failed to read configuration"); - return (error); + goto error; } spare = malloc(sizeof(struct mfi_spare) + sizeof(uint16_t) * config->array_count); if (spare == NULL) { warnx("malloc failed"); - return (ENOMEM); + error = ENOMEM; + goto error; } bzero(spare, sizeof(struct mfi_spare)); spare->ref = info.ref; @@ -937,7 +976,8 @@ add_spare(int ac, char **av) if (ar->size > info.coerced_size) { warnx("Spare isn't large enough for array %u", ar->array_ref); - return (EINVAL); + error = EINVAL; + goto error; } p += config->array_size; } @@ -950,7 +990,8 @@ add_spare(int ac, char **av) ld = mfi_config_lookup_volume(config, target_id); if (ld == NULL) { warnx("Did not find volume %d", target_id); - return (EINVAL); + error = EINVAL; + goto error; } spare->spare_type |= MFI_SPARE_DEDICATED; @@ -960,29 +1001,33 @@ add_spare(int ac, char **av) ld->span[i].array_ref); if (ar == NULL) { warnx("Missing array; inconsistent config?"); - return (ENXIO); + error = ENXIO; + goto error; } if (ar->size > info.coerced_size) { warnx("Spare isn't large enough for array %u", ar->array_ref); - return (EINVAL); + error = EINVAL; + goto error; } spare->array_ref[i] = ar->array_ref; } } - free(config); if (mfi_dcmd_command(fd, MFI_DCMD_CFG_MAKE_SPARE, spare, sizeof(struct mfi_spare) + sizeof(uint16_t) * spare->array_count, NULL, 0, NULL) < 0) { error = errno; warn("Failed to assign spare"); - return (error); + /* FALLTHROUGH. */ } +error: + free(spare); + free(config); close(fd); - return (0); + return (error); } MFI_COMMAND(top, add, add_spare); @@ -1007,18 +1052,22 @@ remove_spare(int ac, char **av) } error = mfi_lookup_drive(fd, av[1], &device_id); - if (error) + if (error) { + close(fd); return (error); + } /* Get the info for this drive. */ if (mfi_pd_get_info(fd, device_id, &info, NULL) < 0) { error = errno; warn("Failed to fetch info for drive %u", device_id); + close(fd); return (error); } if (info.fw_state != MFI_PD_STATE_HOT_SPARE) { warnx("Drive %u is not a hot spare", device_id); + close(fd); return (EINVAL); } @@ -1027,6 +1076,7 @@ remove_spare(int ac, char **av) sizeof(mbox), NULL) < 0) { error = errno; warn("Failed to delete spare"); + close(fd); return (error); } @@ -1151,6 +1201,7 @@ debug_config(int ac, char **av) if (mfi_config_read(fd, &config) < 0) { error = errno; warn("Failed to get config"); + close(fd); return (error); } @@ -1190,17 +1241,21 @@ dump(int ac, char **av) warn("Failed to read debug command"); if (error == ENOENT) error = EOPNOTSUPP; + close(fd); return (error); } config = malloc(len); if (config == NULL) { warnx("malloc failed"); + close(fd); return (ENOMEM); } if (sysctlbyname(buf, config, &len, NULL, 0) < 0) { error = errno; warn("Failed to read debug command"); + free(config); + close(fd); return (error); } dump_config(fd, config); Modified: projects/largeSMP/usr.sbin/mfiutil/mfi_drive.c ============================================================================== --- projects/largeSMP/usr.sbin/mfiutil/mfi_drive.c Fri Jun 10 02:07:21 2011 (r222910) +++ projects/largeSMP/usr.sbin/mfiutil/mfi_drive.c Fri Jun 10 02:40:01 2011 (r222911) @@ -310,19 +310,23 @@ drive_set_state(char *drive, uint16_t ne } error = mfi_lookup_drive(fd, drive, &device_id); - if (error) + if (error) { + close(fd); return (error); + } /* Get the info for this drive. */ if (mfi_pd_get_info(fd, device_id, &info, NULL) < 0) { error = errno; warn("Failed to fetch info for drive %u", device_id); + close(fd); return (error); } /* Try to change the state. */ if (info.fw_state == new_state) { warnx("Drive %u is already in the desired state", device_id); + close(fd); return (EINVAL); } @@ -334,6 +338,7 @@ drive_set_state(char *drive, uint16_t ne error = errno; warn("Failed to set drive %u to %s", device_id, mfi_pdstate(new_state)); + close(fd); return (error); } @@ -406,19 +411,23 @@ start_rebuild(int ac, char **av) } error = mfi_lookup_drive(fd, av[1], &device_id); - if (error) + if (error) { + close(fd); return (error); + } /* Get the info for this drive. */ if (mfi_pd_get_info(fd, device_id, &info, NULL) < 0) { error = errno; warn("Failed to fetch info for drive %u", device_id); + close(fd); return (error); } /* Check the state, must be REBUILD. */ if (info.fw_state != MFI_PD_STATE_REBUILD) { warnx("Drive %d is not in the REBUILD state", device_id); + close(fd); return (EINVAL); } @@ -428,6 +437,7 @@ start_rebuild(int ac, char **av) NULL) < 0) { error = errno; warn("Failed to start rebuild on drive %u", device_id); + close(fd); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Jun 10 23:05:51 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6FD78106564A; Fri, 10 Jun 2011 23:05:51 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5CEBC8FC13; Fri, 10 Jun 2011 23:05:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5AN5p6p047119; Fri, 10 Jun 2011 23:05:51 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5AN5pNj047108; Fri, 10 Jun 2011 23:05:51 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106102305.p5AN5pNj047108@svn.freebsd.org> From: Marcel Moolenaar Date: Fri, 10 Jun 2011 23:05:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222959 - in projects/llvm-ia64: contrib/llvm/lib/Target/IA64 contrib/llvm/lib/Target/IA64/InstPrinter lib/clang lib/clang/libllvmia64codegen lib/clang/libllvmia64instprinter usr.bin/cl... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2011 23:05:51 -0000 Author: marcel Date: Fri Jun 10 23:05:51 2011 New Revision: 222959 URL: http://svn.freebsd.org/changeset/base/222959 Log: Add the AsmPrinter and InstPrinter classes. Unfortunately, this doesn't change the falure more (though it may have changed when or where it happens). Suggested by: rdivacky Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCInstLower.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCInstLower.h projects/llvm-ia64/contrib/llvm/lib/Target/IA64/InstPrinter/ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/InstPrinter/IA64InstPrinter.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/InstPrinter/IA64InstPrinter.h projects/llvm-ia64/lib/clang/libllvmia64instprinter/ projects/llvm-ia64/lib/clang/libllvmia64instprinter/Makefile Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp projects/llvm-ia64/lib/clang/Makefile projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile projects/llvm-ia64/usr.bin/clang/clang/Makefile Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Fri Jun 10 22:48:35 2011 (r222958) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Fri Jun 10 23:05:51 2011 (r222959) @@ -48,8 +48,17 @@ def NOP : IA64Instruction<(outs), (ins)> def IA64InstrInfo : InstrInfo; // +// Machine code and assembly writer +// +def IA64InstPrinter : AsmWriter { + string AsmWriterClassName = "InstPrinter"; + bit isMCAsmWriter = 1; +} + +// // Target for the Itanium Processor Family (IPF) // def IA64 : Target { let InstructionSet = IA64InstrInfo; + let AssemblyWriters = [IA64InstPrinter]; } Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp Fri Jun 10 22:48:35 2011 (r222958) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64AsmPrinter.cpp Fri Jun 10 23:05:51 2011 (r222959) @@ -1,56 +1,131 @@ #include "IA64.h" +#include "IA64InstrInfo.h" +#include "IA64MCAsmInfo.h" +#include "IA64MCInstLower.h" +#include "IA64TargetMachine.h" +#include "InstPrinter/IA64InstPrinter.h" +#include "llvm/Constants.h" +#include "llvm/DerivedTypes.h" #include "llvm/Module.h" -#include "llvm/Type.h" +#include "llvm/Assembly/Writer.h" #include "llvm/CodeGen/AsmPrinter.h" -#include "llvm/CodeGen/DwarfWriter.h" +#include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/MC/MCAsmInfo.h" +#include "llvm/CodeGen/MachineConstantPool.h" +#include "llvm/CodeGen/MachineInstr.h" +#include "llvm/MC/MCInst.h" +#include "llvm/MC/MCStreamer.h" +#include "llvm/MC/MCSymbol.h" +#include "llvm/Target/Mangler.h" +#include "llvm/Target/TargetData.h" +#include "llvm/Target/TargetLoweringObjectFile.h" #include "llvm/Target/TargetRegistry.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/FormattedStream.h" -#include "llvm/ADT/Statistic.h" +#include "llvm/Support/raw_ostream.h" using namespace llvm; namespace { + class IA64AsmPrinter : public AsmPrinter { - std::set ExternalFunctionNames, ExternalObjectNames; public: - explicit IA64AsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, - const MCAsmInfo *T, bool V) : - AsmPrinter(O, TM, T, V) {} + IA64AsmPrinter(TargetMachine &TM, MCStreamer &Streamer) : + AsmPrinter(TM, Streamer) {} virtual const char *getPassName() const { - return "IA64 Assembly Printer"; + return "IA-64 Assembly Printer"; } - static const char *getRegisterName(unsigned RegNo); - - void PrintGlobalVariable(const GlobalVariable *GVar); - - void printInstruction(const MachineInstr *MI); - bool runOnMachineFunction(MachineFunction &F); + void printOperand(const MachineInstr *MI, int OpNum, raw_ostream &O, + const char* Modifier = 0); + void printSrcMemOperand(const MachineInstr *MI, int OpNum, raw_ostream &O); + bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, + unsigned AsmVariant, const char *ExtraCode, raw_ostream &O); + bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, + unsigned AsmVariant, const char *ExtraCode, raw_ostream &O); + void EmitInstruction(const MachineInstr *MI); }; -} // end of anonymous namespace -#include "IA64GenAsmWriter.inc" +} // end of anonymous namespace void -IA64AsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) +IA64AsmPrinter::printOperand(const MachineInstr *MI, int OpNum, + raw_ostream &O, const char *Modifier) { llvm_unreachable(__func__); } +void +IA64AsmPrinter::printSrcMemOperand(const MachineInstr *MI, int OpNum, + raw_ostream &O) +{ + const MachineOperand &Base = MI->getOperand(OpNum); + const MachineOperand &Disp = MI->getOperand(OpNum+1); + + // Print displacement first + + // Imm here is in fact global address - print extra modifier. + if (Disp.isImm() && !Base.getReg()) + O << '&'; + printOperand(MI, OpNum+1, O, "nohash"); + + // Print register base field + if (Base.getReg()) { + O << '('; + printOperand(MI, OpNum, O); + O << ')'; + } +} + +/// PrintAsmOperand - Print out an operand for an inline asm expression. bool -IA64AsmPrinter::runOnMachineFunction(MachineFunction &MF) +IA64AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, + unsigned AsmVariant, const char *ExtraCode, raw_ostream &O) { - llvm_unreachable(__func__); + // Does this asm operand have a single letter operand modifier? + if (ExtraCode && ExtraCode[0]) + return true; // Unknown modifier. + + printOperand(MI, OpNo, O); + return false; +} + +bool +IA64AsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, + unsigned AsmVariant, const char *ExtraCode, raw_ostream &O) +{ + if (ExtraCode && ExtraCode[0]) { + return true; // Unknown modifier. + } + printSrcMemOperand(MI, OpNo, O); + return false; +} + +void +IA64AsmPrinter::EmitInstruction(const MachineInstr *MI) +{ + IA64MCInstLower MCInstLowering(OutContext, *Mang, *this); + + MCInst TmpInst; + MCInstLowering.Lower(MI, TmpInst); + OutStreamer.EmitInstruction(TmpInst); } +static +MCInstPrinter *createIA64MCInstPrinter(const Target &T, TargetMachine &TM, + unsigned SyntaxVariant, const MCAsmInfo &MAI) +{ + if (SyntaxVariant == 0) + return new IA64InstPrinter(TM, MAI); + return 0; +} +// Force static initialization. extern "C" void LLVMInitializeIA64AsmPrinter() { RegisterAsmPrinter X(TheIA64Target); + TargetRegistry::RegisterMCInstPrinter(TheIA64Target, + createIA64MCInstPrinter); } Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCInstLower.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCInstLower.cpp Fri Jun 10 23:05:51 2011 (r222959) @@ -0,0 +1,58 @@ +#include "IA64MCInstLower.h" + +#include "llvm/CodeGen/AsmPrinter.h" +#include "llvm/CodeGen/MachineBasicBlock.h" +#include "llvm/CodeGen/MachineInstr.h" +#include "llvm/MC/MCAsmInfo.h" +#include "llvm/MC/MCContext.h" +#include "llvm/MC/MCExpr.h" +#include "llvm/MC/MCInst.h" +#include "llvm/Target/Mangler.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/ADT/SmallString.h" + +using namespace llvm; + +MCSymbol * +IA64MCInstLower::GetGlobalAddressSymbol(const MachineOperand &MO) const +{ + llvm_unreachable(__func__); +} + +MCSymbol * +IA64MCInstLower::GetExternalSymbolSymbol(const MachineOperand &MO) const +{ + llvm_unreachable(__func__); +} + +MCSymbol * +IA64MCInstLower::GetJumpTableSymbol(const MachineOperand &MO) const +{ + llvm_unreachable(__func__); +} + +MCSymbol * +IA64MCInstLower::GetConstantPoolIndexSymbol(const MachineOperand &MO) const +{ + llvm_unreachable(__func__); +} + +MCSymbol * +IA64MCInstLower::GetBlockAddressSymbol(const MachineOperand &MO) const +{ + llvm_unreachable(__func__); +} + +MCOperand +IA64MCInstLower::LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym) + const +{ + llvm_unreachable(__func__); +} + +void +IA64MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const +{ + llvm_unreachable(__func__); +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCInstLower.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MCInstLower.h Fri Jun 10 23:05:51 2011 (r222959) @@ -0,0 +1,42 @@ +#ifndef LLVM_TARGET_IA64_MCINSTLOWER_H +#define LLVM_TARGET_IA64_MCINSTLOWER_H + +#include "llvm/Support/Compiler.h" + +namespace llvm { + + class AsmPrinter; + class MCAsmInfo; + class MCContext; + class MCInst; + class MCOperand; + class MCSymbol; + class MachineInstr; + class MachineModuleInfoMachO; + class MachineOperand; + class Mangler; + + /// IA64MCInstLower - This class is used to lower an MachineInstr + /// into an MCInst. + class LLVM_LIBRARY_VISIBILITY IA64MCInstLower { + MCContext &Ctx; + Mangler &Mang; + + AsmPrinter &Printer; + public: + IA64MCInstLower(MCContext &ctx, Mangler &mang, AsmPrinter &printer) : + Ctx(ctx), Mang(mang), Printer(printer) {} + void Lower(const MachineInstr *MI, MCInst &OutMI) const; + + MCOperand LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym) const; + + MCSymbol *GetGlobalAddressSymbol(const MachineOperand &MO) const; + MCSymbol *GetExternalSymbolSymbol(const MachineOperand &MO) const; + MCSymbol *GetJumpTableSymbol(const MachineOperand &MO) const; + MCSymbol *GetConstantPoolIndexSymbol(const MachineOperand &MO) const; + MCSymbol *GetBlockAddressSymbol(const MachineOperand &MO) const; + }; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_MCINSTLOWER_H Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/InstPrinter/IA64InstPrinter.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/InstPrinter/IA64InstPrinter.cpp Fri Jun 10 23:05:51 2011 (r222959) @@ -0,0 +1,84 @@ +#include "IA64.h" +#include "IA64InstPrinter.h" + +#include "llvm/MC/MCInst.h" +#include "llvm/MC/MCAsmInfo.h" +#include "llvm/MC/MCExpr.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/FormattedStream.h" + +using namespace llvm; + +// Include the auto-generated portion of the assembly writer. +#include "IA64GenAsmWriter.inc" + +void +IA64InstPrinter::printInst(const MCInst *MI, raw_ostream &O) +{ + printInstruction(MI, O); +} + +void +IA64InstPrinter::printPCRelImmOperand(const MCInst *MI, unsigned OpNo, + raw_ostream &O) +{ + const MCOperand &Op = MI->getOperand(OpNo); + if (Op.isImm()) + O << Op.getImm(); + else { + assert(Op.isExpr() && "unknown pcrel immediate operand"); + O << *Op.getExpr(); + } +} + +void +IA64InstPrinter::printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O, + const char *Modifier) +{ + assert((Modifier == 0 || Modifier[0] == 0) && "No modifiers supported"); + const MCOperand &Op = MI->getOperand(OpNo); + if (Op.isReg()) { + O << getRegisterName(Op.getReg()); + } else if (Op.isImm()) { + O << '#' << Op.getImm(); + } else { + assert(Op.isExpr() && "unknown operand kind in printOperand"); + O << '#' << *Op.getExpr(); + } +} + +void IA64InstPrinter::printSrcMemOperand(const MCInst *MI, unsigned OpNo, + raw_ostream &O, const char *Modifier) +{ + const MCOperand &Base = MI->getOperand(OpNo); + const MCOperand &Disp = MI->getOperand(OpNo+1); + + // Print displacement first + + // If the global address expression is a part of displacement field with a + // register base, we should not emit any prefix symbol here, e.g. + // mov.w &foo, r1 + // vs + // mov.w glb(r1), r2 + // Otherwise (!) msp430-as will silently miscompile the output :( + if (!Base.getReg()) + O << '&'; + + if (Disp.isExpr()) + O << *Disp.getExpr(); + else { + assert(Disp.isImm() && "Expected immediate in displacement field"); + O << Disp.getImm(); + } + + // Print register base field + if (Base.getReg()) + O << '(' << getRegisterName(Base.getReg()) << ')'; +} + +void +IA64InstPrinter::printCCOperand(const MCInst *MI, unsigned OpNo, + raw_ostream &O) +{ + llvm_unreachable(__func__); +} Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/InstPrinter/IA64InstPrinter.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/InstPrinter/IA64InstPrinter.h Fri Jun 10 23:05:51 2011 (r222959) @@ -0,0 +1,32 @@ +#ifndef LLVM_TARGET_IA64_INSTPRINTER_H +#define LLVM_TARGET_IA64_INSTPRINTER_H + +#include "llvm/MC/MCInstPrinter.h" + +namespace llvm { + + class MCOperand; + class TargetMachine; + + class IA64InstPrinter : public MCInstPrinter { + public: + IA64InstPrinter(TargetMachine &TM, const MCAsmInfo &MAI) : + MCInstPrinter(MAI) {} + + virtual void printInst(const MCInst *MI, raw_ostream &O); + + // Autogenerated by tblgen. + void printInstruction(const MCInst *MI, raw_ostream &O); + static const char *getRegisterName(unsigned RegNo); + + void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O, + const char *Modifier = 0); + void printPCRelImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); + void printSrcMemOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O, + const char *Modifier = 0); + void printCCOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); + }; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_INSTPRINTER_H Modified: projects/llvm-ia64/lib/clang/Makefile ============================================================================== --- projects/llvm-ia64/lib/clang/Makefile Fri Jun 10 22:48:35 2011 (r222958) +++ projects/llvm-ia64/lib/clang/Makefile Fri Jun 10 23:05:51 2011 (r222959) @@ -44,6 +44,7 @@ SUBDIR= libclanganalysis \ libllvmarminstprinter \ libllvmia64codegen \ libllvmia64info \ + libllvmia64instprinter \ libllvmmipscodegen \ libllvmmipsinfo \ libllvmpowerpccodegen \ Modified: projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile ============================================================================== --- projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile Fri Jun 10 22:48:35 2011 (r222958) +++ projects/llvm-ia64/lib/clang/libllvmia64codegen/Makefile Fri Jun 10 23:05:51 2011 (r222959) @@ -4,10 +4,12 @@ LIB= llvmia64codegen SRCDIR= lib/Target/IA64 SRCS= \ + IA64AsmPrinter.cpp \ IA64FrameLowering.cpp \ IA64InstrInfo.cpp \ IA64TargetLowering.cpp \ IA64MCAsmInfo.cpp \ + IA64MCInstLower.cpp \ IA64RegisterInfo.cpp \ IA64SelectionDAGInfo.cpp \ IA64Subtarget.cpp \ Added: projects/llvm-ia64/lib/clang/libllvmia64instprinter/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/lib/clang/libllvmia64instprinter/Makefile Fri Jun 10 23:05:51 2011 (r222959) @@ -0,0 +1,14 @@ +# $FreeBSD$ + +LIB= llvmia64instprinter + +SRCDIR= lib/Target/IA64/InstPrinter +INCDIR= lib/Target/IA64 +SRCS= IA64InstPrinter.cpp + +TGHDRS= \ + IA64GenAsmWriter \ + IA64GenInstrNames \ + IA64GenRegisterNames + +.include "../clang.lib.mk" Modified: projects/llvm-ia64/usr.bin/clang/clang/Makefile ============================================================================== --- projects/llvm-ia64/usr.bin/clang/clang/Makefile Fri Jun 10 22:48:35 2011 (r222958) +++ projects/llvm-ia64/usr.bin/clang/clang/Makefile Fri Jun 10 23:05:51 2011 (r222959) @@ -47,6 +47,7 @@ LIBDEPS=clangfrontendtool \ llvmarminfo \ llvmia64codegen \ llvmia64info \ + llvmia64instprinter \ llvmmipscodegen \ llvmmipsinfo \ llvmpowerpccodegen \ From owner-svn-src-projects@FreeBSD.ORG Fri Jun 10 23:27:36 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BE5721065677; Fri, 10 Jun 2011 23:27:36 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AEC428FC08; Fri, 10 Jun 2011 23:27:36 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5ANRaVr047860; Fri, 10 Jun 2011 23:27:36 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5ANRaVU047858; Fri, 10 Jun 2011 23:27:36 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106102327.p5ANRaVU047858@svn.freebsd.org> From: Marcel Moolenaar Date: Fri, 10 Jun 2011 23:27:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222960 - projects/llvm-ia64/lib/clang/include/llvm/Config X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2011 23:27:36 -0000 Author: marcel Date: Fri Jun 10 23:27:36 2011 New Revision: 222960 URL: http://svn.freebsd.org/changeset/base/222960 Log: Actually add the IA64 Assembly Printer. Now we're calling into the backend. Yay! Modified: projects/llvm-ia64/lib/clang/include/llvm/Config/AsmPrinters.def Modified: projects/llvm-ia64/lib/clang/include/llvm/Config/AsmPrinters.def ============================================================================== --- projects/llvm-ia64/lib/clang/include/llvm/Config/AsmPrinters.def Fri Jun 10 23:05:51 2011 (r222959) +++ projects/llvm-ia64/lib/clang/include/llvm/Config/AsmPrinters.def Fri Jun 10 23:27:36 2011 (r222960) @@ -1,6 +1,7 @@ /* $FreeBSD$ */ LLVM_ASM_PRINTER(ARM) +LLVM_ASM_PRINTER(IA64) LLVM_ASM_PRINTER(Mips) LLVM_ASM_PRINTER(PowerPC) LLVM_ASM_PRINTER(X86) From owner-svn-src-projects@FreeBSD.ORG Sat Jun 11 06:05:01 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DADA9106564A; Sat, 11 Jun 2011 06:05:00 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BE9858FC0A; Sat, 11 Jun 2011 06:05:00 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5B650he061019; Sat, 11 Jun 2011 06:05:00 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5B650SC061014; Sat, 11 Jun 2011 06:05:00 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106110605.p5B650SC061014@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 11 Jun 2011 06:05:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222976 - in projects/llvm-ia64/contrib/llvm/lib: Support Target/IA64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2011 06:05:01 -0000 Author: marcel Date: Sat Jun 11 06:05:00 2011 New Revision: 222976 URL: http://svn.freebsd.org/changeset/base/222976 Log: o Implement sys::getHostCPUName() when ia64 is the host. o Have the Subtarget constructor call sys::getHostCPUName() when running natively to determine the default CPU. o Default to mckinley for cross-compilation. o Define long branch as a feature and list it under mckinley. This should be enough to play with subtargets, features, etc in a minimal form. Modified: projects/llvm-ia64/contrib/llvm/lib/Support/Host.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h Modified: projects/llvm-ia64/contrib/llvm/lib/Support/Host.cpp ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Support/Host.cpp Sat Jun 11 04:59:01 2011 (r222975) +++ projects/llvm-ia64/contrib/llvm/lib/Support/Host.cpp Sat Jun 11 06:05:00 2011 (r222976) @@ -298,6 +298,44 @@ std::string sys::getHostCPUName() { } return "generic"; } +#elif defined(__ia64__) +std::string sys::getHostCPUName() { + unsigned long id3; + unsigned char family, model; + + __asm __volatile("mov %0 = cpuid[%1]" : "=r"(id3) : "r"(3)); + model = id3 >> 16; + family = id3 >> 24; + + switch (family) { + case 0x07: // Itanium + // There has only been 1 CPU implementation in this family. + return "merced"; + + case 0x1f: // Itanium 2 + // We don't distinguish between Madison and Madison 2 (aka + // Madison 9M). Maybe we should? + switch (model) { + case 0x00: + return "mckinley"; + case 0x01: // Madison & Deerfield + case 0x02: // Madison 2 (aka Madison 9M) + return "madison"; + } + + case 0x20: // Itanium 2 multi-core + switch (model) { + case 0x00: + return "montecito"; + case 0x01: + return "montvale"; + } + } + // XXX where does Tukwila go? + + // Fall back to a generic Itanium 2 implementation. + return "itanium2"; +} #else std::string sys::getHostCPUName() { return "generic"; Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Sat Jun 11 04:59:01 2011 (r222975) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Sat Jun 11 06:05:00 2011 (r222976) @@ -6,8 +6,12 @@ include "llvm/Target/Target.td" class IA64Impl features> : Processor; +def FeatureLongBranch : + SubtargetFeature<"lb", "HasLongBranch", "true", + "Enable the long branch instruction">; + def : IA64Impl<"merced", []>; -def : IA64Impl<"mckinley", []>; +def : IA64Impl<"mckinley", [FeatureLongBranch]>; // // Registers Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp Sat Jun 11 04:59:01 2011 (r222975) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.cpp Sat Jun 11 06:05:00 2011 (r222976) @@ -5,8 +5,13 @@ using namespace llvm; -IA64Subtarget::IA64Subtarget(const std::string &TT, const std::string &FS) { - std::string CPU = "generic"; +IA64Subtarget::IA64Subtarget(const std::string &TT, const std::string &FS) +{ +#if defined(__ia64__) + std::string CPU = sys::getHostCPUName(); +#else + std::string CPU = "mckinley"; +#endif // Parse features string. ParseSubtargetFeatures(FS, CPU); Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h Sat Jun 11 04:59:01 2011 (r222975) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64Subtarget.h Sat Jun 11 06:05:00 2011 (r222976) @@ -8,7 +8,7 @@ namespace llvm { class IA64Subtarget : public TargetSubtarget { - bool ExtendedInsts; + bool HasLongBranch; public: /// This constructor initializes the data members to match that From owner-svn-src-projects@FreeBSD.ORG Sat Jun 11 16:44:31 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 34E781065677; Sat, 11 Jun 2011 16:44:31 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 25A438FC1E; Sat, 11 Jun 2011 16:44:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5BGiVmP083231; Sat, 11 Jun 2011 16:44:31 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5BGiVTW083229; Sat, 11 Jun 2011 16:44:31 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106111644.p5BGiVTW083229@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 11 Jun 2011 16:44:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222988 - projects/llvm-ia64/contrib/llvm/lib/Target/IA64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2011 16:44:31 -0000 Author: marcel Date: Sat Jun 11 16:44:30 2011 New Revision: 222988 URL: http://svn.freebsd.org/changeset/base/222988 Log: Might as well add the other CPUs. It prevents warnings when compiling clang natively. Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Sat Jun 11 13:19:58 2011 (r222987) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Sat Jun 11 16:44:30 2011 (r222988) @@ -10,8 +10,16 @@ def FeatureLongBranch : SubtargetFeature<"lb", "HasLongBranch", "true", "Enable the long branch instruction">; +// Itanium 1 +def : IA64Impl<"itanium", []>; def : IA64Impl<"merced", []>; + +// Itanium 2 +def : IA64Impl<"itanium2", [FeatureLongBranch]>; def : IA64Impl<"mckinley", [FeatureLongBranch]>; +def : IA64Impl<"madison", [FeatureLongBranch]>; +def : IA64Impl<"montecito", [FeatureLongBranch]>; +def : IA64Impl<"montvale", [FeatureLongBranch]>; // // Registers From owner-svn-src-projects@FreeBSD.ORG Sat Jun 11 17:23:51 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D755F106566B; Sat, 11 Jun 2011 17:23:51 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AE88B8FC08; Sat, 11 Jun 2011 17:23:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5BHNpOj084456; Sat, 11 Jun 2011 17:23:51 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5BHNpIU084453; Sat, 11 Jun 2011 17:23:51 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106111723.p5BHNpIU084453@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 11 Jun 2011 17:23:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222989 - projects/llvm-ia64/contrib/llvm/lib/Target/IA64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2011 17:23:51 -0000 Author: marcel Date: Sat Jun 11 17:23:51 2011 New Revision: 222989 URL: http://svn.freebsd.org/changeset/base/222989 Log: Implement IA64RegisterInfo::getReservedRegs() Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Sat Jun 11 16:44:30 2011 (r222988) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Sat Jun 11 17:23:51 2011 (r222989) @@ -34,6 +34,9 @@ def F1 : IA64Register<"f1">; def P0 : IA64Register<"p0">; def R0 : IA64Register<"r0">; +def R1 : IA64Register<"r1">; +def R12 : IA64Register<"r12">; +def R13 : IA64Register<"r13">; // // Register classes @@ -43,7 +46,7 @@ class IA64RegisterClass } def FloatingPoint : IA64RegisterClass<[f128], 128, [F0, F1]>; -def General : IA64RegisterClass<[i64], 64, [R0]>; +def General : IA64RegisterClass<[i64], 64, [R0, R1, R12, R13]>; def Predicate : IA64RegisterClass<[i1], 0, [P0]>; // Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp Sat Jun 11 16:44:30 2011 (r222988) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp Sat Jun 11 17:23:51 2011 (r222989) @@ -32,7 +32,19 @@ IA64RegisterInfo::getCalleeSavedRegs(con BitVector IA64RegisterInfo::getReservedRegs(const MachineFunction &MF) const { - llvm_unreachable(__func__); + BitVector rsvd(getNumRegs()); + + rsvd.set(IA64::R0); // constant, hardwired 0 + rsvd.set(IA64::R1); // global data pointer (aka gp) + rsvd.set(IA64::R12); // (memory) stack pointer (aka sp) + rsvd.set(IA64::R13); // thread pointer (aka tp) + + rsvd.set(IA64::F0); // constant, hardwired 0.0 + rsvd.set(IA64::F1); // constant, hardwired 1.0 + + rsvd.set(IA64::P0); // constant, hardwired 1 (true) + + return rsvd; } void From owner-svn-src-projects@FreeBSD.ORG Sat Jun 11 18:39:55 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E9B82106567C; Sat, 11 Jun 2011 18:39:55 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D98CE8FC1A; Sat, 11 Jun 2011 18:39:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5BIdtT6086731; Sat, 11 Jun 2011 18:39:55 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5BIdtqB086729; Sat, 11 Jun 2011 18:39:55 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106111839.p5BIdtqB086729@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 11 Jun 2011 18:39:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222990 - projects/llvm-ia64/contrib/llvm/lib/Target/IA64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2011 18:39:56 -0000 Author: marcel Date: Sat Jun 11 18:39:55 2011 New Revision: 222990 URL: http://svn.freebsd.org/changeset/base/222990 Log: Implement IA64RegisterInfo::getCalleeSavedRegs(). There's a lot of repetition in the .td file now. Since tblgen is supposed to help with that, I think I should look into tblgen features to see if there's better way of defining and listing the registers. Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Sat Jun 11 17:23:51 2011 (r222989) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64.td Sat Jun 11 18:39:55 2011 (r222990) @@ -28,26 +28,122 @@ class IA64Register : Regist let Namespace = "IA64"; } +// FP registers def F0 : IA64Register<"f0">; def F1 : IA64Register<"f1">; +def F2 : IA64Register<"f2">; +def F3 : IA64Register<"f3">; +def F4 : IA64Register<"f4">; +def F5 : IA64Register<"f5">; +def F16 : IA64Register<"f16">; +def F17 : IA64Register<"f17">; +def F18 : IA64Register<"f18">; +def F19 : IA64Register<"f19">; +def F20 : IA64Register<"f20">; +def F21 : IA64Register<"f21">; +def F22 : IA64Register<"f22">; +def F23 : IA64Register<"f23">; +def F24 : IA64Register<"f24">; +def F25 : IA64Register<"f25">; +def F26 : IA64Register<"f26">; +def F27 : IA64Register<"f27">; +def F28 : IA64Register<"f28">; +def F29 : IA64Register<"f29">; +def F30 : IA64Register<"f30">; +def F31 : IA64Register<"f31">; +// Pregicate registers def P0 : IA64Register<"p0">; +def P1 : IA64Register<"p1">; +def P2 : IA64Register<"p2">; +def P3 : IA64Register<"p3">; +def P4 : IA64Register<"p4">; +def P5 : IA64Register<"p5">; +def P16 : IA64Register<"p16">; +def P17 : IA64Register<"p17">; +def P18 : IA64Register<"p18">; +def P19 : IA64Register<"p19">; +def P20 : IA64Register<"p20">; +def P21 : IA64Register<"p21">; +def P22 : IA64Register<"p22">; +def P23 : IA64Register<"p23">; +def P24 : IA64Register<"p24">; +def P25 : IA64Register<"p25">; +def P26 : IA64Register<"p26">; +def P27 : IA64Register<"p27">; +def P28 : IA64Register<"p28">; +def P29 : IA64Register<"p29">; +def P30 : IA64Register<"p30">; +def P31 : IA64Register<"p31">; +def P32 : IA64Register<"p32">; +def P33 : IA64Register<"p33">; +def P34 : IA64Register<"p34">; +def P35 : IA64Register<"p35">; +def P36 : IA64Register<"p36">; +def P37 : IA64Register<"p37">; +def P38 : IA64Register<"p38">; +def P39 : IA64Register<"p39">; +def P40 : IA64Register<"p40">; +def P41 : IA64Register<"p41">; +def P42 : IA64Register<"p42">; +def P43 : IA64Register<"p43">; +def P44 : IA64Register<"p44">; +def P45 : IA64Register<"p45">; +def P46 : IA64Register<"p46">; +def P47 : IA64Register<"p47">; +def P48 : IA64Register<"p48">; +def P49 : IA64Register<"p49">; +def P50 : IA64Register<"p50">; +def P51 : IA64Register<"p51">; +def P52 : IA64Register<"p52">; +def P53 : IA64Register<"p53">; +def P54 : IA64Register<"p54">; +def P55 : IA64Register<"p55">; +def P56 : IA64Register<"p56">; +def P57 : IA64Register<"p57">; +def P58 : IA64Register<"p58">; +def P59 : IA64Register<"p59">; +def P60 : IA64Register<"p60">; +def P61 : IA64Register<"p61">; +def P62 : IA64Register<"p62">; +def P63 : IA64Register<"p63">; +// General registers def R0 : IA64Register<"r0">; def R1 : IA64Register<"r1">; +def R4 : IA64Register<"r4">; +def R5 : IA64Register<"r5">; +def R6 : IA64Register<"r6">; +def R7 : IA64Register<"r7">; def R12 : IA64Register<"r12">; def R13 : IA64Register<"r13">; -// +// Branch registers +def B1 : IA64Register<"b1">; +def B2 : IA64Register<"b2">; +def B3 : IA64Register<"b3">; +def B4 : IA64Register<"b4">; +def B5 : IA64Register<"b5">; + // Register classes // class IA64RegisterClass types, int align, list regs> : RegisterClass<"IA64", types, align, regs> { } -def FloatingPoint : IA64RegisterClass<[f128], 128, [F0, F1]>; -def General : IA64RegisterClass<[i64], 64, [R0, R1, R12, R13]>; -def Predicate : IA64RegisterClass<[i1], 0, [P0]>; +def Branch : IA64RegisterClass<[i64], 8, + [B1, B2, B3, B4, B5]>; +def FloatingPoint : IA64RegisterClass<[f128], 128, + [F0, F1, F2, F3, F4, F5, F16, F17, F18, F19, F20, F21, F22, F23, + F24, F25, F26, F27, F28, F29, F30, F31]>; +def General : IA64RegisterClass<[i64], 64, + [R0, R1, R4, R5, R6, R7, R12, R13]>; +def Predicate : IA64RegisterClass<[i1], 0, + [P0, P1, P2, P3, P4, P5, P16, P17, P18, P19, P20, P21, P22, P23, + P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, + P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, + P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, + P63]>; // // Instructions Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp Sat Jun 11 17:23:51 2011 (r222989) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64RegisterInfo.cpp Sat Jun 11 18:39:55 2011 (r222990) @@ -26,7 +26,37 @@ IA64RegisterInfo::IA64RegisterInfo(IA64T const unsigned * IA64RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { - llvm_unreachable(__func__); + static const unsigned preservedRegisters[] = { + IA64::R4, IA64::R5, IA64::R6, IA64::R7, + IA64::F2, IA64::F3, IA64::F4, IA64::F5, + IA64::F16, IA64::F17, IA64::F18, IA64::F19, + IA64::F20, IA64::F21, IA64::F22, IA64::F23, + IA64::F24, IA64::F25, IA64::F26, IA64::F27, + IA64::F28, IA64::F29, IA64::F30, IA64::F31, + IA64::P1, IA64::P2, IA64::P3, IA64::P4, + IA64::P5, + IA64::P16, IA64::P17, IA64::P18, IA64::P19, + IA64::P20, IA64::P21, IA64::P22, IA64::P23, + IA64::P24, IA64::P25, IA64::P26, IA64::P27, + IA64::P28, IA64::P29, IA64::P30, IA64::P31, + IA64::P32, IA64::P33, IA64::P34, IA64::P35, + IA64::P36, IA64::P37, IA64::P38, IA64::P39, + IA64::P40, IA64::P41, IA64::P42, IA64::P43, + IA64::P44, IA64::P45, IA64::P46, IA64::P47, + IA64::P48, IA64::P49, IA64::P50, IA64::P51, + IA64::P52, IA64::P53, IA64::P54, IA64::P55, + IA64::P56, IA64::P57, IA64::P58, IA64::P59, + IA64::P60, IA64::P61, IA64::P62, IA64::P63, + IA64::B1, IA64::B2, IA64::B3, IA64::B4, + IA64::B5 + }; + + // XXX TODO + // Predicate registers cannot be saved/restored individually. + // It is done by saving the 64-bit 'pr' predicate register. + // It's the superset of all 1-bit predicate registers. + + return preservedRegisters; } BitVector From owner-svn-src-projects@FreeBSD.ORG Sat Jun 11 22:18:07 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A8F0B106566B; Sat, 11 Jun 2011 22:18:07 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 996A48FC17; Sat, 11 Jun 2011 22:18:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5BMI7Q1096543; Sat, 11 Jun 2011 22:18:07 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5BMI7Bq096542; Sat, 11 Jun 2011 22:18:07 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106112218.p5BMI7Bq096542@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 11 Jun 2011 22:18:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r222999 - projects/llvm-ia64/contrib/llvm/lib/Target/IA64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2011 22:18:07 -0000 Author: marcel Date: Sat Jun 11 22:18:07 2011 New Revision: 222999 URL: http://svn.freebsd.org/changeset/base/222999 Log: Create the IA64MachineFunctionInfo class. We don't have any target- specific information for each MachineFunction yet, but it's good to have it around. I'm sure I need it soon enough. Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MachineFunctionInfo.h Added: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MachineFunctionInfo.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64MachineFunctionInfo.h Sat Jun 11 22:18:07 2011 (r222999) @@ -0,0 +1,18 @@ +#ifndef LLVM_TARGET_IA64_MACHINEFUNCTIONINFO_H +#define LLVM_TARGET_IA64_MACHINEFUNCTIONINFO_H + +#include "llvm/CodeGen/MachineFunction.h" + +namespace llvm { + + class IA64MachineFunctionInfo : public MachineFunctionInfo { + // Nothing yet. + public: + IA64MachineFunctionInfo() {} + + explicit IA64MachineFunctionInfo(MachineFunction &MF) {} + }; + +} // namespace llvm + +#endif // LLVM_TARGET_IA64_MACHINEFUNCTIONINFO_H From owner-svn-src-projects@FreeBSD.ORG Sat Jun 11 22:23:25 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9555A106566C; Sat, 11 Jun 2011 22:23:25 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 85FB48FC15; Sat, 11 Jun 2011 22:23:25 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5BMNPTG096738; Sat, 11 Jun 2011 22:23:25 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5BMNP6u096736; Sat, 11 Jun 2011 22:23:25 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201106112223.p5BMNP6u096736@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 11 Jun 2011 22:23:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r223000 - projects/llvm-ia64/contrib/llvm/lib/Target/IA64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2011 22:23:25 -0000 Author: marcel Date: Sat Jun 11 22:23:25 2011 New Revision: 223000 URL: http://svn.freebsd.org/changeset/base/223000 Log: The (memory) stack is always 16-byte aligned and the locals start right from the stack pointer (which translate to -8 I belief). This file was copied from MSP430 without being tweaked to match ia64. Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h Modified: projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h ============================================================================== --- projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h Sat Jun 11 22:18:07 2011 (r222999) +++ projects/llvm-ia64/contrib/llvm/lib/Target/IA64/IA64FrameLowering.h Sat Jun 11 22:23:25 2011 (r223000) @@ -15,10 +15,8 @@ namespace llvm { public: explicit IA64FrameLowering(const IA64Subtarget &sti) : - TargetFrameLowering(TargetFrameLowering::StackGrowsDown, 2, -2), - STI(sti) - { - } + TargetFrameLowering(TargetFrameLowering::StackGrowsDown, 16, -8, 16), + STI(sti) {} void emitPrologue(MachineFunction &MF) const; void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;