From owner-svn-src-user@FreeBSD.ORG Sun Nov 30 00:18:21 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BA3F21065672; Sun, 30 Nov 2008 00:18:21 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AA2A38FC1D; Sun, 30 Nov 2008 00:18:21 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mAU0ILcx066527; Sun, 30 Nov 2008 00:18:21 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mAU0ILe9066524; Sun, 30 Nov 2008 00:18:21 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200811300018.mAU0ILe9066524@svn.freebsd.org> From: Peter Wemm Date: Sun, 30 Nov 2008 00:18:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185462 - in user/peter/kinfo/sys: kern sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Nov 2008 00:18:21 -0000 Author: peter Date: Sun Nov 30 00:18:21 2008 New Revision: 185462 URL: http://svn.freebsd.org/changeset/base/185462 Log: Implement copyout packing more along the lines of what I had in mind. Create a temporary duplicate implementation of old filedesc struct for pre-7.1 libgtop package. Todo: specific fd or addr request Modified: user/peter/kinfo/sys/kern/kern_descrip.c user/peter/kinfo/sys/sys/sysctl.h user/peter/kinfo/sys/sys/user.h Modified: user/peter/kinfo/sys/kern/kern_descrip.c ============================================================================== --- user/peter/kinfo/sys/kern/kern_descrip.c Sun Nov 30 00:11:48 2008 (r185461) +++ user/peter/kinfo/sys/kern/kern_descrip.c Sun Nov 30 00:18:21 2008 (r185462) @@ -2509,6 +2509,265 @@ sysctl_kern_file(SYSCTL_HANDLER_ARGS) SYSCTL_PROC(_kern, KERN_FILE, file, CTLTYPE_OPAQUE|CTLFLAG_RD, 0, 0, sysctl_kern_file, "S,xfile", "Entire file table"); + +/* + * Sadly, the libgtop port has already been compiled for 7.1, but the code + * does not do enough error checking and bad things might happen. Even + * though we've not made a release with this stuff in it, the packages have + * apparently been built. + * + * This should be deleted shortly after 7.1 is released and we go back to + * 7-stable again. If the libgtop port can be rebuilt, then this can get + * deleted before release. + */ +#ifdef KINFO_OFILE_SIZE +CTASSERT(sizeof(struct kinfo_ofile) == KINFO_OFILE_SIZE); +#endif + +static int +export_vnode_for_osysctl(struct vnode *vp, int type, + struct kinfo_ofile *kif, struct filedesc *fdp, struct sysctl_req *req) +{ + int error; + char *fullpath, *freepath; + int vfslocked; + + bzero(kif, sizeof(*kif)); + kif->kf_structsize = sizeof(*kif); + + vref(vp); + kif->kf_fd = type; + kif->kf_type = KF_TYPE_VNODE; + /* This function only handles directories. */ + KASSERT(vp->v_type == VDIR, ("export_vnode_for_osysctl: vnode not directory")); + kif->kf_vnode_type = KF_VTYPE_VDIR; + + /* + * This is not a true file descriptor, so we set a bogus refcount + * and offset to indicate these fields should be ignored. + */ + kif->kf_ref_count = -1; + kif->kf_offset = -1; + + freepath = NULL; + fullpath = "-"; + FILEDESC_SUNLOCK(fdp); + vn_fullpath(curthread, vp, &fullpath, &freepath); + vfslocked = VFS_LOCK_GIANT(vp->v_mount); + vrele(vp); + VFS_UNLOCK_GIANT(vfslocked); + strlcpy(kif->kf_path, fullpath, sizeof(kif->kf_path)); + if (freepath != NULL) + free(freepath, M_TEMP); + error = SYSCTL_OUT(req, kif, sizeof(*kif)); + FILEDESC_SLOCK(fdp); + return (error); +} + +/* + * Get per-process file descriptors for use by procstat(1), et al. + */ +static int +sysctl_kern_proc_ofiledesc(SYSCTL_HANDLER_ARGS) +{ + char *fullpath, *freepath; + struct kinfo_ofile *kif; + struct filedesc *fdp; + int error, i, *name; + struct socket *so; + struct vnode *vp; + struct file *fp; + struct proc *p; + struct tty *tp; + int vfslocked; + + name = (int *)arg1; + if ((p = pfind((pid_t)name[0])) == NULL) + return (ESRCH); + if ((error = p_candebug(curthread, p))) { + PROC_UNLOCK(p); + return (error); + } + fdp = fdhold(p); + PROC_UNLOCK(p); + if (fdp == NULL) + return (ENOENT); + kif = malloc(sizeof(*kif), M_TEMP, M_WAITOK); + FILEDESC_SLOCK(fdp); + if (fdp->fd_cdir != NULL) + export_vnode_for_osysctl(fdp->fd_cdir, KF_FD_TYPE_CWD, kif, + fdp, req); + if (fdp->fd_rdir != NULL) + export_vnode_for_osysctl(fdp->fd_rdir, KF_FD_TYPE_ROOT, kif, + fdp, req); + if (fdp->fd_jdir != NULL) + export_vnode_for_osysctl(fdp->fd_jdir, KF_FD_TYPE_JAIL, kif, + fdp, req); + for (i = 0; i < fdp->fd_nfiles; i++) { + if ((fp = fdp->fd_ofiles[i]) == NULL) + continue; + bzero(kif, sizeof(*kif)); + kif->kf_structsize = sizeof(*kif); + vp = NULL; + so = NULL; + tp = NULL; + kif->kf_fd = i; + switch (fp->f_type) { + case DTYPE_VNODE: + kif->kf_type = KF_TYPE_VNODE; + vp = fp->f_vnode; + break; + + case DTYPE_SOCKET: + kif->kf_type = KF_TYPE_SOCKET; + so = fp->f_data; + break; + + case DTYPE_PIPE: + kif->kf_type = KF_TYPE_PIPE; + break; + + case DTYPE_FIFO: + kif->kf_type = KF_TYPE_FIFO; + vp = fp->f_vnode; + vref(vp); + break; + + case DTYPE_KQUEUE: + kif->kf_type = KF_TYPE_KQUEUE; + break; + + case DTYPE_CRYPTO: + kif->kf_type = KF_TYPE_CRYPTO; + break; + + case DTYPE_MQUEUE: + kif->kf_type = KF_TYPE_MQUEUE; + break; + + case DTYPE_SHM: + kif->kf_type = KF_TYPE_SHM; + break; + + case DTYPE_SEM: + kif->kf_type = KF_TYPE_SEM; + break; + + case DTYPE_PTS: + kif->kf_type = KF_TYPE_PTS; + tp = fp->f_data; + break; + + default: + kif->kf_type = KF_TYPE_UNKNOWN; + break; + } + kif->kf_ref_count = fp->f_count; + if (fp->f_flag & FREAD) + kif->kf_flags |= KF_FLAG_READ; + if (fp->f_flag & FWRITE) + kif->kf_flags |= KF_FLAG_WRITE; + if (fp->f_flag & FAPPEND) + kif->kf_flags |= KF_FLAG_APPEND; + if (fp->f_flag & FASYNC) + kif->kf_flags |= KF_FLAG_ASYNC; + if (fp->f_flag & FFSYNC) + kif->kf_flags |= KF_FLAG_FSYNC; + if (fp->f_flag & FNONBLOCK) + kif->kf_flags |= KF_FLAG_NONBLOCK; + if (fp->f_flag & O_DIRECT) + kif->kf_flags |= KF_FLAG_DIRECT; + if (fp->f_flag & FHASLOCK) + kif->kf_flags |= KF_FLAG_HASLOCK; + kif->kf_offset = fp->f_offset; + if (vp != NULL) { + vref(vp); + switch (vp->v_type) { + case VNON: + kif->kf_vnode_type = KF_VTYPE_VNON; + break; + case VREG: + kif->kf_vnode_type = KF_VTYPE_VREG; + break; + case VDIR: + kif->kf_vnode_type = KF_VTYPE_VDIR; + break; + case VBLK: + kif->kf_vnode_type = KF_VTYPE_VBLK; + break; + case VCHR: + kif->kf_vnode_type = KF_VTYPE_VCHR; + break; + case VLNK: + kif->kf_vnode_type = KF_VTYPE_VLNK; + break; + case VSOCK: + kif->kf_vnode_type = KF_VTYPE_VSOCK; + break; + case VFIFO: + kif->kf_vnode_type = KF_VTYPE_VFIFO; + break; + case VBAD: + kif->kf_vnode_type = KF_VTYPE_VBAD; + break; + default: + kif->kf_vnode_type = KF_VTYPE_UNKNOWN; + break; + } + /* + * It is OK to drop the filedesc lock here as we will + * re-validate and re-evaluate its properties when + * the loop continues. + */ + freepath = NULL; + fullpath = "-"; + FILEDESC_SUNLOCK(fdp); + vn_fullpath(curthread, vp, &fullpath, &freepath); + vfslocked = VFS_LOCK_GIANT(vp->v_mount); + vrele(vp); + VFS_UNLOCK_GIANT(vfslocked); + strlcpy(kif->kf_path, fullpath, + sizeof(kif->kf_path)); + if (freepath != NULL) + free(freepath, M_TEMP); + FILEDESC_SLOCK(fdp); + } + if (so != NULL) { + struct sockaddr *sa; + + if (so->so_proto->pr_usrreqs->pru_sockaddr(so, &sa) + == 0 && sa->sa_len <= sizeof(kif->kf_sa_local)) { + bcopy(sa, &kif->kf_sa_local, sa->sa_len); + free(sa, M_SONAME); + } + if (so->so_proto->pr_usrreqs->pru_peeraddr(so, &sa) + == 00 && sa->sa_len <= sizeof(kif->kf_sa_peer)) { + bcopy(sa, &kif->kf_sa_peer, sa->sa_len); + free(sa, M_SONAME); + } + kif->kf_sock_domain = + so->so_proto->pr_domain->dom_family; + kif->kf_sock_type = so->so_type; + kif->kf_sock_protocol = so->so_proto->pr_protocol; + } + if (tp != NULL) { + strlcpy(kif->kf_path, tty_devname(tp), + sizeof(kif->kf_path)); + } + error = SYSCTL_OUT(req, kif, sizeof(*kif)); + if (error) + break; + } + FILEDESC_SUNLOCK(fdp); + fddrop(fdp); + free(kif, M_TEMP); + return (0); +} + +static SYSCTL_NODE(_kern_proc, KERN_PROC_OFILEDESC, ofiledesc, CTLFLAG_RD, + sysctl_kern_proc_ofiledesc, "Process ofiledesc entries"); + + #ifdef KINFO_FILE_SIZE CTASSERT(sizeof(struct kinfo_file) == KINFO_FILE_SIZE); #endif @@ -2522,7 +2781,6 @@ export_vnode_for_sysctl(struct vnode *vp int vfslocked; bzero(kif, sizeof(*kif)); - kif->kf_structsize = sizeof(*kif); vref(vp); kif->kf_fd = type; @@ -2548,7 +2806,10 @@ export_vnode_for_sysctl(struct vnode *vp strlcpy(kif->kf_path, fullpath, sizeof(kif->kf_path)); if (freepath != NULL) free(freepath, M_TEMP); - error = SYSCTL_OUT(req, kif, sizeof(*kif)); + kif->kf_structsize = offsetof(struct kinfo_file, kf_path) + + strlen(kif->kf_path) + 1; + kif->kf_structsize = roundup(kif->kf_structsize, sizeof(uint64_t)); + error = SYSCTL_OUT(req, kif, kif->kf_structsize); FILEDESC_SLOCK(fdp); return (error); } @@ -2596,7 +2857,6 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER if ((fp = fdp->fd_ofiles[i]) == NULL) continue; bzero(kif, sizeof(*kif)); - kif->kf_structsize = sizeof(*kif); vp = NULL; so = NULL; tp = NULL; @@ -2743,7 +3003,11 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER strlcpy(kif->kf_path, tty_devname(tp), sizeof(kif->kf_path)); } - error = SYSCTL_OUT(req, kif, sizeof(*kif)); + kif->kf_structsize = offsetof(struct kinfo_file, kf_path) + + strlen(kif->kf_path) + 1; + kif->kf_structsize = roundup(kif->kf_structsize, + sizeof(uint64_t)); + error = SYSCTL_OUT(req, kif, kif->kf_structsize); if (error) break; } Modified: user/peter/kinfo/sys/sys/sysctl.h ============================================================================== --- user/peter/kinfo/sys/sys/sysctl.h Sun Nov 30 00:11:48 2008 (r185461) +++ user/peter/kinfo/sys/sys/sysctl.h Sun Nov 30 00:18:21 2008 (r185462) @@ -541,12 +541,13 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_e #define KERN_PROC_GID 11 /* by effective group id */ #define KERN_PROC_PATHNAME 12 /* path to executable */ #define KERN_PROC_VMMAP 13 /* VM map entries for process */ -#define KERN_PROC_FILEDESC 14 /* File descriptors for process */ +#define KERN_PROC_OFILEDESC 14 /* Old file descriptors for process */ #define KERN_PROC_KSTACK 15 /* Kernel stacks for process */ #define KERN_PROC_INC_THREAD 0x10 /* * modifier for pid, pgrp, tty, * uid, ruid, gid, rgid and proc */ +#define KERN_PROC_FILEDESC 32 /* File descriptors for process */ /* * KERN_IPC identifiers Modified: user/peter/kinfo/sys/sys/user.h ============================================================================== --- user/peter/kinfo/sys/sys/user.h Sun Nov 30 00:11:48 2008 (r185461) +++ user/peter/kinfo/sys/sys/user.h Sun Nov 30 00:18:21 2008 (r185462) @@ -236,9 +236,6 @@ struct user { struct kinfo_proc u_kproc; /* eproc */ }; -/* When exporting paths via sysctl, give a short version */ -#define KPROC_PATH_MAX 256 - /* * The KERN_PROC_FILE sysctl allows a process to dump the file descriptor * array of another process. @@ -280,8 +277,36 @@ struct user { #define KF_FLAG_DIRECT 0x00000040 #define KF_FLAG_HASLOCK 0x00000080 +/* + * Old format. Has variable hidden padding due to alignment. + * This is a compatability hack for pre-build 7.1 packages. + */ +#if defined(__amd64__) +#define KINFO_OFILE_SIZE 1328 +#endif +#if defined(__i386__) +#define KINFO_OFILE_SIZE 1324 +#endif + +struct kinfo_ofile { + int kf_structsize; /* Size of kinfo_file. */ + int kf_type; /* Descriptor type. */ + int kf_fd; /* Array index. */ + int kf_ref_count; /* Reference count. */ + int kf_flags; /* Flags. */ + /* XXX Hidden alignment padding here on amd64 */ + off_t kf_offset; /* Seek location. */ + int kf_vnode_type; /* Vnode type. */ + int kf_sock_domain; /* Socket domain. */ + int kf_sock_type; /* Socket type. */ + int kf_sock_protocol; /* Socket protocol. */ + char kf_path[PATH_MAX]; /* Path to file, if any. */ + struct sockaddr_storage kf_sa_local; /* Socket address. */ + struct sockaddr_storage kf_sa_peer; /* Peer address. */ +}; + #if defined(__amd64__) || defined(__i386__) -#define KINFO_FILE_SIZE 560 +#define KINFO_FILE_SIZE 1392 #endif struct kinfo_file { @@ -290,7 +315,7 @@ struct kinfo_file { int kf_fd; /* Array index. */ int kf_ref_count; /* Reference count. */ int kf_flags; /* Flags. */ - int _kf_pad0; /* Alignment */ + int _kf_pad0; /* Round to 64 bit alignment */ uint64_t kf_offset; /* Seek location. */ int kf_vnode_type; /* Vnode type. */ int kf_sock_domain; /* Socket domain. */ @@ -298,7 +323,9 @@ struct kinfo_file { int kf_sock_protocol; /* Socket protocol. */ struct sockaddr_storage kf_sa_local; /* Socket address. */ struct sockaddr_storage kf_sa_peer; /* Peer address. */ - char kf_path[KPROC_PATH_MAX]; /* Path to file, if any. */ + int _kf_ispare[16]; /* Space for more stuff. */ + /* Truncated before copyout in sysctl */ + char kf_path[PATH_MAX]; /* Path to file, if any. */ }; /* @@ -322,7 +349,7 @@ struct kinfo_file { #define KVME_FLAG_NEEDS_COPY 0x00000002 #if defined(__amd64__) || defined(__i386__) -#define KINFO_VMENTRY_SIZE 384 +#define KINFO_VMENTRY_SIZE 1160 #endif struct kinfo_vmentry { @@ -339,8 +366,10 @@ struct kinfo_vmentry { int kve_protection; /* Protection bitmask. */ int kve_ref_count; /* VM obj ref count. */ int kve_shadow_count; /* VM obj shadow count. */ - int _kve_ispare[15]; /* Space for more stuff. */ - char kve_path[KPROC_PATH_MAX]; /* Path to VM obj, if any. */ + int _kve_pad0; /* 64bit align next field */ + int _kve_ispare[16]; /* Space for more stuff. */ + /* Truncated before copyout in sysctl */ + char kve_path[PATH_MAX]; /* Path to VM obj, if any. */ }; /* From owner-svn-src-user@FreeBSD.ORG Sun Nov 30 21:04:54 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CBDB6106564A; Sun, 30 Nov 2008 21:04:54 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BB5D18FC12; Sun, 30 Nov 2008 21:04:54 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mAUL4r3C001876; Sun, 30 Nov 2008 21:04:53 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mAUL4rs6001875; Sun, 30 Nov 2008 21:04:53 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200811302104.mAUL4rs6001875@svn.freebsd.org> From: Peter Wemm Date: Sun, 30 Nov 2008 21:04:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185487 - user/peter/kinfo/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Nov 2008 21:04:54 -0000 Author: peter Date: Sun Nov 30 21:04:53 2008 New Revision: 185487 URL: http://svn.freebsd.org/changeset/base/185487 Log: Properly wrap this giant block of duplicate code inside COMPAT_FREEBSD7 Modified: user/peter/kinfo/sys/kern/kern_descrip.c Modified: user/peter/kinfo/sys/kern/kern_descrip.c ============================================================================== --- user/peter/kinfo/sys/kern/kern_descrip.c Sun Nov 30 21:00:22 2008 (r185486) +++ user/peter/kinfo/sys/kern/kern_descrip.c Sun Nov 30 21:04:53 2008 (r185487) @@ -2509,7 +2509,6 @@ sysctl_kern_file(SYSCTL_HANDLER_ARGS) SYSCTL_PROC(_kern, KERN_FILE, file, CTLTYPE_OPAQUE|CTLFLAG_RD, 0, 0, sysctl_kern_file, "S,xfile", "Entire file table"); - /* * Sadly, the libgtop port has already been compiled for 7.1, but the code * does not do enough error checking and bad things might happen. Even @@ -2524,6 +2523,7 @@ SYSCTL_PROC(_kern, KERN_FILE, file, CTLT CTASSERT(sizeof(struct kinfo_ofile) == KINFO_OFILE_SIZE); #endif +#ifdef COMPAT_FREEBSD7 static int export_vnode_for_osysctl(struct vnode *vp, int type, struct kinfo_ofile *kif, struct filedesc *fdp, struct sysctl_req *req) @@ -2766,7 +2766,7 @@ sysctl_kern_proc_ofiledesc(SYSCTL_HANDLE static SYSCTL_NODE(_kern_proc, KERN_PROC_OFILEDESC, ofiledesc, CTLFLAG_RD, sysctl_kern_proc_ofiledesc, "Process ofiledesc entries"); - +#endif /* COMPAT_FREEBSD7 */ #ifdef KINFO_FILE_SIZE CTASSERT(sizeof(struct kinfo_file) == KINFO_FILE_SIZE); From owner-svn-src-user@FreeBSD.ORG Sun Nov 30 22:40:15 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 353101065673; Sun, 30 Nov 2008 22:40:15 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2446D8FC16; Sun, 30 Nov 2008 22:40:15 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mAUMeFD8004217; Sun, 30 Nov 2008 22:40:15 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mAUMeEx9004213; Sun, 30 Nov 2008 22:40:14 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200811302240.mAUMeEx9004213@svn.freebsd.org> From: Peter Wemm Date: Sun, 30 Nov 2008 22:40:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185493 - user/peter/kinfo/lib/libutil X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Nov 2008 22:40:15 -0000 Author: peter Date: Sun Nov 30 22:40:14 2008 New Revision: 185493 URL: http://svn.freebsd.org/changeset/base/185493 Log: Add experimental front ends to the kinfo_vmentry and kinfo_filedesc sysctls. Added: user/peter/kinfo/lib/libutil/kinfo_getfile.c (contents, props changed) user/peter/kinfo/lib/libutil/kinfo_getvmmap.c (contents, props changed) Modified: user/peter/kinfo/lib/libutil/Makefile user/peter/kinfo/lib/libutil/libutil.h Modified: user/peter/kinfo/lib/libutil/Makefile ============================================================================== --- user/peter/kinfo/lib/libutil/Makefile Sun Nov 30 22:40:11 2008 (r185492) +++ user/peter/kinfo/lib/libutil/Makefile Sun Nov 30 22:40:14 2008 (r185493) @@ -9,7 +9,8 @@ LIB= util SHLIB_MAJOR= 7 SRCS= _secure_path.c auth.c expand_number.c flopen.c fparseln.c gr_util.c \ - hexdump.c humanize_number.c kld.c login.c login_auth.c login_cap.c \ + hexdump.c humanize_number.c kinfo_getfile.c kinfo_getvmmap.c kld.c \ + login.c login_auth.c login_cap.c \ login_class.c login_crypt.c login_ok.c login_times.c login_tty.c \ logout.c logwtmp.c pidfile.c property.c pty.c pw_util.c realhostname.c \ stub.c trimdomain.c uucplock.c Added: user/peter/kinfo/lib/libutil/kinfo_getfile.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/peter/kinfo/lib/libutil/kinfo_getfile.c Sun Nov 30 22:40:14 2008 (r185493) @@ -0,0 +1,72 @@ +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include + +#include "libutil.h" + +struct kinfo_file * +kinfo_getfile(pid_t pid, int *cntp) +{ + int mib[4]; + int error; + int cnt; + size_t len; + char *buf, *bp, *eb; + struct kinfo_file *kif, *kp, *kf; + + len = 0; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_FILEDESC; + mib[3] = pid; + + error = sysctl(mib, 4, NULL, &len, NULL, 0); + if (error) + return (0); + len = len * 4 / 3; + buf = malloc(len); + if (buf == NULL) + return (0); + error = sysctl(mib, 4, buf, &len, NULL, 0); + if (error) { + free(buf); + return (0); + } + /* Pass 1: count items */ + cnt = 0; + bp = buf; + eb = buf + len; + while (bp < eb) { + kf = (struct kinfo_file *)bp; + bp += kf->kf_structsize; + cnt++; + } + + kif = calloc(cnt, sizeof(*kif)); + if (kif == NULL) { + free(buf); + return (0); + } + bp = buf; + eb = buf + len; + kp = kif; + /* Pass 2: unpack */ + while (bp < eb) { + kf = (struct kinfo_file *)bp; + /* Copy/expand into pre-zeroed buffer */ + memcpy(kp, kf, kf->kf_structsize); + /* Advance to next packed record */ + bp += kf->kf_structsize; + /* Set field size to fixed length, advance */ + kp->kf_structsize = sizeof(*kp); + kp++; + } + free(buf); + *cntp = cnt; + return (kif); /* Caller must free() return value */ +} Added: user/peter/kinfo/lib/libutil/kinfo_getvmmap.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/peter/kinfo/lib/libutil/kinfo_getvmmap.c Sun Nov 30 22:40:14 2008 (r185493) @@ -0,0 +1,72 @@ +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include + +#include "libutil.h" + +struct kinfo_vmentry * +kinfo_getvmmap(pid_t pid, int *cntp) +{ + int mib[4]; + int error; + int cnt; + size_t len; + char *buf, *bp, *eb; + struct kinfo_vmentry *kiv, *kp, *kv; + + len = 0; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_VMMAP; + mib[3] = pid; + + error = sysctl(mib, 4, NULL, &len, NULL, 0); + if (error) + return (0); + len = len * 4 / 3; + buf = malloc(len); + if (buf == NULL) + return (0); + error = sysctl(mib, 4, buf, &len, NULL, 0); + if (error) { + free(buf); + return (0); + } + /* Pass 1: count items */ + cnt = 0; + bp = buf; + eb = buf + len; + while (bp < eb) { + kv = (struct kinfo_vmentry *)bp; + bp += kv->kve_structsize; + cnt++; + } + + kiv = calloc(cnt, sizeof(*kiv)); + if (kiv == NULL) { + free(buf); + return (0); + } + bp = buf; + eb = buf + len; + kp = kiv; + /* Pass 2: unpack */ + while (bp < eb) { + kv = (struct kinfo_vmentry *)bp; + /* Copy/expand into pre-zeroed buffer */ + memcpy(kp, kv, kv->kve_structsize); + /* Advance to next packed record */ + bp += kv->kve_structsize; + /* Set field size to fixed length, advance */ + kp->kve_structsize = sizeof(*kp); + kp++; + } + free(buf); + *cntp = cnt; + return (kiv); /* Caller must free() return value */ +} Modified: user/peter/kinfo/lib/libutil/libutil.h ============================================================================== --- user/peter/kinfo/lib/libutil/libutil.h Sun Nov 30 22:40:11 2008 (r185492) +++ user/peter/kinfo/lib/libutil/libutil.h Sun Nov 30 22:40:14 2008 (r185493) @@ -64,6 +64,8 @@ struct termios; struct winsize; struct utmp; struct in_addr; +struct kinfo_file; +struct kinfo_vmentry; __BEGIN_DECLS void clean_environment(const char * const *_white, @@ -100,6 +102,10 @@ int realhostname_sa(char *host, size_t h int kld_isloaded(const char *name); int kld_load(const char *name); +struct kinfo_file * + kinfo_getfile(pid_t _pid, int *_cntp); +struct kinfo_vmentry * + kinfo_getvmmap(pid_t _pid, int *_cntp); #ifdef _STDIO_H_ /* avoid adding new includes */ char *fparseln(FILE *, size_t *, size_t *, const char[3], int); From owner-svn-src-user@FreeBSD.ORG Mon Dec 1 01:45:52 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D6D801065670; Mon, 1 Dec 2008 01:45:52 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C76028FC13; Mon, 1 Dec 2008 01:45:52 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB11jqTH008391; Mon, 1 Dec 2008 01:45:52 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB11jqxe008388; Mon, 1 Dec 2008 01:45:52 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200812010145.mB11jqxe008388@svn.freebsd.org> From: Peter Wemm Date: Mon, 1 Dec 2008 01:45:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185501 - user/peter/kinfo/usr.bin/procstat X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Dec 2008 01:45:52 -0000 Author: peter Date: Mon Dec 1 01:45:52 2008 New Revision: 185501 URL: http://svn.freebsd.org/changeset/base/185501 Log: Use libutil wrapper for kinfo_get{file|vmmap}() Modified: user/peter/kinfo/usr.bin/procstat/Makefile user/peter/kinfo/usr.bin/procstat/procstat_files.c user/peter/kinfo/usr.bin/procstat/procstat_vm.c Modified: user/peter/kinfo/usr.bin/procstat/Makefile ============================================================================== --- user/peter/kinfo/usr.bin/procstat/Makefile Mon Dec 1 01:34:18 2008 (r185500) +++ user/peter/kinfo/usr.bin/procstat/Makefile Mon Dec 1 01:45:52 2008 (r185501) @@ -12,4 +12,8 @@ SRCS= procstat.c \ procstat_threads.c \ procstat_vm.c +LDADD+= -lutil +DPADD+= ${LIBUTIL} +WARNS?= 4 + .include Modified: user/peter/kinfo/usr.bin/procstat/procstat_files.c ============================================================================== --- user/peter/kinfo/usr.bin/procstat/procstat_files.c Mon Dec 1 01:34:18 2008 (r185500) +++ user/peter/kinfo/usr.bin/procstat/procstat_files.c Mon Dec 1 01:45:52 2008 (r185501) @@ -41,6 +41,7 @@ #include #include #include +#include #include "procstat.h" @@ -134,42 +135,18 @@ void procstat_files(pid_t pid, struct kinfo_proc *kipp) { struct kinfo_file *freep, *kif; - int error, name[4]; - unsigned int i; + int i, cnt; const char *str; - size_t len; if (!hflag) printf("%5s %-16s %4s %1s %1s %-8s %3s %7s %-3s %-12s\n", "PID", "COMM", "FD", "T", "V", "FLAGS", "REF", "OFFSET", "PRO", "NAME"); - name[0] = CTL_KERN; - name[1] = KERN_PROC; - name[2] = KERN_PROC_FILEDESC; - name[3] = pid; - - error = sysctl(name, 4, NULL, &len, NULL, 0); - if (error < 0 && errno != ESRCH && errno != EPERM) { - warn("sysctl: kern.proc.filedesc: %d", pid); - return; - } - if (error < 0) - return; - - freep = kif = malloc(len); - if (kif == NULL) - err(-1, "malloc"); - - if (sysctl(name, 4, kif, &len, NULL, 0) < 0) { - warn("sysctl: kern.proc.filedesc %d", pid); - free(freep); - return; - } - - for (i = 0; i < len / sizeof(*kif); i++, kif++) { - if (kif->kf_structsize != sizeof(*kif)) - errx(-1, "kinfo_file mismatch"); + freep = kinfo_getfile(pid, &cnt); + for (i = 0; i < cnt; i++) { + kif = &freep[i]; + printf("%5d ", pid); printf("%-16s ", kipp->ki_comm); switch (kif->kf_fd) { Modified: user/peter/kinfo/usr.bin/procstat/procstat_vm.c ============================================================================== --- user/peter/kinfo/usr.bin/procstat/procstat_vm.c Mon Dec 1 01:34:18 2008 (r185500) +++ user/peter/kinfo/usr.bin/procstat/procstat_vm.c Mon Dec 1 01:45:52 2008 (r185501) @@ -34,6 +34,7 @@ #include #include #include +#include #include "procstat.h" @@ -41,10 +42,9 @@ void procstat_vm(pid_t pid, struct kinfo_proc *kipp __unused) { struct kinfo_vmentry *freep, *kve; - int error, name[4], ptrwidth; - unsigned int i; + int ptrwidth; + int i, cnt; const char *str; - size_t len; ptrwidth = 2*sizeof(void *) + 2; if (!hflag) @@ -52,38 +52,9 @@ procstat_vm(pid_t pid, struct kinfo_proc "PID", ptrwidth, "START", ptrwidth, "END", "PRT", "RES", "PRES", "REF", "SHD", "FL", "TP", "PATH"); - name[0] = CTL_KERN; - name[1] = KERN_PROC; - name[2] = KERN_PROC_VMMAP; - name[3] = pid; - - len = 0; - error = sysctl(name, 4, NULL, &len, NULL, 0); - if (error < 0 && errno != ESRCH && errno != EPERM) { - warn("sysctl: kern.proc.vmmap: %d", pid); - return; - } - if (error < 0) - return; - - /* - * Especially if running procstat -sv, we may need room for more - * mappings when printing than were present when we queried, so pad - * out the allocation a bit. - */ - len += sizeof(*kve) * 3; - freep = kve = malloc(len); - if (kve == NULL) - err(-1, "malloc"); - if (sysctl(name, 4, kve, &len, NULL, 0) < 0) { - warn("sysctl: kern.proc.vmmap: %d", pid); - free(freep); - return; - } - - for (i = 0; i < (len / sizeof(*kve)); i++, kve++) { - if (kve->kve_structsize != sizeof(*kve)) - errx(-1, "kinfo_vmentry structure mismatch"); + freep = kinfo_getvmmap(pid, &cnt); + for (i = 0; i < cnt; i++) { + kve = &freep[i]; printf("%5d ", pid); printf("%*p ", ptrwidth, kve->kve_start); printf("%*p ", ptrwidth, kve->kve_end); From owner-svn-src-user@FreeBSD.ORG Mon Dec 1 02:13:32 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CB78F106564A; Mon, 1 Dec 2008 02:13:32 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BB83E8FC1A; Mon, 1 Dec 2008 02:13:32 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB12DWb8009144; Mon, 1 Dec 2008 02:13:32 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB12DW73009140; Mon, 1 Dec 2008 02:13:32 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200812010213.mB12DW73009140@svn.freebsd.org> From: Peter Wemm Date: Mon, 1 Dec 2008 02:13:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185503 - in user/peter/kinfo/sys: kern sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Dec 2008 02:13:32 -0000 Author: peter Date: Mon Dec 1 02:13:32 2008 New Revision: 185503 URL: http://svn.freebsd.org/changeset/base/185503 Log: Duplicate another few hundred lines of code in order to be compatible with unreleased binaries. Modified: user/peter/kinfo/sys/kern/kern_descrip.c user/peter/kinfo/sys/kern/kern_proc.c user/peter/kinfo/sys/sys/sysctl.h user/peter/kinfo/sys/sys/user.h Modified: user/peter/kinfo/sys/kern/kern_descrip.c ============================================================================== --- user/peter/kinfo/sys/kern/kern_descrip.c Mon Dec 1 01:54:55 2008 (r185502) +++ user/peter/kinfo/sys/kern/kern_descrip.c Mon Dec 1 02:13:32 2008 (r185503) @@ -2806,6 +2806,7 @@ export_vnode_for_sysctl(struct vnode *vp strlcpy(kif->kf_path, fullpath, sizeof(kif->kf_path)); if (freepath != NULL) free(freepath, M_TEMP); + /* Pack record size down */ kif->kf_structsize = offsetof(struct kinfo_file, kf_path) + strlen(kif->kf_path) + 1; kif->kf_structsize = roundup(kif->kf_structsize, sizeof(uint64_t)); @@ -3003,6 +3004,7 @@ sysctl_kern_proc_filedesc(SYSCTL_HANDLER strlcpy(kif->kf_path, tty_devname(tp), sizeof(kif->kf_path)); } + /* Pack record size down */ kif->kf_structsize = offsetof(struct kinfo_file, kf_path) + strlen(kif->kf_path) + 1; kif->kf_structsize = roundup(kif->kf_structsize, Modified: user/peter/kinfo/sys/kern/kern_proc.c ============================================================================== --- user/peter/kinfo/sys/kern/kern_proc.c Mon Dec 1 01:54:55 2008 (r185502) +++ user/peter/kinfo/sys/kern/kern_proc.c Mon Dec 1 02:13:32 2008 (r185503) @@ -32,6 +32,7 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_compat.h" #include "opt_ddb.h" #include "opt_kdtrace.h" #include "opt_ktrace.h" @@ -1337,6 +1338,173 @@ sysctl_kern_proc_sv_name(SYSCTL_HANDLER_ return (sysctl_handle_string(oidp, sv_name, 0, req)); } +#ifdef KINFO_OVMENTRY_SIZE +CTASSERT(sizeof(struct kinfo_ovmentry) == KINFO_OVMENTRY_SIZE); +#endif + +#ifdef COMPAT_FREEBSD7 +static int +sysctl_kern_proc_ovmmap(SYSCTL_HANDLER_ARGS) +{ + vm_map_entry_t entry, tmp_entry; + unsigned int last_timestamp; + char *fullpath, *freepath; + struct kinfo_ovmentry *kve; + struct vattr va; + struct ucred *cred; + int error, *name; + struct vnode *vp; + struct proc *p; + vm_map_t map; + + name = (int *)arg1; + if ((p = pfind((pid_t)name[0])) == NULL) + return (ESRCH); + if (p->p_flag & P_WEXIT) { + PROC_UNLOCK(p); + return (ESRCH); + } + if ((error = p_candebug(curthread, p))) { + PROC_UNLOCK(p); + return (error); + } + _PHOLD(p); + PROC_UNLOCK(p); + + kve = malloc(sizeof(*kve), M_TEMP, M_WAITOK); + + map = &p->p_vmspace->vm_map; /* XXXRW: More locking required? */ + vm_map_lock_read(map); + for (entry = map->header.next; entry != &map->header; + entry = entry->next) { + vm_object_t obj, tobj, lobj; + vm_offset_t addr; + int vfslocked; + + if (entry->eflags & MAP_ENTRY_IS_SUB_MAP) + continue; + + bzero(kve, sizeof(*kve)); + kve->kve_structsize = sizeof(*kve); + + kve->kve_private_resident = 0; + obj = entry->object.vm_object; + if (obj != NULL) { + VM_OBJECT_LOCK(obj); + if (obj->shadow_count == 1) + kve->kve_private_resident = + obj->resident_page_count; + } + kve->kve_resident = 0; + addr = entry->start; + while (addr < entry->end) { + if (pmap_extract(map->pmap, addr)) + kve->kve_resident++; + addr += PAGE_SIZE; + } + + for (lobj = tobj = obj; tobj; tobj = tobj->backing_object) { + if (tobj != obj) + VM_OBJECT_LOCK(tobj); + if (lobj != obj) + VM_OBJECT_UNLOCK(lobj); + lobj = tobj; + } + + kve->kve_fileid = 0; + kve->kve_fsid = 0; + freepath = NULL; + fullpath = ""; + if (lobj) { + vp = NULL; + switch(lobj->type) { + case OBJT_DEFAULT: + kve->kve_type = KVME_TYPE_DEFAULT; + break; + case OBJT_VNODE: + kve->kve_type = KVME_TYPE_VNODE; + vp = lobj->handle; + vref(vp); + break; + case OBJT_SWAP: + kve->kve_type = KVME_TYPE_SWAP; + break; + case OBJT_DEVICE: + kve->kve_type = KVME_TYPE_DEVICE; + break; + case OBJT_PHYS: + kve->kve_type = KVME_TYPE_PHYS; + break; + case OBJT_DEAD: + kve->kve_type = KVME_TYPE_DEAD; + break; + default: + kve->kve_type = KVME_TYPE_UNKNOWN; + break; + } + if (lobj != obj) + VM_OBJECT_UNLOCK(lobj); + + kve->kve_ref_count = obj->ref_count; + kve->kve_shadow_count = obj->shadow_count; + VM_OBJECT_UNLOCK(obj); + if (vp != NULL) { + vn_fullpath(curthread, vp, &fullpath, + &freepath); + cred = curthread->td_ucred; + vfslocked = VFS_LOCK_GIANT(vp->v_mount); + vn_lock(vp, LK_SHARED | LK_RETRY); + if (VOP_GETATTR(vp, &va, cred) == 0) { + kve->kve_fileid = va.va_fileid; + kve->kve_fsid = va.va_fsid; + } + vput(vp); + VFS_UNLOCK_GIANT(vfslocked); + } + } else { + kve->kve_type = KVME_TYPE_NONE; + kve->kve_ref_count = 0; + kve->kve_shadow_count = 0; + } + + kve->kve_start = (void *)entry->start; + kve->kve_end = (void *)entry->end; + kve->kve_offset = entry->offset; + + if (entry->protection & VM_PROT_READ) + kve->kve_protection |= KVME_PROT_READ; + if (entry->protection & VM_PROT_WRITE) + kve->kve_protection |= KVME_PROT_WRITE; + if (entry->protection & VM_PROT_EXECUTE) + kve->kve_protection |= KVME_PROT_EXEC; + + if (entry->eflags & MAP_ENTRY_COW) + kve->kve_flags |= KVME_FLAG_COW; + if (entry->eflags & MAP_ENTRY_NEEDS_COPY) + kve->kve_flags |= KVME_FLAG_NEEDS_COPY; + + strlcpy(kve->kve_path, fullpath, sizeof(kve->kve_path)); + if (freepath != NULL) + free(freepath, M_TEMP); + + last_timestamp = map->timestamp; + vm_map_unlock_read(map); + error = SYSCTL_OUT(req, kve, sizeof(*kve)); + vm_map_lock_read(map); + if (error) + break; + if (last_timestamp + 1 != map->timestamp) { + vm_map_lookup_entry(map, addr - 1, &tmp_entry); + entry = tmp_entry; + } + } + vm_map_unlock_read(map); + PRELE(p); + free(kve, M_TEMP); + return (error); +} +#endif /* COMPAT_FREEBSD7 */ + #ifdef KINFO_VMENTRY_SIZE CTASSERT(sizeof(struct kinfo_vmentry) == KINFO_VMENTRY_SIZE); #endif @@ -1383,7 +1551,6 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_AR continue; bzero(kve, sizeof(*kve)); - kve->kve_structsize = sizeof(*kve); kve->kve_private_resident = 0; obj = entry->object.vm_object; @@ -1487,7 +1654,12 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_AR last_timestamp = map->timestamp; vm_map_unlock_read(map); - error = SYSCTL_OUT(req, kve, sizeof(*kve)); + /* Pack record size down */ + kve->kve_structsize = offsetof(struct kinfo_vmentry, kve_path) + + strlen(kve->kve_path) + 1; + kve->kve_structsize = roundup(kve->kve_structsize, + sizeof(uint64_t)); + error = SYSCTL_OUT(req, kve, kve->kve_structsize); vm_map_lock_read(map); if (error) break; @@ -1673,6 +1845,11 @@ static SYSCTL_NODE(_kern_proc, (KERN_PRO static SYSCTL_NODE(_kern_proc, (KERN_PROC_PROC | KERN_PROC_INC_THREAD), proc_td, CTLFLAG_RD, sysctl_kern_proc, "Return process table, no threads"); +#ifdef COMPAT_FREEBSD7 +static SYSCTL_NODE(_kern_proc, KERN_PROC_OVMMAP, ovmmap, CTLFLAG_RD, + sysctl_kern_proc_ovmmap, "Old Process vm map entries"); +#endif + static SYSCTL_NODE(_kern_proc, KERN_PROC_VMMAP, vmmap, CTLFLAG_RD, sysctl_kern_proc_vmmap, "Process vm map entries"); Modified: user/peter/kinfo/sys/sys/sysctl.h ============================================================================== --- user/peter/kinfo/sys/sys/sysctl.h Mon Dec 1 01:54:55 2008 (r185502) +++ user/peter/kinfo/sys/sys/sysctl.h Mon Dec 1 02:13:32 2008 (r185503) @@ -540,14 +540,16 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_e #define KERN_PROC_RGID 10 /* by real group id */ #define KERN_PROC_GID 11 /* by effective group id */ #define KERN_PROC_PATHNAME 12 /* path to executable */ -#define KERN_PROC_VMMAP 13 /* VM map entries for process */ +#define KERN_PROC_OVMMAP 13 /* Old VM map entries for process */ #define KERN_PROC_OFILEDESC 14 /* Old file descriptors for process */ #define KERN_PROC_KSTACK 15 /* Kernel stacks for process */ #define KERN_PROC_INC_THREAD 0x10 /* * modifier for pid, pgrp, tty, * uid, ruid, gid, rgid and proc + * This effectively uses 16-31 */ -#define KERN_PROC_FILEDESC 32 /* File descriptors for process */ +#define KERN_PROC_VMMAP 32 /* VM map entries for process */ +#define KERN_PROC_FILEDESC 33 /* File descriptors for process */ /* * KERN_IPC identifiers Modified: user/peter/kinfo/sys/sys/user.h ============================================================================== --- user/peter/kinfo/sys/sys/user.h Mon Dec 1 01:54:55 2008 (r185502) +++ user/peter/kinfo/sys/sys/user.h Mon Dec 1 02:13:32 2008 (r185503) @@ -348,6 +348,32 @@ struct kinfo_file { #define KVME_FLAG_COW 0x00000001 #define KVME_FLAG_NEEDS_COPY 0x00000002 +#if defined(__amd64__) +#define KINFO_OVMENTRY_SIZE 1168 +#endif +#if defined(__i386__) +#define KINFO_OVMENTRY_SIZE 1128 +#endif + +struct kinfo_ovmentry { + int kve_structsize; /* Size of kinfo_vmmapentry. */ + int kve_type; /* Type of map entry. */ + void *kve_start; /* Starting address. */ + void *kve_end; /* Finishing address. */ + int kve_flags; /* Flags on map entry. */ + int kve_resident; /* Number of resident pages. */ + int kve_private_resident; /* Number of private pages. */ + int kve_protection; /* Protection bitmask. */ + int kve_ref_count; /* VM obj ref count. */ + int kve_shadow_count; /* VM obj shadow count. */ + char kve_path[PATH_MAX]; /* Path to VM obj, if any. */ + void *_kve_pspare[8]; /* Space for more stuff. */ + off_t kve_offset; /* Mapping offset in object */ + uint64_t kve_fileid; /* inode number if vnode */ + dev_t kve_fsid; /* dev_t of vnode location */ + int _kve_ispare[3]; /* Space for more stuff. */ +}; + #if defined(__amd64__) || defined(__i386__) #define KINFO_VMENTRY_SIZE 1160 #endif From owner-svn-src-user@FreeBSD.ORG Mon Dec 1 16:32:46 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 076871065673; Mon, 1 Dec 2008 16:32:46 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E6F488FC12; Mon, 1 Dec 2008 16:32:45 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB1GWjXC030530; Mon, 1 Dec 2008 16:32:45 GMT (envelope-from dfr@svn.freebsd.org) Received: (from dfr@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB1GWjgT030529; Mon, 1 Dec 2008 16:32:45 GMT (envelope-from dfr@svn.freebsd.org) Message-Id: <200812011632.mB1GWjgT030529@svn.freebsd.org> From: Doug Rabson Date: Mon, 1 Dec 2008 16:32:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185520 - user/dfr/xenhvm/6/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Dec 2008 16:32:46 -0000 Author: dfr Date: Mon Dec 1 16:32:45 2008 New Revision: 185520 URL: http://svn.freebsd.org/changeset/base/185520 Log: Add a magic sequence which unplugs block and network devices from Xen's hardware emulator so that we can safely attach PV drivers to them without fighting with the ata and re drivers. Modified: user/dfr/xenhvm/6/sys/amd64/amd64/machdep.c Modified: user/dfr/xenhvm/6/sys/amd64/amd64/machdep.c ============================================================================== --- user/dfr/xenhvm/6/sys/amd64/amd64/machdep.c Mon Dec 1 15:27:00 2008 (r185519) +++ user/dfr/xenhvm/6/sys/amd64/amd64/machdep.c Mon Dec 1 16:32:45 2008 (r185520) @@ -1352,6 +1352,14 @@ hammer_time(u_int64_t modulep, u_int64_t if (env != NULL) strlcpy(kernelname, env, sizeof(kernelname)); +#ifdef XENHVM + if (inw(0x10) == 0x49d2) { + if (bootverbose) + printf("Xen detected: disabling emulated block and network devices\n"); + outw(0x10, 3); + } +#endif + /* Location of kernel stack for locore */ return ((u_int64_t)thread0.td_pcb); } From owner-svn-src-user@FreeBSD.ORG Tue Dec 2 02:32:13 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8EFFE1065672; Tue, 2 Dec 2008 02:32:13 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 88EEF8FC18; Tue, 2 Dec 2008 02:32:13 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB22WD4K045747; Tue, 2 Dec 2008 02:32:13 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB22WDcS045746; Tue, 2 Dec 2008 02:32:13 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200812020232.mB22WDcS045746@svn.freebsd.org> From: Peter Wemm Date: Tue, 2 Dec 2008 02:32:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185541 - user/peter/kinfo/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Dec 2008 02:32:13 -0000 Author: peter Date: Tue Dec 2 02:32:13 2008 New Revision: 185541 URL: http://svn.freebsd.org/changeset/base/185541 Log: Prune some whining. Modified: user/peter/kinfo/sys/kern/kern_descrip.c Modified: user/peter/kinfo/sys/kern/kern_descrip.c ============================================================================== --- user/peter/kinfo/sys/kern/kern_descrip.c Tue Dec 2 02:30:12 2008 (r185540) +++ user/peter/kinfo/sys/kern/kern_descrip.c Tue Dec 2 02:32:13 2008 (r185541) @@ -2509,16 +2509,6 @@ sysctl_kern_file(SYSCTL_HANDLER_ARGS) SYSCTL_PROC(_kern, KERN_FILE, file, CTLTYPE_OPAQUE|CTLFLAG_RD, 0, 0, sysctl_kern_file, "S,xfile", "Entire file table"); -/* - * Sadly, the libgtop port has already been compiled for 7.1, but the code - * does not do enough error checking and bad things might happen. Even - * though we've not made a release with this stuff in it, the packages have - * apparently been built. - * - * This should be deleted shortly after 7.1 is released and we go back to - * 7-stable again. If the libgtop port can be rebuilt, then this can get - * deleted before release. - */ #ifdef KINFO_OFILE_SIZE CTASSERT(sizeof(struct kinfo_ofile) == KINFO_OFILE_SIZE); #endif From owner-svn-src-user@FreeBSD.ORG Tue Dec 2 06:30:58 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B2CAA1065678; Tue, 2 Dec 2008 06:30:58 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AFDA88FC1C; Tue, 2 Dec 2008 06:30:58 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB26UwpE050948; Tue, 2 Dec 2008 06:30:58 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB26UwRU050947; Tue, 2 Dec 2008 06:30:58 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200812020630.mB26UwRU050947@svn.freebsd.org> From: Peter Wemm Date: Tue, 2 Dec 2008 06:30:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185546 - user/peter/kinfo/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Dec 2008 06:30:58 -0000 Author: peter Date: Tue Dec 2 06:30:58 2008 New Revision: 185546 URL: http://svn.freebsd.org/changeset/base/185546 Log: Diff reduction. Modified: user/peter/kinfo/sys/kern/kern_proc.c Modified: user/peter/kinfo/sys/kern/kern_proc.c ============================================================================== --- user/peter/kinfo/sys/kern/kern_proc.c Tue Dec 2 04:54:31 2008 (r185545) +++ user/peter/kinfo/sys/kern/kern_proc.c Tue Dec 2 06:30:58 2008 (r185546) @@ -1467,9 +1467,9 @@ sysctl_kern_proc_ovmmap(SYSCTL_HANDLER_A kve->kve_shadow_count = 0; } - kve->kve_start = (void *)entry->start; - kve->kve_end = (void *)entry->end; - kve->kve_offset = entry->offset; + kve->kve_start = (void*)entry->start; + kve->kve_end = (void*)entry->end; + kve->kve_offset = (off_t)entry->offset; if (entry->protection & VM_PROT_READ) kve->kve_protection |= KVME_PROT_READ; From owner-svn-src-user@FreeBSD.ORG Tue Dec 2 06:34:08 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 678D11065672; Tue, 2 Dec 2008 06:34:08 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 64C058FC0C; Tue, 2 Dec 2008 06:34:08 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB26Y8uS051077; Tue, 2 Dec 2008 06:34:08 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB26Y8Ao051076; Tue, 2 Dec 2008 06:34:08 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200812020634.mB26Y8Ao051076@svn.freebsd.org> From: Peter Wemm Date: Tue, 2 Dec 2008 06:34:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185547 - user/peter/kinfo/sys/sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Dec 2008 06:34:08 -0000 Author: peter Date: Tue Dec 2 06:34:08 2008 New Revision: 185547 URL: http://svn.freebsd.org/changeset/base/185547 Log: Minor comment tweak. Modified: user/peter/kinfo/sys/sys/user.h Modified: user/peter/kinfo/sys/sys/user.h ============================================================================== --- user/peter/kinfo/sys/sys/user.h Tue Dec 2 06:30:58 2008 (r185546) +++ user/peter/kinfo/sys/sys/user.h Tue Dec 2 06:34:08 2008 (r185547) @@ -310,7 +310,7 @@ struct kinfo_ofile { #endif struct kinfo_file { - int kf_structsize; /* Size of kinfo_file. */ + int kf_structsize; /* Variable size of record. */ int kf_type; /* Descriptor type. */ int kf_fd; /* Array index. */ int kf_ref_count; /* Reference count. */ @@ -379,7 +379,7 @@ struct kinfo_ovmentry { #endif struct kinfo_vmentry { - int kve_structsize; /* Size of kinfo_vmmapentry. */ + int kve_structsize; /* Variable size of record. */ int kve_type; /* Type of map entry. */ uint64_t kve_start; /* Starting address. */ uint64_t kve_end; /* Finishing address. */ From owner-svn-src-user@FreeBSD.ORG Tue Dec 2 07:50:57 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8D4DB1065688; Tue, 2 Dec 2008 07:50:57 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8AF648FC1E; Tue, 2 Dec 2008 07:50:57 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB27ovAb052912; Tue, 2 Dec 2008 07:50:57 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB27ove4052911; Tue, 2 Dec 2008 07:50:57 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812020750.mB27ove4052911@svn.freebsd.org> From: Kip Macy Date: Tue, 2 Dec 2008 07:50:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185550 - user/kmacy/HEAD_fast_multi_xmit/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Dec 2008 07:50:57 -0000 Author: kmacy Date: Tue Dec 2 07:50:57 2008 New Revision: 185550 URL: http://svn.freebsd.org/changeset/base/185550 Log: cast lockarg to struct mtx * Modified: user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_event.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_event.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_event.c Tue Dec 2 07:01:18 2008 (r185549) +++ user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_event.c Tue Dec 2 07:50:57 2008 (r185550) @@ -203,7 +203,7 @@ SYSCTL_INT(_kern, OID_AUTO, kq_calloutma if (list->kl_lock != knlist_mtx_lock) \ list->kl_lock(list->kl_lockarg); \ else \ - mtx_lock(list->kl_lockarg); \ + mtx_lock((struct mtx *)list->kl_lockarg); \ } \ } while (0) #define KN_LIST_UNLOCK(kn) do { \ @@ -438,7 +438,7 @@ knote_fork(struct knlist *list, int pid) if (list->kl_lock != knlist_mtx_lock) list->kl_lock(list->kl_lockarg); else - mtx_lock(list->kl_lockarg); + mtx_lock((struct mtx *)list->kl_lockarg); SLIST_FOREACH(kn, &list->kl_list, kn_selnext) { if ((kn->kn_status & KN_INFLUX) == KN_INFLUX) @@ -493,7 +493,7 @@ knote_fork(struct knlist *list, int pid) if (list->kl_lock != knlist_mtx_lock) list->kl_lock(list->kl_lockarg); else - mtx_lock(list->kl_lockarg); + mtx_lock((struct mtx *)list->kl_lockarg); } list->kl_unlock(list->kl_lockarg); } @@ -1639,7 +1639,7 @@ knote(struct knlist *list, long hint, in if (list->kl_lock != knlist_mtx_lock) list->kl_lock(list->kl_lockarg); else - mtx_lock(list->kl_lockarg); + mtx_lock((struct mtx *)list->kl_lockarg); } /* @@ -1684,7 +1684,7 @@ knlist_add(struct knlist *knl, struct kn if (list->kl_lock != knlist_mtx_lock) list->kl_lock(list->kl_lockarg); else - mtx_lock(list->kl_lockarg); + mtx_lock((struct mtx *)list->kl_lockarg); } SLIST_INSERT_HEAD(&knl->kl_list, kn, kn_selnext); if (!islocked) @@ -1710,7 +1710,7 @@ knlist_remove_kq(struct knlist *knl, str if (list->kl_lock != knlist_mtx_lock) list->kl_lock(list->kl_lockarg); else - mtx_lock(list->kl_lockarg); + mtx_lock((struct mtx *)list->kl_lockarg); } SLIST_REMOVE(&knl->kl_list, kn, knote, kn_selnext); @@ -1837,7 +1837,7 @@ again: /* need to reacquire lock since if (knl->kl_lock != knlist_mtx_lock) knl->kl_lock(knl->kl_lockarg); else - mtx_lock(knl->kl_lockarg); + mtx_lock((struct mtx *)knl->kl_lockarg); } SLIST_FOREACH_SAFE(kn, &knl->kl_list, kn_selnext, kn2) { From owner-svn-src-user@FreeBSD.ORG Tue Dec 2 08:22:49 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BB2B8106564A; Tue, 2 Dec 2008 08:22:49 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B8E068FC1C; Tue, 2 Dec 2008 08:22:49 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB28MnX1053545; Tue, 2 Dec 2008 08:22:49 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB28MnNv053543; Tue, 2 Dec 2008 08:22:49 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812020822.mB28MnNv053543@svn.freebsd.org> From: Kip Macy Date: Tue, 2 Dec 2008 08:22:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185551 - user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Dec 2008 08:22:49 -0000 Author: kmacy Date: Tue Dec 2 08:22:49 2008 New Revision: 185551 URL: http://svn.freebsd.org/changeset/base/185551 Log: Modify em to optionally support the if_transmit interface Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Tue Dec 2 07:50:57 2008 (r185550) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Tue Dec 2 08:22:49 2008 (r185551) @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -970,6 +971,78 @@ em_resume(device_t dev) * the packet is requeued. **********************************************************************/ +#ifdef IFNET_MULTIQUEUE +static int +em_transmit_locked(struct ifnet *ifp, struct mbuf *m) +{ + struct adapter *adapter = ifp->if_softc; + int error; + + EM_TX_LOCK_ASSERT(adapter); + if (((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != + IFF_DRV_RUNNING) + || (!adapter->link_active)) + + return (buf_ring_enqueue(adapter->br, m)); + + if (buf_ring_empty(adapter->br) && + (adapter->num_tx_desc_avail > EM_TX_OP_THRESHOLD)) { + if (em_xmit(adapter, &m)) + if (m && (error = buf_ring_enqueue(adapter->br, m)) != 0) { + m_freem(m); + return (error); + } + + } else if ((error = buf_ring_enqueue(adapter->br, m)) != 0) + return (error); + + if (!buf_ring_empty(adapter->br)) + em_start_locked(ifp); + + return (0); +} + +static void +em_start_locked(struct ifnet *ifp) +{ + struct adapter *adapter = ifp->if_softc; + struct mbuf *m_head; + + EM_TX_LOCK_ASSERT(adapter); + + if ((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != + IFF_DRV_RUNNING) + return; + if (!adapter->link_active) + return; + + while ((adapter->num_tx_desc_avail > EM_TX_OP_THRESHOLD) + && (!buf_ring_empty(adapter->br))) { + + m_head = buf_ring_dequeue_sc(adapter->br); + if (m_head == NULL) + break; + /* + * Encapsulation can modify our pointer, and or make it + * NULL on failure. In that event, we can't requeue. + */ + if (em_xmit(adapter, &m_head)) { + if (m_head == NULL) + break; + break; + } + + /* Send a copy of the frame to the BPF listener */ + ETHER_BPF_MTAP(ifp, m_head); + + /* Set timeout in case hardware has problems transmitting. */ + adapter->watchdog_timer = EM_TX_TIMEOUT; + } + if ((adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD)) + ifp->if_drv_flags |= IFF_DRV_OACTIVE; + +} +#else static void em_start_locked(struct ifnet *ifp) { @@ -1008,6 +1081,7 @@ em_start_locked(struct ifnet *ifp) adapter->watchdog_timer = EM_TX_TIMEOUT; } } +#endif static void em_start(struct ifnet *ifp) @@ -1020,6 +1094,23 @@ em_start(struct ifnet *ifp) EM_TX_UNLOCK(adapter); } +static int +em_transmit(struct ifnet *ifp, struct mbuf *m) +{ + + struct adapter *adapter = ifp->if_softc; + int error = 0; + + if(EM_TX_TRYLOCK(adapter)) { + if (ifp->if_drv_flags & IFF_DRV_RUNNING) + error = em_transmit_locked(ifp, m); + EM_TX_UNLOCK(adapter); + } else + error = buf_ring_enqueue(adapter->br, m); + + return (error); +} + /********************************************************************* * Ioctl entry point * @@ -1575,7 +1666,11 @@ em_poll(struct ifnet *ifp, enum poll_cmd EM_TX_LOCK(adapter); em_txeof(adapter); +#ifdef IFNET_MULTIQUEUE + if (!buf_ring_empty(adapter->br)) +#else if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) +#endif em_start_locked(ifp); EM_TX_UNLOCK(adapter); } @@ -1643,8 +1738,15 @@ em_intr(void *arg) } EM_CORE_UNLOCK(adapter); + if (ifp->if_drv_flags & IFF_DRV_RUNNING && - !IFQ_DRV_IS_EMPTY(&ifp->if_snd)) +#ifdef IFNET_MULTIQUEUE + !buf_ring_empty(adapter->br) +#else + !IFQ_DRV_IS_EMPTY(&ifp->if_snd) +#endif + ) + em_start(ifp); } @@ -1683,7 +1785,11 @@ em_handle_rxtx(void *context, int pendin EM_TX_LOCK(adapter); em_txeof(adapter); +#ifdef IFNET_MULTIQUEUE + if (!buf_ring_empty(adapter->br)) +#else if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) +#endif em_start_locked(ifp); EM_TX_UNLOCK(adapter); } @@ -1710,9 +1816,19 @@ em_handle_tx(void *context, int pending) struct ifnet *ifp = adapter->ifp; if (ifp->if_drv_flags & IFF_DRV_RUNNING) { +#ifdef IFNET_MULTIQUEUE + if (!EM_TX_TRYLOCK(adapter)) + return; +#else EM_TX_LOCK(adapter); +#endif + em_txeof(adapter); +#ifdef IFNET_MULTIQUEUE + if (!buf_ring_empty(adapter->br)) +#else if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) +#endif em_start_locked(ifp); EM_TX_UNLOCK(adapter); } @@ -2509,7 +2625,8 @@ em_local_timer(void *arg) struct ifnet *ifp = adapter->ifp; EM_CORE_LOCK_ASSERT(adapter); - + taskqueue_enqueue(adapter->tq, + &adapter->rxtx_task); em_update_link_status(adapter); em_update_stats_counters(adapter); @@ -3101,7 +3218,11 @@ em_setup_interface(device_t dev, struct ether_ifattach(ifp, adapter->hw.mac.addr); ifp->if_capabilities = ifp->if_capenable = 0; - +#ifdef IFNET_MULTIQUEUE + ifp->if_transmit = em_transmit; + adapter->br = buf_ring_alloc(2048, M_DEVBUF, M_WAITOK, &adapter->tx_mtx); +#endif + if (adapter->hw.mac.type >= e1000_82543) { int version_cap; #if __FreeBSD_version < 700000 Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.h Tue Dec 2 07:50:57 2008 (r185550) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.h Tue Dec 2 08:22:49 2008 (r185551) @@ -36,6 +36,9 @@ #ifndef _EM_H_DEFINED_ #define _EM_H_DEFINED_ +#define IFNET_MULTIQUEUE 1 + + /* Tunables */ /* @@ -301,6 +304,9 @@ struct em_dma_alloc { /* Our adapter structure */ struct adapter { struct ifnet *ifp; +#ifdef IFNET_MULTIQUEUE + struct buf_ring *br; +#endif struct e1000_hw hw; /* FreeBSD operating-system-specific structures. */ @@ -479,6 +485,7 @@ typedef struct _DESCRIPTOR_PAIR #define EM_RX_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->rx_mtx) #define EM_CORE_LOCK(_sc) mtx_lock(&(_sc)->core_mtx) #define EM_TX_LOCK(_sc) mtx_lock(&(_sc)->tx_mtx) +#define EM_TX_TRYLOCK(_sc) mtx_trylock(&(_sc)->tx_mtx) #define EM_RX_LOCK(_sc) mtx_lock(&(_sc)->rx_mtx) #define EM_CORE_UNLOCK(_sc) mtx_unlock(&(_sc)->core_mtx) #define EM_TX_UNLOCK(_sc) mtx_unlock(&(_sc)->tx_mtx) From owner-svn-src-user@FreeBSD.ORG Tue Dec 2 08:23:45 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EB1AF106564A; Tue, 2 Dec 2008 08:23:45 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E958D8FC0A; Tue, 2 Dec 2008 08:23:45 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB28NjCE053608; Tue, 2 Dec 2008 08:23:45 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB28Nj9H053607; Tue, 2 Dec 2008 08:23:45 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812020823.mB28Nj9H053607@svn.freebsd.org> From: Kip Macy Date: Tue, 2 Dec 2008 08:23:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185552 - user/kmacy/HEAD_fast_multi_xmit/sys/sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Dec 2008 08:23:46 -0000 Author: kmacy Date: Tue Dec 2 08:23:45 2008 New Revision: 185552 URL: http://svn.freebsd.org/changeset/base/185552 Log: return ENOBUFS on full ring Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h Tue Dec 2 08:22:49 2008 (r185551) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h Tue Dec 2 08:23:45 2008 (r185552) @@ -115,7 +115,7 @@ buf_ring_enqueue(struct buf_ring *br, vo if (prod_next == cons_tail) { critical_exit(); - return (ENOSPC); + return (ENOBUFS); } success = atomic_cmpset_int(&br->br_prod_head, prod_head, From owner-svn-src-user@FreeBSD.ORG Wed Dec 3 11:48:21 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 712CB1065670; Wed, 3 Dec 2008 11:48:21 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5BE748FC08; Wed, 3 Dec 2008 11:48:21 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB3BmLVR090180; Wed, 3 Dec 2008 11:48:21 GMT (envelope-from dfr@svn.freebsd.org) Received: (from dfr@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB3BmL5v090174; Wed, 3 Dec 2008 11:48:21 GMT (envelope-from dfr@svn.freebsd.org) Message-Id: <200812031148.mB3BmL5v090174@svn.freebsd.org> From: Doug Rabson Date: Wed, 3 Dec 2008 11:48:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185578 - in user/dfr/xenhvm/6/sys: amd64/include/xen conf dev/xen/blkfront dev/xen/console dev/xen/netfront dev/xen/xenpci i386/include/xen i386/xen xen xen/xenbus X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Dec 2008 11:48:21 -0000 Author: dfr Date: Wed Dec 3 11:48:20 2008 New Revision: 185578 URL: http://svn.freebsd.org/changeset/base/185578 Log: Use newbus to manage Xen devices. Added: user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_if.m user/dfr/xenhvm/6/sys/xen/xenbus/xenbusvar.h (contents, props changed) - copied, changed from r185387, user/dfr/xenhvm/6/sys/i386/include/xen/xenbus.h Deleted: user/dfr/xenhvm/6/sys/amd64/include/xen/xenbus.h user/dfr/xenhvm/6/sys/i386/include/xen/xenbus.h Modified: user/dfr/xenhvm/6/sys/conf/files user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c user/dfr/xenhvm/6/sys/dev/xen/blkfront/block.h user/dfr/xenhvm/6/sys/dev/xen/console/console.c user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c user/dfr/xenhvm/6/sys/i386/xen/xen_machdep.c user/dfr/xenhvm/6/sys/xen/gnttab.c user/dfr/xenhvm/6/sys/xen/gnttab.h user/dfr/xenhvm/6/sys/xen/reboot.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_client.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.h user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_dev.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_probe.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_xs.c Modified: user/dfr/xenhvm/6/sys/conf/files ============================================================================== --- user/dfr/xenhvm/6/sys/conf/files Wed Dec 3 09:01:12 2008 (r185577) +++ user/dfr/xenhvm/6/sys/conf/files Wed Dec 3 11:48:20 2008 (r185578) @@ -2055,8 +2055,9 @@ xen/reboot.c optional xen xen/xenbus/xenbus_client.c optional xen xen/xenbus/xenbus_comms.c optional xen xen/xenbus/xenbus_dev.c optional xen +xen/xenbus/xenbus_if.m optional xen xen/xenbus/xenbus_probe.c optional xen -xen/xenbus/xenbus_probe_backend.c optional xen +#xen/xenbus/xenbus_probe_backend.c optional xen xen/xenbus/xenbus_xs.c optional xen dev/xen/console/console.c optional xen dev/xen/console/xencons_ring.c optional xen @@ -2073,12 +2074,8 @@ xen/reboot.c optional xenhvm xen/xenbus/xenbus_client.c optional xenhvm xen/xenbus/xenbus_comms.c optional xenhvm xen/xenbus/xenbus_dev.c optional xenhvm -#xen/xenbus/xenbus_newbus.c optional xenhvm +xen/xenbus/xenbus_if.m optional xenhvm xen/xenbus/xenbus_probe.c optional xenhvm -xen/xenbus/xenbus_probe_backend.c optional xenhvm +#xen/xenbus/xenbus_probe_backend.c optional xenhvm xen/xenbus/xenbus_xs.c optional xenhvm -#dev/xen/console/console.c optional xenhvm -#dev/xen/console/xencons_ring.c optional xenhvm -#dev/xen/blkfront/blkfront.c optional xenhvm -#dev/xen/netfront/netfront.c optional xenhvm dev/xen/xenpci/xenpci.c optional xenpci Modified: user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c Wed Dec 3 09:01:12 2008 (r185577) +++ user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c Wed Dec 3 11:48:20 2008 (r185578) @@ -43,10 +43,10 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include +#include #include #include @@ -54,15 +54,17 @@ __FBSDID("$FreeBSD$"); #include +#include "xenbus_if.h" + #define ASSERT(S) KASSERT(S, (#S)) /* prototypes */ struct xb_softc; static void xb_startio(struct xb_softc *sc); -static void connect(struct blkfront_info *); -static void blkfront_closing(struct xenbus_device *); -static int blkfront_remove(struct xenbus_device *); -static int talk_to_backend(struct xenbus_device *, struct blkfront_info *); -static int setup_blkring(struct xenbus_device *, struct blkfront_info *); +static void connect(device_t, struct blkfront_info *); +static void blkfront_closing(device_t); +static int blkfront_detach(device_t); +static int talk_to_backend(device_t, struct blkfront_info *); +static int setup_blkring(device_t, struct blkfront_info *); static void blkif_int(void *); #if 0 static void blkif_restart_queue(void *arg); @@ -204,8 +206,9 @@ blkfront_vdevice_to_unit(int vdevice, in } int -xlvbd_add(blkif_sector_t capacity, int vdevice, uint16_t vdisk_info, uint16_t sector_size, - struct blkfront_info *info) +xlvbd_add(device_t dev, blkif_sector_t capacity, + int vdevice, uint16_t vdisk_info, uint16_t sector_size, + struct blkfront_info *info) { struct xb_softc *sc; int unit, error = 0; @@ -218,6 +221,9 @@ xlvbd_add(blkif_sector_t capacity, int v sc->xb_info = info; info->sc = sc; + if (strcmp(name, "xbd")) + device_printf(dev, "attaching as %s%d\n", name, unit); + memset(&sc->xb_disk, 0, sizeof(sc->xb_disk)); sc->xb_disk = disk_alloc(); sc->xb_disk->d_unit = sc->xb_unit; @@ -295,19 +301,33 @@ xb_strategy(struct bio *bp) return; } +static int +blkfront_probe(device_t dev) +{ -/* Setup supplies the backend dir, virtual device. + if (!strcmp(xenbus_get_type(dev), "vbd")) { + device_set_desc(dev, "Virtual Block Device"); + device_quiet(dev); + return (0); + } -We place an event channel and shared frame entries. -We watch backend to wait if it's ok. */ -static int blkfront_probe(struct xenbus_device *dev, - const struct xenbus_device_id *id) + return (ENXIO); +} + +/* + * Setup supplies the backend dir, virtual device. We place an event + * channel and shared frame entries. We watch backend to wait if it's + * ok. + */ +static int +blkfront_attach(device_t dev) { - int err, vdevice, i; + int err, vdevice, i, unit; struct blkfront_info *info; + const char *name; /* FIXME: Use dynamic device id if this is not set. */ - err = xenbus_scanf(XBT_NIL, dev->nodename, + err = xenbus_scanf(XBT_NIL, xenbus_get_node(dev), "virtual-device", "%i", &vdevice); if (err != 1) { xenbus_dev_fatal(dev, err, "reading virtual-device"); @@ -315,11 +335,11 @@ static int blkfront_probe(struct xenbus_ return (err); } - info = malloc(sizeof(*info), M_DEVBUF, M_NOWAIT|M_ZERO); - if (info == NULL) { - xenbus_dev_fatal(dev, ENOMEM, "allocating info structure"); - return ENOMEM; - } + blkfront_vdevice_to_unit(vdevice, &unit, &name); + if (!strcmp(name, "xbd")) + device_set_unit(dev, unit); + + info = device_get_softc(dev); /* * XXX debug only @@ -339,23 +359,20 @@ static int blkfront_probe(struct xenbus_ info->shadow[BLK_RING_SIZE-1].req.id = 0x0fffffff; /* Front end dir is a number, which is used as the id. */ - info->handle = strtoul(strrchr(dev->nodename,'/')+1, NULL, 0); - dev->dev_driver_data = info; + info->handle = strtoul(strrchr(xenbus_get_node(dev),'/')+1, NULL, 0); err = talk_to_backend(dev, info); if (err) { - free(info, M_DEVBUF); - dev->dev_driver_data = NULL; return err; } - return 0; + return (0); } - -static int blkfront_resume(struct xenbus_device *dev) +static int +blkfront_resume(device_t dev) { - struct blkfront_info *info = dev->dev_driver_data; + struct blkfront_info *info = device_get_softc(dev); int err; DPRINTK("blkfront_resume: %s\n", dev->nodename); @@ -370,8 +387,8 @@ static int blkfront_resume(struct xenbus } /* Common code used when first setting up, and when resuming. */ -static int talk_to_backend(struct xenbus_device *dev, - struct blkfront_info *info) +static int +talk_to_backend(device_t dev, struct blkfront_info *info) { const char *message = NULL; struct xenbus_transaction xbt; @@ -389,19 +406,19 @@ static int talk_to_backend(struct xenbus goto destroy_blkring; } - err = xenbus_printf(xbt, dev->nodename, + err = xenbus_printf(xbt, xenbus_get_node(dev), "ring-ref","%u", info->ring_ref); if (err) { message = "writing ring-ref"; goto abort_transaction; } - err = xenbus_printf(xbt, dev->nodename, + err = xenbus_printf(xbt, xenbus_get_node(dev), "event-channel", "%u", irq_to_evtchn_port(info->irq)); if (err) { message = "writing event-channel"; goto abort_transaction; } - err = xenbus_printf(xbt, dev->nodename, + err = xenbus_printf(xbt, xenbus_get_node(dev), "protocol", "%s", XEN_IO_PROTO_ABI_NATIVE); if (err) { message = "writing protocol"; @@ -415,7 +432,7 @@ static int talk_to_backend(struct xenbus xenbus_dev_fatal(dev, err, "completing transaction"); goto destroy_blkring; } - xenbus_switch_state(dev, XenbusStateInitialised); + xenbus_set_state(dev, XenbusStateInitialised); return 0; @@ -430,7 +447,7 @@ static int talk_to_backend(struct xenbus } static int -setup_blkring(struct xenbus_device *dev, struct blkfront_info *info) +setup_blkring(device_t dev, struct blkfront_info *info) { blkif_sring_t *sring; int err; @@ -453,7 +470,7 @@ setup_blkring(struct xenbus_device *dev, } info->ring_ref = err; - err = bind_listening_port_to_irqhandler(dev->otherend_id, + err = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev), "xbd", (driver_intr_t *)blkif_int, info, INTR_TYPE_BIO | INTR_MPSAFE, NULL); if (err <= 0) { @@ -473,10 +490,10 @@ setup_blkring(struct xenbus_device *dev, /** * Callback received when the backend's state changes. */ -static void backend_changed(struct xenbus_device *dev, - XenbusState backend_state) +static void +blkfront_backend_changed(device_t dev, XenbusState backend_state) { - struct blkfront_info *info = dev->dev_driver_data; + struct blkfront_info *info = device_get_softc(dev); DPRINTK("blkfront:backend_changed.\n"); @@ -491,7 +508,7 @@ static void backend_changed(struct xenbu break; case XenbusStateConnected: - connect(info); + connect(dev, info); break; case XenbusStateClosing: @@ -522,7 +539,7 @@ static void backend_changed(struct xenbu ** the details about the physical device - #sectors, size, etc). */ static void -connect(struct blkfront_info *info) +connect(device_t dev, struct blkfront_info *info) { unsigned long sectors, sector_size; unsigned int binfo; @@ -532,28 +549,34 @@ connect(struct blkfront_info *info) (info->connected == BLKIF_STATE_SUSPENDED) ) return; - DPRINTK("blkfront.c:connect:%s.\n", info->xbdev->otherend); + DPRINTK("blkfront.c:connect:%s.\n", xenbus_get_otherend_path(dev)); - err = xenbus_gather(XBT_NIL, info->xbdev->otherend, + err = xenbus_gather(XBT_NIL, xenbus_get_otherend_path(dev), "sectors", "%lu", §ors, "info", "%u", &binfo, "sector-size", "%lu", §or_size, NULL); if (err) { - xenbus_dev_fatal(info->xbdev, err, - "reading backend fields at %s", - info->xbdev->otherend); + xenbus_dev_fatal(dev, err, + "reading backend fields at %s", + xenbus_get_otherend_path(dev)); return; } - err = xenbus_gather(XBT_NIL, info->xbdev->otherend, + err = xenbus_gather(XBT_NIL, xenbus_get_otherend_path(dev), "feature-barrier", "%lu", &info->feature_barrier, NULL); if (err) info->feature_barrier = 0; - xlvbd_add(sectors, info->vdevice, binfo, sector_size, info); + device_printf(dev, "%juMB <%s> at %s", + (uintmax_t) sectors / (1048576 / sector_size), + device_get_desc(dev), + xenbus_get_node(dev)); + bus_print_child_footer(device_get_parent(dev), dev); - (void)xenbus_switch_state(info->xbdev, XenbusStateConnected); + xlvbd_add(dev, sectors, info->vdevice, binfo, sector_size, info); + + (void)xenbus_set_state(dev, XenbusStateConnected); /* Kick pending requests. */ mtx_lock(&blkif_io_lock); @@ -573,11 +596,12 @@ connect(struct blkfront_info *info) * the backend. Once is this done, we can switch to Closed in * acknowledgement. */ -static void blkfront_closing(struct xenbus_device *dev) +static void +blkfront_closing(device_t dev) { - struct blkfront_info *info = dev->dev_driver_data; + struct blkfront_info *info = device_get_softc(dev); - DPRINTK("blkfront_closing: %s removed\n", dev->nodename); + DPRINTK("blkfront_closing: %s removed\n", xenbus_get_node(dev)); if (info->mi) { DPRINTK("Calling xlvbd_del\n"); @@ -585,20 +609,19 @@ static void blkfront_closing(struct xenb info->mi = NULL; } - xenbus_switch_state(dev, XenbusStateClosed); + xenbus_set_state(dev, XenbusStateClosed); } -static int blkfront_remove(struct xenbus_device *dev) +static int +blkfront_detach(device_t dev) { - struct blkfront_info *info = dev->dev_driver_data; + struct blkfront_info *info = device_get_softc(dev); - DPRINTK("blkfront_remove: %s removed\n", dev->nodename); + DPRINTK("blkfront_remove: %s removed\n", xenbus_get_node(dev)); blkif_free(info, 0); - free(info, M_DEVBUF); - return 0; } @@ -706,8 +729,9 @@ blkif_close(struct disk *dp) /* Check whether we have been instructed to close. We will have ignored this request initially, as the device was still mounted. */ - struct xenbus_device * dev = sc->xb_info->xbdev; - XenbusState state = xenbus_read_driver_state(dev->otherend); + device_t dev = sc->xb_info->xbdev; + XenbusState state = + xenbus_read_driver_state(xenbus_get_otherend_path(dev)); if (state == XenbusStateClosing) blkfront_closing(dev); @@ -806,7 +830,7 @@ static int blkif_queue_request(struct bi gnttab_grant_foreign_access_ref( ref, - info->xbdev->otherend_id, + xenbus_get_otherend_id(info->xbdev), buffer_ma >> PAGE_SHIFT, ring_req->operation & 1 ); /* ??? */ info->shadow[id].frame[ring_req->nr_segments] = @@ -1027,7 +1051,7 @@ blkif_recover(struct blkfront_info *info for (j = 0; j < req->nr_segments; j++) gnttab_grant_foreign_access_ref( req->seg[j].gref, - info->xbdev->otherend_id, + xenbus_get_otherend_id(info->xbdev), pfn_to_mfn(info->shadow[req->id].frame[j]), 0 /* assume not readonly */); @@ -1038,7 +1062,7 @@ blkif_recover(struct blkfront_info *info free(copy, M_DEVBUF); - xenbus_switch_state(info->xbdev, XenbusStateConnected); + xenbus_set_state(info->xbdev, XenbusStateConnected); /* Now safe for us to use the shared ring */ mtx_lock(&blkif_io_lock); @@ -1054,48 +1078,30 @@ blkif_recover(struct blkfront_info *info mtx_unlock(&blkif_io_lock); } -static int -blkfront_is_ready(struct xenbus_device *dev) -{ - struct blkfront_info *info = dev->dev_driver_data; - - return info->is_ready; -} - -static struct xenbus_device_id blkfront_ids[] = { - { "vbd" }, - { "" } -}; - - -static struct xenbus_driver blkfront = { - .name = "vbd", - .ids = blkfront_ids, - .probe = blkfront_probe, - .remove = blkfront_remove, - .resume = blkfront_resume, - .otherend_changed = backend_changed, - .is_ready = blkfront_is_ready, -}; - - - -static void -xenbus_init(void) -{ - xenbus_register_frontend(&blkfront); -} +/* ** Driver registration ** */ +static device_method_t blkfront_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, blkfront_probe), + DEVMETHOD(device_attach, blkfront_attach), + DEVMETHOD(device_detach, blkfront_detach), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + DEVMETHOD(device_suspend, bus_generic_suspend), + DEVMETHOD(device_resume, blkfront_resume), + + /* Xenbus interface */ + DEVMETHOD(xenbus_backend_changed, blkfront_backend_changed), + + { 0, 0 } +}; + +static driver_t blkfront_driver = { + "xbd", + blkfront_methods, + sizeof(struct blkfront_info), +}; +devclass_t blkfront_devclass; + +DRIVER_MODULE(xbd, xenbus, blkfront_driver, blkfront_devclass, 0, 0); MTX_SYSINIT(ioreq, &blkif_io_lock, "BIO LOCK", MTX_NOWITNESS); /* XXX how does one enroll a lock? */ -SYSINIT(xbdev, SI_SUB_PSEUDO, SI_ORDER_SECOND, xenbus_init, NULL); - -/* - * Local variables: - * mode: C - * c-set-style: "BSD" - * c-basic-offset: 8 - * tab-width: 4 - * indent-tabs-mode: t - * End: - */ Modified: user/dfr/xenhvm/6/sys/dev/xen/blkfront/block.h ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/blkfront/block.h Wed Dec 3 09:01:12 2008 (r185577) +++ user/dfr/xenhvm/6/sys/dev/xen/blkfront/block.h Wed Dec 3 11:48:20 2008 (r185578) @@ -60,7 +60,7 @@ struct xb_softc { */ struct blkfront_info { - struct xenbus_device *xbdev; + device_t xbdev; dev_t dev; struct gendisk *gd; int vdevice; @@ -89,7 +89,7 @@ struct blkfront_info /* Note that xlvbd_add doesn't call add_disk for you: you're expected to call add_disk on info->gd once the disk is properly connected up. */ -int xlvbd_add(blkif_sector_t capacity, int device, +int xlvbd_add(device_t, blkif_sector_t capacity, int device, uint16_t vdisk_info, uint16_t sector_size, struct blkfront_info *info); void xlvbd_del(struct blkfront_info *info); Modified: user/dfr/xenhvm/6/sys/dev/xen/console/console.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/console/console.c Wed Dec 3 09:01:12 2008 (r185577) +++ user/dfr/xenhvm/6/sys/dev/xen/console/console.c Wed Dec 3 11:48:20 2008 (r185578) @@ -293,6 +293,12 @@ xencons_rx(char *buf, unsigned len) int i; struct tty *tp = xccons; +#if 1 + if (len > 0 && buf[0] == '`') + printf("%08lx %08lx\r", + HYPERVISOR_shared_info->evtchn_pending[0], + HYPERVISOR_shared_info->evtchn_mask[0]); +#endif for (i = 0; i < len; i++) { if (xen_console_up) (*linesw[tp->t_line]->l_rint)(buf[i], tp); Modified: user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c Wed Dec 3 09:01:12 2008 (r185577) +++ user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c Wed Dec 3 11:48:20 2008 (r185578) @@ -25,6 +25,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -65,14 +66,15 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include #include #include #include +#include +#include "xenbus_if.h" #define GRANT_INVALID_REF 0 @@ -118,19 +120,19 @@ static void xn_watchdog(struct ifnet *); static void show_device(struct netfront_info *sc); #ifdef notyet -static void netfront_closing(struct xenbus_device *dev); +static void netfront_closing(device_t dev); #endif static void netif_free(struct netfront_info *info); -static int netfront_remove(struct xenbus_device *dev); +static int netfront_detach(device_t dev); -static int talk_to_backend(struct xenbus_device *dev, struct netfront_info *info); -static int create_netdev(struct xenbus_device *dev, struct ifnet **ifp); +static int talk_to_backend(device_t dev, struct netfront_info *info); +static int create_netdev(device_t dev); static void netif_disconnect_backend(struct netfront_info *info); -static int setup_device(struct xenbus_device *dev, struct netfront_info *info); +static int setup_device(device_t dev, struct netfront_info *info); static void end_access(int ref, void *page); /* Xenolinux helper functions */ -static int network_connect(struct ifnet *ifp); +int network_connect(struct netfront_info *); static void xn_free_rx_ring(struct netfront_info *); @@ -223,7 +225,7 @@ struct netfront_info { grant_ref_t grant_rx_ref[NET_TX_RING_SIZE + 1]; #define TX_MAX_TARGET min(NET_RX_RING_SIZE, 256) - struct xenbus_device *xbdev; + device_t xbdev; int tx_ring_ref; int rx_ring_ref; uint8_t mac[ETHER_ADDR_LEN]; @@ -330,7 +332,7 @@ xennet_get_rx_ref(struct netfront_info * printf("[XEN] " fmt, ##args) #if 0 #define DPRINTK(fmt, args...) \ - printf("[XEN] " fmt, ##args) + printf("[XEN] %s: " fmt, __func__, ##args) #else #define DPRINTK(fmt, args...) #endif @@ -345,14 +347,14 @@ makembuf (struct mbuf *buf) if (! m) return 0; - M_MOVE_PKTHDR(m, buf); + M_MOVE_PKTHDR(m, buf); - m_cljget(m, M_DONTWAIT, MJUMPAGESIZE); + m_cljget(m, M_DONTWAIT, MJUMPAGESIZE); m->m_pkthdr.len = buf->m_pkthdr.len; m->m_len = buf->m_len; - m_copydata(buf, 0, buf->m_pkthdr.len, mtod(m,caddr_t) ); + m_copydata(buf, 0, buf->m_pkthdr.len, mtod(m,caddr_t) ); - m->m_ext.ext_args = (caddr_t *)(uintptr_t)(vtophys(mtod(m,caddr_t)) >> PAGE_SHIFT); + m->m_ext.ext_args = (caddr_t *)(uintptr_t)(vtophys(mtod(m,caddr_t)) >> PAGE_SHIFT); return m; } @@ -364,12 +366,12 @@ makembuf (struct mbuf *buf) * Return 0 on success, or errno on error. */ static int -xen_net_read_mac(struct xenbus_device *dev, uint8_t mac[]) +xen_net_read_mac(device_t dev, uint8_t mac[]) { char *s; int i; char *e; - char *macstr = xenbus_read(XBT_NIL, dev->nodename, "mac", NULL); + char *macstr = xenbus_read(XBT_NIL, xenbus_get_node(dev), "mac", NULL); if (IS_ERR(macstr)) { return PTR_ERR(macstr); } @@ -393,21 +395,28 @@ xen_net_read_mac(struct xenbus_device *d * Connected state. */ static int -netfront_probe(struct xenbus_device *dev, const struct xenbus_device_id *id) +netfront_probe(device_t dev) { + + if (!strcmp(xenbus_get_type(dev), "vif")) { + device_set_desc(dev, "Virtual Network Interface"); + return (0); + } + + return (ENXIO); +} + +static int +netfront_attach(device_t dev) +{ int err; - struct ifnet *ifp; - struct netfront_info *info; - err = create_netdev(dev, &ifp); + err = create_netdev(dev); if (err) { xenbus_dev_fatal(dev, err, "creating netdev"); return err; } - info = ifp->if_softc; - dev->dev_driver_data = info; - return 0; } @@ -419,11 +428,11 @@ netfront_probe(struct xenbus_device *dev * rest of the kernel. */ static int -netfront_resume(struct xenbus_device *dev) +netfront_resume(device_t dev) { - struct netfront_info *info = dev->dev_driver_data; + struct netfront_info *info = device_get_softc(dev); - DPRINTK("%s\n", dev->nodename); + DPRINTK("%s\n", xenbus_get_node(dev)); netif_disconnect_backend(info); return (0); @@ -432,15 +441,16 @@ netfront_resume(struct xenbus_device *de /* Common code used when first setting up, and when resuming. */ static int -talk_to_backend(struct xenbus_device *dev, struct netfront_info *info) +talk_to_backend(device_t dev, struct netfront_info *info) { const char *message; struct xenbus_transaction xbt; + const char *node = xenbus_get_node(dev); int err; err = xen_net_read_mac(dev, info->mac); if (err) { - xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename); + xenbus_dev_fatal(dev, err, "parsing %s/mac", node); goto out; } @@ -455,47 +465,47 @@ talk_to_backend(struct xenbus_device *de xenbus_dev_fatal(dev, err, "starting transaction"); goto destroy_ring; } - err = xenbus_printf(xbt, dev->nodename, "tx-ring-ref","%u", + err = xenbus_printf(xbt, node, "tx-ring-ref","%u", info->tx_ring_ref); if (err) { message = "writing tx ring-ref"; goto abort_transaction; } - err = xenbus_printf(xbt, dev->nodename, "rx-ring-ref","%u", + err = xenbus_printf(xbt, node, "rx-ring-ref","%u", info->rx_ring_ref); if (err) { message = "writing rx ring-ref"; goto abort_transaction; } - err = xenbus_printf(xbt, dev->nodename, + err = xenbus_printf(xbt, node, "event-channel", "%u", irq_to_evtchn_port(info->irq)); if (err) { message = "writing event-channel"; goto abort_transaction; } - err = xenbus_printf(xbt, dev->nodename, "request-rx-copy", "%u", + err = xenbus_printf(xbt, node, "request-rx-copy", "%u", info->copying_receiver); if (err) { message = "writing request-rx-copy"; goto abort_transaction; } - err = xenbus_printf(xbt, dev->nodename, "feature-rx-notify", "%d", 1); + err = xenbus_printf(xbt, node, "feature-rx-notify", "%d", 1); if (err) { message = "writing feature-rx-notify"; goto abort_transaction; } - err = xenbus_printf(xbt, dev->nodename, "feature-no-csum-offload", "%d", 1); + err = xenbus_printf(xbt, node, "feature-no-csum-offload", "%d", 1); if (err) { message = "writing feature-no-csum-offload"; goto abort_transaction; } - err = xenbus_printf(xbt, dev->nodename, "feature-sg", "%d", 1); + err = xenbus_printf(xbt, node, "feature-sg", "%d", 1); if (err) { message = "writing feature-sg"; goto abort_transaction; } #ifdef HAVE_TSO - err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4", "%d", 1); + err = xenbus_printf(xbt, node, "feature-gso-tcpv4", "%d", 1); if (err) { message = "writing feature-gso-tcpv4"; goto abort_transaction; @@ -523,7 +533,7 @@ talk_to_backend(struct xenbus_device *de static int -setup_device(struct xenbus_device *dev, struct netfront_info *info) +setup_device(device_t dev, struct netfront_info *info) { netif_tx_sring_t *txs; netif_rx_sring_t *rxs; @@ -566,9 +576,9 @@ setup_device(struct xenbus_device *dev, info->rx_ring_ref = err; #if 0 - network_connect(ifp); + network_connect(info); #endif - err = bind_listening_port_to_irqhandler(dev->otherend_id, + err = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev), "xn", xn_intr, info, INTR_TYPE_NET | INTR_MPSAFE, NULL); if (err <= 0) { @@ -591,14 +601,13 @@ setup_device(struct xenbus_device *dev, * Callback received when the backend's state changes. */ static void -backend_changed(struct xenbus_device *dev, - XenbusState backend_state) +netfront_backend_changed(device_t dev, XenbusState newstate) { - struct netfront_info *sc = dev->dev_driver_data; + struct netfront_info *sc = device_get_softc(dev); - DPRINTK("\n"); - - switch (backend_state) { + DPRINTK("newstate=%d\n", newstate); + + switch (newstate) { case XenbusStateInitialising: case XenbusStateInitialised: case XenbusStateConnected: @@ -606,19 +615,19 @@ backend_changed(struct xenbus_device *de case XenbusStateClosed: case XenbusStateReconfigured: case XenbusStateReconfiguring: - break; + break; case XenbusStateInitWait: - if (dev->state != XenbusStateInitialising) + if (xenbus_get_state(dev) != XenbusStateInitialising) break; - if (network_connect(sc->xn_ifp) != 0) + if (network_connect(sc) != 0) break; - xenbus_switch_state(dev, XenbusStateConnected); + xenbus_set_state(dev, XenbusStateConnected); #ifdef notyet (void)send_fake_arp(netdev); #endif - break; break; + break; case XenbusStateClosing: - xenbus_frontend_closed(dev); + xenbus_set_state(dev, XenbusStateClosed); break; } } @@ -677,7 +686,8 @@ netif_release_tx_bufs(struct netfront_in if (((u_long)m) < KERNBASE) continue; gnttab_grant_foreign_access_ref(np->grant_tx_ref[i], - np->xbdev->otherend_id, virt_to_mfn(mtod(m, vm_offset_t)), + xenbus_get_otherend_id(np->xbdev), + virt_to_mfn(mtod(m, vm_offset_t)), GNTMAP_readonly); gnttab_release_grant_reference(&np->gref_tx_head, np->grant_tx_ref[i]); @@ -690,6 +700,7 @@ netif_release_tx_bufs(struct netfront_in static void network_alloc_rx_buffers(struct netfront_info *sc) { + int otherend_id = xenbus_get_otherend_id(sc->xbdev); unsigned short id; struct mbuf *m_new; int i, batch_target, notify; @@ -771,7 +782,7 @@ refill: if (sc->copying_receiver == 0) { gnttab_grant_foreign_transfer_ref(ref, - sc->xbdev->otherend_id, pfn); + otherend_id, pfn); sc->rx_pfn_array[nr_flips] = PFNTOMFN(pfn); if (!xen_feature(XENFEAT_auto_translated_physmap)) { /* Remove this page before passing @@ -784,7 +795,7 @@ refill: nr_flips++; } else { gnttab_grant_foreign_access_ref(ref, - sc->xbdev->otherend_id, + otherend_id, PFNTOMFN(pfn), 0); } req->id = id; @@ -1301,6 +1312,7 @@ xn_tick(void *xsc) static void xn_start_locked(struct ifnet *ifp) { + int otherend_id; unsigned short id; struct mbuf *m_head, *new_m; struct netfront_info *sc; @@ -1311,6 +1323,7 @@ xn_start_locked(struct ifnet *ifp) int notify; sc = ifp->if_softc; + otherend_id = xenbus_get_otherend_id(sc->xbdev); tx_bytes = 0; if (!netfront_carrier_ok(sc)) @@ -1340,7 +1353,7 @@ xn_start_locked(struct ifnet *ifp) ref = gnttab_claim_grant_reference(&sc->gref_tx_head); KASSERT((short)ref >= 0, ("Negative ref")); mfn = virt_to_mfn(mtod(new_m, vm_offset_t)); - gnttab_grant_foreign_access_ref(ref, sc->xbdev->otherend_id, + gnttab_grant_foreign_access_ref(ref, otherend_id, mfn, GNTMAP_readonly); tx->gref = sc->grant_tx_ref[id] = ref; tx->size = new_m->m_pkthdr.len; @@ -1546,21 +1559,19 @@ xn_stop(struct netfront_info *sc) } /* START of Xenolinux helper functions adapted to FreeBSD */ -static int -network_connect(struct ifnet *ifp) +int +network_connect(struct netfront_info *np) { - struct netfront_info *np; int i, requeue_idx, err; grant_ref_t ref; netif_rx_request_t *req; u_int feature_rx_copy, feature_rx_flip; - np = ifp->if_softc; - err = xenbus_scanf(XBT_NIL, np->xbdev->otherend, + err = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev), "feature-rx-copy", "%u", &feature_rx_copy); if (err != 1) feature_rx_copy = 0; - err = xenbus_scanf(XBT_NIL, np->xbdev->otherend, + err = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev), "feature-rx-flip", "%u", &feature_rx_flip); if (err != 1) feature_rx_flip = 1; @@ -1577,7 +1588,7 @@ network_connect(struct ifnet *ifp) /* Recovery procedure: */ err = talk_to_backend(np->xbdev, np); if (err) - return (err); + return (err); /* Step 1: Reinitialise variables. */ netif_release_tx_bufs(np); @@ -1595,11 +1606,11 @@ network_connect(struct ifnet *ifp) if (!np->copying_receiver) { gnttab_grant_foreign_transfer_ref(ref, - np->xbdev->otherend_id, + xenbus_get_otherend_id(np->xbdev), vtophys(mtod(m, vm_offset_t))); } else { gnttab_grant_foreign_access_ref(ref, - np->xbdev->otherend_id, + xenbus_get_otherend_id(np->xbdev), vtophys(mtod(m, vm_offset_t)), 0); } req->gref = ref; @@ -1626,7 +1637,6 @@ network_connect(struct ifnet *ifp) return (0); } - static void show_device(struct netfront_info *sc) { @@ -1646,25 +1656,18 @@ show_device(struct netfront_info *sc) #endif } -static int ifno = 0; - /** Create a network device. * @param handle device handle */ -static int -create_netdev(struct xenbus_device *dev, struct ifnet **ifpp) +int +create_netdev(device_t dev) { int i; struct netfront_info *np; int err; struct ifnet *ifp; - np = (struct netfront_info *)malloc(sizeof(struct netfront_info), - M_DEVBUF, M_NOWAIT); - if (np == NULL) - return (ENOMEM); - - memset(np, 0, sizeof(struct netfront_info)); + np = device_get_softc(dev); np->xbdev = dev; @@ -1700,14 +1703,15 @@ create_netdev(struct xenbus_device *dev, err = xen_net_read_mac(dev, np->mac); if (err) { - xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename); + xenbus_dev_fatal(dev, err, "parsing %s/mac", + xenbus_get_node(dev)); goto out; } /* Set up ifnet structure */ - *ifpp = ifp = np->xn_ifp = if_alloc(IFT_ETHER); + ifp = np->xn_ifp = if_alloc(IFT_ETHER); ifp->if_softc = np; - if_initname(ifp, "xn", ifno++/* ifno */); + if_initname(ifp, "xn", device_get_unit(dev)); ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_ioctl = xn_ioctl; ifp->if_output = ether_output; @@ -1745,7 +1749,7 @@ out: * acknowledgement. */ #if 0 -static void netfront_closing(struct xenbus_device *dev) +static void netfront_closing(device_t dev) { #if 0 struct netfront_info *info = dev->dev_driver_data; @@ -1758,14 +1762,13 @@ static void netfront_closing(struct xenb } #endif -static int netfront_remove(struct xenbus_device *dev) +static int netfront_detach(device_t dev) { - struct netfront_info *info = dev->dev_driver_data; + struct netfront_info *info = device_get_softc(dev); - DPRINTK("%s\n", dev->nodename); + DPRINTK("%s\n", xenbus_get_node(dev)); netif_free(info); - free(info, M_DEVBUF); return 0; } @@ -1807,48 +1810,27 @@ static void end_access(int ref, void *pa gnttab_end_foreign_access(ref, page); } - /* ** Driver registration ** */ - - -static struct xenbus_device_id netfront_ids[] = { - { "vif" }, *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Thu Dec 4 01:24:21 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 80C34106564A; Thu, 4 Dec 2008 01:24:21 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 58EAB8FC13; Thu, 4 Dec 2008 01:24:21 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB41OLnI006603; Thu, 4 Dec 2008 01:24:21 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB41OLUH006602; Thu, 4 Dec 2008 01:24:21 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812040124.mB41OLUH006602@svn.freebsd.org> From: Kip Macy Date: Thu, 4 Dec 2008 01:24:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185595 - user/kmacy/head_arpv2 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Dec 2008 01:24:21 -0000 Author: kmacy Date: Thu Dec 4 01:24:21 2008 New Revision: 185595 URL: http://svn.freebsd.org/changeset/base/185595 Log: private branch for integrating arpv2 Added: user/kmacy/head_arpv2/ - copied from r185594, head/ From owner-svn-src-user@FreeBSD.ORG Thu Dec 4 02:23:02 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DD7F0106564A; Thu, 4 Dec 2008 02:23:02 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CAC2A8FC19; Thu, 4 Dec 2008 02:23:02 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB42N2lY007822; Thu, 4 Dec 2008 02:23:02 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB42N2UU007804; Thu, 4 Dec 2008 02:23:02 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812040223.mB42N2UU007804@svn.freebsd.org> From: Kip Macy Date: Thu, 4 Dec 2008 02:23:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185598 - in user/kmacy/head_arpv2: lib/libstand sys/conf sys/contrib/rdma sys/dev/cxgb/ulp/tom sys/net sys/netinet sys/netinet6 usr.sbin/arp usr.sbin/ndp X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Dec 2008 02:23:03 -0000 Author: kmacy Date: Thu Dec 4 02:23:01 2008 New Revision: 185598 URL: http://svn.freebsd.org/changeset/base/185598 Log: Integrate arp-v2 patch along with a few compile fixes Added: user/kmacy/head_arpv2/sys/net/if_llatbl.c (contents, props changed) user/kmacy/head_arpv2/sys/net/if_llatbl.h (contents, props changed) Modified: user/kmacy/head_arpv2/lib/libstand/if_ether.h user/kmacy/head_arpv2/sys/conf/files user/kmacy/head_arpv2/sys/contrib/rdma/rdma_addr.c user/kmacy/head_arpv2/sys/dev/cxgb/ulp/tom/cxgb_l2t.c user/kmacy/head_arpv2/sys/net/if.c user/kmacy/head_arpv2/sys/net/if_arcsubr.c user/kmacy/head_arpv2/sys/net/if_ethersubr.c user/kmacy/head_arpv2/sys/net/if_fddisubr.c user/kmacy/head_arpv2/sys/net/if_fwsubr.c user/kmacy/head_arpv2/sys/net/if_iso88025subr.c user/kmacy/head_arpv2/sys/net/if_var.h user/kmacy/head_arpv2/sys/net/route.c user/kmacy/head_arpv2/sys/net/rtsock.c user/kmacy/head_arpv2/sys/netinet/if_ether.c user/kmacy/head_arpv2/sys/netinet/if_ether.h user/kmacy/head_arpv2/sys/netinet/in.c user/kmacy/head_arpv2/sys/netinet/in_proto.c user/kmacy/head_arpv2/sys/netinet/in_var.h user/kmacy/head_arpv2/sys/netinet/ip_output.c user/kmacy/head_arpv2/sys/netinet6/icmp6.c user/kmacy/head_arpv2/sys/netinet6/in6.c user/kmacy/head_arpv2/sys/netinet6/in6_var.h user/kmacy/head_arpv2/sys/netinet6/ip6_forward.c user/kmacy/head_arpv2/sys/netinet6/ip6_input.c user/kmacy/head_arpv2/sys/netinet6/ip6_mroute.c user/kmacy/head_arpv2/sys/netinet6/ip6_output.c user/kmacy/head_arpv2/sys/netinet6/nd6.c user/kmacy/head_arpv2/sys/netinet6/nd6.h user/kmacy/head_arpv2/sys/netinet6/nd6_nbr.c user/kmacy/head_arpv2/sys/netinet6/nd6_rtr.c user/kmacy/head_arpv2/sys/netinet6/vinet6.h user/kmacy/head_arpv2/usr.sbin/arp/arp.c user/kmacy/head_arpv2/usr.sbin/ndp/ndp.c Modified: user/kmacy/head_arpv2/lib/libstand/if_ether.h ============================================================================== --- user/kmacy/head_arpv2/lib/libstand/if_ether.h Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/lib/libstand/if_ether.h Thu Dec 4 02:23:01 2008 (r185598) @@ -156,7 +156,7 @@ struct ifqueue arpintrq; void arpwhohas(struct arpcom *, struct in_addr *); void arpintr(void); int arpresolve(struct arpcom *, - struct rtentry *, struct mbuf *, struct sockaddr *, u_char *); + struct rtentry *, struct mbuf *, struct sockaddr *, u_char *, struct llentry **); void arp_ifinit(struct arpcom *, struct ifaddr *); void arp_rtrequest(int, struct rtentry *, struct sockaddr *); @@ -233,7 +233,7 @@ struct ether_multistep { #ifdef _KERNEL void arp_rtrequest(int, struct rtentry *, struct sockaddr *); int arpresolve(struct arpcom *, struct rtentry *, struct mbuf *, - struct sockaddr *, u_char *); + struct sockaddr *, u_char *, struct llentry **); void arpintr(void); int arpioctl(u_long, caddr_t); void arp_ifinit(struct arpcom *, struct ifaddr *); Modified: user/kmacy/head_arpv2/sys/conf/files ============================================================================== --- user/kmacy/head_arpv2/sys/conf/files Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/conf/files Thu Dec 4 02:23:01 2008 (r185598) @@ -2171,6 +2171,7 @@ net/if_gre.c optional gre net/if_iso88025subr.c optional token net/if_lagg.c optional lagg net/if_loop.c optional loop +net/if_llatbl.c standard net/if_media.c standard net/if_mib.c standard net/if_ppp.c optional ppp Modified: user/kmacy/head_arpv2/sys/contrib/rdma/rdma_addr.c ============================================================================== --- user/kmacy/head_arpv2/sys/contrib/rdma/rdma_addr.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/contrib/rdma/rdma_addr.c Thu Dec 4 02:23:01 2008 (r185598) @@ -163,6 +163,7 @@ static void addr_send_arp(struct sockadd struct route iproute; struct sockaddr_in *dst = (struct sockaddr_in *)&iproute.ro_dst; char dmac[ETHER_ADDR_LEN]; + struct llentry *lle; bzero(&iproute, sizeof iproute); *dst = *dst_in; @@ -172,7 +173,7 @@ static void addr_send_arp(struct sockadd return; arpresolve(iproute.ro_rt->rt_ifp, iproute.ro_rt, NULL, - rt_key(iproute.ro_rt), dmac); + rt_key(iproute.ro_rt), dmac, &lle); RTFREE(iproute.ro_rt); } @@ -186,6 +187,7 @@ static int addr_resolve_remote(struct so struct route iproute; struct sockaddr_in *dst = (struct sockaddr_in *)&iproute.ro_dst; char dmac[ETHER_ADDR_LEN]; + struct llentry *lle; bzero(&iproute, sizeof iproute); *dst = *dst_in; @@ -202,7 +204,7 @@ static int addr_resolve_remote(struct so goto put; } ret = arpresolve(iproute.ro_rt->rt_ifp, iproute.ro_rt, NULL, - rt_key(iproute.ro_rt), dmac); + rt_key(iproute.ro_rt), dmac, &lle); if (ret) { goto put; } Modified: user/kmacy/head_arpv2/sys/dev/cxgb/ulp/tom/cxgb_l2t.c ============================================================================== --- user/kmacy/head_arpv2/sys/dev/cxgb/ulp/tom/cxgb_l2t.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/dev/cxgb/ulp/tom/cxgb_l2t.c Thu Dec 4 02:23:01 2008 (r185598) @@ -166,6 +166,7 @@ t3_l2t_send_slow(struct t3cdev *dev, str { struct rtentry *rt = e->neigh; struct sockaddr_in sin; + struct llentry *lle; bzero(&sin, sizeof(struct sockaddr_in)); sin.sin_family = AF_INET; @@ -177,7 +178,7 @@ again: switch (e->state) { case L2T_STATE_STALE: /* entry is stale, kick off revalidation */ arpresolve(rt->rt_ifp, rt, NULL, - (struct sockaddr *)&sin, e->dmac); + (struct sockaddr *)&sin, e->dmac, &lle); mtx_lock(&e->lock); if (e->state == L2T_STATE_STALE) e->state = L2T_STATE_VALID; @@ -201,7 +202,7 @@ again: * entries when there's no memory. */ if (arpresolve(rt->rt_ifp, rt, NULL, - (struct sockaddr *)&sin, e->dmac) == 0) { + (struct sockaddr *)&sin, e->dmac, &lle) == 0) { CTR6(KTR_CXGB, "mac=%x:%x:%x:%x:%x:%x\n", e->dmac[0], e->dmac[1], e->dmac[2], e->dmac[3], e->dmac[4], e->dmac[5]); @@ -228,6 +229,7 @@ t3_l2t_send_event(struct t3cdev *dev, st sin.sin_family = AF_INET; sin.sin_len = sizeof(struct sockaddr_in); sin.sin_addr.s_addr = e->addr; + struct llentry *lle; if ((m0 = m_gethdr(M_NOWAIT, MT_DATA)) == NULL) return; @@ -237,7 +239,7 @@ again: switch (e->state) { case L2T_STATE_STALE: /* entry is stale, kick off revalidation */ arpresolve(rt->rt_ifp, rt, NULL, - (struct sockaddr *)&sin, e->dmac); + (struct sockaddr *)&sin, e->dmac, &lle); mtx_lock(&e->lock); if (e->state == L2T_STATE_STALE) { e->state = L2T_STATE_VALID; @@ -263,7 +265,7 @@ again: * entries when there's no memory. */ arpresolve(rt->rt_ifp, rt, NULL, - (struct sockaddr *)&sin, e->dmac); + (struct sockaddr *)&sin, e->dmac, &lle); } return; Modified: user/kmacy/head_arpv2/sys/net/if.c ============================================================================== --- user/kmacy/head_arpv2/sys/net/if.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/net/if.c Thu Dec 4 02:23:01 2008 (r185598) @@ -58,6 +58,7 @@ #include #include #include +#include #include #include @@ -1342,6 +1343,7 @@ done: } #include +#include /* * Default action when installing a route with a Link Level gateway. Modified: user/kmacy/head_arpv2/sys/net/if_arcsubr.c ============================================================================== --- user/kmacy/head_arpv2/sys/net/if_arcsubr.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/net/if_arcsubr.c Thu Dec 4 02:23:01 2008 (r185598) @@ -64,6 +64,7 @@ #include #include #include +#include #if defined(INET) || defined(INET6) #include @@ -108,6 +109,7 @@ arc_output(struct ifnet *ifp, struct mbu u_int8_t atype, adst; int loop_copy = 0; int isphds; + struct llentry *lle; if (!((ifp->if_flags & IFF_UP) && (ifp->if_drv_flags & IFF_DRV_RUNNING))) @@ -127,7 +129,7 @@ arc_output(struct ifnet *ifp, struct mbu else if (ifp->if_flags & IFF_NOARP) adst = ntohl(SIN(dst)->sin_addr.s_addr) & 0xFF; else { - error = arpresolve(ifp, rt0, m, dst, &adst); + error = arpresolve(ifp, rt0, m, dst, &adst, &lle); if (error) return (error == EWOULDBLOCK ? 0 : error); } @@ -165,7 +167,7 @@ arc_output(struct ifnet *ifp, struct mbu #endif #ifdef INET6 case AF_INET6: - error = nd6_storelladdr(ifp, rt0, m, dst, (u_char *)&adst); + error = nd6_storelladdr(ifp, rt0, m, dst, (u_char *)&adst, &lle); if (error) return (error); atype = ARCTYPE_INET6; Modified: user/kmacy/head_arpv2/sys/net/if_ethersubr.c ============================================================================== --- user/kmacy/head_arpv2/sys/net/if_ethersubr.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/net/if_ethersubr.c Thu Dec 4 02:23:01 2008 (r185598) @@ -62,6 +62,7 @@ #include #include #include +#include #include #include @@ -148,6 +149,8 @@ static int ether_ipfw; #endif #endif +extern int useloopback; + /* * Ethernet output routine. * Encapsulate a packet of type family for the local net. @@ -161,6 +164,7 @@ ether_output(struct ifnet *ifp, struct m short type; int error, hdrcmplt = 0; u_char esrc[ETHER_ADDR_LEN], edst[ETHER_ADDR_LEN]; + struct llentry *lle = NULL; struct ether_header *eh; struct pf_mtag *t; int loop_copy = 1; @@ -183,7 +187,7 @@ ether_output(struct ifnet *ifp, struct m switch (dst->sa_family) { #ifdef INET case AF_INET: - error = arpresolve(ifp, rt0, m, dst, edst); + error = arpresolve(ifp, rt0, m, dst, edst, &lle); if (error) return (error == EWOULDBLOCK ? 0 : error); type = htons(ETHERTYPE_IP); @@ -218,7 +222,7 @@ ether_output(struct ifnet *ifp, struct m #endif #ifdef INET6 case AF_INET6: - error = nd6_storelladdr(ifp, rt0, m, dst, (u_char *)edst); + error = nd6_storelladdr(ifp, rt0, m, dst, (u_char *)edst, &lle); if (error) return error; type = htons(ETHERTYPE_IPV6); @@ -286,6 +290,9 @@ ether_output(struct ifnet *ifp, struct m senderr(EAFNOSUPPORT); } + if (lle && (lle->la_flags & LLE_IFADDR) && useloopback) + return (if_simloop(ifp, m, dst->sa_family, 0)); + /* * Add local net header. If no space in first mbuf, * allocate another. Modified: user/kmacy/head_arpv2/sys/net/if_fddisubr.c ============================================================================== --- user/kmacy/head_arpv2/sys/net/if_fddisubr.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/net/if_fddisubr.c Thu Dec 4 02:23:01 2008 (r185598) @@ -55,6 +55,7 @@ #include #include #include +#include #include #include @@ -120,6 +121,7 @@ fddi_output(ifp, m, dst, rt0) int loop_copy = 0, error = 0, hdrcmplt = 0; u_char esrc[FDDI_ADDR_LEN], edst[FDDI_ADDR_LEN]; struct fddi_header *fh; + struct llentry *lle; #ifdef MAC error = mac_ifnet_check_transmit(ifp, m); @@ -137,7 +139,7 @@ fddi_output(ifp, m, dst, rt0) switch (dst->sa_family) { #ifdef INET case AF_INET: { - error = arpresolve(ifp, rt0, m, dst, edst); + error = arpresolve(ifp, rt0, m, dst, edst, &lle); if (error) return (error == EWOULDBLOCK ? 0 : error); type = htons(ETHERTYPE_IP); @@ -173,7 +175,7 @@ fddi_output(ifp, m, dst, rt0) #endif /* INET */ #ifdef INET6 case AF_INET6: - error = nd6_storelladdr(ifp, rt0, m, dst, (u_char *)edst); + error = nd6_storelladdr(ifp, rt0, m, dst, (u_char *)edst, &lle); if (error) return (error); /* Something bad happened */ type = htons(ETHERTYPE_IPV6); Modified: user/kmacy/head_arpv2/sys/net/if_fwsubr.c ============================================================================== --- user/kmacy/head_arpv2/sys/net/if_fwsubr.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/net/if_fwsubr.c Thu Dec 4 02:23:01 2008 (r185598) @@ -51,6 +51,7 @@ #include #include #include +#include #if defined(INET) || defined(INET6) #include @@ -89,6 +90,7 @@ firewire_output(struct ifnet *ifp, struc struct mbuf *mtail; int unicast, dgl, foff; static int next_dgl; + struct llentry *lle; #ifdef MAC error = mac_ifnet_check_transmit(ifp, m); @@ -144,7 +146,7 @@ firewire_output(struct ifnet *ifp, struc * doesn't fit into the arp model. */ if (unicast) { - error = arpresolve(ifp, rt, m, dst, (u_char *) destfw); + error = arpresolve(ifp, rt, m, dst, (u_char *) destfw, &lle); if (error) return (error == EWOULDBLOCK ? 0 : error); } @@ -174,7 +176,7 @@ firewire_output(struct ifnet *ifp, struc case AF_INET6: if (unicast) { error = nd6_storelladdr(fc->fc_ifp, rt, m, dst, - (u_char *) destfw); + (u_char *) destfw, &lle); if (error) return (error); } Modified: user/kmacy/head_arpv2/sys/net/if_iso88025subr.c ============================================================================== --- user/kmacy/head_arpv2/sys/net/if_iso88025subr.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/net/if_iso88025subr.c Thu Dec 4 02:23:01 2008 (r185598) @@ -59,6 +59,7 @@ #include #include #include +#include #include #include @@ -244,6 +245,7 @@ iso88025_output(ifp, m, dst, rt0) struct iso88025_header gen_th; struct sockaddr_dl *sdl = NULL; struct rtentry *rt = NULL; + struct llentry *lle; #ifdef MAC error = mac_ifnet_check_transmit(ifp, m); @@ -289,7 +291,7 @@ iso88025_output(ifp, m, dst, rt0) switch (dst->sa_family) { #ifdef INET case AF_INET: - error = arpresolve(ifp, rt0, m, dst, edst); + error = arpresolve(ifp, rt0, m, dst, edst, &lle); if (error) return (error == EWOULDBLOCK ? 0 : error); snap_type = ETHERTYPE_IP; @@ -324,7 +326,7 @@ iso88025_output(ifp, m, dst, rt0) #endif /* INET */ #ifdef INET6 case AF_INET6: - error = nd6_storelladdr(ifp, rt0, m, dst, (u_char *)edst); + error = nd6_storelladdr(ifp, rt0, m, dst, (u_char *)edst, &lle); if (error) return (error); snap_type = ETHERTYPE_IPV6; Added: user/kmacy/head_arpv2/sys/net/if_llatbl.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/kmacy/head_arpv2/sys/net/if_llatbl.c Thu Dec 4 02:23:01 2008 (r185598) @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2007 Qing Li, Luigi Rizzo, Alessandro Cerri. 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 AUTHOR AND CONTRIBUTORS ``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 AUTHOR OR CONTRIBUTORS 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 "opt_inet.h" +#include "opt_inet6.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +MALLOC_DEFINE(M_LLTABLE, "lltable", "link level address tables"); + +static SLIST_HEAD(, lltable) lltables = SLIST_HEAD_INITIALIZER(lltables); + +extern void arprequest(struct ifnet *, struct in_addr *, struct in_addr *, + u_char *); + +/* + * Dump arp state for a specific address family. + */ +int +lltable_sysctl_dumparp(int af, struct sysctl_req *wr) +{ + struct lltable *llt; + int error = 0; + + IFNET_RLOCK(); + SLIST_FOREACH(llt, &lltables, llt_link) { + if (llt->llt_af == af) { + error = llt->llt_dump(llt, wr); + if (error != 0) + goto done; + } + } +done: + IFNET_RUNLOCK(); + return (error); +} + +/* + * Deletes an address from the address table. + * This function is called by the timer functions + * such as arptimer() and nd6_llinfo_timer(), and + * the caller does the locking. + */ +void +llentry_free(struct llentry *lle) +{ + struct lltable *llt = lle->lle_tbl; + + LIST_REMOVE(lle, lle_next); + + if (lle->la_hold != NULL) + m_freem(lle->la_hold); + llt->llt_free(llt, lle); +} + +/* + * Free all entries from given table and free itself. + * Since lltables collects from all of the intefaces, + * the caller of this function must acquire IFNET_WLOCK(). + */ +void +lltable_free(struct lltable *llt) +{ + struct llentry *lle, *next; + int i; + + KASSERT(llt != NULL, ("%s: llt is NULL", __func__)); + + IFNET_WLOCK(); + SLIST_REMOVE(&lltables, llt, lltable, llt_link); + IFNET_WUNLOCK(); + + for (i=0; i < LLTBL_HASHTBL_SIZE; i++) { + LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) { + callout_drain(&lle->la_timer); + llentry_free(lle); + } + } + + free(llt, M_LLTABLE); +} + +void +lltable_drain(int af) +{ + struct lltable *llt; + struct llentry *lle; + register int i; + + IFNET_RLOCK(); + SLIST_FOREACH(llt, &lltables, llt_link) { + if (llt->llt_af != af) + continue; + + for (i=0; i < LLTBL_HASHTBL_SIZE; i++) { + LIST_FOREACH(lle, &llt->lle_head[i], lle_next) { + if (lle->la_hold) { + m_freem(lle->la_hold); + lle->la_hold = NULL; + } + } + } + } + IFNET_RUNLOCK(); +} + +/* + * Create a new lltable. + */ +struct lltable * +lltable_init(struct ifnet *ifp, int af) +{ + struct lltable *llt; + register int i; + + llt = malloc(sizeof(struct lltable), M_LLTABLE, M_WAITOK); + if (llt == NULL) + return (NULL); + + llt->llt_af = af; + llt->llt_ifp = ifp; + for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) + LIST_INIT(&llt->lle_head[i]); + + IFNET_WLOCK(); + SLIST_INSERT_HEAD(&lltables, llt, llt_link); + IFNET_WUNLOCK(); + + return (llt); +} + +/* + * Called in route_output when adding/deleting a route to an interface. + */ +int +lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info) +{ + struct sockaddr_dl *dl = + (struct sockaddr_dl *)info->rti_info[RTAX_GATEWAY]; + struct sockaddr *dst = (struct sockaddr *)info->rti_info[RTAX_DST]; + struct ifnet *ifp; + struct lltable *llt; + struct llentry *lle; + u_int flags = 0; + + if (dl == NULL || dl->sdl_family != AF_LINK) { + log(LOG_INFO, "%s: invalid dl\n", __func__); + return EINVAL; + } + ifp = ifnet_byindex(dl->sdl_index); + if (ifp == NULL) { + log(LOG_INFO, "%s: invalid ifp (sdl_index %d)\n", + __func__, dl->sdl_index); + return EINVAL; + } + + switch (rtm->rtm_type) { + case RTM_ADD: + if (rtm->rtm_flags & RTF_ANNOUNCE) { + flags |= LLE_PUB; +#ifdef INET + if (dst->sa_family == AF_INET && + ((struct sockaddr_inarp *)dst)->sin_other != 0) { + struct rtentry *rt = rtalloc1(dst, 0, 0); + if (rt == NULL || !(rt->rt_flags & RTF_HOST)) { + log(LOG_INFO, "%s: RTM_ADD publish " + "(proxy only) is invalid\n", + __func__); + rtfree(rt); + return EINVAL; + } + rtfree(rt); + + flags |= LLE_PROXY; + } +#endif + } + flags |= LLE_CREATE; + break; + + case RTM_DELETE: + flags |= LLE_DELETE; + break; + + case RTM_CHANGE: + break; + + default: + return EINVAL; /* XXX not implemented yet */ + } + + /* + * XXXXXXXX: + * REVISE this approach if possible. + */ + IFNET_WLOCK(); + SLIST_FOREACH(llt, &lltables, llt_link) { + if (llt->llt_af == dst->sa_family && + llt->llt_ifp == ifp) + break; + } + IFNET_WUNLOCK(); + KASSERT(llt != NULL, ("Yep, ugly hacks are bad\n")); + + IF_AFDATA_LOCK(ifp); + lle = lla_lookup(llt, flags, dst); + if (lle != NULL) { + if (flags & LLE_CREATE) { + /* qing: if we delay the delete, then if a subsequent + * "arp add" on the same host should look up this entry, + * reset the LLE_DELETED flag, and reset the expiration timer + */ + bcopy(LLADDR(dl), &lle->ll_addr, ifp->if_addrlen); + lle->la_flags |= LLE_VALID; + lle->la_flags &= ~LLE_DELETED; +#ifdef INET6 + /* + * ND6 + */ + if (dst->sa_family == AF_INET6) + lle->ln_state = ND6_LLINFO_REACHABLE; +#endif + /* + * "arp" and "ndp" always sets the (RTF_STATIC | RTF_HOST) flags + */ + if (rtm->rtm_rmx.rmx_expire == 0) { + lle->la_flags |= LLE_STATIC; + lle->la_expire = 0; + } else + lle->la_expire = rtm->rtm_rmx.rmx_expire; +#ifdef INET + /* gratuious ARP */ + if ((lle->la_flags & LLE_PUB) && + dst->sa_family == AF_INET) { + arprequest(ifp, + &((struct sockaddr_in *)dst)->sin_addr, + &((struct sockaddr_in *)dst)->sin_addr, + ((lle->la_flags & LLE_PROXY) ? + (u_char *)IF_LLADDR(ifp) : + (u_char *)LLADDR(dl))); + } +#endif + } + } else { + if (flags & LLE_DELETE) { + IF_AFDATA_UNLOCK(ifp); + return EINVAL; + } + } + + IF_AFDATA_UNLOCK(ifp); + return 0; +} Added: user/kmacy/head_arpv2/sys/net/if_llatbl.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/kmacy/head_arpv2/sys/net/if_llatbl.h Thu Dec 4 02:23:01 2008 (r185598) @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2007 Qing Li, Luigi Rizzo, Alessandro Cerri. 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 AUTHOR AND CONTRIBUTORS ``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 AUTHOR OR CONTRIBUTORS 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$"); + +#ifndef _NET_IF_LLATBL_H_ +#define _NET_IF_LLATBL_H_ + +#include + +struct ifnet; +struct sysctl_req; +struct rt_msghdr; +struct rt_addrinfo; + +struct llentry; +LIST_HEAD(llentries, llentry); + +struct llentry { + LIST_ENTRY(llentry) lle_next; + struct lltable *lle_tbl; + struct llentries *lle_head; + struct mbuf *la_hold; + time_t la_expire; + uint16_t la_flags; + uint16_t la_asked; + uint16_t la_preempt; + uint16_t ln_byhint; + int16_t ln_state; /* IPv6 has ND6_LLINFO_NOSTATE == -2 */ + uint16_t ln_router; + time_t ln_ntick; + union { + uint64_t mac_aligned; + uint16_t mac16[3]; + } ll_addr; + + /* XXX af-private? */ + union { + struct callout ln_timer_ch; + struct callout la_timer; + } lle_timer; + /* NB: struct sockaddr must immediately follow */ +}; + +#define ln_timer_ch lle_timer.ln_timer_ch +#define la_timer lle_timer.la_timer + +/* XXX bad name */ +#define L3_ADDR(lle) ((struct sockaddr *)(&lle[1])) +#define L3_ADDR_LEN(lle) (((struct sockaddr *)(&lle[1]))->sa_len) + +#ifndef LLTBL_HASHTBL_SIZE +#define LLTBL_HASHTBL_SIZE 32 /* default 32 ? */ +#endif + +#ifndef LLTBL_HASHMASK +#define LLTBL_HASHMASK (LLTBL_HASHTBL_SIZE - 1) +#endif + +struct lltable { + SLIST_ENTRY(lltable) llt_link; + struct llentries lle_head[LLTBL_HASHTBL_SIZE]; + int llt_af; + struct ifnet *llt_ifp; + + struct llentry * (*llt_new)(const struct sockaddr *, u_int); + void (*llt_free)(struct lltable *, struct llentry *); + struct llentry * (*llt_lookup)(struct lltable *, u_int flags, + const struct sockaddr *l3addr); + int (*llt_rtcheck)(struct ifnet *, + const struct sockaddr *); + int (*llt_dump)(struct lltable *, + struct sysctl_req *); +}; +MALLOC_DECLARE(M_LLTABLE); + +/* + * flags to be passed to arplookup. + */ +#define LLE_DELETED 0x0001 /* entry must be deleted */ +#define LLE_STATIC 0x0002 /* entry is static */ +#define LLE_IFADDR 0x0004 /* entry is interface addr */ +#define LLE_VALID 0x0008 /* ll_addr is valid */ +#define LLE_PROXY 0x0010 /* proxy entry ??? */ +#define LLE_PUB 0x0020 /* publish entry ??? */ +#define LLE_CREATE 0x8000 /* create on a lookup miss */ +#define LLE_DELETE 0x4000 /* delete on a lookup - match LLE_IFADDR */ + +#define LLATBL_HASH(key, mask) \ + (((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask) + +struct lltable *lltable_init(struct ifnet *, int); +void lltable_free(struct lltable *); +void lltable_drain(int); +int lltable_sysctl_dumparp(int, struct sysctl_req *); + +void llentry_free(struct llentry *); + +/* + * Generic link layer address lookup function. + */ +static __inline struct llentry * +lla_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3addr) +{ + return llt->llt_lookup(llt, flags, l3addr); +} + +int lla_rt_output(struct rt_msghdr *, struct rt_addrinfo *); +#endif /* _NET_IF_LLATBL_H_ */ Modified: user/kmacy/head_arpv2/sys/net/if_var.h ============================================================================== --- user/kmacy/head_arpv2/sys/net/if_var.h Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/net/if_var.h Thu Dec 4 02:23:01 2008 (r185598) @@ -68,6 +68,7 @@ struct rtentry; struct rt_addrinfo; struct socket; struct ether_header; +struct lltable; struct carp_if; struct ifvlantrunk; #endif @@ -169,8 +170,6 @@ struct ifnet { void *if_bridge; /* bridge glue */ - struct lltable *lltables; /* list of L3-L2 resolution tables */ - struct label *if_label; /* interface MAC label */ /* these are only used by IPv6 */ @@ -181,6 +180,7 @@ struct ifnet { struct task if_starttask; /* task for IFF_NEEDSGIANT */ struct task if_linktask; /* task for link change events */ struct mtx if_addr_mtx; /* mutex to protect address lists */ + LIST_ENTRY(ifnet) if_clones; /* interfaces of a cloner */ TAILQ_HEAD(, ifg_list) if_groups; /* linked list of groups per if */ /* protected by if_addr_mtx */ @@ -359,7 +359,8 @@ typedef void (*group_change_event_handle EVENTHANDLER_DECLARE(group_change_event, group_change_event_handler_t); #define IF_AFDATA_LOCK_INIT(ifp) \ - mtx_init(&(ifp)->if_afdata_mtx, "if_afdata", NULL, MTX_DEF) + mtx_init(&(ifp)->if_afdata_mtx, "if_afdata", NULL, \ + (MTX_DEF | MTX_RECURSE)) #define IF_AFDATA_LOCK(ifp) mtx_lock(&(ifp)->if_afdata_mtx) #define IF_AFDATA_TRYLOCK(ifp) mtx_trylock(&(ifp)->if_afdata_mtx) #define IF_AFDATA_UNLOCK(ifp) mtx_unlock(&(ifp)->if_afdata_mtx) Modified: user/kmacy/head_arpv2/sys/net/route.c ============================================================================== --- user/kmacy/head_arpv2/sys/net/route.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/net/route.c Thu Dec 4 02:23:01 2008 (r185598) @@ -41,6 +41,7 @@ #include #include +#include #include #include #include @@ -52,6 +53,7 @@ #include #include +#include #include #ifdef RADIX_MPATH @@ -383,7 +385,7 @@ rtfree(struct rtentry *rt) */ RT_REMREF(rt); if (rt->rt_refcnt > 0) { - printf("%s: %p has %lu refs\n", __func__, rt, rt->rt_refcnt); + log(LOG_DEBUG, "%s: %p has %lu refs\t", __func__, rt, rt->rt_refcnt); goto done; } @@ -1452,6 +1454,7 @@ rtinit1(struct ifaddr *ifa, int cmd, int char tempbuf[_SOCKADDR_TMPSIZE]; int didwork = 0; int a_failure = 0; + static struct sockaddr_dl null_sdl = {sizeof(null_sdl), AF_LINK}; if (flags & RTF_HOST) { dst = ifa->ifa_dstaddr; @@ -1556,7 +1559,14 @@ rtinit1(struct ifaddr *ifa, int cmd, int info.rti_ifa = ifa; info.rti_flags = flags | ifa->ifa_flags; info.rti_info[RTAX_DST] = dst; - info.rti_info[RTAX_GATEWAY] = ifa->ifa_addr; + /* + * doing this for compatibility reasons + */ + if (cmd == RTM_ADD) + info.rti_info[RTAX_GATEWAY] = + (struct sockaddr *)&null_sdl; + else + info.rti_info[RTAX_GATEWAY] = ifa->ifa_addr; info.rti_info[RTAX_NETMASK] = netmask; error = rtrequest1_fib(cmd, &info, &rt, fibnum); if (error == 0 && rt != NULL) { @@ -1580,6 +1590,15 @@ rtinit1(struct ifaddr *ifa, int cmd, int rt->rt_ifa = ifa; } #endif + /* + * doing this for compatibility reasons + */ + if (cmd == RTM_ADD) { + ((struct sockaddr_dl *)rt->rt_gateway)->sdl_type = + rt->rt_ifp->if_type; + ((struct sockaddr_dl *)rt->rt_gateway)->sdl_index = + rt->rt_ifp->if_index; + } rt_newaddrmsg(cmd, ifa, error, rt); if (cmd == RTM_DELETE) { /* Modified: user/kmacy/head_arpv2/sys/net/rtsock.c ============================================================================== --- user/kmacy/head_arpv2/sys/net/rtsock.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/net/rtsock.c Thu Dec 4 02:23:01 2008 (r185598) @@ -51,6 +51,7 @@ #include #include +#include #include #include #include @@ -524,6 +525,11 @@ route_output(struct mbuf *m, struct sock if (info.rti_info[RTAX_GATEWAY] == NULL) senderr(EINVAL); saved_nrt = NULL; + /* support for new ARP code */ + if (info.rti_info[RTAX_GATEWAY]->sa_family == AF_LINK) { + error = lla_rt_output(rtm, &info); + break; + } error = rtrequest1_fib(RTM_ADD, &info, &saved_nrt, so->so_fibnum); if (error == 0 && saved_nrt) { @@ -539,6 +545,12 @@ route_output(struct mbuf *m, struct sock case RTM_DELETE: saved_nrt = NULL; + /* support for new ARP code */ + if (info.rti_info[RTAX_GATEWAY] && + (info.rti_info[RTAX_GATEWAY]->sa_family == AF_LINK)) { + error = lla_rt_output(rtm, &info); + break; + } error = rtrequest1_fib(RTM_DELETE, &info, &saved_nrt, so->so_fibnum); if (error == 0) { @@ -1430,6 +1442,11 @@ sysctl_rtsock(SYSCTL_HANDLER_ARGS) RADIX_NODE_HEAD_UNLOCK(rnh); } else if (af != 0) error = EAFNOSUPPORT; + /* + * take care of llinfo entries + */ + if (w.w_op == NET_RT_FLAGS && (RTF_LLINFO & w.w_arg)) + error = lltable_sysctl_dumparp(af, w.w_req); break; case NET_RT_IFLIST: Modified: user/kmacy/head_arpv2/sys/netinet/if_ether.c ============================================================================== --- user/kmacy/head_arpv2/sys/netinet/if_ether.c Thu Dec 4 02:16:53 2008 (r185597) +++ user/kmacy/head_arpv2/sys/netinet/if_ether.c Thu Dec 4 02:23:01 2008 (r185598) @@ -65,6 +65,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -79,6 +80,7 @@ __FBSDID("$FreeBSD$"); #define SIN(s) ((struct sockaddr_in *)s) #define SDL(s) ((struct sockaddr_dl *)s) +#define LLTABLE(ifp) ((struct lltable *)(ifp)->if_afdata[AF_INET]) SYSCTL_DECL(_net_link_ether); SYSCTL_NODE(_net_link_ether, PF_INET, inet, CTLFLAG_RW, 0, ""); @@ -87,7 +89,7 @@ SYSCTL_NODE(_net_link_ether, PF_INET, in #ifdef VIMAGE_GLOBALS static int arpt_keep; /* once resolved, good for 20 more minutes */ static int arp_maxtries; -static int useloopback; /* use loopback interface for local traffic */ +int useloopback; /* use loopback interface for local traffic */ static int arp_proxyall; #endif @@ -96,14 +98,6 @@ SYSCTL_V_INT(V_NET, vnet_inet, _net_link #define rt_expire rt_rmx.rmx_expire -struct llinfo_arp { - struct callout la_timer; - struct rtentry *la_rt; - struct mbuf *la_hold; /* last packet until resolved/timeout */ - u_short la_preempt; /* countdown for pre-expiry arps */ - u_short la_asked; /* # requests sent */ -}; - static struct ifqueue arpintrq; SYSCTL_V_INT(V_NET, vnet_inet, _net_link_ether_inet, OID_AUTO, maxtries, @@ -117,212 +111,104 @@ SYSCTL_V_INT(V_NET, vnet_inet, _net_link "Enable proxy ARP for all suitable requests"); static void arp_init(void); -static void arp_rtrequest(int, struct rtentry *, struct rt_addrinfo *); -static void arprequest(struct ifnet *, +void arprequest(struct ifnet *, struct in_addr *, struct in_addr *, u_char *); static void arpintr(struct mbuf *); static void arptimer(void *); -static struct rtentry - *arplookup(u_long, int, int, int); #ifdef INET static void in_arpinput(struct mbuf *); #endif +#ifdef AF_INET +void arp_ifscrub(struct ifnet *ifp, uint32_t addr); + /* - * Timeout routine. + * called by in_ifscrub to remove entry from the table when + * the interface goes away */ -static void -arptimer(void *arg) +void +arp_ifscrub(struct ifnet *ifp, uint32_t addr) { - struct rtentry *rt = (struct rtentry *)arg; + struct sockaddr_in addr4; + struct llentry *lle; - RT_LOCK_ASSERT(rt); - /* *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 00:01:35 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 05FC0106564A; Fri, 5 Dec 2008 00:01:35 +0000 (UTC) (envelope-from ps@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D256F8FC18; Fri, 5 Dec 2008 00:01:34 +0000 (UTC) (envelope-from ps@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB501Ym5037807; Fri, 5 Dec 2008 00:01:34 GMT (envelope-from ps@svn.freebsd.org) Received: (from ps@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB501YNq037805; Fri, 5 Dec 2008 00:01:34 GMT (envelope-from ps@svn.freebsd.org) Message-Id: <200812050001.mB501YNq037805@svn.freebsd.org> From: Paul Saab Date: Fri, 5 Dec 2008 00:01:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185621 - user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 00:01:35 -0000 Author: ps Date: Fri Dec 5 00:01:34 2008 New Revision: 185621 URL: http://svn.freebsd.org/changeset/base/185621 Log: Free mbuf's when the buf_ring is full Fix a use after free bug in em_xmit if_transmit is now stable on em and no longer leaks mbufs or crashes my machine under load. Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Thu Dec 4 20:32:53 2008 (r185620) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Fri Dec 5 00:01:34 2008 (r185621) @@ -981,9 +981,11 @@ em_transmit_locked(struct ifnet *ifp, st EM_TX_LOCK_ASSERT(adapter); if (((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING) - || (!adapter->link_active)) - - return (buf_ring_enqueue(adapter->br, m)); + || (!adapter->link_active)) { + if ((error = buf_ring_enqueue(adapter->br, m))) + m_freem(m); + return (error); + } if (buf_ring_empty(adapter->br) && (adapter->num_tx_desc_avail > EM_TX_OP_THRESHOLD)) { @@ -993,8 +995,10 @@ em_transmit_locked(struct ifnet *ifp, st return (error); } - } else if ((error = buf_ring_enqueue(adapter->br, m)) != 0) + } else if ((error = buf_ring_enqueue(adapter->br, m)) != 0) { + m_freem(m); return (error); + } if (!buf_ring_empty(adapter->br)) em_start_locked(ifp); @@ -1105,8 +1109,10 @@ em_transmit(struct ifnet *ifp, struct mb if (ifp->if_drv_flags & IFF_DRV_RUNNING) error = em_transmit_locked(ifp, m); EM_TX_UNLOCK(adapter); - } else - error = buf_ring_enqueue(adapter->br, m); + } else { + if ((error = buf_ring_enqueue(adapter->br, m))) + m_freem(m); + } return (error); } @@ -2177,22 +2183,14 @@ em_xmit(struct adapter *adapter, struct error = bus_dmamap_load_mbuf_sg(adapter->txtag, map, *m_headp, segs, &nsegs, BUS_DMA_NOWAIT); - if (error == ENOMEM) { - adapter->no_tx_dma_setup++; - return (error); - } else if (error != 0) { + if (error) { adapter->no_tx_dma_setup++; m_freem(*m_headp); *m_headp = NULL; return (error); } - } else if (error == ENOMEM) { - adapter->no_tx_dma_setup++; - return (error); } else if (error != 0) { adapter->no_tx_dma_setup++; - m_freem(*m_headp); - *m_headp = NULL; return (error); } From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 07:40:36 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B96AF1065670; Fri, 5 Dec 2008 07:40:36 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A623C8FC19; Fri, 5 Dec 2008 07:40:36 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB57eanG046770; Fri, 5 Dec 2008 07:40:36 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB57earn046762; Fri, 5 Dec 2008 07:40:36 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812050740.mB57earn046762@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 07:40:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185626 - in user/kmacy/HEAD_fast_multi_xmit/sys/security: audit mac mac_bsdextended X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 07:40:36 -0000 Author: kmacy Date: Fri Dec 5 07:40:36 2008 New Revision: 185626 URL: http://svn.freebsd.org/changeset/base/185626 Log: IFC 184756:185625 part 1 Modified: user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit.c user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_arg.c user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_bsm.c user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_bsm_token.c user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_private.h user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_syscalls.c user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_worker.c user/kmacy/HEAD_fast_multi_xmit/sys/security/mac/mac_cred.c (props changed) user/kmacy/HEAD_fast_multi_xmit/sys/security/mac_bsdextended/mac_bsdextended.c user/kmacy/HEAD_fast_multi_xmit/sys/security/mac_bsdextended/ugidfw_system.c (props changed) user/kmacy/HEAD_fast_multi_xmit/sys/security/mac_bsdextended/ugidfw_vnode.c (props changed) Modified: user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit.c Fri Dec 5 05:20:08 2008 (r185625) +++ user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit.c Fri Dec 5 07:40:36 2008 (r185626) @@ -129,8 +129,8 @@ struct mtx audit_mtx; * outstanding in the system. */ struct kaudit_queue audit_q; -int audit_q_len; -int audit_pre_q_len; +size_t audit_q_len; +size_t audit_pre_q_len; /* * Audit queue control settings (minimum free, low/high water marks, etc.) @@ -158,6 +158,48 @@ struct cv audit_watermark_cv; static struct cv audit_fail_cv; /* + * Kernel audit information. This will store the current audit address + * or host information that the kernel will use when it's generating + * audit records. This data is modified by the A_GET{SET}KAUDIT auditon(2) + * command. + */ +static struct auditinfo_addr audit_kinfo; +static struct rwlock audit_kinfo_lock; + +#define KINFO_LOCK_INIT() rw_init(&audit_kinfo_lock, \ + "audit_kinfo_lock") +#define KINFO_RLOCK() rw_rlock(&audit_kinfo_lock) +#define KINFO_WLOCK() rw_wlock(&audit_kinfo_lock) +#define KINFO_RUNLOCK() rw_runlock(&audit_kinfo_lock) +#define KINFO_WUNLOCK() rw_wunlock(&audit_kinfo_lock) + +void +audit_set_kinfo(struct auditinfo_addr *ak) +{ + + KASSERT(ak->ai_termid.at_type == AU_IPv4 || + ak->ai_termid.at_type == AU_IPv6, + ("audit_set_kinfo: invalid address type")); + + KINFO_WLOCK(); + audit_kinfo = *ak; + KINFO_WUNLOCK(); +} + +void +audit_get_kinfo(struct auditinfo_addr *ak) +{ + + KASSERT(audit_kinfo.ai_termid.at_type == AU_IPv4 || + audit_kinfo.ai_termid.at_type == AU_IPv6, + ("audit_set_kinfo: invalid address type")); + + KINFO_RLOCK(); + *ak = audit_kinfo; + KINFO_RUNLOCK(); +} + +/* * Construct an audit record for the passed thread. */ static int @@ -165,6 +207,7 @@ audit_record_ctor(void *mem, int size, v { struct kaudit_record *ar; struct thread *td; + struct ucred *cred; KASSERT(sizeof(*ar) == size, ("audit_record_ctor: wrong size")); @@ -177,15 +220,16 @@ audit_record_ctor(void *mem, int size, v /* * Export the subject credential. */ - cru2x(td->td_ucred, &ar->k_ar.ar_subj_cred); - ar->k_ar.ar_subj_ruid = td->td_ucred->cr_ruid; - ar->k_ar.ar_subj_rgid = td->td_ucred->cr_rgid; - ar->k_ar.ar_subj_egid = td->td_ucred->cr_groups[0]; - ar->k_ar.ar_subj_auid = td->td_ucred->cr_audit.ai_auid; - ar->k_ar.ar_subj_asid = td->td_ucred->cr_audit.ai_asid; + cred = td->td_ucred; + cru2x(cred, &ar->k_ar.ar_subj_cred); + ar->k_ar.ar_subj_ruid = cred->cr_ruid; + ar->k_ar.ar_subj_rgid = cred->cr_rgid; + ar->k_ar.ar_subj_egid = cred->cr_groups[0]; + ar->k_ar.ar_subj_auid = cred->cr_audit.ai_auid; + ar->k_ar.ar_subj_asid = cred->cr_audit.ai_asid; ar->k_ar.ar_subj_pid = td->td_proc->p_pid; - ar->k_ar.ar_subj_amask = td->td_ucred->cr_audit.ai_mask; - ar->k_ar.ar_subj_term_addr = td->td_ucred->cr_audit.ai_termid; + ar->k_ar.ar_subj_amask = cred->cr_audit.ai_mask; + ar->k_ar.ar_subj_term_addr = cred->cr_audit.ai_termid; return (0); } @@ -241,7 +285,11 @@ audit_init(void) audit_qctrl.aq_bufsz = AQ_BUFSZ; audit_qctrl.aq_minfree = AU_FS_MINFREE; + audit_kinfo.ai_termid.at_type = AU_IPv4; + audit_kinfo.ai_termid.at_addr[0] = INADDR_ANY; + mtx_init(&audit_mtx, "audit_mtx", NULL, MTX_DEF); + KINFO_LOCK_INIT(); cv_init(&audit_worker_cv, "audit_worker_cv"); cv_init(&audit_watermark_cv, "audit_watermark_cv"); cv_init(&audit_fail_cv, "audit_fail_cv"); @@ -585,6 +633,7 @@ audit_proc_coredump(struct thread *td, c { struct kaudit_record *ar; struct au_mask *aumask; + struct ucred *cred; au_class_t class; int ret, sorf; char **pathp; @@ -595,11 +644,12 @@ audit_proc_coredump(struct thread *td, c /* * Make sure we are using the correct preselection mask. */ - auid = td->td_ucred->cr_audit.ai_auid; + cred = td->td_ucred; + auid = cred->cr_audit.ai_auid; if (auid == AU_DEFAUDITID) aumask = &audit_nae_mask; else - aumask = &td->td_ucred->cr_audit.ai_mask; + aumask = &cred->cr_audit.ai_mask; /* * It's possible for coredump(9) generation to fail. Make sure that * we handle this case correctly for preselection. @@ -612,6 +662,7 @@ audit_proc_coredump(struct thread *td, c if (au_preselect(AUE_CORE, class, aumask, sorf) == 0 && audit_pipe_preselect(auid, AUE_CORE, class, sorf, 0) == 0) return; + /* * If we are interested in seeing this audit record, allocate it. * Where possible coredump records should contain a pathname and arg32 Modified: user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_arg.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_arg.c Fri Dec 5 05:20:08 2008 (r185625) +++ user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_arg.c Fri Dec 5 07:40:36 2008 (r185626) @@ -356,6 +356,7 @@ void audit_arg_process(struct proc *p) { struct kaudit_record *ar; + struct ucred *cred; KASSERT(p != NULL, ("audit_arg_process: p == NULL")); @@ -365,13 +366,14 @@ audit_arg_process(struct proc *p) if (ar == NULL) return; - ar->k_ar.ar_arg_auid = p->p_ucred->cr_audit.ai_auid; - ar->k_ar.ar_arg_euid = p->p_ucred->cr_uid; - ar->k_ar.ar_arg_egid = p->p_ucred->cr_groups[0]; - ar->k_ar.ar_arg_ruid = p->p_ucred->cr_ruid; - ar->k_ar.ar_arg_rgid = p->p_ucred->cr_rgid; - ar->k_ar.ar_arg_asid = p->p_ucred->cr_audit.ai_asid; - ar->k_ar.ar_arg_termid_addr = p->p_ucred->cr_audit.ai_termid; + cred = p->p_ucred; + ar->k_ar.ar_arg_auid = cred->cr_audit.ai_auid; + ar->k_ar.ar_arg_euid = cred->cr_uid; + ar->k_ar.ar_arg_egid = cred->cr_groups[0]; + ar->k_ar.ar_arg_ruid = cred->cr_ruid; + ar->k_ar.ar_arg_rgid = cred->cr_rgid; + ar->k_ar.ar_arg_asid = cred->cr_audit.ai_asid; + ar->k_ar.ar_arg_termid_addr = cred->cr_audit.ai_termid; ar->k_ar.ar_arg_pid = p->p_pid; ARG_SET_VALID(ar, ARG_AUID | ARG_EUID | ARG_EGID | ARG_RUID | ARG_RGID | ARG_ASID | ARG_TERMID_ADDR | ARG_PID | ARG_PROCESS); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_bsm.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_bsm.c Fri Dec 5 05:20:08 2008 (r185625) +++ user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_bsm.c Fri Dec 5 07:40:36 2008 (r185626) @@ -113,13 +113,34 @@ kau_close(struct au_record *rec, struct size_t tot_rec_size; token_t *cur, *hdr, *trail; struct timeval tm; - - tot_rec_size = rec->len + AUDIT_HEADER_SIZE + AUDIT_TRAILER_SIZE; + size_t hdrsize; + struct auditinfo_addr ak; + struct in6_addr *ap; + + audit_get_kinfo(&ak); + hdrsize = 0; + switch (ak.ai_termid.at_type) { + case AU_IPv4: + hdrsize = (ak.ai_termid.at_addr[0] == INADDR_ANY) ? + AUDIT_HEADER_SIZE : AUDIT_HEADER_EX_SIZE(&ak); + break; + case AU_IPv6: + ap = (struct in6_addr *)&ak.ai_termid.at_addr[0]; + hdrsize = (IN6_IS_ADDR_UNSPECIFIED(ap)) ? AUDIT_HEADER_SIZE : + AUDIT_HEADER_EX_SIZE(&ak); + break; + default: + panic("kau_close: invalid address family"); + } + tot_rec_size = rec->len + hdrsize + AUDIT_TRAILER_SIZE; rec->data = malloc(tot_rec_size, M_AUDITBSM, M_WAITOK | M_ZERO); tm.tv_usec = ctime->tv_nsec / 1000; tm.tv_sec = ctime->tv_sec; - hdr = au_to_header32_tm(tot_rec_size, event, 0, tm); + if (hdrsize != AUDIT_HEADER_SIZE) + hdr = au_to_header32_ex_tm(tot_rec_size, event, 0, tm, &ak); + else + hdr = au_to_header32_tm(tot_rec_size, event, 0, tm); TAILQ_INSERT_HEAD(&rec->token_q, hdr, tokens); trail = au_to_trailer(tot_rec_size); @@ -568,7 +589,7 @@ kaudit_to_bsm(struct kaudit_record *kar, tok = au_to_arg32(1, "cmd", ar->ar_arg_cmd); kau_write(rec, tok); } - /* fall thru */ + /* FALLTHROUGH */ case AUE_AUDITON_GETCAR: case AUE_AUDITON_GETCLASS: @@ -641,7 +662,8 @@ kaudit_to_bsm(struct kaudit_record *kar, tok = au_to_arg32(2, "mode", ar->ar_arg_mode); kau_write(rec, tok); } - /* fall through */ + /* FALLTHROUGH */ + case AUE_ACCESS: case AUE_CHDIR: case AUE_CHROOT: @@ -856,7 +878,8 @@ kaudit_to_bsm(struct kaudit_record *kar, tok = au_to_arg32(1, "flags", ar->ar_arg_fflags); kau_write(rec, tok); } - /* fall through */ + /* FALLTHROUGH */ + case AUE_FORK: case AUE_VFORK: if (ARG_IS_VALID(kar, ARG_PID)) { @@ -992,7 +1015,7 @@ kaudit_to_bsm(struct kaudit_record *kar, tok = au_to_text(ar->ar_arg_text); kau_write(rec, tok); } - /* fall through */ + /* FALLTHROUGH */ case AUE_UMOUNT: UPATH1_VNODE1_TOKENS; @@ -1041,7 +1064,7 @@ kaudit_to_bsm(struct kaudit_record *kar, tok = au_to_arg32(3, "mode", ar->ar_arg_mode); kau_write(rec, tok); } - /* fall through */ + /* FALLTHROUGH */ case AUE_OPEN_R: case AUE_OPEN_RT: @@ -1318,6 +1341,8 @@ kaudit_to_bsm(struct kaudit_record *kar, tok = au_to_arg32(3, "mode", ar->ar_arg_mode); kau_write(rec, tok); } + /* FALLTHROUGH */ + case AUE_SHMUNLINK: if (ARG_IS_VALID(kar, ARG_TEXT)) { tok = au_to_text(ar->ar_arg_text); @@ -1351,7 +1376,7 @@ kaudit_to_bsm(struct kaudit_record *kar, tok = au_to_arg32(4, "value", ar->ar_arg_value); kau_write(rec, tok); } - /* fall through */ + /* FALLTHROUGH */ case AUE_SEMUNLINK: if (ARG_IS_VALID(kar, ARG_TEXT)) { Modified: user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_bsm_token.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_bsm_token.c Fri Dec 5 05:20:08 2008 (r185625) +++ user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_bsm_token.c Fri Dec 5 07:40:36 2008 (r185626) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2004 Apple Inc. + * Copyright (c) 2004-2008 Apple Inc. * Copyright (c) 2005 SPARTA, Inc. * All rights reserved. * @@ -29,6 +29,8 @@ * 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. + * + * P4: //depot/projects/trustedbsd/openbsm/libbsm/bsm_token.c#72 */ #include @@ -71,7 +73,7 @@ __FBSDID("$FreeBSD$"); * text N bytes + 1 terminating NULL byte */ token_t * -au_to_arg32(char n, char *text, u_int32_t v) +au_to_arg32(char n, const char *text, u_int32_t v) { token_t *t; u_char *dptr = NULL; @@ -90,11 +92,10 @@ au_to_arg32(char n, char *text, u_int32_ ADD_STRING(dptr, text, textlen); return (t); - } token_t * -au_to_arg64(char n, char *text, u_int64_t v) +au_to_arg64(char n, const char *text, u_int64_t v) { token_t *t; u_char *dptr = NULL; @@ -113,11 +114,10 @@ au_to_arg64(char n, char *text, u_int64_ ADD_STRING(dptr, text, textlen); return (t); - } token_t * -au_to_arg(char n, char *text, u_int32_t v) +au_to_arg(char n, const char *text, u_int32_t v) { return (au_to_arg32(n, text, v)); @@ -147,8 +147,8 @@ au_to_attr32(struct vnode_au_info *vni) ADD_U_CHAR(dptr, AUT_ATTR32); /* - * Darwin defines the size for the file mode - * as 2 bytes; BSM defines 4 so pad with 0 + * Darwin defines the size for the file mode as 2 bytes; BSM defines + * 4 so pad with 0. */ ADD_U_INT16(dptr, pad0_16); ADD_U_INT16(dptr, vni->vn_mode); @@ -190,8 +190,8 @@ au_to_attr64(struct vnode_au_info *vni) ADD_U_CHAR(dptr, AUT_ATTR64); /* - * Darwin defines the size for the file mode - * as 2 bytes; BSM defines 4 so pad with 0 + * Darwin defines the size for the file mode as 2 bytes; BSM defines + * 4 so pad with 0. */ ADD_U_INT16(dptr, pad0_16); ADD_U_INT16(dptr, vni->vn_mode); @@ -235,7 +235,7 @@ au_to_attr(struct vnode_au_info *vni) * data items (depends on basic unit) */ token_t * -au_to_data(char unit_print, char unit_type, char unit_count, char *p) +au_to_data(char unit_print, char unit_type, char unit_count, const char *p) { token_t *t; u_char *dptr = NULL; @@ -305,7 +305,7 @@ token_t * au_to_groups(int *groups) { - return (au_to_newgroups(AUDIT_MAX_GROUPS, (gid_t*)groups)); + return (au_to_newgroups(AUDIT_MAX_GROUPS, (gid_t *)groups)); } /* @@ -352,7 +352,7 @@ au_to_in_addr(struct in_addr *internet_a /* * token ID 1 byte * address type/length 4 bytes - * Address 16 bytes + * address 16 bytes */ token_t * au_to_in_addr_ex(struct in6_addr *internet_addr) @@ -432,8 +432,8 @@ au_to_ipc_perm(struct ipc_perm *perm) ADD_U_CHAR(dptr, AUT_IPC_PERM); /* - * Darwin defines the sizes for ipc_perm members - * as 2 bytes; BSM defines 4 so pad with 0 + * Darwin defines the sizes for ipc_perm members as 2 bytes; BSM + * defines 4 so pad with 0. */ ADD_U_INT16(dptr, pad0); ADD_U_INT16(dptr, perm->uid); @@ -482,7 +482,7 @@ au_to_iport(u_int16_t iport) * data size bytes */ token_t * -au_to_opaque(char *data, u_int16_t bytes) +au_to_opaque(const char *data, u_int16_t bytes) { token_t *t; u_char *dptr = NULL; @@ -504,7 +504,7 @@ au_to_opaque(char *data, u_int16_t bytes * file pathname N bytes + 1 terminating NULL byte */ token_t * -au_to_file(char *file, struct timeval tm) +au_to_file(const char *file, struct timeval tm) { token_t *t; u_char *dptr = NULL; @@ -534,7 +534,7 @@ au_to_file(char *file, struct timeval tm * text N bytes + 1 terminating NULL byte */ token_t * -au_to_text(char *text) +au_to_text(const char *text) { token_t *t; u_char *dptr = NULL; @@ -558,7 +558,7 @@ au_to_text(char *text) * path N bytes + 1 terminating NULL byte */ token_t * -au_to_path(char *text) +au_to_path(const char *text) { token_t *t; u_char *dptr = NULL; @@ -657,7 +657,7 @@ au_to_process(au_id_t auid, uid_t euid, * terminal ID * port ID 4 bytes/8 bytes (32-bit/64-bit value) * address type-len 4 bytes - * machine address 4/16 bytes + * machine address 16 bytes */ token_t * au_to_process32_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, @@ -668,12 +668,12 @@ au_to_process32_ex(au_id_t auid, uid_t e KASSERT((tid->at_type == AU_IPv4) || (tid->at_type == AU_IPv6), ("au_to_process32_ex: type %u", (unsigned int)tid->at_type)); - if (tid->at_type == AU_IPv6) - GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 13 * - sizeof(u_int32_t)); + if (tid->at_type == AU_IPv4) + GET_TOKEN_AREA(t, dptr, sizeof(u_char) + + 10 * sizeof(u_int32_t)); else - GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 10 * - sizeof(u_int32_t)); + GET_TOKEN_AREA(t, dptr, sizeof(u_char) + + 13 * sizeof(u_int32_t)); ADD_U_CHAR(dptr, AUT_PROCESS32_EX); ADD_U_INT32(dptr, auid); @@ -685,10 +685,12 @@ au_to_process32_ex(au_id_t auid, uid_t e ADD_U_INT32(dptr, sid); ADD_U_INT32(dptr, tid->at_port); ADD_U_INT32(dptr, tid->at_type); - if (tid->at_type == AU_IPv6) - ADD_MEM(dptr, &tid->at_addr[0], 4 * sizeof(u_int32_t)); - else - ADD_MEM(dptr, &tid->at_addr[0], sizeof(u_int32_t)); + ADD_MEM(dptr, &tid->at_addr[0], sizeof(u_int32_t)); + if (tid->at_type == AU_IPv6) { + ADD_MEM(dptr, &tid->at_addr[1], sizeof(u_int32_t)); + ADD_MEM(dptr, &tid->at_addr[2], sizeof(u_int32_t)); + ADD_MEM(dptr, &tid->at_addr[3], sizeof(u_int32_t)); + } return (t); } @@ -831,7 +833,7 @@ kau_to_socket(struct socket_au_info *soi GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2 * sizeof(u_int16_t) + sizeof(u_int32_t) + sizeof(u_int16_t) + sizeof(u_int32_t)); - ADD_U_CHAR(dptr, AU_SOCK_TOKEN); + ADD_U_CHAR(dptr, AUT_SOCKET); /* Coerce the socket type into a short value */ so_type = soi->so_type; ADD_U_INT16(dptr, so_type); @@ -883,7 +885,7 @@ au_to_sock_unix(struct sockaddr_un *so) GET_TOKEN_AREA(t, dptr, 3 * sizeof(u_char) + strlen(so->sun_path) + 1); - ADD_U_CHAR(dptr, AU_SOCK_UNIX_TOKEN); + ADD_U_CHAR(dptr, AUT_SOCKUNIX); /* BSM token has two bytes for family */ ADD_U_CHAR(dptr, 0); ADD_U_CHAR(dptr, so->sun_family); @@ -925,7 +927,6 @@ au_to_sock_inet32(struct sockaddr_in *so ADD_MEM(dptr, &so->sin_addr.s_addr, sizeof(uint32_t)); return (t); - } token_t * @@ -949,7 +950,6 @@ au_to_sock_inet128(struct sockaddr_in6 * ADD_MEM(dptr, &so->sin6_addr, 4 * sizeof(uint32_t)); return (t); - } token_t * @@ -1040,7 +1040,7 @@ au_to_subject(au_id_t auid, uid_t euid, * terminal ID * port ID 4 bytes/8 bytes (32-bit/64-bit value) * address type/length 4 bytes - * machine address 4/16 bytes + * machine address 16 bytes */ token_t * au_to_subject32_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, @@ -1051,11 +1051,12 @@ au_to_subject32_ex(au_id_t auid, uid_t e KASSERT((tid->at_type == AU_IPv4) || (tid->at_type == AU_IPv6), ("au_to_subject32_ex: type %u", (unsigned int)tid->at_type)); - if (tid->at_type == AU_IPv6) - GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 13 * + + if (tid->at_type == AU_IPv4) + GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 10 * sizeof(u_int32_t)); else - GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 10 * + GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 13 * sizeof(u_int32_t)); ADD_U_CHAR(dptr, AUT_SUBJECT32_EX); @@ -1068,9 +1069,9 @@ au_to_subject32_ex(au_id_t auid, uid_t e ADD_U_INT32(dptr, sid); ADD_U_INT32(dptr, tid->at_port); ADD_U_INT32(dptr, tid->at_type); - if (tid->at_type == AU_IPv6) + if (tid->at_type == AU_IPv6) ADD_MEM(dptr, &tid->at_addr[0], 4 * sizeof(u_int32_t)); - else + else ADD_MEM(dptr, &tid->at_addr[0], sizeof(u_int32_t)); return (t); @@ -1083,17 +1084,17 @@ au_to_subject64_ex(au_id_t auid, uid_t e token_t *t; u_char *dptr = NULL; + KASSERT((tid->at_type == AU_IPv4) || (tid->at_type == AU_IPv6), + ("au_to_subject64_ex: type %u", (unsigned int)tid->at_type)); + if (tid->at_type == AU_IPv4) GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 7 * sizeof(u_int32_t) + sizeof(u_int64_t) + 2 * sizeof(u_int32_t)); - else if (tid->at_type == AU_IPv6) + else GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 7 * sizeof(u_int32_t) + sizeof(u_int64_t) + 5 * sizeof(u_int32_t)); - else - panic("au_to_subject64_ex: invalid at_type (%d)", - tid->at_type); ADD_U_CHAR(dptr, AUT_SUBJECT64_EX); ADD_U_INT32(dptr, auid); @@ -1124,8 +1125,8 @@ au_to_subject_ex(au_id_t auid, uid_t eui #if !defined(_KERNEL) && !defined(KERNEL) && defined(HAVE_AUDIT_SYSCALLS) /* - * Collects audit information for the current process - * and creates a subject token from it + * Collects audit information for the current process and creates a subject + * token from it. */ token_t * au_to_me(void) @@ -1227,6 +1228,7 @@ au_to_exec_args(char **argv) return (t); } +#endif /* * token ID 1 byte @@ -1234,7 +1236,7 @@ au_to_exec_args(char **argv) * zonename N bytes + 1 terminating NULL byte */ token_t * -au_to_zonename(char *zonename) +au_to_zonename(const char *zonename) { u_char *dptr = NULL; u_int16_t textlen; @@ -1249,6 +1251,7 @@ au_to_zonename(char *zonename) return (t); } +#if !defined(_KERNEL) && !defined(KERNEL) /* * token ID 1 byte * count 4 bytes @@ -1323,6 +1326,53 @@ au_to_header32_tm(int rec_size, au_event return (t); } +/* + * token ID 1 byte + * record byte count 4 bytes + * version # 1 byte [2] + * event type 2 bytes + * event modifier 2 bytes + * address type/length 4 bytes + * machine address 4 bytes/16 bytes (IPv4/IPv6 address) + * seconds of time 4 bytes/8 bytes (32-bit/64-bit value) + * milliseconds of time 4 bytes/8 bytes (32-bit/64-bit value) + */ +token_t * +au_to_header32_ex_tm(int rec_size, au_event_t e_type, au_emod_t e_mod, + struct timeval tm, struct auditinfo_addr *aia) +{ + token_t *t; + u_char *dptr = NULL; + u_int32_t timems; + au_tid_addr_t *tid; + + tid = &aia->ai_termid; + KASSERT(tid->at_type == AU_IPv4 || tid->at_type == AU_IPv6, + ("au_to_header32_ex_tm: invalid address family")); + + GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) + + sizeof(u_char) + 2 * sizeof(u_int16_t) + 3 * + sizeof(u_int32_t) + tid->at_type); + + ADD_U_CHAR(dptr, AUT_HEADER32_EX); + ADD_U_INT32(dptr, rec_size); + ADD_U_CHAR(dptr, AUDIT_HEADER_VERSION_OPENBSM); + ADD_U_INT16(dptr, e_type); + ADD_U_INT16(dptr, e_mod); + + ADD_U_INT32(dptr, tid->at_type); + if (tid->at_type == AU_IPv6) + ADD_MEM(dptr, &tid->at_addr[0], 4 * sizeof(u_int32_t)); + else + ADD_MEM(dptr, &tid->at_addr[0], sizeof(u_int32_t)); + timems = tm.tv_usec/1000; + /* Add the timestamp */ + ADD_U_INT32(dptr, tm.tv_sec); + ADD_U_INT32(dptr, timems); /* We need time in ms. */ + + return (t); +} + token_t * au_to_header64_tm(int rec_size, au_event_t e_type, au_emod_t e_mod, struct timeval tm) @@ -1348,6 +1398,63 @@ au_to_header64_tm(int rec_size, au_event return (t); } +#if !defined(KERNEL) && !defined(_KERNEL) +#ifdef HAVE_AUDIT_SYSCALLS +token_t * +au_to_header32_ex(int rec_size, au_event_t e_type, au_emod_t e_mod) +{ + struct timeval tm; + struct auditinfo_addr aia; + + if (gettimeofday(&tm, NULL) == -1) + return (NULL); + if (auditon(A_GETKAUDIT, &aia, sizeof(aia)) < 0) { + if (errno != ENOSYS) + return (NULL); + return (au_to_header32_tm(rec_size, e_type, e_mod, tm)); + } + return (au_to_header32_ex_tm(rec_size, e_type, e_mod, tm, &aia)); +} +#endif /* HAVE_AUDIT_SYSCALLS */ + +token_t * +au_to_header32(int rec_size, au_event_t e_type, au_emod_t e_mod) +{ + struct timeval tm; + + if (gettimeofday(&tm, NULL) == -1) + return (NULL); + return (au_to_header32_tm(rec_size, e_type, e_mod, tm)); +} + +token_t * +au_to_header64(__unused int rec_size, __unused au_event_t e_type, + __unused au_emod_t e_mod) +{ + struct timeval tm; + + if (gettimeofday(&tm, NULL) == -1) + return (NULL); + return (au_to_header64_tm(rec_size, e_type, e_mod, tm)); +} + +token_t * +au_to_header(int rec_size, au_event_t e_type, au_emod_t e_mod) +{ + + return (au_to_header32(rec_size, e_type, e_mod)); +} + +#ifdef HAVE_AUDIT_SYSCALLS +token_t * +au_to_header_ex(int rec_size, au_event_t e_type, au_emod_t e_mod) +{ + + return (au_to_header32_ex(rec_size, e_type, e_mod)); +} +#endif /* HAVE_AUDIT_SYSCALLS */ +#endif /* !defined(KERNEL) && !defined(_KERNEL) */ + /* * token ID 1 byte * trailer magic number 2 bytes Modified: user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_private.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_private.h Fri Dec 5 05:20:08 2008 (r185625) +++ user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_private.h Fri Dec 5 07:40:36 2008 (r185626) @@ -132,6 +132,7 @@ union auditon_udata { au_qctrl_t au_qctrl; au_stat_t au_stat; au_fstat_t au_fstat; + auditinfo_addr_t au_kau_info; }; struct posix_ipc_perm { @@ -274,8 +275,8 @@ extern struct mtx audit_mtx; extern struct cv audit_watermark_cv; extern struct cv audit_worker_cv; extern struct kaudit_queue audit_q; -extern int audit_q_len; -extern int audit_pre_q_len; +extern size_t audit_q_len; +extern size_t audit_pre_q_len; extern int audit_in_failure; /* @@ -318,6 +319,12 @@ void audit_trigger_init(void); int audit_send_trigger(unsigned int trigger); /* + * Accessor functions to manage global audit state. + */ +void audit_set_kinfo(struct auditinfo_addr *); +void audit_get_kinfo(struct auditinfo_addr *); + +/* * General audit related functions. */ struct kaudit_record *currecord(void); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_syscalls.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_syscalls.c Fri Dec 5 05:20:08 2008 (r185625) +++ user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_syscalls.c Fri Dec 5 07:40:36 2008 (r185626) @@ -157,7 +157,7 @@ free_out: int auditon(struct thread *td, struct auditon_args *uap) { - struct ucred *newcred, *oldcred; + struct ucred *cred, *newcred, *oldcred; int error; union auditon_udata udata; struct proc *tp; @@ -321,22 +321,21 @@ auditon(struct thread *td, struct audito PROC_UNLOCK(tp); return (error); } - if (tp->p_ucred->cr_audit.ai_termid.at_type == AU_IPv6) { + cred = tp->p_ucred; + if (cred->cr_audit.ai_termid.at_type == AU_IPv6) { PROC_UNLOCK(tp); return (EINVAL); } - udata.au_aupinfo.ap_auid = - tp->p_ucred->cr_audit.ai_auid; + udata.au_aupinfo.ap_auid = cred->cr_audit.ai_auid; udata.au_aupinfo.ap_mask.am_success = - tp->p_ucred->cr_audit.ai_mask.am_success; + cred->cr_audit.ai_mask.am_success; udata.au_aupinfo.ap_mask.am_failure = - tp->p_ucred->cr_audit.ai_mask.am_failure; + cred->cr_audit.ai_mask.am_failure; udata.au_aupinfo.ap_termid.machine = - tp->p_ucred->cr_audit.ai_termid.at_addr[0]; + cred->cr_audit.ai_termid.at_addr[0]; udata.au_aupinfo.ap_termid.port = - (dev_t)tp->p_ucred->cr_audit.ai_termid.at_port; - udata.au_aupinfo.ap_asid = - tp->p_ucred->cr_audit.ai_asid; + (dev_t)cred->cr_audit.ai_termid.at_port; + udata.au_aupinfo.ap_asid = cred->cr_audit.ai_asid; PROC_UNLOCK(tp); break; @@ -381,25 +380,26 @@ auditon(struct thread *td, struct audito return (ESRCH); if ((tp = pfind(udata.au_aupinfo_addr.ap_pid)) == NULL) return (ESRCH); - udata.au_aupinfo_addr.ap_auid = - tp->p_ucred->cr_audit.ai_auid; + cred = tp->p_ucred; + udata.au_aupinfo_addr.ap_auid = cred->cr_audit.ai_auid; udata.au_aupinfo_addr.ap_mask.am_success = - tp->p_ucred->cr_audit.ai_mask.am_success; + cred->cr_audit.ai_mask.am_success; udata.au_aupinfo_addr.ap_mask.am_failure = - tp->p_ucred->cr_audit.ai_mask.am_failure; - udata.au_aupinfo_addr.ap_termid = - tp->p_ucred->cr_audit.ai_termid; - udata.au_aupinfo_addr.ap_asid = - tp->p_ucred->cr_audit.ai_asid; + cred->cr_audit.ai_mask.am_failure; + udata.au_aupinfo_addr.ap_termid = cred->cr_audit.ai_termid; + udata.au_aupinfo_addr.ap_asid = cred->cr_audit.ai_asid; PROC_UNLOCK(tp); break; case A_GETKAUDIT: - return (ENOSYS); + audit_get_kinfo(&udata.au_kau_info); break; case A_SETKAUDIT: - return (ENOSYS); + if (udata.au_kau_info.ai_termid.at_type != AU_IPv4 && + udata.au_kau_info.ai_termid.at_type != AU_IPv6) + return (EINVAL); + audit_set_kinfo(&udata.au_kau_info); break; case A_SENDTRIGGER: @@ -500,21 +500,23 @@ int getaudit(struct thread *td, struct getaudit_args *uap) { struct auditinfo ai; + struct ucred *cred; int error; - if (jailed(td->td_ucred)) + cred = td->td_ucred; + if (jailed(cred)) return (ENOSYS); error = priv_check(td, PRIV_AUDIT_GETAUDIT); if (error) return (error); - if (td->td_ucred->cr_audit.ai_termid.at_type == AU_IPv6) - return (ERANGE); + if (cred->cr_audit.ai_termid.at_type == AU_IPv6) + return (E2BIG); bzero(&ai, sizeof(ai)); - ai.ai_auid = td->td_ucred->cr_audit.ai_auid; - ai.ai_mask = td->td_ucred->cr_audit.ai_mask; - ai.ai_asid = td->td_ucred->cr_audit.ai_asid; - ai.ai_termid.machine = td->td_ucred->cr_audit.ai_termid.at_addr[0]; - ai.ai_termid.port = td->td_ucred->cr_audit.ai_termid.at_port; + ai.ai_auid = cred->cr_audit.ai_auid; + ai.ai_mask = cred->cr_audit.ai_mask; + ai.ai_asid = cred->cr_audit.ai_asid; + ai.ai_termid.machine = cred->cr_audit.ai_termid.at_addr[0]; + ai.ai_termid.port = cred->cr_audit.ai_termid.at_port; return (copyout(&ai, uap->auditinfo, sizeof(ai))); } Modified: user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_worker.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_worker.c Fri Dec 5 05:20:08 2008 (r185625) +++ user/kmacy/HEAD_fast_multi_xmit/sys/security/audit/audit_worker.c Fri Dec 5 07:40:36 2008 (r185626) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 1999-2005 Apple Inc. + * Copyright (c) 1999-2008 Apple Inc. * Copyright (c) 2006-2008 Robert N. M. Watson * All rights reserved. * @@ -78,17 +78,24 @@ static struct proc *audit_thread; /* * audit_cred and audit_vp are the stored credential and vnode to use for - * active audit trail. They are protected by audit_worker_sx, which will be - * held across all I/O and all rotation to prevent them from being replaced - * (rotated) while in use. The audit_file_rotate_wait flag is set when the - * kernel has delivered a trigger to auditd to rotate the trail, and is - * cleared when the next rotation takes place. It is also protected by - * audit_worker_sx. + * active audit trail. They are protected by the audit worker lock, which + * will be held across all I/O and all rotation to prevent them from being + * replaced (rotated) while in use. The audit_file_rotate_wait flag is set + * when the kernel has delivered a trigger to auditd to rotate the trail, and + * is cleared when the next rotation takes place. It is also protected by + * the audit worker lock. */ static int audit_file_rotate_wait; -static struct sx audit_worker_sx; static struct ucred *audit_cred; static struct vnode *audit_vp; +static struct sx audit_worker_lock; + +#define AUDIT_WORKER_LOCK_INIT() sx_init(&audit_worker_lock, \ + "audit_worker_lock"); +#define AUDIT_WORKER_LOCK_ASSERT() sx_assert(&audit_worker_lock, \ + SA_XLOCKED) +#define AUDIT_WORKER_LOCK() sx_xlock(&audit_worker_lock) +#define AUDIT_WORKER_UNLOCK() sx_xunlock(&audit_worker_lock) /* * Write an audit record to a file, performed as the last stage after both @@ -111,7 +118,7 @@ audit_record_write(struct vnode *vp, str struct vattr vattr; long temp; - sx_assert(&audit_worker_sx, SA_LOCKED); /* audit_file_rotate_wait. */ + AUDIT_WORKER_LOCK_ASSERT(); if (vp == NULL) return; @@ -191,7 +198,7 @@ audit_record_write(struct vnode *vp, str */ if ((audit_fstat.af_filesz != 0) && (audit_file_rotate_wait == 0) && (vattr.va_size >= audit_fstat.af_filesz)) { - sx_assert(&audit_worker_sx, SA_XLOCKED); + AUDIT_WORKER_LOCK_ASSERT(); audit_file_rotate_wait = 1; (void)audit_send_trigger(AUDIT_TRIGGER_ROTATE_KERNEL); @@ -300,20 +307,20 @@ audit_worker_process_record(struct kaudi au_event_t event; au_id_t auid; int error, sorf; - int trail_locked; + int locked; /* - * We hold the audit_worker_sx lock over both writes, if there are - * two, so that the two records won't be split across a rotation and - * end up in two different trail files. + * We hold the audit worker lock over both writes, if there are two, + * so that the two records won't be split across a rotation and end + * up in two different trail files. */ if (((ar->k_ar_commit & AR_COMMIT_USER) && (ar->k_ar_commit & AR_PRESELECT_USER_TRAIL)) || (ar->k_ar_commit & AR_PRESELECT_TRAIL)) { - sx_xlock(&audit_worker_sx); - trail_locked = 1; + AUDIT_WORKER_LOCK(); + locked = 1; } else - trail_locked = 0; + locked = 0; /* * First, handle the user record, if any: commit to the system trail @@ -321,7 +328,7 @@ audit_worker_process_record(struct kaudi */ if ((ar->k_ar_commit & AR_COMMIT_USER) && (ar->k_ar_commit & AR_PRESELECT_USER_TRAIL)) { - sx_assert(&audit_worker_sx, SA_XLOCKED); + AUDIT_WORKER_LOCK_ASSERT(); audit_record_write(audit_vp, audit_cred, ar->k_udata, ar->k_ulen); } @@ -360,7 +367,7 @@ audit_worker_process_record(struct kaudi } if (ar->k_ar_commit & AR_PRESELECT_TRAIL) { - sx_assert(&audit_worker_sx, SA_XLOCKED); + AUDIT_WORKER_LOCK_ASSERT(); audit_record_write(audit_vp, audit_cred, bsm->data, bsm->len); } @@ -371,8 +378,8 @@ audit_worker_process_record(struct kaudi kau_free(bsm); out: - if (trail_locked) - sx_xunlock(&audit_worker_sx); + if (locked) + AUDIT_WORKER_UNLOCK(); } /* @@ -453,14 +460,14 @@ audit_rotate_vnode(struct ucred *cred, s * Rotate the vnode/cred, and clear the rotate flag so that we will * send a rotate trigger if the new file fills. */ - sx_xlock(&audit_worker_sx); + AUDIT_WORKER_LOCK(); old_audit_cred = audit_cred; old_audit_vp = audit_vp; audit_cred = cred; audit_vp = vp; audit_file_rotate_wait = 0; audit_enabled = (audit_vp != NULL); - sx_xunlock(&audit_worker_sx); + AUDIT_WORKER_UNLOCK(); /* * If there was an old vnode/credential, close and free. @@ -479,7 +486,7 @@ audit_worker_init(void) { int error; - sx_init(&audit_worker_sx, "audit_worker_sx"); + AUDIT_WORKER_LOCK_INIT(); error = kproc_create(audit_worker, NULL, &audit_thread, RFHIGHPID, *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 07:40:54 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 363341065745; Fri, 5 Dec 2008 07:40:54 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 23E118FC19; Fri, 5 Dec 2008 07:40:53 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB57esRm046828; Fri, 5 Dec 2008 07:40:54 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB57erB6046807; Fri, 5 Dec 2008 07:40:53 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812050740.mB57erB6046807@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 07:40:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185627 - user/kmacy/HEAD_fast_multi_xmit/sys/sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 07:40:54 -0000 Author: kmacy Date: Fri Dec 5 07:40:52 2008 New Revision: 185627 URL: http://svn.freebsd.org/changeset/base/185627 Log: IFC 184756:185625 part 2 Added: user/kmacy/HEAD_fast_multi_xmit/sys/sys/osd.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/conf.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/cpuset.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/disklabel.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/jail.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/mount.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/namei.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/param.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmc.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmclog.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/priv.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/proc.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.mk user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscallsubr.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysctl.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysent.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysproto.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/termios.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/ttydefaults.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/user.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/vimage.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/vnode.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h Fri Dec 5 07:40:52 2008 (r185627) @@ -34,28 +34,6 @@ #include -#if defined (__GNUC__) - #if #cpu(i386) || defined __i386 || defined i386 || defined __i386__ || #cpu(x86_64) || defined __x86_64__ - #define mb() __asm__ __volatile__ ("mfence;": : :"memory") - #define wmb() __asm__ __volatile__ ("sfence;": : :"memory") - #define rmb() __asm__ __volatile__ ("lfence;": : :"memory") - #elif #cpu(sparc64) || defined sparc64 || defined __sparcv9 - #define mb() __asm__ __volatile__ ("membar #MemIssue": : :"memory") - #define wmb() mb() - #define rmb() mb() - #elif #cpu(sparc) || defined sparc || defined __sparc__ - #define mb() __asm__ __volatile__ ("stbar;": : :"memory") - #define wmb() mb() - #define rmb() mb() -#else - #define wmb() mb() - #define rmb() mb() - #define mb() /* XXX just to make this compile */ - #endif -#else - #error "unknown compiler" -#endif - #if defined(INVARIANTS) && !defined(DEBUG_BUFRING) #define DEBUG_BUFRING 1 #endif @@ -86,7 +64,6 @@ struct buf_ring { uint64_t _pad1[14]; #ifdef DEBUG_BUFRING struct mtx *br_lock; - uint32_t br_count; #endif void *br_ring[0]; }; @@ -124,9 +101,7 @@ buf_ring_enqueue(struct buf_ring *br, vo #ifdef DEBUG_BUFRING if (br->br_ring[prod_head] != NULL) panic("dangling value in enqueue"); - - atomic_add_int(&br->br_count, 1); -#endif +#endif br->br_ring[prod_head] = buf; wmb(); @@ -174,7 +149,6 @@ buf_ring_dequeue_mc(struct buf_ring *br) buf = br->br_ring[cons_head]; #ifdef DEBUG_BUFRING br->br_ring[cons_head] = NULL; - atomic_subtract_int(&br->br_count, 1); #endif mb(); @@ -220,7 +194,6 @@ buf_ring_dequeue_sc(struct buf_ring *br) mb(); #ifdef DEBUG_BUFRING - atomic_subtract_int(&br->br_count, 1); br->br_ring[cons_head] = NULL; if (!mtx_owned(br->br_lock)) panic("lock not held on single consumer dequeue"); @@ -275,6 +248,4 @@ struct buf_ring *buf_ring_alloc(int coun struct mtx *); void buf_ring_free(struct buf_ring *br, struct malloc_type *type); - - #endif Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/conf.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/conf.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/conf.h Fri Dec 5 07:40:52 2008 (r185627) @@ -288,6 +288,7 @@ void devfs_fpdrop(struct file *fp); /* X #define UID_ROOT 0 #define UID_BIN 3 #define UID_UUCP 66 +#define UID_NOBODY 65534 #define GID_WHEEL 0 #define GID_KMEM 2 @@ -296,6 +297,7 @@ void devfs_fpdrop(struct file *fp); /* X #define GID_BIN 7 #define GID_GAMES 13 #define GID_DIALER 68 +#define GID_NOBODY 65534 typedef void (*dev_clone_fn)(void *arg, struct ucred *cred, char *name, int namelen, struct cdev **result); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/cpuset.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/cpuset.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/cpuset.h Fri Dec 5 07:40:52 2008 (r185627) @@ -132,6 +132,7 @@ typedef struct _cpuset { #define CPU_WHICH_PID 2 /* Specifies a process id. */ #define CPU_WHICH_CPUSET 3 /* Specifies a set id. */ #define CPU_WHICH_IRQ 4 /* Specifies an irq #. */ +#define CPU_WHICH_JAIL 5 /* Specifies a jail id. */ /* * Reserved cpuset identifiers. @@ -168,11 +169,15 @@ struct cpuset { #define CPU_SET_RDONLY 0x0002 /* No modification allowed. */ extern cpuset_t *cpuset_root; +struct proc; +struct thread; struct cpuset *cpuset_thread0(void); struct cpuset *cpuset_ref(struct cpuset *); void cpuset_rel(struct cpuset *); int cpuset_setthread(lwpid_t id, cpuset_t *); +int cpuset_create_root(struct thread *, struct cpuset **); +int cpuset_setproc_update_set(struct proc *, struct cpuset *); #else __BEGIN_DECLS Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/disklabel.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/disklabel.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/disklabel.h Fri Dec 5 07:40:52 2008 (r185627) @@ -52,7 +52,7 @@ /* XXX these should be defined per controller (or drive) elsewhere, not here! */ #if defined(__i386__) || defined(__amd64__) || defined(__arm__) || \ - defined(__ia64__) + defined(__ia64__) || defined(__powerpc__) #define LABELSECTOR 1 /* sector containing label */ #define LABELOFFSET 0 /* offset of label in sector */ #endif Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/jail.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/jail.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/jail.h Fri Dec 5 07:40:52 2008 (r185627) @@ -13,21 +13,74 @@ #ifndef _SYS_JAIL_H_ #define _SYS_JAIL_H_ -struct jail { +#ifdef _KERNEL +struct jail_v0 { u_int32_t version; char *path; char *hostname; u_int32_t ip_number; }; +#endif + +struct jail { + uint32_t version; + char *path; + char *hostname; + char *jailname; + uint32_t ip4s; + uint32_t ip6s; + struct in_addr *ip4; + struct in6_addr *ip6; +}; +#define JAIL_API_VERSION 2 + +/* + * For all xprison structs, always keep the pr_version an int and + * the first variable so userspace can easily distinguish them. + */ +#ifndef _KERNEL +struct xprison_v1 { + int pr_version; + int pr_id; + char pr_path[MAXPATHLEN]; + char pr_host[MAXHOSTNAMELEN]; + u_int32_t pr_ip; +}; +#endif struct xprison { int pr_version; int pr_id; + int pr_state; + cpusetid_t pr_cpusetid; char pr_path[MAXPATHLEN]; char pr_host[MAXHOSTNAMELEN]; - u_int32_t pr_ip; + char pr_name[MAXHOSTNAMELEN]; + uint32_t pr_ip4s; + uint32_t pr_ip6s; +#if 0 + /* + * sizeof(xprison) will be malloced + size needed for all + * IPv4 and IPv6 addesses. Offsets are based numbers of addresses. + */ + struct in_addr pr_ip4[]; + struct in6_addr pr_ip6[]; +#endif +}; +#define XPRISON_VERSION 3 + +static const struct prison_state { + int pr_state; + const char * state_name; +} prison_states[] = { +#define PRISON_STATE_INVALID 0 + { PRISON_STATE_INVALID, "INVALID" }, +#define PRISON_STATE_ALIVE 1 + { PRISON_STATE_ALIVE, "ALIVE" }, +#define PRISON_STATE_DYING 2 + { PRISON_STATE_DYING, "DYING" }, }; -#define XPRISON_VERSION 1 + #ifndef _KERNEL @@ -48,6 +101,12 @@ MALLOC_DECLARE(M_PRISON); #endif #endif /* _KERNEL */ +#if defined(_KERNEL) || defined(_WANT_PRISON) + +#include + +struct cpuset; + /* * This structure describes a prison. It is pointed to by all struct * ucreds's of the inmates. pr_ref keeps track of them and is used to @@ -60,20 +119,26 @@ MALLOC_DECLARE(M_PRISON); * required to read * (d) set only during destruction of jail, no mutex needed */ -#if defined(_KERNEL) || defined(_WANT_PRISON) struct prison { LIST_ENTRY(prison) pr_list; /* (a) all prisons */ int pr_id; /* (c) prison id */ int pr_ref; /* (p) refcount */ + int pr_state; /* (p) prison state */ + int pr_nprocs; /* (p) process count */ char pr_path[MAXPATHLEN]; /* (c) chroot path */ + struct cpuset *pr_cpuset; /* (p) cpuset */ struct vnode *pr_root; /* (c) vnode to rdir */ char pr_host[MAXHOSTNAMELEN]; /* (p) jail hostname */ - u_int32_t pr_ip; /* (c) ip addr host */ + char pr_name[MAXHOSTNAMELEN]; /* (c) admin jail name */ void *pr_linux; /* (p) linux abi */ int pr_securelevel; /* (p) securelevel */ struct task pr_task; /* (d) destroy task */ struct mtx pr_mtx; - void **pr_slots; /* (p) additional data */ + struct osd pr_osd; /* (p) additional data */ + int pr_ip4s; /* (c) number of v4 IPs */ + struct in_addr *pr_ip4; /* (c) v4 IPs of jail */ + int pr_ip6s; /* (c) number of v6 IPs */ + struct in6_addr *pr_ip6; /* (c) v6 IPs of jail */ }; #endif /* _KERNEL || _WANT_PRISON */ @@ -101,6 +166,8 @@ struct ucred; struct mount; struct sockaddr; struct statfs; +struct thread; +int kern_jail(struct thread *, struct jail *); int jailed(struct ucred *cred); void getcredhostname(struct ucred *cred, char *, size_t); int prison_check(struct ucred *cred1, struct ucred *cred2); @@ -109,12 +176,23 @@ void prison_enforce_statfs(struct ucred struct statfs *sp); struct prison *prison_find(int prid); void prison_free(struct prison *pr); -u_int32_t prison_getip(struct ucred *cred); +void prison_free_locked(struct prison *pr); void prison_hold(struct prison *pr); +void prison_hold_locked(struct prison *pr); +void prison_proc_hold(struct prison *); +void prison_proc_free(struct prison *); +int prison_getip4(struct ucred *cred, struct in_addr *ia); +int prison_local_ip4(struct ucred *cred, struct in_addr *ia); +int prison_remote_ip4(struct ucred *cred, struct in_addr *ia); +int prison_check_ip4(struct ucred *cred, struct in_addr *ia); +#ifdef INET6 +int prison_getip6(struct ucred *, struct in6_addr *); +int prison_local_ip6(struct ucred *, struct in6_addr *, int); +int prison_remote_ip6(struct ucred *, struct in6_addr *); +int prison_check_ip6(struct ucred *, struct in6_addr *); +#endif int prison_if(struct ucred *cred, struct sockaddr *sa); -int prison_ip(struct ucred *cred, int flag, u_int32_t *ip); int prison_priv_check(struct ucred *cred, int priv); -void prison_remote_ip(struct ucred *cred, int flags, u_int32_t *ip); /* * Kernel jail services. Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h Fri Dec 5 07:40:52 2008 (r185627) @@ -44,6 +44,8 @@ #endif #endif +#define M_DPAD_LEN 64 + /* * Mbufs are of a single size, MSIZE (sys/param.h), which includes overhead. * An mbuf may add a single "mbuf cluster" of size MCLBYTES (also in @@ -57,6 +59,9 @@ #define MHLEN (MLEN - sizeof(struct pkthdr)) /* data len w/pkthdr */ #define MINCLSIZE (MHLEN + 1) /* smallest amount to put in cluster */ #define M_MAXCOMPRESS (MHLEN / 2) /* max amount to copy for compression */ +#define MICLHLEN (sizeof(struct m_hdr) + sizeof(struct pkthdr) + M_DPAD_LEN + sizeof(((struct mbuf *)0)->m_ext) + sizeof(int)) +#define MICLDOFF (roundup2(MICLHLEN, 64)) +#define MICLBYTES (MCLBYTES + MICLDOFF) #ifdef _KERNEL /*- @@ -115,10 +120,12 @@ struct pkthdr { /* variables for ip and tcp reassembly */ void *header; /* pointer to packet header */ int len; /* total packet length */ + uint32_t flowid; /* packet's 4-tuple system + * flow identifier + */ /* variables for hardware checksum */ int csum_flags; /* flags regarding checksum */ int csum_data; /* data field used by csum routines */ - uint32_t flowid; /* flow identifier (not IPv6) */ u_int16_t tso_segsz; /* TSO segment size */ u_int16_t ether_vtag; /* Ethernet 802.1p+q vlan tag */ SLIST_HEAD(packet_tags, m_tag) tags; /* list of packet tags */ @@ -350,10 +357,12 @@ extern uma_zone_t zone_jumbop; extern uma_zone_t zone_jumbo9; extern uma_zone_t zone_jumbo16; extern uma_zone_t zone_ext_refcnt; +extern uma_zone_t zone_iclust; static __inline struct mbuf *m_getcl(int how, short type, int flags); static __inline struct mbuf *m_get(int how, short type); static __inline struct mbuf *m_gethdr(int how, short type); +static __inline struct mbuf *m_geticl(int how, short type, int flags); static __inline struct mbuf *m_getjcl(int how, short type, int flags, int size); static __inline struct mbuf *m_getclr(int how, short type); /* XXX */ @@ -363,6 +372,12 @@ static __inline void *m_cljget(struct m static __inline void m_chtype(struct mbuf *m, short new_type); void mb_free_ext(struct mbuf *); static __inline struct mbuf *m_last(struct mbuf *m); +void m_tag_delete_chain(struct mbuf *, + struct m_tag *); + + +int mb_iclust_init(struct mbuf *m, short type, int flags); +void mb_iclust_free(void *mem, void *arg); static __inline int m_gettype(int size) @@ -465,7 +480,18 @@ static __inline struct mbuf * m_getcl(int how, short type, int flags) { struct mb_args args; - + struct mbuf *m; + + /* First try an iclust. */ + m = uma_zalloc(zone_iclust, how); + if (m) { + if (type != MT_NOINIT) + mb_iclust_init(m, type, flags); + return (m); + } + /* + * Then fallback to the packetzone. + */ args.flags = flags; args.type = type; return ((struct mbuf *)(uma_zalloc_arg(zone_pack, &args, how))); @@ -616,6 +642,50 @@ m_last(struct mbuf *m) m = m->m_next; return (m); } +static __inline void * +m_icldata(struct mbuf *m) +{ + + return ((void *)((uintptr_t)m + MICLDOFF)); +} + +static __inline +struct mbuf * +m_geticl(int how, short type, int flags) +{ + struct mbuf *m; + + m = uma_zalloc(zone_iclust, how); + if (m && type != MT_NOINIT) + mb_iclust_init(m, type, flags); + + return (m); +} + +/* + * Determine whether an mbuf can be torn down prior to xmit or not. This + * allows the driver to avoid touching the mbuf header when cleaning + * transmit interrupts. + */ +static inline int +m_fasttest(struct mbuf *m) +{ + if (m->m_next == NULL && (m->m_flags & M_EXT) != 0 && + m->m_ext.ext_free == mb_iclust_free && *m->m_ext.ref_cnt == 1) { + if (SLIST_FIRST(&m->m_pkthdr.tags) != NULL) + m_tag_delete_chain(m, NULL); + return (1); + } + return (0); +} + +static inline void +m_fastfree(struct mbuf *m) +{ + + uma_zfree(zone_iclust, m); +} + /* * mbuf, cluster, and external object allocation macros (for compatibility @@ -865,7 +935,6 @@ struct mbuf *m_unshare(struct mbuf *, in /* Packet tag routines. */ struct m_tag *m_tag_alloc(u_int32_t, int, int, int); void m_tag_delete(struct mbuf *, struct m_tag *); -void m_tag_delete_chain(struct mbuf *, struct m_tag *); void m_tag_free_default(struct m_tag *); struct m_tag *m_tag_locate(struct mbuf *, u_int32_t, int, struct m_tag *); struct m_tag *m_tag_copy(struct m_tag *, int); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/mount.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/mount.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/mount.h Fri Dec 5 07:40:52 2008 (r185627) @@ -453,6 +453,7 @@ struct ovfsconf { #define VFCF_LOOPBACK 0x00100000 /* aliases some other mounted FS */ #define VFCF_UNICODE 0x00200000 /* stores file names as Unicode */ #define VFCF_JAIL 0x00400000 /* can be mounted from within a jail */ +#define VFCF_DELEGADMIN 0x00800000 /* supports delegated administration */ typedef uint32_t fsctlop_t; @@ -716,6 +717,7 @@ int vfs_donmount(struct thread *td, int void vfs_getnewfsid(struct mount *); struct cdev *vfs_getrootfsid(struct mount *); struct mount *vfs_getvfs(fsid_t *); /* return vfs given fsid */ +struct mount *vfs_busyfs(fsid_t *); int vfs_modevent(module_t, int, void *); void vfs_mount_error(struct mount *, const char *, ...); void vfs_mountroot(void); /* mount our root filesystem */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/namei.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/namei.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/namei.h Fri Dec 5 07:40:52 2008 (r185627) @@ -66,7 +66,7 @@ struct nameidata { /* * Arguments to lookup. */ - struct vnode *ni_startdir; /* starting directory */ + struct vnode *ni_startdir; /* starting directory */ struct vnode *ni_rootdir; /* logical root directory */ struct vnode *ni_topdir; /* logical top directory */ int ni_dirfd; /* starting directory for *at functions */ @@ -149,15 +149,20 @@ struct nameidata { /* * Initialization of a nameidata structure. */ -#define NDINIT(ndp, op, flags, segflg, namep, td) \ - NDINIT_AT(ndp, op, flags, segflg, namep, AT_FDCWD, td) +#define NDINIT(ndp, op, flags, segflg, namep, td) \ + NDINIT_ALL(ndp, op, flags, segflg, namep, AT_FDCWD, NULL, td) +#define NDINIT_AT(ndp, op, flags, segflg, namep, dirfd, td) \ + NDINIT_ALL(ndp, op, flags, segflg, namep, dirfd, NULL, td) +#define NDINIT_ATVP(ndp, op, flags, segflg, namep, vp, td) \ + NDINIT_ALL(ndp, op, flags, segflg, namep, AT_FDCWD, vp, td) static __inline void -NDINIT_AT(struct nameidata *ndp, +NDINIT_ALL(struct nameidata *ndp, u_long op, u_long flags, enum uio_seg segflg, const char *namep, int dirfd, + struct vnode *startdir, struct thread *td) { ndp->ni_cnd.cn_nameiop = op; @@ -165,6 +170,7 @@ NDINIT_AT(struct nameidata *ndp, ndp->ni_segflg = segflg; ndp->ni_dirp = namep; ndp->ni_dirfd = dirfd; + ndp->ni_startdir = startdir; ndp->ni_cnd.cn_thread = td; } Added: user/kmacy/HEAD_fast_multi_xmit/sys/sys/osd.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/osd.h Fri Dec 5 07:40:52 2008 (r185627) @@ -0,0 +1,89 @@ +/*- + * Copyright (c) 2007 Pawel Jakub Dawidek + * 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 AUTHORS AND CONTRIBUTORS ``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 AUTHORS OR CONTRIBUTORS 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. + * + * $FreeBSD$ + */ + +#ifndef _SYS_OSD_H_ +#define _SYS_OSD_H_ + +#include + +struct osd { + u_int osd_nslots; + void **osd_slots; + LIST_ENTRY(osd) osd_next; +}; + +#ifdef _KERNEL + +#define OSD_THREAD 0 +#define OSD_JAIL 1 + +#define OSD_FIRST OSD_THREAD +#define OSD_LAST OSD_JAIL + +typedef void (*osd_destructor_t)(void *value); + +int osd_register(u_int type, osd_destructor_t destructor); +void osd_deregister(u_int type, u_int slot); + +int osd_set(u_int type, struct osd *osd, u_int slot, void *value); +void *osd_get(u_int type, struct osd *osd, u_int slot); +void osd_del(u_int type, struct osd *osd, u_int slot); + +void osd_exit(u_int type, struct osd *osd); + +#define osd_thread_register(destructor) \ + osd_register(OSD_THREAD, (destructor)) +#define osd_thread_deregister(slot) \ + osd_deregister(OSD_THREAD, (slot)) +#define osd_thread_set(td, slot, value) \ + osd_set(OSD_THREAD, &(td)->td_osd, (slot), (value)) +#define osd_thread_get(td, slot) \ + osd_get(OSD_THREAD, &(td)->td_osd, (slot)) +#define osd_thread_del(td, slot) do { \ + KASSERT((td) == curthread, ("Not curthread.")); \ + osd_del(OSD_THREAD, &(td)->td_osd, (slot)); \ +} while (0) +#define osd_thread_exit(td) \ + osd_exit(OSD_THREAD, &(td)->td_osd) + +#define osd_jail_register(destructor) \ + osd_register(OSD_JAIL, (destructor)) +#define osd_jail_deregister(slot) \ + osd_deregister(OSD_JAIL, (slot)) +#define osd_jail_set(pr, slot, value) \ + osd_set(OSD_JAIL, &(pr)->pr_osd, (slot), (value)) +#define osd_jail_get(pr, slot) \ + osd_get(OSD_JAIL, &(pr)->pr_osd, (slot)) +#define osd_jail_del(pr, slot) \ + osd_del(OSD_JAIL, &(pr)->pr_osd, (slot)) +#define osd_jail_exit(pr) \ + osd_exit(OSD_JAIL, &(pr)->pr_osd) + +#endif /* _KERNEL */ + +#endif /* !_SYS_OSD_H_ */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/param.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/param.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/param.h Fri Dec 5 07:40:52 2008 (r185627) @@ -57,7 +57,7 @@ * is created, otherwise 1. */ #undef __FreeBSD_version -#define __FreeBSD_version 800053 /* Master, propagated to newvers */ +#define __FreeBSD_version 800057 /* Master, propagated to newvers */ #ifndef LOCORE #include @@ -92,9 +92,13 @@ #include #endif +#ifndef FALSE #define FALSE 0 +#endif +#ifndef TRUE #define TRUE 1 #endif +#endif #ifndef _KERNEL /* Signals. */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmc.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmc.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmc.h Fri Dec 5 07:40:52 2008 (r185627) @@ -40,7 +40,7 @@ #define PMC_MODULE_NAME "hwpmc" #define PMC_NAME_MAX 16 /* HW counter name size */ -#define PMC_CLASS_MAX 4 /* #classes of PMCs in a system */ +#define PMC_CLASS_MAX 4 /* max #classes of PMCs per-system */ /* * Kernel<->userland API version number [MMmmpppp] @@ -55,7 +55,7 @@ * The patch version is incremented for every bug fix. */ #define PMC_VERSION_MAJOR 0x03 -#define PMC_VERSION_MINOR 0x00 +#define PMC_VERSION_MINOR 0x01 #define PMC_VERSION_PATCH 0x0000 #define PMC_VERSION (PMC_VERSION_MAJOR << 24 | \ @@ -82,6 +82,7 @@ __PMC_CPU(INTEL_PIV, 0x86, "Intel Pentium IV") \ __PMC_CPU(INTEL_CORE, 0x87, "Intel Core Solo/Duo") \ __PMC_CPU(INTEL_CORE2, 0x88, "Intel Core2") \ + __PMC_CPU(INTEL_CORE2EXTREME, 0x89, "Intel Core2 Extreme") \ __PMC_CPU(INTEL_ATOM, 0x8A, "Intel Atom") enum pmc_cputype { @@ -105,8 +106,7 @@ enum pmc_cputype { __PMC_CLASS(P6) /* Intel Pentium Pro counters */ \ __PMC_CLASS(P4) /* Intel Pentium-IV counters */ \ __PMC_CLASS(IAF) /* Intel Core2/Atom, fixed function */ \ - __PMC_CLASS(IAP1) /* Intel Core...Atom, programmable */ \ - __PMC_CLASS(IAP2) /* Intel Core...Atom, programmable */ + __PMC_CLASS(IAP) /* Intel Core...Atom, programmable */ enum pmc_class { #undef __PMC_CLASS @@ -115,7 +115,7 @@ enum pmc_class { }; #define PMC_CLASS_FIRST PMC_CLASS_TSC -#define PMC_CLASS_LAST PMC_CLASS_IAP2 +#define PMC_CLASS_LAST PMC_CLASS_IAP /* * A PMC can be in the following states: @@ -473,9 +473,10 @@ struct pmc_op_getpmcinfo { */ struct pmc_classinfo { - enum pmc_class pm_class; /* class id */ + enum pmc_class pm_class; /* class id */ uint32_t pm_caps; /* counter capabilities */ uint32_t pm_width; /* width of the PMC */ + uint32_t pm_num; /* number of PMCs in class */ }; struct pmc_op_getcpuinfo { @@ -635,7 +636,7 @@ struct pmc_target { struct pmc { LIST_HEAD(,pmc_target) pm_targets; /* list of target processes */ - LIST_ENTRY(pmc) pm_next; /* owner's list */ + LIST_ENTRY(pmc) pm_next; /* owner's list */ /* * System-wide PMCs are allocated on a CPU and are not moved @@ -679,7 +680,7 @@ struct pmc { * mode, class and the CPU# associated with the PMC. */ - pmc_id_t pm_id; /* allocated PMC id */ + pmc_id_t pm_id; /* allocated PMC id */ /* md extensions */ union pmc_md_pmc pm_md; @@ -722,7 +723,7 @@ struct pmc_targetstate { struct pmc_process { LIST_ENTRY(pmc_process) pp_next; /* hash chain */ int pp_refcnt; /* reference count */ - uint32_t pp_flags; /* flags PMC_PP_* */ + uint32_t pp_flags; /* flags PMC_PP_* */ struct proc *pp_proc; /* target thread */ struct pmc_targetstate pp_pmcs[]; /* NHWPMCs */ }; @@ -840,7 +841,6 @@ struct pmc_cpu { uint32_t pc_state; /* physical cpu number + flags */ struct pmc_samplebuffer *pc_sb; /* space for samples */ struct pmc_hw *pc_hwpmcs[]; /* 'npmc' pointers */ - /* other machine dependent fields come here */ }; #define PMC_PCPU_CPU_MASK 0x000000FF @@ -863,6 +863,48 @@ struct pmc_binding { int pb_cpu; /* if so, to which CPU */ }; + +struct pmc_mdep; + +/* + * struct pmc_classdep + * + * PMC class-dependent operations. + */ +struct pmc_classdep { + uint32_t pcd_caps; /* class capabilities */ + enum pmc_class pcd_class; /* class id */ + int pcd_num; /* number of PMCs */ + int pcd_ri; /* row index of the first PMC in class */ + int pcd_width; /* width of the PMC */ + + /* configuring/reading/writing the hardware PMCs */ + int (*pcd_config_pmc)(int _cpu, int _ri, struct pmc *_pm); + int (*pcd_get_config)(int _cpu, int _ri, struct pmc **_ppm); + int (*pcd_read_pmc)(int _cpu, int _ri, pmc_value_t *_value); + int (*pcd_write_pmc)(int _cpu, int _ri, pmc_value_t _value); + + /* pmc allocation/release */ + int (*pcd_allocate_pmc)(int _cpu, int _ri, struct pmc *_t, + const struct pmc_op_pmcallocate *_a); + int (*pcd_release_pmc)(int _cpu, int _ri, struct pmc *_pm); + + /* starting and stopping PMCs */ + int (*pcd_start_pmc)(int _cpu, int _ri); + int (*pcd_stop_pmc)(int _cpu, int _ri); + + /* description */ + int (*pcd_describe)(int _cpu, int _ri, struct pmc_info *_pi, + struct pmc **_ppmc); + + /* class-dependent initialization & finalization */ + int (*pcd_pcpu_init)(struct pmc_mdep *_md, int _cpu); + int (*pcd_pcpu_fini)(struct pmc_mdep *_md, int _cpu); + + /* machine-specific interface */ + int (*pcd_get_msr)(int _ri, uint32_t *_msr); +}; + /* * struct pmc_mdep * @@ -871,45 +913,28 @@ struct pmc_binding { struct pmc_mdep { uint32_t pmd_cputype; /* from enum pmc_cputype */ - uint32_t pmd_npmc; /* max PMCs per CPU */ - uint32_t pmd_nclass; /* # PMC classes supported */ - struct pmc_classinfo pmd_classes[PMC_CLASS_MAX]; - int pmd_nclasspmcs[PMC_CLASS_MAX]; + uint32_t pmd_npmc; /* number of PMCs per CPU */ + uint32_t pmd_nclass; /* number of PMC classes present */ /* - * Methods + * Machine dependent methods. */ - int (*pmd_init)(int _cpu); /* machine dependent initialization */ - int (*pmd_cleanup)(int _cpu); /* machine dependent cleanup */ + /* per-cpu initialization and finalization */ + int (*pmd_pcpu_init)(struct pmc_mdep *_md, int _cpu); + int (*pmd_pcpu_fini)(struct pmc_mdep *_md, int _cpu); /* thread context switch in/out */ int (*pmd_switch_in)(struct pmc_cpu *_p, struct pmc_process *_pp); int (*pmd_switch_out)(struct pmc_cpu *_p, struct pmc_process *_pp); - /* configuring/reading/writing the hardware PMCs */ - int (*pmd_config_pmc)(int _cpu, int _ri, struct pmc *_pm); - int (*pmd_get_config)(int _cpu, int _ri, struct pmc **_ppm); - int (*pmd_read_pmc)(int _cpu, int _ri, pmc_value_t *_value); - int (*pmd_write_pmc)(int _cpu, int _ri, pmc_value_t _value); - - /* pmc allocation/release */ - int (*pmd_allocate_pmc)(int _cpu, int _ri, struct pmc *_t, - const struct pmc_op_pmcallocate *_a); - int (*pmd_release_pmc)(int _cpu, int _ri, struct pmc *_pm); - - /* starting and stopping PMCs */ - int (*pmd_start_pmc)(int _cpu, int _ri); - int (*pmd_stop_pmc)(int _cpu, int _ri); - /* handle a PMC interrupt */ int (*pmd_intr)(int _cpu, struct trapframe *_tf); - int (*pmd_describe)(int _cpu, int _ri, struct pmc_info *_pi, - struct pmc **_ppmc); - - int (*pmd_get_msr)(int _ri, uint32_t *_msr); - + /* + * PMC class dependent information. + */ + struct pmc_classdep pmd_classdep[]; }; /* @@ -918,7 +943,6 @@ struct pmc_mdep { */ extern struct pmc_cpu **pmc_pcpu; -extern struct pmc_mdep *md; /* driver statistics */ extern struct pmc_op_getdriverstats pmc_stats; @@ -969,7 +993,7 @@ extern struct pmc_debugflags pmc_debugfl #define PMC_DEBUG_MIN_FND 4 /* find */ /* MODULE */ -#define PMC_DEBUG_MIN_PMH 14 /* pmc_hook */ +#define PMC_DEBUG_MIN_PMH 14 /* pmc_hook */ #define PMC_DEBUG_MIN_PMS 15 /* pmc_syscall */ /* OWN */ @@ -1002,7 +1026,7 @@ extern struct pmc_debugflags pmc_debugfl #define PMC_DEBUG_MIN_INT 13 /* interrupts */ /* CPU */ -#define PMC_DEBUG_MIN_BND 8 /* bind */ +#define PMC_DEBUG_MIN_BND 8 /* bind */ #define PMC_DEBUG_MIN_SEL 9 /* select */ /* LOG */ @@ -1023,6 +1047,7 @@ MALLOC_DECLARE(M_PMC); */ struct pmc_mdep *pmc_md_initialize(void); /* MD init function */ +void pmc_md_finalize(struct pmc_mdep *_md); /* MD fini function */ int pmc_getrowdisp(int _ri); int pmc_process_interrupt(int _cpu, struct pmc *_pm, struct trapframe *_tf, int _inuserspace); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmclog.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmclog.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmclog.h Fri Dec 5 07:40:52 2008 (r185627) @@ -239,7 +239,8 @@ union pmclog_entry { /* only used to si /* * Prototypes */ -int pmclog_configure_log(struct pmc_owner *_po, int _logfd); +int pmclog_configure_log(struct pmc_mdep *_md, struct pmc_owner *_po, + int _logfd); int pmclog_deconfigure_log(struct pmc_owner *_po); int pmclog_flush(struct pmc_owner *_po); void pmclog_initialize(void); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/priv.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/priv.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/priv.h Fri Dec 5 07:40:52 2008 (r185627) @@ -84,7 +84,7 @@ #define PRIV_CLOCK_SETTIME 17 /* Can call clock_settime. */ #define PRIV_SETTIMEOFDAY 18 /* Can call settimeofday. */ #define PRIV_SETHOSTID 19 /* Can call sethostid. */ -#define PRIV_SETDOMAINNAME 20 /* Can call setdomainname. */ +#define _PRIV_SETDOMAINNAME 20 /* Removed. */ /* * Audit subsystem privileges. @@ -268,7 +268,7 @@ #define PRIV_VFS_MKNOD_DEV 331 /* Can mknod() to create dev nodes. */ #define PRIV_VFS_MKNOD_WHT 332 /* Can mknod() to create whiteout. */ #define PRIV_VFS_MOUNT 333 /* Can mount(). */ -#define PRIV_VFS_MOUNT_OWNER 334 /* Override owner on user mounts. */ +#define PRIV_VFS_MOUNT_OWNER 334 /* Can manage other users' file systems. */ #define PRIV_VFS_MOUNT_EXPORTED 335 /* Can set MNT_EXPORTED on mount. */ #define PRIV_VFS_MOUNT_PERM 336 /* Override dev node perms at mount. */ #define PRIV_VFS_MOUNT_SUIDDIR 337 /* Can set MNT_SUIDDIR on mount. */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/proc.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/proc.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/proc.h Fri Dec 5 07:40:52 2008 (r185627) @@ -47,6 +47,7 @@ #include #include #include +#include #include #include /* XXX. */ #include @@ -233,6 +234,7 @@ struct thread { char td_name[MAXCOMLEN + 1]; /* (*) Thread name. */ struct file *td_fpop; /* (k) file referencing cdev under op */ int td_dbgflags; /* (c) Userland debugger flags */ + struct osd td_osd; /* (k) Object specific data. */ #define td_endzero td_base_pri /* Copied during fork1() or thread_sched_upcall(). */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.h Fri Dec 5 07:40:52 2008 (r185627) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/kern/syscalls.master 184588 2008-11-03 10:38:00Z dfr + * created from FreeBSD: head/sys/kern/syscalls.master 184789 2008-11-09 10:45:13Z ed */ #define SYS_syscall 0 @@ -161,9 +161,9 @@ #define SYS_freebsd4_fstatfs 158 #define SYS_lgetfh 160 #define SYS_getfh 161 -#define SYS_getdomainname 162 -#define SYS_setdomainname 163 -#define SYS_uname 164 +#define SYS_freebsd4_getdomainname 162 +#define SYS_freebsd4_setdomainname 163 +#define SYS_freebsd4_uname 164 #define SYS_sysarch 165 #define SYS_rtprio 166 #define SYS_semsys 169 Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.mk ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.mk Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.mk Fri Dec 5 07:40:52 2008 (r185627) @@ -1,7 +1,7 @@ # FreeBSD system call names. # DO NOT EDIT-- this file is automatically generated. # $FreeBSD$ -# created from FreeBSD: head/sys/kern/syscalls.master 184588 2008-11-03 10:38:00Z dfr +# created from FreeBSD: head/sys/kern/syscalls.master 184789 2008-11-09 10:45:13Z ed MIASM = \ syscall.o \ exit.o \ @@ -113,9 +113,9 @@ MIASM = \ freebsd4_fstatfs.o \ lgetfh.o \ getfh.o \ - getdomainname.o \ - setdomainname.o \ - uname.o \ + freebsd4_getdomainname.o \ + freebsd4_setdomainname.o \ + freebsd4_uname.o \ sysarch.o \ rtprio.o \ semsys.o \ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscallsubr.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscallsubr.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscallsubr.h Fri Dec 5 07:40:52 2008 (r185627) @@ -142,6 +142,7 @@ int kern_openat(struct thread *td, int f enum uio_seg pathseg, int flags, int mode); int kern_pathconf(struct thread *td, char *path, enum uio_seg pathseg, int name); +int kern_pipe(struct thread *td, int fildes[2]); int kern_preadv(struct thread *td, int fd, struct uio *auio, off_t offset); int kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysctl.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysctl.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysctl.h Fri Dec 5 07:40:52 2008 (r185627) @@ -540,13 +540,16 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_e #define KERN_PROC_RGID 10 /* by real group id */ #define KERN_PROC_GID 11 /* by effective group id */ #define KERN_PROC_PATHNAME 12 /* path to executable */ -#define KERN_PROC_VMMAP 13 /* VM map entries for process */ -#define KERN_PROC_FILEDESC 14 /* File descriptors for process */ +#define KERN_PROC_OVMMAP 13 /* Old VM map entries for process */ +#define KERN_PROC_OFILEDESC 14 /* Old file descriptors for process */ #define KERN_PROC_KSTACK 15 /* Kernel stacks for process */ #define KERN_PROC_INC_THREAD 0x10 /* * modifier for pid, pgrp, tty, * uid, ruid, gid, rgid and proc + * This effectively uses 16-31 */ +#define KERN_PROC_VMMAP 32 /* VM map entries for process */ +#define KERN_PROC_FILEDESC 33 /* File descriptors for process */ /* * KERN_IPC identifiers Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysent.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysent.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysent.h Fri Dec 5 07:40:52 2008 (r185627) @@ -100,8 +100,22 @@ struct sysentvec { void (*sv_setregs)(struct thread *, u_long, u_long, u_long); void (*sv_fixlimit)(struct rlimit *, int); u_long *sv_maxssiz; + u_int sv_flags; }; +#define SV_ILP32 0x000100 +#define SV_LP64 0x000200 +#define SV_IA32 0x004000 +#define SV_AOUT 0x008000 + +#define SV_ABI_MASK 0xff +#define SV_CURPROC_FLAG(x) (curproc->p_sysent->sv_flags & (x)) +#define SV_CURPROC_ABI() (curproc->p_sysent->sv_flags & SV_ABI_MASK) +/* same as ELFOSABI_XXX, to prevent header pollution */ +#define SV_ABI_LINUX 3 +#define SV_ABI_FREEBSD 9 +#define SV_ABI_UNDEF 255 + #ifdef _KERNEL extern struct sysentvec aout_sysvec; extern struct sysentvec elf_freebsd_sysvec; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysproto.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysproto.h Fri Dec 5 07:40:36 2008 (r185626) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysproto.h Fri Dec 5 07:40:52 2008 (r185627) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/kern/syscalls.master 184588 2008-11-03 10:38:00Z dfr + * created from FreeBSD: head/sys/kern/syscalls.master 184789 2008-11-09 10:45:13Z ed *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 07:41:54 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0E6831065672; Fri, 5 Dec 2008 07:41:54 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F05048FC0C; Fri, 5 Dec 2008 07:41:53 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB57fsqr046918; Fri, 5 Dec 2008 07:41:54 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB57fr9Y046902; Fri, 5 Dec 2008 07:41:53 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812050741.mB57fr9Y046902@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 07:41:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185628 - user/kmacy/HEAD_fast_multi_xmit/sys/netinet6 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 07:41:54 -0000 Author: kmacy Date: Fri Dec 5 07:41:53 2008 New Revision: 185628 URL: http://svn.freebsd.org/changeset/base/185628 Log: IFC 184756:185625 part 3 Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/dest6.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/frag6.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/icmp6.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_gif.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_ifattach.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_pcb.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_pcb.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_proto.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_rmx.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_src.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_forward.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_input.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_ipsec.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_mroute.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_output.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/mld6.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/nd6.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/nd6_nbr.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/nd6_rtr.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/raw_ip6.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/route6.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/scope6.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/udp6_usrreq.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/vinet6.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/dest6.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/dest6.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/dest6.c Fri Dec 5 07:41:53 2008 (r185628) @@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include /* * Destination options header processing. Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/frag6.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/frag6.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/frag6.c Fri Dec 5 07:41:53 2008 (r185628) @@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$"); #include #include /* for ECN definitions */ #include /* for ECN definitions */ +#include #include @@ -77,9 +78,11 @@ static struct mtx ip6qlock; /* * These fields all protected by ip6qlock. */ +#ifdef VIMAGE_GLOBALS static u_int frag6_nfragpackets; static u_int frag6_nfrags; static struct ip6q ip6q; /* ip6 reassemble queue */ +#endif #define IP6Q_LOCK_INIT() mtx_init(&ip6qlock, "ip6qlock", NULL, MTX_DEF); #define IP6Q_LOCK() mtx_lock(&ip6qlock) Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/icmp6.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/icmp6.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/icmp6.c Fri Dec 5 07:41:53 2008 (r185628) @@ -87,6 +87,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -94,6 +95,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include + #include #include #include @@ -101,6 +104,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifdef IPSEC #include @@ -109,15 +113,17 @@ __FBSDID("$FreeBSD$"); extern struct domain inet6domain; -struct icmp6stat icmp6stat; - +#ifdef VIMAGE_GLOBALS extern struct inpcbinfo ripcbinfo; extern struct inpcbhead ripcb; extern int icmp6errppslim; -static int icmp6errpps_count = 0; -static struct timeval icmp6errppslim_last; extern int icmp6_nodeinfo; +struct icmp6stat icmp6stat; +static int icmp6errpps_count; +static struct timeval icmp6errppslim_last; +#endif + static void icmp6_errcount(struct icmp6errstat *, int, int); static int icmp6_rip6_input(struct mbuf **, int); static int icmp6_ratelimit(const struct in6_addr *, const int, const int); @@ -138,6 +144,8 @@ icmp6_init(void) { INIT_VNET_INET6(curvnet); + V_icmp6errpps_count = 0; + mld6_init(); } Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6.c Fri Dec 5 07:41:53 2008 (r185628) @@ -84,6 +84,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -100,6 +101,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include MALLOC_DEFINE(M_IP6MADDR, "in6_multi", "internet multicast address"); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_gif.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_gif.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_gif.c Fri Dec 5 07:41:53 2008 (r185628) @@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$"); #include #ifdef INET6 #include +#include #endif #include Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_ifattach.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_ifattach.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_ifattach.c Fri Dec 5 07:41:53 2008 (r185628) @@ -46,11 +46,13 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include #include +#include #include #include @@ -60,19 +62,14 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include -unsigned long in6_maxmtu = 0; - -#ifdef IP6_AUTO_LINKLOCAL -int ip6_auto_linklocal = IP6_AUTO_LINKLOCAL; -#else -int ip6_auto_linklocal = 1; /* enable by default */ -#endif - +#ifdef VIMAGE_GLOBALS +unsigned long in6_maxmtu; +int ip6_auto_linklocal; struct callout in6_tmpaddrtimer_ch; - -extern struct inpcbinfo udbinfo; extern struct inpcbinfo ripcbinfo; +#endif static int get_rand_ifid(struct ifnet *, struct in6_addr *); static int generate_tmp_ifid(u_int8_t *, const u_int8_t *, u_int8_t *); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_pcb.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_pcb.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_pcb.c Fri Dec 5 07:41:53 2008 (r185628) @@ -96,18 +96,14 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include #include #include - -#ifdef IPSEC -#include -#include -#include -#endif /* IPSEC */ +#include #include @@ -149,6 +145,10 @@ in6_pcbbind(register struct inpcb *inp, if ((error = sa6_embedscope(sin6, V_ip6_use_defzone)) != 0) return(error); + if (prison_local_ip6(cred, &sin6->sin6_addr, + ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)) != 0) + return (EINVAL); + lport = sin6->sin6_port; if (IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) { /* @@ -223,6 +223,9 @@ in6_pcbbind(register struct inpcb *inp, return (EADDRINUSE); } } + if (prison_local_ip6(cred, &sin6->sin6_addr, + ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)) != 0) + return (EADDRNOTAVAIL); t = in6_pcblookup_local(pcbinfo, &sin6->sin6_addr, lport, wild, cred); if (t && (reuseport & ((t->inp_vflag & INP_TIMEWAIT) ? @@ -255,6 +258,9 @@ in6_pcbbind(register struct inpcb *inp, } inp->in6p_laddr = sin6->sin6_addr; } + if (prison_local_ip6(cred, &inp->in6p_laddr, + ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)) != 0) + return (EINVAL); if (lport == 0) { int e; if ((e = in6_pcbsetport(&inp->in6p_laddr, inp, cred)) != 0) @@ -314,6 +320,8 @@ in6_pcbladdr(register struct inpcb *inp, if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) sin6->sin6_addr = in6addr_loopback; } + if (prison_remote_ip6(inp->inp_cred, &sin6->sin6_addr) != 0) + return (EADDRNOTAVAIL); /* * XXX: in6_selectsrc might replace the bound local address @@ -410,45 +418,6 @@ in6_pcbdisconnect(struct inpcb *inp) in_pcbrehash(inp); } -void -in6_pcbdetach(struct inpcb *inp) -{ - - KASSERT(inp->inp_socket != NULL, ("in6_pcbdetach: inp_socket == NULL")); - inp->inp_socket->so_pcb = NULL; - inp->inp_socket = NULL; -} - -void -in6_pcbfree(struct inpcb *inp) -{ - struct inpcbinfo *ipi = inp->inp_pcbinfo; - - KASSERT(inp->inp_socket == NULL, ("in6_pcbfree: inp_socket != NULL")); - INP_INFO_WLOCK_ASSERT(inp->inp_pcbinfo); - INP_WLOCK_ASSERT(inp); - -#ifdef IPSEC - if (inp->in6p_sp != NULL) - ipsec6_delete_pcbpolicy(inp); -#endif /* IPSEC */ - inp->inp_gencnt = ++ipi->ipi_gencnt; - in_pcbremlists(inp); - ip6_freepcbopts(inp->in6p_outputopts); - ip6_freemoptions(inp->in6p_moptions); - /* Check and free IPv4 related resources in case of mapped addr */ - if (inp->inp_options) - (void)m_free(inp->inp_options); - if (inp->inp_moptions != NULL) - inp_freemoptions(inp->inp_moptions); - inp->inp_vflag = 0; -#ifdef MAC - mac_inpcb_destroy(inp); -#endif - INP_WUNLOCK(inp); - uma_zfree(ipi->ipi_zone, inp); -} - struct sockaddr * in6_sockaddr(in_port_t port, struct in6_addr *addr_p) { @@ -694,15 +663,16 @@ in6_pcblookup_local(struct inpcbinfo *pc head = &pcbinfo->ipi_hashbase[INP_PCBHASH(INADDR_ANY, lport, 0, pcbinfo->ipi_hashmask)]; LIST_FOREACH(inp, head, inp_hash) { + /* XXX inp locking */ if ((inp->inp_vflag & INP_IPV6) == 0) continue; if (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr) && IN6_ARE_ADDR_EQUAL(&inp->in6p_laddr, laddr) && inp->inp_lport == lport) { - /* - * Found. - */ - return (inp); + /* Found. */ + if (cred == NULL || + inp->inp_cred->cr_prison == cred->cr_prison) + return (inp); } } /* @@ -732,6 +702,10 @@ in6_pcblookup_local(struct inpcbinfo *pc */ LIST_FOREACH(inp, &phd->phd_pcblist, inp_portlist) { wildcard = 0; + if (cred != NULL && + inp->inp_cred->cr_prison != cred->cr_prison) + continue; + /* XXX inp locking */ if ((inp->inp_vflag & INP_IPV6) == 0) continue; if (!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr)) @@ -741,7 +715,7 @@ in6_pcblookup_local(struct inpcbinfo *pc if (IN6_IS_ADDR_UNSPECIFIED(laddr)) wildcard++; else if (!IN6_ARE_ADDR_EQUAL( - &inp->in6p_laddr, laddr)) + &inp->in6p_laddr, laddr)) continue; } else { if (!IN6_IS_ADDR_UNSPECIFIED(laddr)) @@ -750,9 +724,8 @@ in6_pcblookup_local(struct inpcbinfo *pc if (wildcard < matchwild) { match = inp; matchwild = wildcard; - if (matchwild == 0) { + if (matchwild == 0) break; - } } } } @@ -835,11 +808,11 @@ in6_rtchange(struct inpcb *inp, int errn */ struct inpcb * in6_pcblookup_hash(struct inpcbinfo *pcbinfo, struct in6_addr *faddr, - u_int fport_arg, struct in6_addr *laddr, u_int lport_arg, - int wildcard, struct ifnet *ifp) + u_int fport_arg, struct in6_addr *laddr, u_int lport_arg, int wildcard, + struct ifnet *ifp) { struct inpcbhead *head; - register struct inpcb *inp; + struct inpcb *inp, *tmpinp; u_short fport = fport_arg, lport = lport_arg; int faith; @@ -853,10 +826,12 @@ in6_pcblookup_hash(struct inpcbinfo *pcb /* * First look for an exact match. */ + tmpinp = NULL; head = &pcbinfo->ipi_hashbase[ INP_PCBHASH(faddr->s6_addr32[3] /* XXX */, lport, fport, pcbinfo->ipi_hashmask)]; LIST_FOREACH(inp, head, inp_hash) { + /* XXX inp locking */ if ((inp->inp_vflag & INP_IPV6) == 0) continue; if (IN6_ARE_ADDR_EQUAL(&inp->in6p_faddr, faddr) && @@ -864,32 +839,79 @@ in6_pcblookup_hash(struct inpcbinfo *pcb inp->inp_fport == fport && inp->inp_lport == lport) { /* - * Found. + * XXX We should be able to directly return + * the inp here, without any checks. + * Well unless both bound with SO_REUSEPORT? */ - return (inp); + if (jailed(inp->inp_cred)) + return (inp); + if (tmpinp == NULL) + tmpinp = inp; } } - if (wildcard) { - struct inpcb *local_wild = NULL; + if (tmpinp != NULL) + return (tmpinp); + + /* + * Then look for a wildcard match, if requested. + */ + if (wildcard == INPLOOKUP_WILDCARD) { + struct inpcb *local_wild = NULL, *local_exact = NULL; + struct inpcb *jail_wild = NULL; + int injail; + /* + * Order of socket selection - we always prefer jails. + * 1. jailed, non-wild. + * 2. jailed, wild. + * 3. non-jailed, non-wild. + * 4. non-jailed, wild. + */ head = &pcbinfo->ipi_hashbase[INP_PCBHASH(INADDR_ANY, lport, 0, pcbinfo->ipi_hashmask)]; LIST_FOREACH(inp, head, inp_hash) { + /* XXX inp locking */ if ((inp->inp_vflag & INP_IPV6) == 0) continue; - if (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr) && - inp->inp_lport == lport) { - if (faith && (inp->inp_flags & INP_FAITH) == 0) + + if (!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr) || + inp->inp_lport != lport) { + continue; + } + + /* XXX inp locking */ + if (faith && (inp->inp_flags & INP_FAITH) == 0) + continue; + + injail = jailed(inp->inp_cred); + if (injail) { + if (!prison_check_ip6(inp->inp_cred, laddr)) + continue; + } else { + if (local_exact != NULL) continue; - if (IN6_ARE_ADDR_EQUAL(&inp->in6p_laddr, - laddr)) + } + + if (IN6_ARE_ADDR_EQUAL(&inp->in6p_laddr, laddr)) { + if (injail) return (inp); - else if (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)) + else + local_exact = inp; + } else if (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)) { + if (injail) + jail_wild = inp; + else local_wild = inp; } - } - return (local_wild); - } + } /* LIST_FOREACH */ + + if (jail_wild != NULL) + return (jail_wild); + if (local_exact != NULL) + return (local_exact); + if (local_wild != NULL) + return (local_wild); + } /* if (wildcard == INPLOOKUP_WILDCARD) */ /* * Not found. Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_pcb.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_pcb.h Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_pcb.h Fri Dec 5 07:41:53 2008 (r185628) @@ -73,9 +73,7 @@ void in6_pcbpurgeif0 __P((struct inpcbin void in6_losing __P((struct inpcb *)); int in6_pcbbind __P((struct inpcb *, struct sockaddr *, struct ucred *)); int in6_pcbconnect __P((struct inpcb *, struct sockaddr *, struct ucred *)); -void in6_pcbdetach __P((struct inpcb *)); void in6_pcbdisconnect __P((struct inpcb *)); -void in6_pcbfree __P((struct inpcb *)); int in6_pcbladdr __P((struct inpcb *, struct sockaddr *, struct in6_addr **)); struct inpcb * Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_proto.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_proto.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_proto.c Fri Dec 5 07:41:53 2008 (r185628) @@ -128,6 +128,7 @@ __FBSDID("$FreeBSD$"); #endif /* IPSEC */ #include +#include /* * TCP/IP protocol family: IP6, ICMP6, UDP, TCP. @@ -368,73 +369,56 @@ DOMAIN_SET(inet6); /* * Internet configuration info */ -#ifndef IPV6FORWARDING -#ifdef GATEWAY6 -#define IPV6FORWARDING 1 /* forward IP6 packets not for us */ -#else -#define IPV6FORWARDING 0 /* don't forward IP6 packets not for us */ -#endif /* GATEWAY6 */ -#endif /* !IPV6FORWARDING */ - -#ifndef IPV6_SENDREDIRECTS -#define IPV6_SENDREDIRECTS 1 +#ifdef VIMAGE_GLOBALS +int ip6_forwarding; +int ip6_sendredirects; +int ip6_defhlim; +int ip6_defmcasthlim; +int ip6_accept_rtadv; +int ip6_maxfragpackets; +int ip6_maxfrags; +int ip6_log_interval; +int ip6_hdrnestlimit; +int ip6_dad_count; +int ip6_auto_flowlabel; +int ip6_use_deprecated; +int ip6_rr_prune; +int ip6_mcast_pmtu; +int ip6_v6only; +int ip6_keepfaith; +time_t ip6_log_time; +int ip6stealth; +int nd6_onlink_ns_rfc4861; #endif -int ip6_forwarding = IPV6FORWARDING; /* act as router? */ -int ip6_sendredirects = IPV6_SENDREDIRECTS; -int ip6_defhlim = IPV6_DEFHLIM; -int ip6_defmcasthlim = IPV6_DEFAULT_MULTICAST_HOPS; -int ip6_accept_rtadv = 0; /* "IPV6FORWARDING ? 0 : 1" is dangerous */ -int ip6_maxfragpackets; /* initialized in frag6.c:frag6_init() */ -int ip6_maxfrags; /* initialized in frag6.c:frag6_init() */ -int ip6_log_interval = 5; -int ip6_hdrnestlimit = 15; /* How many header options will we process? */ -int ip6_dad_count = 1; /* DupAddrDetectionTransmits */ -int ip6_auto_flowlabel = 1; -int ip6_gif_hlim = 0; -int ip6_use_deprecated = 1; /* allow deprecated addr (RFC2462 5.5.4) */ -int ip6_rr_prune = 5; /* router renumbering prefix - * walk list every 5 sec. */ -int ip6_mcast_pmtu = 0; /* enable pMTU discovery for multicast? */ -int ip6_v6only = 1; - -int ip6_keepfaith = 0; -time_t ip6_log_time = (time_t)0L; -#ifdef IPSTEALTH -int ip6stealth = 0; -#endif -int nd6_onlink_ns_rfc4861 = 0; /* allow 'on-link' nd6 NS (as in RFC 4861) */ - +#ifdef VIMAGE_GLOBALS /* icmp6 */ /* * BSDI4 defines these variables in in_proto.c... * XXX: what if we don't define INET? Should we define pmtu6_expire * or so? (jinmei@kame.net 19990310) */ -int pmtu_expire = 60*10; -int pmtu_probe = 60*2; +int pmtu_expire; +int pmtu_probe; /* raw IP6 parameters */ /* * Nominal space allocated to a raw ip socket. */ -#define RIPV6SNDQ 8192 -#define RIPV6RCVQ 8192 - -u_long rip6_sendspace = RIPV6SNDQ; -u_long rip6_recvspace = RIPV6RCVQ; +u_long rip6_sendspace; +u_long rip6_recvspace; /* ICMPV6 parameters */ -int icmp6_rediraccept = 1; /* accept and process redirects */ -int icmp6_redirtimeout = 10 * 60; /* 10 minutes */ -int icmp6errppslim = 100; /* 100pps */ +int icmp6_rediraccept; +int icmp6_redirtimeout; +int icmp6errppslim; /* control how to respond to NI queries */ -int icmp6_nodeinfo = (ICMP6_NODEINFO_FQDNOK|ICMP6_NODEINFO_NODEADDROK); +int icmp6_nodeinfo; /* UDP on IP6 parameters */ -int udp6_sendspace = 9216; /* really max datagram size */ -int udp6_recvspace = 40 * (1024 + sizeof(struct sockaddr_in6)); - /* 40 1K datagrams */ +int udp6_sendspace; +int udp6_recvspace; +#endif /* VIMAGE_GLOBALS */ /* * sysctl related items. @@ -580,6 +564,6 @@ SYSCTL_V_INT(V_NET, vnet_inet6, _net_ine SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_icmp6, ICMPV6CTL_ND6_DEBUG, nd6_debug, CTLFLAG_RW, nd6_debug, 0, ""); -SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_ONLINKNSRFC4861, - nd6_onlink_ns_rfc4861, CTLFLAG_RW, &nd6_onlink_ns_rfc4861, 0, +SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_icmp6, ICMPV6CTL_ND6_ONLINKNSRFC4861, + nd6_onlink_ns_rfc4861, CTLFLAG_RW, nd6_onlink_ns_rfc4861, 0, "Accept 'on-link' nd6 NS in compliance with RFC 4861."); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_rmx.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_rmx.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_rmx.c Fri Dec 5 07:41:53 2008 (r185628) @@ -89,6 +89,8 @@ __FBSDID("$FreeBSD$"); #include #include +#include + #include #include #include @@ -98,6 +100,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -219,20 +222,20 @@ in6_matroute(void *v_arg, struct radix_n SYSCTL_DECL(_net_inet6_ip6); -static int rtq_reallyold6 = 60*60; - /* one hour is ``really old'' */ -SYSCTL_INT(_net_inet6_ip6, IPV6CTL_RTEXPIRE, rtexpire, - CTLFLAG_RW, &rtq_reallyold6 , 0, ""); - -static int rtq_minreallyold6 = 10; - /* never automatically crank down to less */ -SYSCTL_INT(_net_inet6_ip6, IPV6CTL_RTMINEXPIRE, rtminexpire, - CTLFLAG_RW, &rtq_minreallyold6 , 0, ""); - -static int rtq_toomany6 = 128; - /* 128 cached routes is ``too many'' */ -SYSCTL_INT(_net_inet6_ip6, IPV6CTL_RTMAXCACHE, rtmaxcache, - CTLFLAG_RW, &rtq_toomany6 , 0, ""); +#ifdef VIMAGE_GLOBALS +static int rtq_reallyold6; +static int rtq_minreallyold6; +static int rtq_toomany6; +#endif + +SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_RTEXPIRE, + rtexpire, CTLFLAG_RW, rtq_reallyold6 , 0, ""); + +SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_RTMINEXPIRE, + rtminexpire, CTLFLAG_RW, rtq_minreallyold6 , 0, ""); + +SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_RTMAXCACHE, + rtmaxcache, CTLFLAG_RW, rtq_toomany6 , 0, ""); /* @@ -324,8 +327,10 @@ in6_rtqkill(struct radix_node *rn, void } #define RTQ_TIMEOUT 60*10 /* run no less than once every ten minutes */ -static int rtq_timeout6 = RTQ_TIMEOUT; +#ifdef VIMAGE_GLOBALS +static int rtq_timeout6; static struct callout rtq_timer6; +#endif static void in6_rtqtimo(void *rock) @@ -387,7 +392,9 @@ struct mtuex_arg { struct radix_node_head *rnh; time_t nextstop; }; +#ifdef VIMAGE_GLOBALS static struct callout rtq_mtutimer; +#endif static int in6_mtuexpire(struct radix_node *rn, void *rock) @@ -478,6 +485,11 @@ in6_inithead(void **head, int off) if (off == 0) /* See above */ return 1; /* only do the rest for the real thing */ + V_rtq_reallyold6 = 60*60; /* one hour is ``really old'' */ + V_rtq_minreallyold6 = 10; /* never automatically crank down to less */ + V_rtq_toomany6 = 128; /* 128 cached routes is ``too many'' */ + V_rtq_timeout6 = RTQ_TIMEOUT; + rnh = *head; rnh->rnh_addaddr = in6_addroute; rnh->rnh_matchaddr = in6_matroute; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_src.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_src.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_src.c Fri Dec 5 07:41:53 2008 (r185628) @@ -80,6 +80,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -98,12 +99,15 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include + #include #include #include #include #include #include +#include static struct mtx addrsel_lock; #define ADDRSEL_LOCK_INIT() mtx_init(&addrsel_lock, "addrsel_lock", NULL, MTX_DEF) @@ -119,9 +123,11 @@ static struct sx addrsel_sxlock; #define ADDRSEL_XUNLOCK() sx_xunlock(&addrsel_sxlock) #define ADDR_LABEL_NOTAPP (-1) -struct in6_addrpolicy defaultaddrpolicy; -int ip6_prefer_tempaddr = 0; +#ifdef VIMAGE_GLOBALS +struct in6_addrpolicy defaultaddrpolicy; +int ip6_prefer_tempaddr; +#endif static int selectroute __P((struct sockaddr_in6 *, struct ip6_pktopts *, struct ip6_moptions *, struct route_in6 *, struct ifnet **, @@ -233,6 +239,11 @@ in6_selectsrc(struct sockaddr_in6 *dstso if (*errorp != 0) return (NULL); } + if (cred != NULL && prison_local_ip6(cred, &srcsock.sin6_addr, + (inp != NULL && (inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)) != 0) { + *errorp = EADDRNOTAVAIL; + return (NULL); + } ia6 = (struct in6_ifaddr *)ifa_ifwithaddr((struct sockaddr *)(&srcsock)); if (ia6 == NULL || @@ -250,6 +261,11 @@ in6_selectsrc(struct sockaddr_in6 *dstso * Otherwise, if the socket has already bound the source, just use it. */ if (inp != NULL && !IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)) { + if (cred != NULL && prison_local_ip6(cred, &inp->in6p_laddr, + ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)) != 0) { + *errorp = EADDRNOTAVAIL; + return (NULL); + } return (&inp->in6p_laddr); } @@ -301,6 +317,12 @@ in6_selectsrc(struct sockaddr_in6 *dstso if (!V_ip6_use_deprecated && IFA6_IS_DEPRECATED(ia)) continue; + if (cred != NULL && + prison_local_ip6(cred, &ia->ia_addr.sin6_addr, + (inp != NULL && + (inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)) != 0) + continue; + /* Rule 1: Prefer same address */ if (IN6_ARE_ADDR_EQUAL(&dst, &ia->ia_addr.sin6_addr)) { ia_best = ia; @@ -460,7 +482,6 @@ selectroute(struct sockaddr_in6 *dstsock struct ifnet **retifp, struct rtentry **retrt, int clone, int norouteok) { - INIT_VNET_NET(curvnet); INIT_VNET_INET6(curvnet); int error = 0; struct ifnet *ifp = NULL; @@ -783,6 +804,10 @@ in6_pcbsetport(struct in6_addr *laddr, s INP_INFO_WLOCK_ASSERT(pcbinfo); INP_WLOCK_ASSERT(inp); + if (prison_local_ip6(cred, laddr, + ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)) != 0) + return(EINVAL); + /* XXX: this is redundant when called from in6_pcbbind */ if ((so->so_options & (SO_REUSEADDR|SO_REUSEPORT)) == 0) wild = INPLOOKUP_WILDCARD; @@ -875,6 +900,8 @@ addrsel_policy_init(void) ADDRSEL_SXLOCK_INIT(); INIT_VNET_INET6(curvnet); + V_ip6_prefer_tempaddr = 0; + init_policy_queue(); /* initialize the "last resort" policy */ @@ -972,7 +999,9 @@ struct addrsel_policyent { TAILQ_HEAD(addrsel_policyhead, addrsel_policyent); +#ifdef VIMAGE_GLOBALS struct addrsel_policyhead addrsel_policytab; +#endif static void init_policy_queue(void) Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_forward.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_forward.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_forward.c Fri Dec 5 07:41:53 2008 (r185628) @@ -65,6 +65,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include @@ -76,7 +77,9 @@ __FBSDID("$FreeBSD$"); #include +#ifdef VIMAGE_GLOBALS struct route_in6 ip6_forward_rt; +#endif /* * Forward a packet. If some error occurs return the sender Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_input.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_input.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_input.c Fri Dec 5 07:41:53 2008 (r185628) @@ -88,12 +88,14 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #ifdef INET #include #include +#include #endif /* INET */ #include #include @@ -103,6 +105,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifdef IPSEC #include @@ -116,21 +119,34 @@ extern struct domain inet6domain; u_char ip6_protox[IPPROTO_MAX]; static struct ifqueue ip6intrq; -static int ip6qmaxlen = IFQ_MAXLEN; + +#ifdef VIMAGE_GLOBALS +static int ip6qmaxlen; struct in6_ifaddr *in6_ifaddr; +struct ip6stat ip6stat; +#endif extern struct callout in6_tmpaddrtimer_ch; +extern int dad_init; +extern int pmtu_expire; +extern int pmtu_probe; +extern u_long rip6_sendspace; +extern u_long rip6_recvspace; +extern int icmp6errppslim; +extern int icmp6_nodeinfo; +extern int udp6_sendspace; +extern int udp6_recvspace; + +#ifdef VIMAGE_GLOBALS int ip6_forward_srcrt; /* XXX */ int ip6_sourcecheck; /* XXX */ int ip6_sourcecheck_interval; /* XXX */ - int ip6_ours_check_algorithm; +#endif struct pfil_head inet6_pfil_hook; -struct ip6stat ip6stat; - static void ip6_init2(void *); static struct ip6aux *ip6_setdstifaddr(struct mbuf *, struct in6_ifaddr *); static int ip6_hopopts_input(u_int32_t *, u_int32_t *, struct mbuf **, int *); @@ -149,6 +165,72 @@ ip6_init(void) struct ip6protosw *pr; int i; + V_ip6qmaxlen = IFQ_MAXLEN; + V_in6_maxmtu = 0; +#ifdef IP6_AUTO_LINKLOCAL + V_ip6_auto_linklocal = IP6_AUTO_LINKLOCAL; +#else + V_ip6_auto_linklocal = 1; /* enable by default */ +#endif + +#ifndef IPV6FORWARDING +#ifdef GATEWAY6 +#define IPV6FORWARDING 1 /* forward IP6 packets not for us */ +#else +#define IPV6FORWARDING 0 /* don't forward IP6 packets not for us */ +#endif /* GATEWAY6 */ +#endif /* !IPV6FORWARDING */ + +#ifndef IPV6_SENDREDIRECTS +#define IPV6_SENDREDIRECTS 1 +#endif + + V_ip6_forwarding = IPV6FORWARDING; /* act as router? */ + V_ip6_sendredirects = IPV6_SENDREDIRECTS; + V_ip6_defhlim = IPV6_DEFHLIM; + V_ip6_defmcasthlim = IPV6_DEFAULT_MULTICAST_HOPS; + V_ip6_accept_rtadv = 0; /* "IPV6FORWARDING ? 0 : 1" is dangerous */ + V_ip6_log_interval = 5; + V_ip6_hdrnestlimit = 15; /* How many header options will we process? */ + V_ip6_dad_count = 1; /* DupAddrDetectionTransmits */ + V_ip6_auto_flowlabel = 1; + V_ip6_use_deprecated = 1;/* allow deprecated addr (RFC2462 5.5.4) */ + V_ip6_rr_prune = 5; /* router renumbering prefix + * walk list every 5 sec. */ + V_ip6_mcast_pmtu = 0; /* enable pMTU discovery for multicast? */ + V_ip6_v6only = 1; + V_ip6_keepfaith = 0; + V_ip6_log_time = (time_t)0L; +#ifdef IPSTEALTH + V_ip6stealth = 0; +#endif + V_nd6_onlink_ns_rfc4861 = 0; /* allow 'on-link' nd6 NS (RFC 4861) */ + + V_pmtu_expire = 60*10; + V_pmtu_probe = 60*2; + + /* raw IP6 parameters */ + /* + * Nominal space allocated to a raw ip socket. + */ +#define RIPV6SNDQ 8192 +#define RIPV6RCVQ 8192 + V_rip6_sendspace = RIPV6SNDQ; + V_rip6_recvspace = RIPV6RCVQ; + + /* ICMPV6 parameters */ + V_icmp6_rediraccept = 1; /* accept and process redirects */ + V_icmp6_redirtimeout = 10 * 60; /* 10 minutes */ + V_icmp6errppslim = 100; /* 100pps */ + /* control how to respond to NI queries */ + V_icmp6_nodeinfo = (ICMP6_NODEINFO_FQDNOK|ICMP6_NODEINFO_NODEADDROK); + + /* UDP on IP6 parameters */ + V_udp6_sendspace = 9216; /* really max datagram size */ + V_udp6_recvspace = 40 * (1024 + sizeof(struct sockaddr_in6)); + /* 40 1K datagrams */ + V_dad_init = 0; + #ifdef DIAGNOSTIC if (sizeof(struct protosw) != sizeof(struct ip6protosw)) panic("sizeof(protosw) != sizeof(ip6protosw)"); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_ipsec.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_ipsec.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_ipsec.c Fri Dec 5 07:41:53 2008 (r185628) @@ -72,6 +72,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include extern struct protosw inet6sw[]; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_mroute.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_mroute.c Fri Dec 5 07:40:52 2008 (r185627) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/ip6_mroute.c Fri Dec 5 07:41:53 2008 (r185628) @@ -107,10 +107,12 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include +#include #include #include @@ -120,6 +122,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include static MALLOC_DEFINE(M_MRTABLE6, "mf6c", "multicast forwarding cache entry"); @@ -129,6 +132,7 @@ static MALLOC_DEFINE(M_MRTABLE6, "mf6c", static int ip6_mdq(struct mbuf *, struct ifnet *, struct mf6c *); static void phyint_send(struct ip6_hdr *, struct mif6 *, struct mbuf *); +static void pim6_init(void); static int set_pim6(int *); static int socket_send __P((struct socket *, struct mbuf *, struct sockaddr_in6 *)); @@ -146,10 +150,13 @@ struct ip6protosw in6_pim_protosw = { .pr_input = pim6_input, .pr_output = rip6_output, .pr_ctloutput = rip6_ctloutput, + .pr_init = pim6_init, .pr_usrreqs = &rip6_usrreqs }; -static int ip6_mrouter_ver = 0; +#ifdef VIMAGE_GLOBALS +static int ip6_mrouter_ver; +#endif SYSCTL_DECL(_net_inet6); SYSCTL_DECL(_net_inet6_ip6); @@ -177,7 +184,9 @@ SYSCTL_OPAQUE(_net_inet6_ip6, OID_AUTO, "Multicast Interfaces (struct mif[MAXMIFS], netinet6/ip6_mroute.h)"); #ifdef MRT6DEBUG +#ifdef VIMAGE_GLOBALS static u_int mrt6debug = 0; /* debug level */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 07:42:55 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AE29C1065670; Fri, 5 Dec 2008 07:42:55 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9A9E58FC14; Fri, 5 Dec 2008 07:42:55 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB57gtpJ047018; Fri, 5 Dec 2008 07:42:55 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB57gsnh046998; Fri, 5 Dec 2008 07:42:54 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812050742.mB57gsnh046998@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 07:42:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185629 - in user/kmacy/HEAD_fast_multi_xmit/sys: netinet netipsec sparc64/conf sparc64/include sparc64/pci sparc64/sparc64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 07:42:55 -0000 Author: kmacy Date: Fri Dec 5 07:42:54 2008 New Revision: 185629 URL: http://svn.freebsd.org/changeset/base/185629 Log: IFC 184756:185625 part 4 Added: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_hostcache.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/if_ether.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/igmp.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_gif.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_mcast.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_pcb.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_pcb.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_proto.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_rmx.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_var.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip6.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_carp.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_divert.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fastfwd.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fw2.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fw_pfil.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_icmp.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_icmp.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_input.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_ipsec.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_mroute.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_options.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_output.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_var.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/raw_ip.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/sctp_constants.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/sctp_indata.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/sctp_input.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/sctp_os_bsd.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/sctp_pcb.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/sctp_pcb.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/sctp_usrreq.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/sctputil.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_hostcache.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_input.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_offload.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_output.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_reass.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_sack.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_syncache.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_timer.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_timewait.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_usrreq.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/tcp_var.h user/kmacy/HEAD_fast_multi_xmit/sys/netinet/udp_usrreq.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet/vinet.h user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/ipsec.c user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/ipsec.h user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/ipsec6.h user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/ipsec_input.c user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/ipsec_output.c user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/key.c user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/keysock.c user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/keysock.h user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/vipsec.h user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/xform_ah.c user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/xform_esp.c user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/xform_ipcomp.c user/kmacy/HEAD_fast_multi_xmit/sys/netipsec/xform_ipip.c user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/conf/GENERIC user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/include/atomic.h user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/include/intr_machdep.h user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/include/iommureg.h user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/include/iommuvar.h user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/pci/schizo.c user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/pci/schizoreg.h user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/pci/schizovar.h user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/sparc64/elf_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/sparc64/intr_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/sparc64/iommu.c user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/sparc64/machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/sparc64/nexus.c user/kmacy/HEAD_fast_multi_xmit/sys/sparc64/sparc64/support.S Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/if_ether.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/if_ether.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/if_ether.c Fri Dec 5 07:42:54 2008 (r185629) @@ -61,10 +61,12 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include +#include #include #include @@ -82,10 +84,15 @@ SYSCTL_DECL(_net_link_ether); SYSCTL_NODE(_net_link_ether, PF_INET, inet, CTLFLAG_RW, 0, ""); /* timer values */ -static int arpt_keep = (20*60); /* once resolved, good for 20 more minutes */ +#ifdef VIMAGE_GLOBALS +static int arpt_keep; /* once resolved, good for 20 more minutes */ +static int arp_maxtries; +static int useloopback; /* use loopback interface for local traffic */ +static int arp_proxyall; +#endif -SYSCTL_INT(_net_link_ether_inet, OID_AUTO, max_age, CTLFLAG_RW, - &arpt_keep, 0, "ARP entry lifetime in seconds"); +SYSCTL_V_INT(V_NET, vnet_inet, _net_link_ether_inet, OID_AUTO, max_age, + CTLFLAG_RW, arpt_keep, 0, "ARP entry lifetime in seconds"); #define rt_expire rt_rmx.rmx_expire @@ -99,10 +106,6 @@ struct llinfo_arp { static struct ifqueue arpintrq; -static int arp_maxtries = 5; -static int useloopback = 1; /* use loopback interface for local traffic */ -static int arp_proxyall = 0; - SYSCTL_V_INT(V_NET, vnet_inet, _net_link_ether_inet, OID_AUTO, maxtries, CTLFLAG_RW, arp_maxtries, 0, "ARP resolution attempts before returning error"); @@ -1082,6 +1085,12 @@ arp_ifinit2(struct ifnet *ifp, struct if static void arp_init(void) { + INIT_VNET_INET(curvnet); + + V_arpt_keep = (20*60); /* once resolved, good for 20 more minutes */ + V_arp_maxtries = 5; + V_useloopback = 1; /* use loopback interface for local traffic */ + V_arp_proxyall = 0; arpintrq.ifq_maxlen = 50; mtx_init(&arpintrq.ifq_mtx, "arp_inq", NULL, MTX_DEF); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/igmp.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/igmp.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/igmp.c Fri Dec 5 07:42:54 2008 (r185629) @@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -70,6 +71,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include @@ -80,7 +82,9 @@ static MALLOC_DEFINE(M_IGMP, "igmp", "ig static struct router_info *find_rti(struct ifnet *ifp); static void igmp_sendpkt(struct in_multi *, int, unsigned long); +#ifdef VIMAGE_GLOBALS static struct igmpstat igmpstat; +#endif SYSCTL_V_STRUCT(V_NET, vnet_inet, _net_inet_igmp, IGMPCTL_STATS, stats, CTLFLAG_RW, igmpstat, igmpstat, ""); @@ -92,8 +96,10 @@ SYSCTL_V_STRUCT(V_NET, vnet_inet, _net_i * reference counting is used. We allow unlocked reads of router_info data * when accessed via an in_multi read-only. */ -static struct mtx igmp_mtx; +#ifdef VIMAGE_GLOBALS static SLIST_HEAD(, router_info) router_info_head; +#endif +static struct mtx igmp_mtx; static int igmp_timers_are_running; /* Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in.c Fri Dec 5 07:42:54 2008 (r185629) @@ -53,6 +53,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include static int in_mask2len(struct in_addr *); static void in_len2mask(struct in_addr *, int); @@ -66,18 +67,19 @@ static int in_ifinit(struct ifnet *, struct in_ifaddr *, struct sockaddr_in *, int); static void in_purgemaddrs(struct ifnet *); -static int subnetsarelocal = 0; +#ifdef VIMAGE_GLOBALS +static int subnetsarelocal; +static int sameprefixcarponly; +extern struct inpcbinfo ripcbinfo; +#endif + SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_ip, OID_AUTO, subnets_are_local, CTLFLAG_RW, subnetsarelocal, 0, "Treat all subnets as directly connected"); -static int sameprefixcarponly = 0; SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_ip, OID_AUTO, same_prefix_carp_only, CTLFLAG_RW, sameprefixcarponly, 0, "Refuse to create same prefixes on different interfaces"); -extern struct inpcbinfo ripcbinfo; -extern struct inpcbinfo udbinfo; - /* * Return 1 if an internet address is for a ``local'' host * (one to which we have a connection). If subnetsarelocal Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in.h Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in.h Fri Dec 5 07:42:54 2008 (r185629) @@ -743,8 +743,4 @@ void in_ifdetach(struct ifnet *); #undef __KAME_NETINET_IN_H_INCLUDED_ #endif -#ifdef _KERNEL -#include -#endif - #endif /* !_NETINET_IN_H_*/ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_gif.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_gif.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_gif.c Fri Dec 5 07:42:54 2008 (r185629) @@ -59,6 +59,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifdef INET6 #include @@ -85,7 +86,9 @@ struct protosw in_gif_protosw = { .pr_usrreqs = &rip_usrreqs }; -static int ip_gif_ttl = GIF_TTL; +#ifdef VIMAGE_GLOBALS +extern int ip_gif_ttl; +#endif SYSCTL_V_INT(V_NET, vnet_gif, _net_inet_ip, IPCTL_GIF_TTL, gifttl, CTLFLAG_RW, ip_gif_ttl, 0, ""); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_mcast.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_mcast.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_mcast.c Fri Dec 5 07:42:54 2008 (r185629) @@ -53,6 +53,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -60,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifndef __SOCKUNION_DECLARED union sockunion { @@ -86,7 +88,9 @@ static MALLOC_DEFINE(M_IPMSOURCE, "in_ms * ip_output() to send IGMP packets while holding the lock; this probably is * not quite desirable. */ +#ifdef VIMAGE_GLOBALS struct in_multihead in_multihead; /* XXX BSS initialization */ +#endif struct mtx in_multi_mtx; MTX_SYSINIT(in_multi_mtx, &in_multi_mtx, "in_multi_mtx", MTX_DEF | MTX_RECURSE); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_pcb.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_pcb.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_pcb.c Fri Dec 5 07:42:54 2008 (r185629) @@ -71,9 +71,11 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifdef INET6 #include #include +#include #endif /* INET6 */ @@ -84,32 +86,34 @@ __FBSDID("$FreeBSD$"); #include +#ifdef VIMAGE_GLOBALS /* * These configure the range of local port addresses assigned to * "unspecified" outgoing connections/packets/whatever. */ -int ipport_lowfirstauto = IPPORT_RESERVED - 1; /* 1023 */ -int ipport_lowlastauto = IPPORT_RESERVEDSTART; /* 600 */ -int ipport_firstauto = IPPORT_EPHEMERALFIRST; /* 10000 */ -int ipport_lastauto = IPPORT_EPHEMERALLAST; /* 65535 */ -int ipport_hifirstauto = IPPORT_HIFIRSTAUTO; /* 49152 */ -int ipport_hilastauto = IPPORT_HILASTAUTO; /* 65535 */ +int ipport_lowfirstauto; +int ipport_lowlastauto; +int ipport_firstauto; +int ipport_lastauto; +int ipport_hifirstauto; +int ipport_hilastauto; /* * Reserved ports accessible only to root. There are significant * security considerations that must be accounted for when changing these, * but the security benefits can be great. Please be careful. */ -int ipport_reservedhigh = IPPORT_RESERVED - 1; /* 1023 */ -int ipport_reservedlow = 0; +int ipport_reservedhigh; +int ipport_reservedlow; /* Variables dealing with random ephemeral port allocation. */ -int ipport_randomized = 1; /* user controlled via sysctl */ -int ipport_randomcps = 10; /* user controlled via sysctl */ -int ipport_randomtime = 45; /* user controlled via sysctl */ -int ipport_stoprandom = 0; /* toggled by ipport_tick */ +int ipport_randomized; +int ipport_randomcps; +int ipport_randomtime; +int ipport_stoprandom; int ipport_tcpallocs; int ipport_tcplastcount; +#endif #define RANGECHK(var, min, max) \ if ((var) < (min)) { (var) = (min); } \ @@ -118,6 +122,7 @@ int ipport_tcplastcount; static int sysctl_net_ipport_check(SYSCTL_HANDLER_ARGS) { + INIT_VNET_INET(curvnet); int error; error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req); @@ -291,7 +296,7 @@ in_pcbbind_setup(struct inpcb *inp, stru struct in_addr laddr; u_short lport = 0; int wild = 0, reuseport = (so->so_options & SO_REUSEPORT); - int error, prison = 0; + int error; int dorandom; /* @@ -320,9 +325,8 @@ in_pcbbind_setup(struct inpcb *inp, stru if (sin->sin_family != AF_INET) return (EAFNOSUPPORT); #endif - if (sin->sin_addr.s_addr != INADDR_ANY) - if (prison_ip(cred, 0, &sin->sin_addr.s_addr)) - return(EINVAL); + if (prison_local_ip4(cred, &sin->sin_addr)) + return (EINVAL); if (sin->sin_port != *lportp) { /* Don't allow the port to change. */ if (*lportp != 0) @@ -357,14 +361,11 @@ in_pcbbind_setup(struct inpcb *inp, stru priv_check_cred(cred, PRIV_NETINET_RESERVEDPORT, 0)) return (EACCES); - if (jailed(cred)) - prison = 1; if (!IN_MULTICAST(ntohl(sin->sin_addr.s_addr)) && priv_check_cred(inp->inp_cred, PRIV_NETINET_REUSEPORT, 0) != 0) { t = in_pcblookup_local(pcbinfo, sin->sin_addr, - lport, prison ? 0 : INPLOOKUP_WILDCARD, - cred); + lport, INPLOOKUP_WILDCARD, cred); /* * XXX * This entire block sorely needs a rewrite. @@ -381,10 +382,10 @@ in_pcbbind_setup(struct inpcb *inp, stru t->inp_cred->cr_uid)) return (EADDRINUSE); } - if (prison && prison_ip(cred, 0, &sin->sin_addr.s_addr)) + if (prison_local_ip4(cred, &sin->sin_addr)) return (EADDRNOTAVAIL); t = in_pcblookup_local(pcbinfo, sin->sin_addr, - lport, prison ? 0 : wild, cred); + lport, wild, cred); if (t && (t->inp_vflag & INP_TIMEWAIT)) { /* * XXXRW: If an incpb has had its timewait @@ -416,9 +417,8 @@ in_pcbbind_setup(struct inpcb *inp, stru u_short first, last, aux; int count; - if (laddr.s_addr != INADDR_ANY) - if (prison_ip(cred, 0, &laddr.s_addr)) - return (EINVAL); + if (prison_local_ip4(cred, &laddr)) + return (EINVAL); if (inp->inp_flags & INP_HIGHPORT) { first = V_ipport_hifirstauto; /* sysctl */ @@ -484,7 +484,7 @@ in_pcbbind_setup(struct inpcb *inp, stru } while (in_pcblookup_local(pcbinfo, laddr, lport, wild, cred)); } - if (prison_ip(cred, 0, &laddr.s_addr)) + if (prison_local_ip4(cred, &laddr)) return (EINVAL); *laddrp = laddr.s_addr; *lportp = lport; @@ -553,7 +553,7 @@ in_pcbladdr(struct inpcb *inp, struct in struct route sro; int error; - KASSERT(laddr != NULL, ("%s: null laddr", __func__)); + KASSERT(laddr != NULL, ("%s: laddr NULL", __func__)); error = 0; ia = NULL; @@ -605,7 +605,7 @@ in_pcbladdr(struct inpcb *inp, struct in if (sa->sa_family != AF_INET) continue; sin = (struct sockaddr_in *)sa; - if (htonl(prison_getip(cred)) == sin->sin_addr.s_addr) { + if (prison_check_ip4(cred, &sin->sin_addr)) { ia = (struct in_ifaddr *)ifa; break; } @@ -616,7 +616,8 @@ in_pcbladdr(struct inpcb *inp, struct in } /* 3. As a last resort return the 'default' jail address. */ - laddr->s_addr = htonl(prison_getip(cred)); + if (prison_getip4(cred, laddr) != 0) + error = EADDRNOTAVAIL; goto done; } @@ -641,7 +642,7 @@ in_pcbladdr(struct inpcb *inp, struct in /* Jailed. */ /* 1. Check if the iface address belongs to the jail. */ sin = (struct sockaddr_in *)sro.ro_rt->rt_ifa->ifa_addr; - if (htonl(prison_getip(cred)) == sin->sin_addr.s_addr) { + if (prison_check_ip4(cred, &sin->sin_addr)) { ia = (struct in_ifaddr *)sro.ro_rt->rt_ifa; laddr->s_addr = ia->ia_addr.sin_addr.s_addr; goto done; @@ -657,7 +658,7 @@ in_pcbladdr(struct inpcb *inp, struct in if (sa->sa_family != AF_INET) continue; sin = (struct sockaddr_in *)sa; - if (htonl(prison_getip(cred)) == sin->sin_addr.s_addr) { + if (prison_check_ip4(cred, &sin->sin_addr)) { ia = (struct in_ifaddr *)ifa; break; } @@ -668,7 +669,8 @@ in_pcbladdr(struct inpcb *inp, struct in } /* 3. As a last resort return the 'default' jail address. */ - laddr->s_addr = htonl(prison_getip(cred)); + if (prison_getip4(cred, laddr) != 0) + error = EADDRNOTAVAIL; goto done; } @@ -714,8 +716,7 @@ in_pcbladdr(struct inpcb *inp, struct in if (sa->sa_family != AF_INET) continue; sin = (struct sockaddr_in *)sa; - if (htonl(prison_getip(cred)) == - sin->sin_addr.s_addr) { + if (prison_check_ip4(cred, &sin->sin_addr)) { ia = (struct in_ifaddr *)ifa; break; } @@ -727,7 +728,8 @@ in_pcbladdr(struct inpcb *inp, struct in } /* 3. As a last resort return the 'default' jail address. */ - laddr->s_addr = htonl(prison_getip(cred)); + if (prison_getip4(cred, laddr) != 0) + error = EADDRNOTAVAIL; goto done; } @@ -761,7 +763,7 @@ in_pcbconnect_setup(struct inpcb *inp, s struct sockaddr_in *sin = (struct sockaddr_in *)nam; struct in_ifaddr *ia; struct inpcb *oinp; - struct in_addr laddr, faddr; + struct in_addr laddr, faddr, jailia; u_short lport, fport; int error; @@ -793,9 +795,17 @@ in_pcbconnect_setup(struct inpcb *inp, s * and the primary interface supports broadcast, * choose the broadcast address for that interface. */ - if (faddr.s_addr == INADDR_ANY) - faddr = IA_SIN(TAILQ_FIRST(&V_in_ifaddrhead))->sin_addr; - else if (faddr.s_addr == (u_long)INADDR_BROADCAST && + if (faddr.s_addr == INADDR_ANY) { + if (cred != NULL && jailed(cred)) { + if (prison_getip4(cred, &jailia) != 0) + return (EADDRNOTAVAIL); + faddr.s_addr = jailia.s_addr; + } else { + faddr = + IA_SIN(TAILQ_FIRST(&V_in_ifaddrhead))-> + sin_addr; + } + } else if (faddr.s_addr == (u_long)INADDR_BROADCAST && (TAILQ_FIRST(&V_in_ifaddrhead)->ia_ifp->if_flags & IFF_BROADCAST)) faddr = satosin(&TAILQ_FIRST( @@ -875,7 +885,7 @@ void in_pcbdetach(struct inpcb *inp) { - KASSERT(inp->inp_socket != NULL, ("in_pcbdetach: inp_socket == NULL")); + KASSERT(inp->inp_socket != NULL, ("%s: inp_socket == NULL", __func__)); inp->inp_socket->so_pcb = NULL; inp->inp_socket = NULL; @@ -890,16 +900,23 @@ in_pcbfree(struct inpcb *inp) { struct inpcbinfo *ipi = inp->inp_pcbinfo; - KASSERT(inp->inp_socket == NULL, ("in_pcbfree: inp_socket != NULL")); + KASSERT(inp->inp_socket == NULL, ("%s: inp_socket != NULL", __func__)); INP_INFO_WLOCK_ASSERT(ipi); INP_WLOCK_ASSERT(inp); #ifdef IPSEC - ipsec4_delete_pcbpolicy(inp); -#endif /*IPSEC*/ + if (inp->inp_sp != NULL) + ipsec_delete_pcbpolicy(inp); +#endif /* IPSEC */ inp->inp_gencnt = ++ipi->ipi_gencnt; in_pcbremlists(inp); +#ifdef INET6 + if (inp->inp_vflag & INP_IPV6PROTO) { + ip6_freepcbopts(inp->in6p_outputopts); + ip6_freemoptions(inp->in6p_moptions); + } +#endif if (inp->inp_options) (void)m_free(inp->inp_options); if (inp->inp_moptions != NULL) @@ -1105,6 +1122,7 @@ in_pcblookup_local(struct inpcbinfo *pcb 0, pcbinfo->ipi_hashmask)]; LIST_FOREACH(inp, head, inp_hash) { #ifdef INET6 + /* XXX inp locking */ if ((inp->inp_vflag & INP_IPV4) == 0) continue; #endif @@ -1112,9 +1130,11 @@ in_pcblookup_local(struct inpcbinfo *pcb inp->inp_laddr.s_addr == laddr.s_addr && inp->inp_lport == lport) { /* - * Found. + * Found? */ - return (inp); + if (cred == NULL || + inp->inp_cred->cr_prison == cred->cr_prison) + return (inp); } } /* @@ -1144,7 +1164,11 @@ in_pcblookup_local(struct inpcbinfo *pcb */ LIST_FOREACH(inp, &phd->phd_pcblist, inp_portlist) { wildcard = 0; + if (cred != NULL && + inp->inp_cred->cr_prison != cred->cr_prison) + continue; #ifdef INET6 + /* XXX inp locking */ if ((inp->inp_vflag & INP_IPV4) == 0) continue; /* @@ -1177,9 +1201,8 @@ in_pcblookup_local(struct inpcbinfo *pcb if (wildcard < matchwild) { match = inp; matchwild = wildcard; - if (matchwild == 0) { + if (matchwild == 0) break; - } } } } @@ -1197,7 +1220,7 @@ in_pcblookup_hash(struct inpcbinfo *pcbi struct ifnet *ifp) { struct inpcbhead *head; - struct inpcb *inp; + struct inpcb *inp, *tmpinp; u_short fport = fport_arg, lport = lport_arg; INP_INFO_LOCK_ASSERT(pcbinfo); @@ -1205,60 +1228,108 @@ in_pcblookup_hash(struct inpcbinfo *pcbi /* * First look for an exact match. */ + tmpinp = NULL; head = &pcbinfo->ipi_hashbase[INP_PCBHASH(faddr.s_addr, lport, fport, pcbinfo->ipi_hashmask)]; LIST_FOREACH(inp, head, inp_hash) { #ifdef INET6 + /* XXX inp locking */ if ((inp->inp_vflag & INP_IPV4) == 0) continue; #endif if (inp->inp_faddr.s_addr == faddr.s_addr && inp->inp_laddr.s_addr == laddr.s_addr && inp->inp_fport == fport && - inp->inp_lport == lport) - return (inp); + inp->inp_lport == lport) { + /* + * XXX We should be able to directly return + * the inp here, without any checks. + * Well unless both bound with SO_REUSEPORT? + */ + if (jailed(inp->inp_cred)) + return (inp); + if (tmpinp == NULL) + tmpinp = inp; + } } + if (tmpinp != NULL) + return (tmpinp); /* * Then look for a wildcard match, if requested. */ - if (wildcard) { - struct inpcb *local_wild = NULL; + if (wildcard == INPLOOKUP_WILDCARD) { + struct inpcb *local_wild = NULL, *local_exact = NULL; #ifdef INET6 struct inpcb *local_wild_mapped = NULL; #endif + struct inpcb *jail_wild = NULL; + int injail; + + /* + * Order of socket selection - we always prefer jails. + * 1. jailed, non-wild. + * 2. jailed, wild. + * 3. non-jailed, non-wild. + * 4. non-jailed, wild. + */ head = &pcbinfo->ipi_hashbase[INP_PCBHASH(INADDR_ANY, lport, 0, pcbinfo->ipi_hashmask)]; LIST_FOREACH(inp, head, inp_hash) { #ifdef INET6 + /* XXX inp locking */ if ((inp->inp_vflag & INP_IPV4) == 0) continue; #endif - if (inp->inp_faddr.s_addr == INADDR_ANY && - inp->inp_lport == lport) { - if (ifp && ifp->if_type == IFT_FAITH && - (inp->inp_flags & INP_FAITH) == 0) + if (inp->inp_faddr.s_addr != INADDR_ANY || + inp->inp_lport != lport) + continue; + + /* XXX inp locking */ + if (ifp && ifp->if_type == IFT_FAITH && + (inp->inp_flags & INP_FAITH) == 0) + continue; + + injail = jailed(inp->inp_cred); + if (injail) { + if (!prison_check_ip4(inp->inp_cred, &laddr)) continue; - if (inp->inp_laddr.s_addr == laddr.s_addr) + } else { + if (local_exact != NULL) + continue; + } + + if (inp->inp_laddr.s_addr == laddr.s_addr) { + if (injail) return (inp); - else if (inp->inp_laddr.s_addr == INADDR_ANY) { + else + local_exact = inp; + } else if (inp->inp_laddr.s_addr == INADDR_ANY) { #ifdef INET6 - if (INP_CHECK_SOCKAF(inp->inp_socket, - AF_INET6)) - local_wild_mapped = inp; + /* XXX inp locking, NULL check */ + if (inp->inp_vflag & INP_IPV6PROTO) + local_wild_mapped = inp; + else +#endif /* INET6 */ + if (injail) + jail_wild = inp; else -#endif local_wild = inp; - } } - } + } /* LIST_FOREACH */ + if (jail_wild != NULL) + return (jail_wild); + if (local_exact != NULL) + return (local_exact); + if (local_wild != NULL) + return (local_wild); #ifdef INET6 - if (local_wild == NULL) + if (local_wild_mapped != NULL) return (local_wild_mapped); -#endif - return (local_wild); - } +#endif /* defined(INET6) */ + } /* if (wildcard == INPLOOKUP_WILDCARD) */ + return (NULL); } @@ -1472,7 +1543,7 @@ inp_apply_all(void (*func)(struct inpcb struct inpcb *inp; INP_INFO_RLOCK(&V_tcbinfo); - LIST_FOREACH(inp, tcbinfo.ipi_listhead, inp_list) { + LIST_FOREACH(inp, V_tcbinfo.ipi_listhead, inp_list) { INP_WLOCK(inp); func(inp, arg); INP_WUNLOCK(inp); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_pcb.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_pcb.h Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_pcb.h Fri Dec 5 07:42:54 2008 (r185629) @@ -450,6 +450,8 @@ extern int ipport_lastauto; extern int ipport_hifirstauto; extern int ipport_hilastauto; extern int ipport_randomized; +extern int ipport_randomcps; +extern int ipport_randomtime; extern int ipport_stoprandom; extern int ipport_tcpallocs; extern struct callout ipport_tick_callout; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_proto.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_proto.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_proto.c Fri Dec 5 07:42:54 2008 (r185629) @@ -193,6 +193,7 @@ struct protosw inetsw[] = { .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = icmp_input, .pr_ctloutput = rip_ctloutput, + .pr_init = icmp_init, .pr_usrreqs = &rip_usrreqs }, { Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_rmx.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_rmx.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_rmx.c Fri Dec 5 07:42:54 2008 (r185629) @@ -55,9 +55,12 @@ __FBSDID("$FreeBSD$"); #include #include +#include + #include #include #include +#include extern int in_inithead(void **head, int off); @@ -151,17 +154,20 @@ in_matroute(void *v_arg, struct radix_no return rn; } -static int rtq_reallyold = 60*60; /* one hour is "really old" */ +#ifdef VIMAGE_GLOBALS +static int rtq_reallyold; +static int rtq_minreallyold; +static int rtq_toomany; +#endif + SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_ip, IPCTL_RTEXPIRE, rtexpire, CTLFLAG_RW, rtq_reallyold, 0, "Default expiration time on dynamically learned routes"); -static int rtq_minreallyold = 10; /* never automatically crank down to less */ SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_ip, IPCTL_RTMINEXPIRE, rtminexpire, CTLFLAG_RW, rtq_minreallyold, 0, "Minimum time to attempt to hold onto dynamically learned routes"); -static int rtq_toomany = 128; /* 128 cached routes is "too many" */ SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_ip, IPCTL_RTMAXCACHE, rtmaxcache, CTLFLAG_RW, rtq_toomany, 0, "Upper limit on dynamically learned routes"); @@ -256,8 +262,10 @@ in_rtqkill(struct radix_node *rn, void * } #define RTQ_TIMEOUT 60*10 /* run no less than once every ten minutes */ -static int rtq_timeout = RTQ_TIMEOUT; +#ifdef VIMAGE_GLOBALS +static int rtq_timeout; static struct callout rtq_timer; +#endif static void in_rtqtimo_one(void *rock); @@ -282,6 +290,7 @@ in_rtqtimo(void *rock) static void in_rtqtimo_one(void *rock) { + INIT_VNET_INET(curvnet); struct radix_node_head *rnh = rock; struct rtqk_arg arg; static time_t last_adjusted_timeout = 0; @@ -336,6 +345,7 @@ in_rtqdrain(void) VNET_FOREACH(vnet_iter) { CURVNET_SET(vnet_iter); INIT_VNET_NET(vnet_iter); + for ( fibnum = 0; fibnum < rt_numfibs; fibnum++) { rnh = V_rt_tables[fibnum][AF_INET]; arg.found = arg.killed = 0; @@ -376,6 +386,11 @@ in_inithead(void **head, int off) if (off == 0) /* XXX MRT see above */ return 1; /* only do the rest for a real routing table */ + V_rtq_reallyold = 60*60; /* one hour is "really old" */ + V_rtq_minreallyold = 10; /* never automatically crank down to less */ + V_rtq_toomany = 128; /* 128 cached routes is "too many" */ + V_rtq_timeout = RTQ_TIMEOUT; + rnh = *head; rnh->rnh_addaddr = in_addroute; rnh->rnh_matchaddr = in_matroute; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_var.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_var.h Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/in_var.h Fri Dec 5 07:42:54 2008 (r185629) @@ -138,6 +138,15 @@ do { \ #endif /* + * IP datagram reassembly. + */ +#define IPREASS_NHASH_LOG2 6 +#define IPREASS_NHASH (1 << IPREASS_NHASH_LOG2) +#define IPREASS_HMASK (IPREASS_NHASH - 1) +#define IPREASS_HASH(x,y) \ + (((((x) & 0xF) | ((((x) >> 8) & 0xF) << 4)) ^ (y)) & IPREASS_HMASK) + +/* * This information should be part of the ifnet structure but we don't wish * to change that - as it might break a number of things */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip6.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip6.h Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip6.h Fri Dec 5 07:42:54 2008 (r185629) @@ -347,8 +347,6 @@ do { \ } \ } while (/*CONSTCOND*/ 0) -#include - #endif /*_KERNEL*/ #endif /* not _NETINET_IP6_H_ */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_carp.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_carp.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_carp.c Fri Dec 5 07:42:54 2008 (r185629) @@ -74,6 +74,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #endif #ifdef INET6 @@ -82,6 +83,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #endif #include Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_divert.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_divert.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_divert.c Fri Dec 5 07:42:54 2008 (r185629) @@ -74,6 +74,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include @@ -112,8 +113,10 @@ __FBSDID("$FreeBSD$"); */ /* Internal variables. */ +#ifdef VIMAGE_GLOBALS static struct inpcbhead divcb; static struct inpcbinfo divcbinfo; +#endif static u_long div_sendspace = DIVSNDQ; /* XXX sysctl ? */ static u_long div_recvspace = DIVRCVQ; /* XXX sysctl ? */ @@ -320,6 +323,7 @@ div_output(struct socket *so, struct mbu */ m->m_pkthdr.rcvif = NULL; m->m_nextpkt = NULL; + M_SETFIB(m, so->so_fibnum); if (control) m_freem(control); /* XXX */ @@ -578,6 +582,7 @@ div_ctlinput(int cmd, struct sockaddr *s static int div_pcblist(SYSCTL_HANDLER_ARGS) { + INIT_VNET_INET(curvnet); int error, i, n; struct inpcb *inp, **inp_list; inp_gen_t gencnt; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fastfwd.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fastfwd.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fastfwd.c Fri Dec 5 07:42:54 2008 (r185629) @@ -103,10 +103,13 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include -static int ipfastforward_active = 0; +#ifdef VIMAGE_GLOBALS +static int ipfastforward_active; +#endif SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_ip, OID_AUTO, fastforwarding, CTLFLAG_RW, ipfastforward_active, 0, "Enable fast IP forwarding"); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fw2.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fw2.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fw2.c Fri Dec 5 07:42:54 2008 (r185629) @@ -69,6 +69,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #define IPFW_INTERNAL /* Access to protected data structures in ip_fw.h. */ @@ -91,6 +92,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include + #include #include @@ -1803,14 +1806,14 @@ add_table_entry(struct ip_fw_chain *ch, ent->addr.sin_len = ent->mask.sin_len = 8; ent->mask.sin_addr.s_addr = htonl(mlen ? ~((1 << (32 - mlen)) - 1) : 0); ent->addr.sin_addr.s_addr = addr & ent->mask.sin_addr.s_addr; - IPFW_WLOCK(&V_layer3_chain); + IPFW_WLOCK(ch); if (rnh->rnh_addaddr(&ent->addr, &ent->mask, rnh, (void *)ent) == NULL) { - IPFW_WUNLOCK(&V_layer3_chain); + IPFW_WUNLOCK(ch); free(ent, M_IPFW_TBL); return (EEXIST); } - IPFW_WUNLOCK(&V_layer3_chain); + IPFW_WUNLOCK(ch); return (0); } Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fw_pfil.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fw_pfil.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_fw_pfil.c Fri Dec 5 07:42:54 2008 (r185629) @@ -487,6 +487,7 @@ ipfw6_unhook(void) int ipfw_chg_hook(SYSCTL_HANDLER_ARGS) { + INIT_VNET_IPFW(curvnet); int enable = *(int *)arg1; int error; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_icmp.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_icmp.c Fri Dec 5 07:41:53 2008 (r185628) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet/ip_icmp.c Fri Dec 5 07:42:54 2008 (r185629) @@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifdef IPSEC #include @@ -77,47 +78,51 @@ __FBSDID("$FreeBSD$"); * host table maintenance routines. */ -struct icmpstat icmpstat; +#ifdef VIMAGE_GLOBALS +struct icmpstat icmpstat; +static int icmpmaskrepl; +static u_int icmpmaskfake; +static int drop_redirect; +static int log_redirect; +static int icmplim; +static int icmplim_output; +static char reply_src[IFNAMSIZ]; +static int icmp_rfi; +static int icmp_quotelen; +static int icmpbmcastecho; +#endif + SYSCTL_V_STRUCT(V_NET, vnet_inet, _net_inet_icmp, ICMPCTL_STATS, stats, CTLFLAG_RW, icmpstat, icmpstat, ""); -static int icmpmaskrepl = 0; SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_icmp, ICMPCTL_MASKREPL, maskrepl, CTLFLAG_RW, icmpmaskrepl, 0, "Reply to ICMP Address Mask Request packets."); -static u_int icmpmaskfake = 0; SYSCTL_V_UINT(V_NET, vnet_inet, _net_inet_icmp, OID_AUTO, maskfake, CTLFLAG_RW, icmpmaskfake, 0, "Fake reply to ICMP Address Mask Request packets."); -static int drop_redirect = 0; SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_icmp, OID_AUTO, drop_redirect, CTLFLAG_RW, drop_redirect, 0, "Ignore ICMP redirects"); -static int log_redirect = 0; SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_icmp, OID_AUTO, log_redirect, CTLFLAG_RW, log_redirect, 0, "Log ICMP redirects to the console"); -static int icmplim = 200; SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_icmp, ICMPCTL_ICMPLIM, icmplim, CTLFLAG_RW, icmplim, 0, "Maximum number of ICMP responses per second"); -static int icmplim_output = 1; SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_icmp, OID_AUTO, icmplim_output, CTLFLAG_RW, icmplim_output, 0, "Enable rate limiting of ICMP responses"); -static char reply_src[IFNAMSIZ]; SYSCTL_V_STRING(V_NET, vnet_inet, _net_inet_icmp, OID_AUTO, reply_src, CTLFLAG_RW, reply_src, IFNAMSIZ, "icmp reply source for non-local packets."); -static int icmp_rfi = 0; SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_icmp, OID_AUTO, reply_from_interface, CTLFLAG_RW, icmp_rfi, 0, "ICMP reply from incoming interface for " "non-local packets"); -static int icmp_quotelen = 8; SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_icmp, OID_AUTO, quotelen, CTLFLAG_RW, icmp_quotelen, 0, "Number of bytes from original packet to " "quote in ICMP reply"); @@ -126,7 +131,6 @@ SYSCTL_V_INT(V_NET, vnet_inet, _net_inet * ICMP broadcast echo sysctl */ -static int icmpbmcastecho = 0; SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_icmp, OID_AUTO, bmcastecho, CTLFLAG_RW, icmpbmcastecho, 0, ""); @@ -140,6 +144,22 @@ static void icmp_send(struct mbuf *, str extern struct protosw inetsw[]; +void *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 07:43:53 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 42DA61065677; Fri, 5 Dec 2008 07:43:53 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3014A8FC14; Fri, 5 Dec 2008 07:43:53 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB57hrpL047129; Fri, 5 Dec 2008 07:43:53 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB57hpZ0047100; Fri, 5 Dec 2008 07:43:51 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812050743.mB57hpZ0047100@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 07:43:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185630 - in user/kmacy/HEAD_fast_multi_xmit/sys: net xen xen/xenbus X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 07:43:53 -0000 Author: kmacy Date: Fri Dec 5 07:43:51 2008 New Revision: 185630 URL: http://svn.freebsd.org/changeset/base/185630 Log: IFC 184756:185625 part 5 Added: user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_if.m user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbusvar.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/bpf.c user/kmacy/HEAD_fast_multi_xmit/sys/net/bridgestp.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_bridge.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ef.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ethersubr.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_faith.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fddisubr.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fwsubr.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gif.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gre.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_lagg.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_loop.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_mib.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_spppsubr.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_stf.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_tun.c user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h user/kmacy/HEAD_fast_multi_xmit/sys/net/if_vlan.c user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_cb.c user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_usrreq.c user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c user/kmacy/HEAD_fast_multi_xmit/sys/net/vnet.h user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.c user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.h user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_client.c user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.c user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.h user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_dev.c user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_probe.c user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_probe_backend.c user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_xs.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/bpf.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/bpf.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/bpf.c Fri Dec 5 07:43:51 2008 (r185630) @@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -566,7 +567,9 @@ bpf_detachd(struct bpf_d *d) */ if (d->bd_promisc) { d->bd_promisc = 0; + CURVNET_SET(ifp->if_vnet); error = ifpromisc(ifp, 0); + CURVNET_RESTORE(); if (error != 0 && error != ENXIO) { /* * ENXIO can happen if a pccard is unplugged @@ -872,7 +875,9 @@ bpfwrite(struct cdev *dev, struct uio *u #ifdef MAC BPFD_LOCK(d); + CURVNET_SET(ifp->if_vnet); mac_bpfdesc_create_mbuf(d, m); + CURVNET_RESTORE(); if (mc != NULL) mac_bpfdesc_create_mbuf(d, mc); BPFD_UNLOCK(d); @@ -993,6 +998,7 @@ bpfioctl(struct cdev *dev, u_long cmd, c return (EPERM); } } + CURVNET_SET(TD_TO_VNET(td)); switch (cmd) { default: @@ -1322,6 +1328,7 @@ bpfioctl(struct cdev *dev, u_long cmd, c case BIOCROTZBUF: return (bpf_ioctl_rotzbuf(td, d, (struct bpf_zbuf *)addr)); } + CURVNET_RESTORE(); return (error); } Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/bridgestp.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/bridgestp.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/bridgestp.c Fri Dec 5 07:43:51 2008 (r185630) @@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if.c Fri Dec 5 07:43:51 2008 (r185630) @@ -67,6 +67,7 @@ #include #include #include +#include #if defined(INET) || defined(INET6) /*XXX*/ @@ -79,6 +80,7 @@ #endif #ifdef INET #include +#include #endif #ifdef DEV_CARP #include @@ -117,6 +119,7 @@ static void if_qflush(struct ifnet *); static void if_route(struct ifnet *, int flag, int fam); static int if_setflag(struct ifnet *, int, int, int *, int); static void if_slowtimo(void *); +static int if_transmit(struct ifnet *ifp, struct mbuf *m); static void if_unroute(struct ifnet *, int flag, int fam); static void link_rtrequest(int, struct rtentry *, struct rt_addrinfo *); static int if_rtdel(struct radix_node *, void *); @@ -126,7 +129,6 @@ static void if_start_deferred(void *cont static void do_link_state_change(void *, int); static int if_getgroup(struct ifgroupreq *, struct ifnet *); static int if_getgroupmembers(struct ifgroupreq *); -static int if_transmit(struct ifnet *ifp, struct mbuf *m); #ifdef INET6 /* @@ -136,22 +138,21 @@ static int if_transmit(struct ifnet *ifp extern void nd6_setmtu(struct ifnet *); #endif -int if_index = 0; -int ifqmaxlen = IFQ_MAXLEN; +#ifdef VIMAGE_GLOBALS struct ifnethead ifnet; /* depend on static init XXX */ struct ifgrouphead ifg_head; +int if_index; +static int if_indexlim; +/* Table of ifnet/cdev by index. Locked with ifnet_lock. */ +static struct ifindex_entry *ifindex_table; +static struct knlist ifklist; +#endif + +int ifqmaxlen = IFQ_MAXLEN; struct mtx ifnet_lock; static if_com_alloc_t *if_com_alloc[256]; static if_com_free_t *if_com_free[256]; -static int if_indexlim = 8; -static struct knlist ifklist; - -/* - * Table of ifnet/cdev by index. Locked with ifnet_lock. - */ -static struct ifindex_entry *ifindex_table = NULL; - static void filt_netdetach(struct knote *kn); static int filt_netdev(struct knote *kn, long hint); @@ -193,7 +194,6 @@ ifnet_setbyindex(u_short idx, struct ifn struct ifaddr * ifaddr_byindex(u_short idx) { - INIT_VNET_NET(curvnet); struct ifaddr *ifa; IFNET_RLOCK(); @@ -359,6 +359,10 @@ if_init(void *dummy __unused) { INIT_VNET_NET(curvnet); + V_if_index = 0; + V_ifindex_table = NULL; + V_if_indexlim = 8; + IFNET_LOCK_INIT(); TAILQ_INIT(&V_ifnet); TAILQ_INIT(&V_ifg_head); @@ -733,8 +737,7 @@ if_detach(struct ifnet *ifp) INIT_VNET_NET(ifp->if_vnet); struct ifaddr *ifa; struct radix_node_head *rnh; - int s; - int i; + int s, i, j; struct domain *dp; struct ifnet *iter; int found = 0; @@ -806,14 +809,13 @@ if_detach(struct ifnet *ifp) * to this interface...oh well... */ for (i = 1; i <= AF_MAX; i++) { - int j; - for (j = 0; j < rt_numfibs; j++) { - if ((rnh = V_rt_tables[j][i]) == NULL) - continue; - RADIX_NODE_HEAD_LOCK(rnh); - (void) rnh->rnh_walktree(rnh, if_rtdel, ifp); - RADIX_NODE_HEAD_UNLOCK(rnh); - } + for (j = 0; j < rt_numfibs; j++) { + if ((rnh = V_rt_tables[j][i]) == NULL) + continue; + RADIX_NODE_HEAD_LOCK(rnh); + (void) rnh->rnh_walktree(rnh, if_rtdel, ifp); + RADIX_NODE_HEAD_UNLOCK(rnh); + } } /* Announce that the interface is gone. */ @@ -2211,7 +2213,7 @@ again: struct sockaddr *sa = ifa->ifa_addr; if (jailed(curthread->td_ucred) && - prison_if(curthread->td_ucred, sa)) + !prison_if(curthread->td_ucred, sa)) continue; addrs++; #ifdef COMPAT_43 Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_bridge.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_bridge.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_bridge.c Fri Dec 5 07:43:51 2008 (r185630) @@ -115,9 +115,11 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifdef INET6 #include #include +#include #endif #ifdef DEV_CARP #include Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ef.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ef.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ef.c Fri Dec 5 07:43:51 2008 (r185630) @@ -50,6 +50,7 @@ #include #include #include +#include #ifdef INET #include Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ethersubr.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ethersubr.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_ethersubr.c Fri Dec 5 07:43:51 2008 (r185630) @@ -64,6 +64,7 @@ #include #include #include +#include #if defined(INET) || defined(INET6) #include @@ -143,8 +144,10 @@ MALLOC_DEFINE(M_ARPCOM, "arpcom", "802.* int ether_ipfw_chk(struct mbuf **m0, struct ifnet *dst, struct ip_fw **rule, int shared); +#ifdef VIMAGE_GLOBALS static int ether_ipfw; #endif +#endif /* * Ethernet output routine. Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_faith.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_faith.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_faith.c Fri Dec 5 07:43:51 2008 (r185630) @@ -77,6 +77,7 @@ #include #include #include +#include #endif #define FAITHNAME "faith" Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fddisubr.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fddisubr.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fddisubr.c Fri Dec 5 07:43:51 2008 (r185630) @@ -335,7 +335,7 @@ fddi_output(ifp, m, dst, rt0) } } - IFQ_HANDOFF(ifp, m, error); + error = (ifp->if_transmit)(ifp, m); if (error) ifp->if_oerrors++; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fwsubr.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fwsubr.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_fwsubr.c Fri Dec 5 07:43:51 2008 (r185630) @@ -249,7 +249,7 @@ firewire_output(struct ifnet *ifp, struc */ enc->ul[0] = htonl(enc->ul[0]); - IFQ_HANDOFF(ifp, m, error); + error = (ifp->if_transmit)(ifp, m); return (error); } else { /* @@ -309,7 +309,7 @@ firewire_output(struct ifnet *ifp, struc enc->ul[0] = htonl(enc->ul[0]); enc->ul[1] = htonl(enc->ul[1]); - IFQ_HANDOFF(ifp, m, error); + error = (ifp->if_transmit)(ifp, m); if (error) { if (mtail) m_freem(mtail); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gif.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gif.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gif.c Fri Dec 5 07:43:51 2008 (r185630) @@ -94,7 +94,18 @@ */ static struct mtx gif_mtx; static MALLOC_DEFINE(M_GIF, "gif", "Generic Tunnel Interface"); + +#ifdef VIMAGE_GLOBALS static LIST_HEAD(, gif_softc) gif_softc_list; +static int max_gif_nesting; +static int parallel_tunnels; +#ifdef INET +int ip_gif_ttl; +#endif +#ifdef INET6 +int ip6_gif_hlim; +#endif +#endif void (*ng_gif_input_p)(struct ifnet *ifp, struct mbuf **mp, int af); void (*ng_gif_input_orphan_p)(struct ifnet *ifp, struct mbuf *m, int af); @@ -123,9 +134,6 @@ SYSCTL_NODE(_net_link, IFT_GIF, gif, CTL */ #define MAX_GIF_NEST 1 #endif -#ifndef VIMAGE -static int max_gif_nesting = MAX_GIF_NEST; -#endif SYSCTL_V_INT(V_NET, vnet_gif, _net_link_gif, OID_AUTO, max_nesting, CTLFLAG_RW, max_gif_nesting, 0, "Max nested tunnels"); @@ -140,11 +148,6 @@ SYSCTL_V_INT(V_NET, vnet_gif, _net_inet6 * pair of addresses. Some applications require this functionality so * we allow control over this check here. */ -#ifdef XBONEHACK -static int parallel_tunnels = 1; -#else -static int parallel_tunnels = 0; -#endif SYSCTL_V_INT(V_NET, vnet_gif, _net_link_gif, OID_AUTO, parallel_tunnels, CTLFLAG_RW, parallel_tunnels, 0, "Allow parallel tunnels?"); @@ -251,12 +254,21 @@ gifmodevent(mod, type, data) switch (type) { case MOD_LOAD: mtx_init(&gif_mtx, "gif_mtx", NULL, MTX_DEF); - LIST_INIT(&V_gif_softc_list); - if_clone_attach(&gif_cloner); + LIST_INIT(&V_gif_softc_list); + V_max_gif_nesting = MAX_GIF_NEST; +#ifdef XBONEHACK + V_parallel_tunnels = 1; +#else + V_parallel_tunnels = 0; +#endif +#ifdef INET + V_ip_gif_ttl = GIF_TTL; +#endif #ifdef INET6 V_ip6_gif_hlim = GIF_HLIM; #endif + if_clone_attach(&gif_cloner); break; case MOD_UNLOAD: Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gre.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gre.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_gre.c Fri Dec 5 07:43:51 2008 (r185630) @@ -79,6 +79,7 @@ #include #include #include +#include #else #error "Huh? if_gre without inet?" #endif Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_lagg.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_lagg.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_lagg.c Fri Dec 5 07:43:51 2008 (r185630) @@ -1371,7 +1371,7 @@ int lagg_enqueue(struct ifnet *ifp, struct mbuf *m) { - return ((ifp->if_transmit)(ifp, m)); + return (ifp->if_transmit)(ifp, m); } /* Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_loop.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_loop.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_loop.c Fri Dec 5 07:43:51 2008 (r185630) @@ -57,6 +57,7 @@ #include #include #include +#include #ifdef INET #include @@ -96,13 +97,18 @@ int looutput(struct ifnet *ifp, struct static int lo_clone_create(struct if_clone *, int, caddr_t); static void lo_clone_destroy(struct ifnet *); -struct ifnet *loif = NULL; /* Used externally */ +#ifdef VIMAGE_GLOBALS +struct ifnet *loif; /* Used externally */ +#endif IFC_SIMPLE_DECLARE(lo, 1); static void lo_clone_destroy(struct ifnet *ifp) { +#ifdef INVARIANTS + INIT_VNET_NET(ifp->if_vnet); +#endif /* XXX: destroying lo0 will lead to panics. */ KASSERT(V_loif != ifp, ("%s: destroying lo0", __func__)); @@ -139,9 +145,11 @@ lo_clone_create(struct if_clone *ifc, in static int loop_modevent(module_t mod, int type, void *data) { + INIT_VNET_NET(curvnet); switch (type) { case MOD_LOAD: + V_loif = NULL; if_clone_attach(&lo_cloner); break; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_mib.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_mib.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_mib.c Fri Dec 5 07:43:51 2008 (r185630) @@ -38,6 +38,7 @@ #include #include +#include /* * A sysctl(3) MIB for generic interface information. This information Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_spppsubr.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_spppsubr.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_spppsubr.c Fri Dec 5 07:43:51 2008 (r185630) @@ -56,6 +56,7 @@ #ifdef INET #include #include +#include #endif #ifdef INET6 Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_stf.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_stf.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_stf.c Fri Dec 5 07:43:51 2008 (r185630) @@ -107,6 +107,7 @@ #include #include #include +#include #include #include Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_tun.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_tun.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_tun.c Fri Dec 5 07:43:51 2008 (r185630) @@ -657,7 +657,7 @@ tunoutput( } } - IFQ_HANDOFF(ifp, m0, error); + error = (ifp->if_transmit)(ifp, m0); if (error) { ifp->if_collisions++; return (ENOBUFS); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h Fri Dec 5 07:43:51 2008 (r185630) @@ -720,8 +720,6 @@ int ether_poll_register(poll_handler_ int ether_poll_deregister(struct ifnet *ifp); #endif /* DEVICE_POLLING */ -#include - #endif /* _KERNEL */ #endif /* !_NET_IF_VAR_H_ */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_vlan.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_vlan.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_vlan.c Fri Dec 5 07:43:51 2008 (r185630) @@ -64,6 +64,7 @@ #include #include #include +#include #define VLANNAME "vlan" #define VLAN_DEF_HWIDTH 4 @@ -868,7 +869,7 @@ vlan_start(struct ifnet *ifp) * Send it, precisely as ether_output() would have. * We are already running at splimp. */ - error = (ifp->if_transmit)(p, m); + error = (p->if_transmit)(p, m); if (!error) ifp->if_opackets++; else Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_cb.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_cb.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_cb.c Fri Dec 5 07:43:51 2008 (r185630) @@ -46,6 +46,7 @@ #include #include +#include /* * Routines to manage the raw protocol control blocks. @@ -57,7 +58,9 @@ */ struct mtx rawcb_mtx; +#ifdef VIMAGE_GLOBALS struct rawcb_list_head rawcb_list; +#endif SYSCTL_NODE(_net, OID_AUTO, raw, CTLFLAG_RW, 0, "Raw socket infrastructure"); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_usrreq.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_usrreq.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/raw_usrreq.c Fri Dec 5 07:43:51 2008 (r185630) @@ -48,6 +48,7 @@ #include #include +#include MTX_SYSINIT(rawcb_mtx, &rawcb_mtx, "rawcb", MTX_DEF); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c Fri Dec 5 07:43:51 2008 (r185630) @@ -57,9 +57,11 @@ #ifdef RADIX_MPATH #include #endif +#include #include #include +#include #include @@ -84,6 +86,7 @@ SYSCTL_INT(_net, OID_AUTO, add_addr_allf &rt_add_addr_allfibs, 0, ""); TUNABLE_INT("net.add_addr_allfibs", &rt_add_addr_allfibs); +#ifdef VIMAGE_GLOBALS static struct rtstat rtstat; /* by default only the first 'row' of tables will be accessed. */ @@ -96,6 +99,7 @@ static struct rtstat rtstat; struct radix_node_head *rt_tables[RT_MAXFIBS][AF_MAX+1]; static int rttrash; /* routes not in table but not freed */ +#endif static void rt_maskedcopy(struct sockaddr *, struct sockaddr *, struct sockaddr *); @@ -143,6 +147,7 @@ SYSCTL_PROC(_net, OID_AUTO, my_fibnum, C static void route_init(void) { + INIT_VNET_INET(curvnet); int table; struct domain *dom; int fam; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c Fri Dec 5 07:43:51 2008 (r185630) @@ -31,11 +31,13 @@ */ #include "opt_sctp.h" #include "opt_mpath.h" +#include "opt_inet.h" +#include "opt_inet6.h" #include #include -#include #include +#include #include #include #include @@ -52,8 +54,12 @@ #include #include #include +#include #include +#ifdef INET6 +#include +#endif #ifdef SCTP extern void sctp_addr_change(struct ifaddr *ifa, int cmd); @@ -309,6 +315,136 @@ static struct pr_usrreqs route_usrreqs = .pru_close = rts_close, }; +#ifndef _SOCKADDR_UNION_DEFINED +#define _SOCKADDR_UNION_DEFINED +/* + * The union of all possible address formats we handle. + */ +union sockaddr_union { + struct sockaddr sa; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; +}; +#endif /* _SOCKADDR_UNION_DEFINED */ + +static int +rtm_get_jailed(struct rt_addrinfo *info, struct ifnet *ifp, + struct rtentry *rt, union sockaddr_union *saun, struct ucred *cred) +{ + + switch (info->rti_info[RTAX_DST]->sa_family) { +#ifdef INET + case AF_INET: + { + struct in_addr ia; + + /* + * 1. Check if the returned address is part of the jail. + */ + ia = ((struct sockaddr_in *)rt->rt_ifa->ifa_addr)->sin_addr; + if (prison_check_ip4(cred, &ia) != 0) { + info->rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr; + + } else { + struct ifaddr *ifa; + int found; + + found = 0; + + /* + * 2. Try to find an address on the given outgoing + * interface that belongs to the jail. + */ + TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { + struct sockaddr *sa; + sa = ifa->ifa_addr; + if (sa->sa_family != AF_INET) + continue; + ia = ((struct sockaddr_in *)sa)->sin_addr; + if (prison_check_ip4(cred, &ia) != 0) { + found = 1; + break; + } + } + if (!found) { + /* + * 3. As a last resort return the 'default' + * jail address. + */ + if (prison_getip4(cred, &ia) != 0) + return (ESRCH); + } + bzero(&saun->sin, sizeof(struct sockaddr_in)); + saun->sin.sin_len = sizeof(struct sockaddr_in); + saun->sin.sin_family = AF_INET; + saun->sin.sin_addr.s_addr = ia.s_addr; + info->rti_info[RTAX_IFA] = + (struct sockaddr *)&saun->sin; + } + break; + } +#endif +#ifdef INET6 + case AF_INET6: + { + struct in6_addr ia6; + + /* + * 1. Check if the returned address is part of the jail. + */ + bcopy(&((struct sockaddr_in6 *)rt->rt_ifa->ifa_addr)->sin6_addr, + &ia6, sizeof(struct in6_addr)); + if (prison_check_ip6(cred, &ia6) != 0) { + info->rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr; + } else { + struct ifaddr *ifa; + int found; + + found = 0; + + /* + * 2. Try to find an address on the given outgoing + * interface that belongs to the jail. + */ + TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { + struct sockaddr *sa; + sa = ifa->ifa_addr; + if (sa->sa_family != AF_INET6) + continue; + bcopy(&((struct sockaddr_in6 *)sa)->sin6_addr, + &ia6, sizeof(struct in6_addr)); + if (prison_check_ip6(cred, &ia6) != 0) { + found = 1; + break; + } + } + if (!found) { + /* + * 3. As a last resort return the 'default' + * jail address. + */ + if (prison_getip6(cred, &ia6) != 0) + return (ESRCH); + } + bzero(&saun->sin6, sizeof(struct sockaddr_in6)); + saun->sin6.sin6_len = sizeof(struct sockaddr_in6); + saun->sin6.sin6_family = AF_INET6; + bcopy(&ia6, &saun->sin6.sin6_addr, + sizeof(struct in6_addr)); + if (sa6_recoverscope(&saun->sin6) != 0) + return (ESRCH); + info->rti_info[RTAX_IFA] = + (struct sockaddr *)&saun->sin6; + } + break; + } +#endif + default: + return (ESRCH); + } + return (0); +} + /*ARGSUSED*/ static int route_output(struct mbuf *m, struct socket *so) @@ -321,7 +457,7 @@ route_output(struct mbuf *m, struct sock struct rt_addrinfo info; int len, error = 0; struct ifnet *ifp = NULL; - struct sockaddr_in jail; + union sockaddr_union saun; #define senderr(e) { error = e; goto flush;} if (m == NULL || ((m->m_len < sizeof(long)) && @@ -481,16 +617,17 @@ route_output(struct mbuf *m, struct sock info.rti_info[RTAX_IFP] = ifp->if_addr->ifa_addr; if (jailed(so->so_cred)) { - bzero(&jail, sizeof(jail)); - jail.sin_family = PF_INET; - jail.sin_len = sizeof(jail); - jail.sin_addr.s_addr = - htonl(prison_getip(so->so_cred)); - info.rti_info[RTAX_IFA] = - (struct sockaddr *)&jail; - } else + error = rtm_get_jailed( + &info, ifp, rt, &saun, + so->so_cred); + if (error != 0) { + RT_UNLOCK(rt); + senderr(ESRCH); + } + } else { info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr; + } if (ifp->if_flags & IFF_POINTOPOINT) info.rti_info[RTAX_BRD] = rt->rt_ifa->ifa_dstaddr; @@ -1171,7 +1308,7 @@ sysctl_iflist(int af, struct walkarg *w) if (af && af != ifa->ifa_addr->sa_family) continue; if (jailed(curthread->td_ucred) && - prison_if(curthread->td_ucred, ifa->ifa_addr)) + !prison_if(curthread->td_ucred, ifa->ifa_addr)) continue; info.rti_info[RTAX_IFA] = ifa->ifa_addr; info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask; @@ -1220,7 +1357,7 @@ sysctl_ifmalist(int af, struct walkarg * if (af && af != ifma->ifma_addr->sa_family) continue; if (jailed(curproc->p_ucred) && - prison_if(curproc->p_ucred, ifma->ifma_addr)) + !prison_if(curproc->p_ucred, ifma->ifma_addr)) continue; info.rti_info[RTAX_IFA] = ifma->ifma_addr; info.rti_info[RTAX_GATEWAY] = Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/vnet.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/vnet.h Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/vnet.h Fri Dec 5 07:43:51 2008 (r185630) @@ -33,9 +33,10 @@ #ifndef _NET_VNET_H_ #define _NET_VNET_H_ -#ifdef VIMAGE #include "opt_route.h" +#include +#include #include #include #include @@ -66,8 +67,6 @@ struct vnet_net { int _ether_ipfw; }; -#endif - /* * Symbol translation macros */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.c Fri Dec 5 07:43:51 2008 (r185630) @@ -537,8 +537,8 @@ gnttab_expand(unsigned int req_entries) return rc; } -static int -gnttab_init(void *unused) +int +gnttab_init() { int i; unsigned int max_nr_glist_frames; @@ -593,4 +593,4 @@ ini_nomem: } MTX_SYSINIT(gnttab, &gnttab_list_lock, "GNTTAB LOCK", MTX_DEF); -SYSINIT(gnttab, SI_SUB_PSEUDO, SI_ORDER_FIRST, gnttab_init, NULL); +//SYSINIT(gnttab, SI_SUB_PSEUDO, SI_ORDER_FIRST, gnttab_init, NULL); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.h Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/xen/gnttab.h Fri Dec 5 07:43:51 2008 (r185630) @@ -49,6 +49,8 @@ struct gnttab_free_callback { uint16_t count; }; +int gnttab_init(void); + int gnttab_grant_foreign_access(domid_t domid, unsigned long frame, int flags); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_client.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_client.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_client.c Fri Dec 5 07:43:51 2008 (r185630) @@ -46,7 +46,7 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include +#include #include @@ -71,7 +71,7 @@ const char *xenbus_strstate(XenbusState } int -xenbus_watch_path(struct xenbus_device *dev, char *path, +xenbus_watch_path(device_t dev, char *path, struct xenbus_watch *watch, void (*callback)(struct xenbus_watch *, const char **, unsigned int)) @@ -94,7 +94,7 @@ xenbus_watch_path(struct xenbus_device * EXPORT_SYMBOL(xenbus_watch_path); -int xenbus_watch_path2(struct xenbus_device *dev, const char *path, +int xenbus_watch_path2(device_t dev, const char *path, const char *path2, struct xenbus_watch *watch, void (*callback)(struct xenbus_watch *, const char **, unsigned int)) @@ -119,70 +119,27 @@ int xenbus_watch_path2(struct xenbus_dev } EXPORT_SYMBOL(xenbus_watch_path2); - -int xenbus_switch_state(struct xenbus_device *dev, - XenbusState state) -{ - /* We check whether the state is currently set to the given value, and - if not, then the state is set. We don't want to unconditionally - write the given state, because we don't want to fire watches - unnecessarily. Furthermore, if the node has gone, we don't write - to it, as the device will be tearing down, and we don't want to - resurrect that directory. - */ - - int current_state; - int err; - - if (state == dev->state) - return (0); - - err = xenbus_scanf(XBT_NIL, dev->nodename, "state", "%d", - ¤t_state); - if (err != 1) - return 0; - - err = xenbus_printf(XBT_NIL, dev->nodename, "state", "%d", state); - if (err) { - if (state != XenbusStateClosing) /* Avoid looping */ - xenbus_dev_fatal(dev, err, "writing new state"); - return err; - } - - dev->state = state; - return 0; - -} - -int xenbus_frontend_closed(struct xenbus_device *dev) -{ - xenbus_switch_state(dev, XenbusStateClosed); -#if 0 - complete(&dev->down); -#endif - return 0; -} - /** * Return the path to the error node for the given device, or NULL on failure. * If the value returned is non-NULL, then it is the caller's to kfree. */ -static char *error_path(struct xenbus_device *dev) +static char *error_path(device_t dev) { - char *path_buffer = kmalloc(strlen("error/") + strlen(dev->nodename) + + char *path_buffer = kmalloc(strlen("error/") + + strlen(xenbus_get_node(dev)) + 1, GFP_KERNEL); if (path_buffer == NULL) { return NULL; } strcpy(path_buffer, "error/"); - strcpy(path_buffer + strlen("error/"), dev->nodename); + strcpy(path_buffer + strlen("error/"), xenbus_get_node(dev)); return path_buffer; } -static void _dev_error(struct xenbus_device *dev, int err, const char *fmt, +static void _dev_error(device_t dev, int err, const char *fmt, va_list ap) { int ret; @@ -205,13 +162,13 @@ static void _dev_error(struct xenbus_dev if (path_buffer == NULL) { printk("xenbus: failed to write error node for %s (%s)\n", - dev->nodename, printf_buffer); + xenbus_get_node(dev), printf_buffer); goto fail; } if (xenbus_write(XBT_NIL, path_buffer, "error", printf_buffer) != 0) { printk("xenbus: failed to write error node for %s (%s)\n", - dev->nodename, printf_buffer); + xenbus_get_node(dev), printf_buffer); goto fail; } @@ -223,7 +180,7 @@ static void _dev_error(struct xenbus_dev } -void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt, +void xenbus_dev_error(device_t dev, int err, const char *fmt, ...) { va_list ap; @@ -235,7 +192,7 @@ void xenbus_dev_error(struct xenbus_devi EXPORT_SYMBOL(xenbus_dev_error); -void xenbus_dev_fatal(struct xenbus_device *dev, int err, const char *fmt, +void xenbus_dev_fatal(device_t dev, int err, const char *fmt, ...) { va_list ap; @@ -244,14 +201,15 @@ void xenbus_dev_fatal(struct xenbus_devi _dev_error(dev, err, fmt, ap); va_end(ap); - xenbus_switch_state(dev, XenbusStateClosing); + xenbus_set_state(dev, XenbusStateClosing); } EXPORT_SYMBOL(xenbus_dev_fatal); -int xenbus_grant_ring(struct xenbus_device *dev, unsigned long ring_mfn) +int xenbus_grant_ring(device_t dev, unsigned long ring_mfn) { - int err = gnttab_grant_foreign_access(dev->otherend_id, ring_mfn, 0); + int err = gnttab_grant_foreign_access( + xenbus_get_otherend_id(dev), ring_mfn, 0); if (err < 0) xenbus_dev_fatal(dev, err, "granting access to ring page"); return err; @@ -259,13 +217,13 @@ int xenbus_grant_ring(struct xenbus_devi EXPORT_SYMBOL(xenbus_grant_ring); -int xenbus_alloc_evtchn(struct xenbus_device *dev, int *port) +int xenbus_alloc_evtchn(device_t dev, int *port) { struct evtchn_alloc_unbound alloc_unbound; int err; alloc_unbound.dom = DOMID_SELF; - alloc_unbound.remote_dom = dev->otherend_id; + alloc_unbound.remote_dom = xenbus_get_otherend_id(dev); err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &alloc_unbound); @@ -279,7 +237,7 @@ int xenbus_alloc_evtchn(struct xenbus_de EXPORT_SYMBOL(xenbus_alloc_evtchn); -int xenbus_free_evtchn(struct xenbus_device *dev, int port) +int xenbus_free_evtchn(device_t dev, int port) { struct evtchn_close close; int err; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.c Fri Dec 5 07:42:54 2008 (r185629) +++ user/kmacy/HEAD_fast_multi_xmit/sys/xen/xenbus/xenbus_comms.c Fri Dec 5 07:43:51 2008 (r185630) @@ -31,8 +31,8 @@ #include __FBSDID("$FreeBSD$"); -#include *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 07:44:53 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 66870106564A; Fri, 5 Dec 2008 07:44:53 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 517B58FC08; Fri, 5 Dec 2008 07:44:53 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB57irRi047225; Fri, 5 Dec 2008 07:44:53 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB57irgQ047218; Fri, 5 Dec 2008 07:44:53 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812050744.mB57irgQ047218@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 07:44:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185631 - in user/kmacy/HEAD_fast_multi_xmit/sys/dev: aac acpica adb ale asmc ata ata/chipsets ath ath/ath_hal ath/ath_hal/ar5210 ath/ath_hal/ar5211 ath/ath_hal/ar5212 ath/ath_hal/ar531... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 07:44:53 -0000 Author: kmacy Date: Fri Dec 5 07:44:52 2008 New Revision: 185631 URL: http://svn.freebsd.org/changeset/base/185631 Log: IFC 184756:185625 part 6 Added: user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/ user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_ale.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_alereg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_alevar.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_debug.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_decode.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_desc.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_devid.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v1.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v1.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v14.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v14.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v3.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v3.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_internal.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_regdomain.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_soc.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_interrupts.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_keycache.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_phy.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_power.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_recv.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210desc.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210phy.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210reg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5k_0007.ini user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_interrupts.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_keycache.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_misc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_phy.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_power.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_recv.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211desc.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211phy.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211reg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/boss.ini user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar2316.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar2317.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar2413.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar2425.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5111.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5112.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212.ini user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_ani.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_eeprom.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_gpio.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_interrupts.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_keycache.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_phy.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_power.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_reset.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_rfgain.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212desc.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212phy.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212reg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5311reg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5413.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_attach.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_eeprom.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_gpio.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_interrupts.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_misc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_power.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_reset.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312phy.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312reg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5315_gpio.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar2133.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416.ini user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal_adcdc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal_adcgain.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal_iq.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_eeprom.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_gpio.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_keycache.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_phy.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_power.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416desc.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416phy.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416reg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar9160.ini user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar9160_attach.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_core.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_core.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_intel.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_tsc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_tsc.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/serial/u3g2.c Deleted: user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uss820dci_pccard.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usbdevs user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/urio2_ioctl.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/aac/aac_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_hpet.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_pcib.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/adb/adb_bus.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/asmc/asmc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ata/ata-pci.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ata/ata-queue.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ata/chipsets/ata-marvell.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ah_osdep.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ah_osdep.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_rate/amrr/amrr.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_rate/onoe/onoe.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_rate/sample/sample.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_rate/sample/sample.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/if_ath.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/if_ath_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/if_athvar.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/bce/if_bce.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/bce/if_bcereg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/cardbus/cardbus.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cardbus/cardbus_cis.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cardbus/cardbus_device.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cardbus/cardbusvar.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/coretemp/coretemp.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_ael1002.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_common.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_ctl_defs.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_t3_hw.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_xgmac.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_config.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_main.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_multiq.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_osdep.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_sge.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/sys/uipc_mvec.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_resource.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/tom/cxgb_tom.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/tom/cxgb_tom_sysctl.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/dcons/dcons_crom.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/dcons/dcons_os.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_80003es2lan.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82540.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82541.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82542.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82543.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82571.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82575.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82575.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_api.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_api.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_defines.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_hw.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_ich8lan.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_ich8lan.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_mac.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_mac.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_manage.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_nvm.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_osdep.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_osdep.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_phy.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_phy.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_regs.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_igb.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/fb/s3_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/fdc/fdc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/fdc/fdc_pccard.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/fxp/if_fxp.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/fxp/if_fxpreg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/fxp/if_fxpvar.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/glxsb/glxsb.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_amd.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_amd.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_arm.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_ia64.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_logging.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_mod.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_pentium.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_pentium.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_piv.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_piv.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_powerpc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_ppro.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_ppro.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_sparc64.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_x86.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/pmc_events.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/if_ndis/if_ndis.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ipmi/ipmi.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/isc_cam.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/isc_sm.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/isc_soc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/isc_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/iscsi.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/iscsi.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/iscsi_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/iscsivar.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ispfw/ispfw.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_82598.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_api.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_api.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_common.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_common.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_osdep.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_phy.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_phy.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_type.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/jme/if_jme.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/jme/if_jmereg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/jme/if_jmevar.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/k8temp/k8temp.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfi.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfi_disk.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfi_ioctl.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfi_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfireg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfivar.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/mii/truephy.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/mmc/mmcsd.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/mn/if_mn.c (props changed) user/kmacy/HEAD_fast_multi_xmit/sys/dev/msk/if_msk.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/mxge/if_mxge.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/mxge/if_mxge_var.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/nmdm/nmdm.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/nxge/xge-osdep.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/patm/if_patm_intr.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/pccbb/pccbb.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/pccbb/pccbb_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/pccbb/pccbbvar.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/pci/pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/if_plip.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/immio.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/lpbb.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/lpt.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/lpt.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/pcfclock.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppb_1284.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppb_base.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppb_msq.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppbconf.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppbconf.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppi.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppi.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/pps.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/vpo.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/vpoio.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/vpoio.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppc/ppc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppc/ppc_acpi.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/random/randomdev.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/random/randomdev_soft.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/re/if_re.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/sdhci/sdhci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/sio/sio_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/sio/sio_puc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/sound/pci/hda/hdac.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/sound/pci/hda/hdac_private.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/syscons/sysmouse.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/uart/uart_dev_quicc.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/if_aue.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/if_upgt.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/if_zyd.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/if_zydreg.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/rio500_usb.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/u3g.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/ugen.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usb.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usb_quirks.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usb_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usbdevs user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usbdi.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usbdi.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/bluetooth/ng_ubt2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/at91dci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/at91dci_atmelarm.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ehci2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ehci2.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ehci2_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/musb2_otg.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/musb2_otg_atmelarm.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ohci2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ohci2_atmelarm.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ohci2_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uhci2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uhci2_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/usb2_bus.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/usb2_controller.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uss820dci.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uss820dci_atmelarm.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_busdma.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_core.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_dev.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_dev.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_device.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_generic.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_handle_request.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_hub.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_msctest.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_msctest.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_request.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_sw_transfer.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_transfer.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_transfer.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_util.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/ethernet/if_aue2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/image/uscanner2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/usb2_devid.h (contents, props changed) user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/usb2_devtable.h (contents, props changed) user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/usb2_ioctl.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/usb2_standard.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/quirk/usb2_quirk.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/serial/ubsa2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/serial/ugensa2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/serial/uvscom2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/sound/uaudio2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/storage/ata-usb2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/storage/umass2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/storage/urio2.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/vge/if_vge.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/vr/if_vr.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/xen/blkfront/blkfront.c user/kmacy/HEAD_fast_multi_xmit/sys/dev/xen/blkfront/block.h user/kmacy/HEAD_fast_multi_xmit/sys/dev/xen/netfront/netfront.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/aac/aac_pci.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/aac/aac_pci.c Fri Dec 5 07:43:51 2008 (r185630) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/aac/aac_pci.c Fri Dec 5 07:44:52 2008 (r185631) @@ -168,8 +168,6 @@ struct aac_ident "ICP ICP9014RO SCSI RAID"}, {0x9005, 0x0285, 0x9005, 0x0294, AAC_HWIF_I960RX, 0, "Adaptec SATA RAID 2026ZCR"}, - {0x9005, 0x0285, 0x103c, 0x3227, AAC_HWIF_I960RX, 0, - "Adaptec SATA RAID 2610SA"}, {0x9005, 0x0285, 0x9005, 0x0296, AAC_HWIF_I960RX, 0, "Adaptec SCSI RAID 2240S"}, {0x9005, 0x0285, 0x9005, 0x0297, AAC_HWIF_I960RX, 0, Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi.c Fri Dec 5 07:43:51 2008 (r185630) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi.c Fri Dec 5 07:44:52 2008 (r185631) @@ -158,6 +158,8 @@ static int acpi_child_pnpinfo_str_method #if defined(__i386__) || defined(__amd64__) static void acpi_enable_pcie(void); #endif +static void acpi_hint_device_unit(device_t acdev, device_t child, + const char *name, int *unitp); static device_method_t acpi_methods[] = { /* Device interface */ @@ -187,6 +189,7 @@ static device_method_t acpi_methods[] = DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), + DEVMETHOD(bus_hint_device_unit, acpi_hint_device_unit), /* ACPI bus */ DEVMETHOD(acpi_id_probe, acpi_device_id_probe), @@ -949,6 +952,89 @@ acpi_get_rlist(device_t dev, device_t ch return (&ad->ad_rl); } +static int +acpi_match_resource_hint(device_t dev, int type, long value) +{ + struct acpi_device *ad = device_get_ivars(dev); + struct resource_list *rl = &ad->ad_rl; + struct resource_list_entry *rle; + + STAILQ_FOREACH(rle, rl, link) { + if (rle->type != type) + continue; + if (rle->start <= value && rle->end >= value) + return (1); + } + return (0); +} + +/* + * Wire device unit numbers based on resource matches in hints. + */ +static void +acpi_hint_device_unit(device_t acdev, device_t child, const char *name, + int *unitp) +{ + const char *s; + long value; + int line, matches, unit; + + /* + * Iterate over all the hints for the devices with the specified + * name to see if one's resources are a subset of this device. + */ + line = 0; + for (;;) { + if (resource_find_dev(&line, name, &unit, "at", NULL) != 0) + break; + + /* Must have an "at" for acpi or isa. */ + resource_string_value(name, unit, "at", &s); + if (!(strcmp(s, "acpi0") == 0 || strcmp(s, "acpi") == 0 || + strcmp(s, "isa0") == 0 || strcmp(s, "isa") == 0)) + continue; + + /* + * Check for matching resources. We must have at least one, + * and all resources specified have to match. + * + * XXX: We may want to revisit this to be more lenient and wire + * as long as it gets one match. + */ + matches = 0; + if (resource_long_value(name, unit, "port", &value) == 0) { + if (acpi_match_resource_hint(child, SYS_RES_IOPORT, value)) + matches++; + else + continue; + } + if (resource_long_value(name, unit, "maddr", &value) == 0) { + if (acpi_match_resource_hint(child, SYS_RES_MEMORY, value)) + matches++; + else + continue; + } + if (resource_long_value(name, unit, "irq", &value) == 0) { + if (acpi_match_resource_hint(child, SYS_RES_IRQ, value)) + matches++; + else + continue; + } + if (resource_long_value(name, unit, "drq", &value) == 0) { + if (acpi_match_resource_hint(child, SYS_RES_DRQ, value)) + matches++; + else + continue; + } + + if (matches > 0) { + /* We have a winner! */ + *unitp = unit; + break; + } + } +} + /* * Pre-allocate/manage all memory and IO resources. Since rman can't handle * duplicates, we merge any in the sysresource attach routine. Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_hpet.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_hpet.c Fri Dec 5 07:43:51 2008 (r185630) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_hpet.c Fri Dec 5 07:44:52 2008 (r185631) @@ -83,7 +83,9 @@ hpet_enable(struct acpi_hpet_softc *sc) uint32_t val; val = bus_read_4(sc->mem_res, HPET_CONFIG); - bus_write_4(sc->mem_res, HPET_CONFIG, val | HPET_CNF_ENABLE); + val &= ~HPET_CNF_LEG_RT; + val |= HPET_CNF_ENABLE; + bus_write_4(sc->mem_res, HPET_CONFIG, val); } static void @@ -92,7 +94,8 @@ hpet_disable(struct acpi_hpet_softc *sc) uint32_t val; val = bus_read_4(sc->mem_res, HPET_CONFIG); - bus_write_4(sc->mem_res, HPET_CONFIG, val & ~HPET_CNF_ENABLE); + val &= ~HPET_CNF_ENABLE; + bus_write_4(sc->mem_res, HPET_CONFIG, val); } /* Discover the HPET via the ACPI table of the same name. */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_pcib.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_pcib.c Fri Dec 5 07:43:51 2008 (r185630) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_pcib.c Fri Dec 5 07:44:52 2008 (r185631) @@ -127,7 +127,6 @@ prt_attach_devices(ACPI_PCI_ROUTING_TABL int acpi_pcib_attach(device_t dev, ACPI_BUFFER *prt, int busno) { - device_t child; ACPI_STATUS status; ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__); @@ -157,7 +156,7 @@ acpi_pcib_attach(device_t dev, ACPI_BUFF /* * Attach the PCI bus proper. */ - if ((child = device_add_child(dev, "pci", busno)) == NULL) { + if (device_add_child(dev, "pci", busno) == NULL) { device_printf(device_get_parent(dev), "couldn't attach pci bus\n"); return_VALUE(ENXIO); } Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/adb/adb_bus.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/adb/adb_bus.c Fri Dec 5 07:43:51 2008 (r185630) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/adb/adb_bus.c Fri Dec 5 07:44:52 2008 (r185631) @@ -134,7 +134,7 @@ adb_bus_enumerate(void *xdev) /* Enumerate bus */ next_free = 8; - for (i = 1; i < 7; i++) { + for (i = 1; i <= 7; i++) { int8_t first_relocated = -1; int reply = 0; Added: user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_ale.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_ale.c Fri Dec 5 07:44:52 2008 (r185631) @@ -0,0 +1,3106 @@ +/*- + * Copyright (c) 2008, Pyun YongHyeon + * 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 unmodified, 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. + */ + +/* Driver for Atheros AR8121/AR8113/AR8114 PCIe Ethernet. */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include + +/* "device miibus" required. See GENERIC if you get errors here. */ +#include "miibus_if.h" + +/* For more information about Tx checksum offload issues see ale_encap(). */ +#define ALE_CSUM_FEATURES (CSUM_TCP | CSUM_UDP) +#ifndef IFCAP_VLAN_HWTSO +#define IFCAP_VLAN_HWTSO 0 +#endif + +MODULE_DEPEND(ale, pci, 1, 1, 1); +MODULE_DEPEND(ale, ether, 1, 1, 1); +MODULE_DEPEND(ale, miibus, 1, 1, 1); + +/* Tunables. */ +static int msi_disable = 0; +static int msix_disable = 0; +TUNABLE_INT("hw.ale.msi_disable", &msi_disable); +TUNABLE_INT("hw.ale.msix_disable", &msix_disable); + +/* + * Devices supported by this driver. + */ +static struct ale_dev { + uint16_t ale_vendorid; + uint16_t ale_deviceid; + const char *ale_name; +} ale_devs[] = { + { VENDORID_ATHEROS, DEVICEID_ATHEROS_AR81XX, + "Atheros AR8121/AR8113/AR8114 PCIe Ethernet" }, +}; + +static int ale_attach(device_t); +static int ale_check_boundary(struct ale_softc *); +static int ale_detach(device_t); +static int ale_dma_alloc(struct ale_softc *); +static void ale_dma_free(struct ale_softc *); +static void ale_dmamap_cb(void *, bus_dma_segment_t *, int, int); +static int ale_encap(struct ale_softc *, struct mbuf **); +static void ale_get_macaddr(struct ale_softc *); +static void ale_init(void *); +static void ale_init_locked(struct ale_softc *); +static void ale_init_rx_pages(struct ale_softc *); +static void ale_init_tx_ring(struct ale_softc *); +static void ale_int_task(void *, int); +static int ale_intr(void *); +static int ale_ioctl(struct ifnet *, u_long, caddr_t); +static void ale_link_task(void *, int); +static void ale_mac_config(struct ale_softc *); +static int ale_miibus_readreg(device_t, int, int); +static void ale_miibus_statchg(device_t); +static int ale_miibus_writereg(device_t, int, int, int); +static int ale_mediachange(struct ifnet *); +static void ale_mediastatus(struct ifnet *, struct ifmediareq *); +static void ale_phy_reset(struct ale_softc *); +static int ale_probe(device_t); +static void ale_reset(struct ale_softc *); +static int ale_resume(device_t); +static void ale_rx_update_page(struct ale_softc *, struct ale_rx_page **, + uint32_t, uint32_t *); +static void ale_rxcsum(struct ale_softc *, struct mbuf *, uint32_t); +static int ale_rxeof(struct ale_softc *sc, int); +static void ale_rxfilter(struct ale_softc *); +static void ale_rxvlan(struct ale_softc *); +static void ale_setlinkspeed(struct ale_softc *); +static void ale_setwol(struct ale_softc *); +static int ale_shutdown(device_t); +static void ale_start(struct ifnet *); +static void ale_stats_clear(struct ale_softc *); +static void ale_stats_update(struct ale_softc *); +static void ale_stop(struct ale_softc *); +static void ale_stop_mac(struct ale_softc *); +static int ale_suspend(device_t); +static void ale_sysctl_node(struct ale_softc *); +static void ale_tick(void *); +static void ale_tx_task(void *, int); +static void ale_txeof(struct ale_softc *); +static void ale_watchdog(struct ale_softc *); +static int sysctl_int_range(SYSCTL_HANDLER_ARGS, int, int); +static int sysctl_hw_ale_proc_limit(SYSCTL_HANDLER_ARGS); +static int sysctl_hw_ale_int_mod(SYSCTL_HANDLER_ARGS); + +static device_method_t ale_methods[] = { + /* Device interface. */ + DEVMETHOD(device_probe, ale_probe), + DEVMETHOD(device_attach, ale_attach), + DEVMETHOD(device_detach, ale_detach), + DEVMETHOD(device_shutdown, ale_shutdown), + DEVMETHOD(device_suspend, ale_suspend), + DEVMETHOD(device_resume, ale_resume), + + /* MII interface. */ + DEVMETHOD(miibus_readreg, ale_miibus_readreg), + DEVMETHOD(miibus_writereg, ale_miibus_writereg), + DEVMETHOD(miibus_statchg, ale_miibus_statchg), + + { NULL, NULL } +}; + +static driver_t ale_driver = { + "ale", + ale_methods, + sizeof(struct ale_softc) +}; + +static devclass_t ale_devclass; + +DRIVER_MODULE(ale, pci, ale_driver, ale_devclass, 0, 0); +DRIVER_MODULE(miibus, ale, miibus_driver, miibus_devclass, 0, 0); + +static struct resource_spec ale_res_spec_mem[] = { + { SYS_RES_MEMORY, PCIR_BAR(0), RF_ACTIVE }, + { -1, 0, 0 } +}; + +static struct resource_spec ale_irq_spec_legacy[] = { + { SYS_RES_IRQ, 0, RF_ACTIVE | RF_SHAREABLE }, + { -1, 0, 0 } +}; + +static struct resource_spec ale_irq_spec_msi[] = { + { SYS_RES_IRQ, 1, RF_ACTIVE }, + { -1, 0, 0 } +}; + +static struct resource_spec ale_irq_spec_msix[] = { + { SYS_RES_IRQ, 1, RF_ACTIVE }, + { -1, 0, 0 } +}; + +static int +ale_miibus_readreg(device_t dev, int phy, int reg) +{ + struct ale_softc *sc; + uint32_t v; + int i; + + sc = device_get_softc(dev); + + if (phy != sc->ale_phyaddr) + return (0); + + CSR_WRITE_4(sc, ALE_MDIO, MDIO_OP_EXECUTE | MDIO_OP_READ | + MDIO_SUP_PREAMBLE | MDIO_CLK_25_4 | MDIO_REG_ADDR(reg)); + for (i = ALE_PHY_TIMEOUT; i > 0; i--) { + DELAY(5); + v = CSR_READ_4(sc, ALE_MDIO); + if ((v & (MDIO_OP_EXECUTE | MDIO_OP_BUSY)) == 0) + break; + } + + if (i == 0) { + device_printf(sc->ale_dev, "phy read timeout : %d\n", reg); + return (0); + } + + return ((v & MDIO_DATA_MASK) >> MDIO_DATA_SHIFT); +} + +static int +ale_miibus_writereg(device_t dev, int phy, int reg, int val) +{ + struct ale_softc *sc; + uint32_t v; + int i; + + sc = device_get_softc(dev); + + if (phy != sc->ale_phyaddr) + return (0); + + CSR_WRITE_4(sc, ALE_MDIO, MDIO_OP_EXECUTE | MDIO_OP_WRITE | + (val & MDIO_DATA_MASK) << MDIO_DATA_SHIFT | + MDIO_SUP_PREAMBLE | MDIO_CLK_25_4 | MDIO_REG_ADDR(reg)); + for (i = ALE_PHY_TIMEOUT; i > 0; i--) { + DELAY(5); + v = CSR_READ_4(sc, ALE_MDIO); + if ((v & (MDIO_OP_EXECUTE | MDIO_OP_BUSY)) == 0) + break; + } + + if (i == 0) + device_printf(sc->ale_dev, "phy write timeout : %d\n", reg); + + return (0); +} + +static void +ale_miibus_statchg(device_t dev) +{ + struct ale_softc *sc; + + sc = device_get_softc(dev); + + taskqueue_enqueue(taskqueue_swi, &sc->ale_link_task); +} + +static void +ale_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr) +{ + struct ale_softc *sc; + struct mii_data *mii; + + sc = ifp->if_softc; + ALE_LOCK(sc); + mii = device_get_softc(sc->ale_miibus); + + mii_pollstat(mii); + ALE_UNLOCK(sc); + ifmr->ifm_status = mii->mii_media_status; + ifmr->ifm_active = mii->mii_media_active; +} + +static int +ale_mediachange(struct ifnet *ifp) +{ + struct ale_softc *sc; + struct mii_data *mii; + struct mii_softc *miisc; + int error; + + sc = ifp->if_softc; + ALE_LOCK(sc); + mii = device_get_softc(sc->ale_miibus); + if (mii->mii_instance != 0) { + LIST_FOREACH(miisc, &mii->mii_phys, mii_list) + mii_phy_reset(miisc); + } + error = mii_mediachg(mii); + ALE_UNLOCK(sc); + + return (error); +} + +static int +ale_probe(device_t dev) +{ + struct ale_dev *sp; + int i; + uint16_t vendor, devid; + + vendor = pci_get_vendor(dev); + devid = pci_get_device(dev); + sp = ale_devs; + for (i = 0; i < sizeof(ale_devs) / sizeof(ale_devs[0]); i++) { + if (vendor == sp->ale_vendorid && + devid == sp->ale_deviceid) { + device_set_desc(dev, sp->ale_name); + return (BUS_PROBE_DEFAULT); + } + sp++; + } + + return (ENXIO); +} + +static void +ale_get_macaddr(struct ale_softc *sc) +{ + uint32_t ea[2], reg; + int i, vpdc; + + reg = CSR_READ_4(sc, ALE_SPI_CTRL); + if ((reg & SPI_VPD_ENB) != 0) { + reg &= ~SPI_VPD_ENB; + CSR_WRITE_4(sc, ALE_SPI_CTRL, reg); + } + + if (pci_find_extcap(sc->ale_dev, PCIY_VPD, &vpdc) == 0) { + /* + * PCI VPD capability found, let TWSI reload EEPROM. + * This will set ethernet address of controller. + */ + CSR_WRITE_4(sc, ALE_TWSI_CTRL, CSR_READ_4(sc, ALE_TWSI_CTRL) | + TWSI_CTRL_SW_LD_START); + for (i = 100; i > 0; i--) { + DELAY(1000); + reg = CSR_READ_4(sc, ALE_TWSI_CTRL); + if ((reg & TWSI_CTRL_SW_LD_START) == 0) + break; + } + if (i == 0) + device_printf(sc->ale_dev, + "reloading EEPROM timeout!\n"); + } else { + if (bootverbose) + device_printf(sc->ale_dev, + "PCI VPD capability not found!\n"); + } + + ea[0] = CSR_READ_4(sc, ALE_PAR0); + ea[1] = CSR_READ_4(sc, ALE_PAR1); + sc->ale_eaddr[0] = (ea[1] >> 8) & 0xFF; + sc->ale_eaddr[1] = (ea[1] >> 0) & 0xFF; + sc->ale_eaddr[2] = (ea[0] >> 24) & 0xFF; + sc->ale_eaddr[3] = (ea[0] >> 16) & 0xFF; + sc->ale_eaddr[4] = (ea[0] >> 8) & 0xFF; + sc->ale_eaddr[5] = (ea[0] >> 0) & 0xFF; +} + +static void +ale_phy_reset(struct ale_softc *sc) +{ + + /* Reset magic from Linux. */ + CSR_WRITE_2(sc, ALE_GPHY_CTRL, + GPHY_CTRL_HIB_EN | GPHY_CTRL_HIB_PULSE | GPHY_CTRL_SEL_ANA_RESET | + GPHY_CTRL_PHY_PLL_ON); + DELAY(1000); + CSR_WRITE_2(sc, ALE_GPHY_CTRL, + GPHY_CTRL_EXT_RESET | GPHY_CTRL_HIB_EN | GPHY_CTRL_HIB_PULSE | + GPHY_CTRL_SEL_ANA_RESET | GPHY_CTRL_PHY_PLL_ON); + DELAY(1000); + +#define ATPHY_DBG_ADDR 0x1D +#define ATPHY_DBG_DATA 0x1E + + /* Enable hibernation mode. */ + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_ADDR, 0x0B); + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_DATA, 0xBC00); + /* Set Class A/B for all modes. */ + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_ADDR, 0x00); + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_DATA, 0x02EF); + /* Enable 10BT power saving. */ + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_ADDR, 0x12); + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_DATA, 0x4C04); + /* Adjust 1000T power. */ + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_ADDR, 0x04); + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_ADDR, 0x8BBB); + /* 10BT center tap voltage. */ + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_ADDR, 0x05); + ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr, + ATPHY_DBG_ADDR, 0x2C46); + +#undef ATPHY_DBG_ADDR +#undef ATPHY_DBG_DATA + DELAY(1000); +} + +static int +ale_attach(device_t dev) +{ + struct ale_softc *sc; + struct ifnet *ifp; + uint16_t burst; + int error, i, msic, msixc, pmc; + uint32_t rxf_len, txf_len; + + error = 0; + sc = device_get_softc(dev); + sc->ale_dev = dev; + + mtx_init(&sc->ale_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, + MTX_DEF); + callout_init_mtx(&sc->ale_tick_ch, &sc->ale_mtx, 0); + TASK_INIT(&sc->ale_int_task, 0, ale_int_task, sc); + TASK_INIT(&sc->ale_link_task, 0, ale_link_task, sc); + + /* Map the device. */ + pci_enable_busmaster(dev); + sc->ale_res_spec = ale_res_spec_mem; + sc->ale_irq_spec = ale_irq_spec_legacy; + error = bus_alloc_resources(dev, sc->ale_res_spec, sc->ale_res); + if (error != 0) { + device_printf(dev, "cannot allocate memory resources.\n"); + goto fail; + } + + /* Set PHY address. */ + sc->ale_phyaddr = ALE_PHY_ADDR; + + /* Reset PHY. */ + ale_phy_reset(sc); + + /* Reset the ethernet controller. */ + ale_reset(sc); + + /* Get PCI and chip id/revision. */ + sc->ale_rev = pci_get_revid(dev); + if (sc->ale_rev >= 0xF0) { + /* L2E Rev. B. AR8114 */ + sc->ale_flags |= ALE_FLAG_FASTETHER; + } else { + if ((CSR_READ_4(sc, ALE_PHY_STATUS) & PHY_STATUS_100M) != 0) { + /* L1E AR8121 */ + sc->ale_flags |= ALE_FLAG_JUMBO; + } else { + /* L2E Rev. A. AR8113 */ + sc->ale_flags |= ALE_FLAG_FASTETHER; + } + } + /* + * All known controllers seems to require 4 bytes alignment + * of Tx buffers to make Tx checksum offload with custom + * checksum generation method work. + */ + sc->ale_flags |= ALE_FLAG_TXCSUM_BUG; + /* + * All known controllers seems to have issues on Rx checksum + * offload for fragmented IP datagrams. + */ + sc->ale_flags |= ALE_FLAG_RXCSUM_BUG; + /* + * Don't use Tx CMB. It is known to cause RRS update failure + * under certain circumstances. Typical phenomenon of the + * issue would be unexpected sequence number encountered in + * Rx handler. + */ + sc->ale_flags |= ALE_FLAG_TXCMB_BUG; + sc->ale_chip_rev = CSR_READ_4(sc, ALE_MASTER_CFG) >> + MASTER_CHIP_REV_SHIFT; + if (bootverbose) { + device_printf(dev, "PCI device revision : 0x%04x\n", + sc->ale_rev); + device_printf(dev, "Chip id/revision : 0x%04x\n", + sc->ale_chip_rev); + } + txf_len = CSR_READ_4(sc, ALE_SRAM_TX_FIFO_LEN); + rxf_len = CSR_READ_4(sc, ALE_SRAM_RX_FIFO_LEN); + /* + * Uninitialized hardware returns an invalid chip id/revision + * as well as 0xFFFFFFFF for Tx/Rx fifo length. + */ + if (sc->ale_chip_rev == 0xFFFF || txf_len == 0xFFFFFFFF || + rxf_len == 0xFFFFFFF) { + device_printf(dev,"chip revision : 0x%04x, %u Tx FIFO " + "%u Rx FIFO -- not initialized?\n", sc->ale_chip_rev, + txf_len, rxf_len); + error = ENXIO; + goto fail; + } + device_printf(dev, "%u Tx FIFO, %u Rx FIFO\n", txf_len, rxf_len); + + /* Allocate IRQ resources. */ + msixc = pci_msix_count(dev); + msic = pci_msi_count(dev); + if (bootverbose) { + device_printf(dev, "MSIX count : %d\n", msixc); + device_printf(dev, "MSI count : %d\n", msic); + } + + /* Prefer MSIX over MSI. */ + if (msix_disable == 0 || msi_disable == 0) { + if (msix_disable == 0 && msixc == ALE_MSIX_MESSAGES && + pci_alloc_msix(dev, &msixc) == 0) { + if (msic == ALE_MSIX_MESSAGES) { + device_printf(dev, "Using %d MSIX messages.\n", + msixc); + sc->ale_flags |= ALE_FLAG_MSIX; + sc->ale_irq_spec = ale_irq_spec_msix; + } else + pci_release_msi(dev); + } + if (msi_disable == 0 && (sc->ale_flags & ALE_FLAG_MSIX) == 0 && + msic == ALE_MSI_MESSAGES && + pci_alloc_msi(dev, &msic) == 0) { + if (msic == ALE_MSI_MESSAGES) { + device_printf(dev, "Using %d MSI messages.\n", + msic); + sc->ale_flags |= ALE_FLAG_MSI; + sc->ale_irq_spec = ale_irq_spec_msi; + } else + pci_release_msi(dev); + } + } + + error = bus_alloc_resources(dev, sc->ale_irq_spec, sc->ale_irq); + if (error != 0) { + device_printf(dev, "cannot allocate IRQ resources.\n"); + goto fail; + } + + /* Get DMA parameters from PCIe device control register. */ + if (pci_find_extcap(dev, PCIY_EXPRESS, &i) == 0) { + sc->ale_flags |= ALE_FLAG_PCIE; + burst = pci_read_config(dev, i + 0x08, 2); + /* Max read request size. */ + sc->ale_dma_rd_burst = ((burst >> 12) & 0x07) << + DMA_CFG_RD_BURST_SHIFT; + /* Max payload size. */ + sc->ale_dma_wr_burst = ((burst >> 5) & 0x07) << + DMA_CFG_WR_BURST_SHIFT; + if (bootverbose) { + device_printf(dev, "Read request size : %d bytes.\n", + 128 << ((burst >> 12) & 0x07)); + device_printf(dev, "TLP payload size : %d bytes.\n", + 128 << ((burst >> 5) & 0x07)); + } + } else { + sc->ale_dma_rd_burst = DMA_CFG_RD_BURST_128; + sc->ale_dma_wr_burst = DMA_CFG_WR_BURST_128; + } + + /* Create device sysctl node. */ + ale_sysctl_node(sc); + + if ((error = ale_dma_alloc(sc) != 0)) + goto fail; + + /* Load station address. */ + ale_get_macaddr(sc); + + ifp = sc->ale_ifp = if_alloc(IFT_ETHER); + if (ifp == NULL) { + device_printf(dev, "cannot allocate ifnet structure.\n"); + error = ENXIO; + goto fail; + } + + ifp->if_softc = sc; + if_initname(ifp, device_get_name(dev), device_get_unit(dev)); + ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; + ifp->if_ioctl = ale_ioctl; + ifp->if_start = ale_start; + ifp->if_init = ale_init; + ifp->if_snd.ifq_drv_maxlen = ALE_TX_RING_CNT - 1; + IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); + IFQ_SET_READY(&ifp->if_snd); + ifp->if_capabilities = IFCAP_RXCSUM | IFCAP_TXCSUM | IFCAP_TSO4; + ifp->if_hwassist = ALE_CSUM_FEATURES | CSUM_TSO; + if (pci_find_extcap(dev, PCIY_PMG, &pmc) == 0) { + sc->ale_flags |= ALE_FLAG_PMCAP; + ifp->if_capabilities |= IFCAP_WOL_MAGIC | IFCAP_WOL_MCAST; + } + ifp->if_capenable = ifp->if_capabilities; + + /* Set up MII bus. */ + if ((error = mii_phy_probe(dev, &sc->ale_miibus, ale_mediachange, + ale_mediastatus)) != 0) { + device_printf(dev, "no PHY found!\n"); + goto fail; + } + + ether_ifattach(ifp, sc->ale_eaddr); + + /* VLAN capability setup. */ + ifp->if_capabilities |= IFCAP_VLAN_MTU; + ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_HWCSUM; + ifp->if_capenable = ifp->if_capabilities; + + /* Tell the upper layer(s) we support long frames. */ + ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header); + + /* Create local taskq. */ + TASK_INIT(&sc->ale_tx_task, 1, ale_tx_task, ifp); + sc->ale_tq = taskqueue_create_fast("ale_taskq", M_WAITOK, + taskqueue_thread_enqueue, &sc->ale_tq); + if (sc->ale_tq == NULL) { + device_printf(dev, "could not create taskqueue.\n"); + ether_ifdetach(ifp); + error = ENXIO; + goto fail; + } + taskqueue_start_threads(&sc->ale_tq, 1, PI_NET, "%s taskq", + device_get_nameunit(sc->ale_dev)); + + if ((sc->ale_flags & ALE_FLAG_MSIX) != 0) + msic = ALE_MSIX_MESSAGES; + else if ((sc->ale_flags & ALE_FLAG_MSI) != 0) + msic = ALE_MSI_MESSAGES; + else + msic = 1; + for (i = 0; i < msic; i++) { + error = bus_setup_intr(dev, sc->ale_irq[i], + INTR_TYPE_NET | INTR_MPSAFE, ale_intr, NULL, sc, + &sc->ale_intrhand[i]); + if (error != 0) + break; + } + if (error != 0) { + device_printf(dev, "could not set up interrupt handler.\n"); + taskqueue_free(sc->ale_tq); + sc->ale_tq = NULL; + ether_ifdetach(ifp); + goto fail; + } + +fail: + if (error != 0) + ale_detach(dev); + + return (error); +} + +static int +ale_detach(device_t dev) +{ + struct ale_softc *sc; + struct ifnet *ifp; + int i, msic; + + sc = device_get_softc(dev); + + ifp = sc->ale_ifp; + if (device_is_attached(dev)) { + ALE_LOCK(sc); + sc->ale_flags |= ALE_FLAG_DETACH; + ale_stop(sc); + ALE_UNLOCK(sc); + callout_drain(&sc->ale_tick_ch); + taskqueue_drain(sc->ale_tq, &sc->ale_int_task); + taskqueue_drain(sc->ale_tq, &sc->ale_tx_task); + taskqueue_drain(taskqueue_swi, &sc->ale_link_task); + ether_ifdetach(ifp); + } + + if (sc->ale_tq != NULL) { + taskqueue_drain(sc->ale_tq, &sc->ale_int_task); + taskqueue_free(sc->ale_tq); + sc->ale_tq = NULL; + } + + if (sc->ale_miibus != NULL) { + device_delete_child(dev, sc->ale_miibus); + sc->ale_miibus = NULL; + } + bus_generic_detach(dev); + ale_dma_free(sc); + + if (ifp != NULL) { + if_free(ifp); + sc->ale_ifp = NULL; + } + + if ((sc->ale_flags & ALE_FLAG_MSIX) != 0) + msic = ALE_MSIX_MESSAGES; + else if ((sc->ale_flags & ALE_FLAG_MSI) != 0) + msic = ALE_MSI_MESSAGES; + else + msic = 1; + for (i = 0; i < msic; i++) { + if (sc->ale_intrhand[i] != NULL) { + bus_teardown_intr(dev, sc->ale_irq[i], + sc->ale_intrhand[i]); + sc->ale_intrhand[i] = NULL; + } + } + + bus_release_resources(dev, sc->ale_irq_spec, sc->ale_irq); + if ((sc->ale_flags & (ALE_FLAG_MSI | ALE_FLAG_MSIX)) != 0) + pci_release_msi(dev); + bus_release_resources(dev, sc->ale_res_spec, sc->ale_res); + mtx_destroy(&sc->ale_mtx); + + return (0); +} + +#define ALE_SYSCTL_STAT_ADD32(c, h, n, p, d) \ + SYSCTL_ADD_UINT(c, h, OID_AUTO, n, CTLFLAG_RD, p, 0, d) + +#if __FreeBSD_version > 800000 +#define ALE_SYSCTL_STAT_ADD64(c, h, n, p, d) \ + SYSCTL_ADD_QUAD(c, h, OID_AUTO, n, CTLFLAG_RD, p, d) +#else +#define ALE_SYSCTL_STAT_ADD64(c, h, n, p, d) \ + SYSCTL_ADD_ULONG(c, h, OID_AUTO, n, CTLFLAG_RD, p, d) +#endif + +static void +ale_sysctl_node(struct ale_softc *sc) +{ + struct sysctl_ctx_list *ctx; + struct sysctl_oid_list *child, *parent; + struct sysctl_oid *tree; + struct ale_hw_stats *stats; + int error; + + stats = &sc->ale_stats; + ctx = device_get_sysctl_ctx(sc->ale_dev); + child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->ale_dev)); + + SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "int_rx_mod", + CTLTYPE_INT | CTLFLAG_RW, &sc->ale_int_rx_mod, 0, + sysctl_hw_ale_int_mod, "I", "ale Rx interrupt moderation"); + SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "int_tx_mod", + CTLTYPE_INT | CTLFLAG_RW, &sc->ale_int_tx_mod, 0, + sysctl_hw_ale_int_mod, "I", "ale Tx interrupt moderation"); + /* Pull in device tunables. */ + sc->ale_int_rx_mod = ALE_IM_RX_TIMER_DEFAULT; + error = resource_int_value(device_get_name(sc->ale_dev), + device_get_unit(sc->ale_dev), "int_rx_mod", &sc->ale_int_rx_mod); + if (error == 0) { + if (sc->ale_int_rx_mod < ALE_IM_TIMER_MIN || + sc->ale_int_rx_mod > ALE_IM_TIMER_MAX) { + device_printf(sc->ale_dev, "int_rx_mod value out of " + "range; using default: %d\n", + ALE_IM_RX_TIMER_DEFAULT); + sc->ale_int_rx_mod = ALE_IM_RX_TIMER_DEFAULT; + } + } + sc->ale_int_tx_mod = ALE_IM_TX_TIMER_DEFAULT; + error = resource_int_value(device_get_name(sc->ale_dev), + device_get_unit(sc->ale_dev), "int_tx_mod", &sc->ale_int_tx_mod); + if (error == 0) { + if (sc->ale_int_tx_mod < ALE_IM_TIMER_MIN || + sc->ale_int_tx_mod > ALE_IM_TIMER_MAX) { + device_printf(sc->ale_dev, "int_tx_mod value out of " + "range; using default: %d\n", + ALE_IM_TX_TIMER_DEFAULT); + sc->ale_int_tx_mod = ALE_IM_TX_TIMER_DEFAULT; + } + } + SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "process_limit", + CTLTYPE_INT | CTLFLAG_RW, &sc->ale_process_limit, 0, + sysctl_hw_ale_proc_limit, "I", + "max number of Rx events to process"); + /* Pull in device tunables. */ + sc->ale_process_limit = ALE_PROC_DEFAULT; + error = resource_int_value(device_get_name(sc->ale_dev), + device_get_unit(sc->ale_dev), "process_limit", + &sc->ale_process_limit); + if (error == 0) { + if (sc->ale_process_limit < ALE_PROC_MIN || + sc->ale_process_limit > ALE_PROC_MAX) { + device_printf(sc->ale_dev, + "process_limit value out of range; " + "using default: %d\n", ALE_PROC_DEFAULT); + sc->ale_process_limit = ALE_PROC_DEFAULT; + } + } + + /* Misc statistics. */ + ALE_SYSCTL_STAT_ADD32(ctx, child, "reset_brk_seq", + &stats->reset_brk_seq, + "Controller resets due to broken Rx sequnce number"); + + tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD, + NULL, "ATE statistics"); + parent = SYSCTL_CHILDREN(tree); + + /* Rx statistics. */ + tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx", CTLFLAG_RD, + NULL, "Rx MAC statistics"); + child = SYSCTL_CHILDREN(tree); + ALE_SYSCTL_STAT_ADD32(ctx, child, "good_frames", + &stats->rx_frames, "Good frames"); + ALE_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames", + &stats->rx_bcast_frames, "Good broadcast frames"); + ALE_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames", + &stats->rx_mcast_frames, "Good multicast frames"); + ALE_SYSCTL_STAT_ADD32(ctx, child, "pause_frames", *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 07:45:38 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BF05C1065670; Fri, 5 Dec 2008 07:45:38 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A9A858FC08; Fri, 5 Dec 2008 07:45:38 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB57jcK4047312; Fri, 5 Dec 2008 07:45:38 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB57jbWT047284; Fri, 5 Dec 2008 07:45:37 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812050745.mB57jbWT047284@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 07:45:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185632 - in user/kmacy/HEAD_fast_multi_xmit/sys: . amd64 amd64/amd64 amd64/conf amd64/include amd64/linux32 arm/arm arm/at91 arm/conf arm/include arm/mv arm/mv/discovery arm/mv/kirkwoo... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 07:45:39 -0000 Author: kmacy Date: Fri Dec 5 07:45:36 2008 New Revision: 185632 URL: http://svn.freebsd.org/changeset/base/185632 Log: IFC 184756:185625 part 7 Added: user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91board.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/board_bwct.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/board_hl200.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/board_kb920x.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/board_tsc4370.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/std.bwct user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/std.hl200 user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/std.tsc4370 user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/mv_pci.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/gptzfsboot/ user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/gptzfsboot/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/zfsboot/ user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/zfsboot/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/zfsboot/zfsboot.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/zfsboot/zfsldr.S user/kmacy/HEAD_fast_multi_xmit/sys/boot/zfs/ user/kmacy/HEAD_fast_multi_xmit/sys/boot/zfs/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/boot/zfs/zfs.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/zfs/zfsimpl.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/boot/ user/kmacy/HEAD_fast_multi_xmit/sys/cddl/boot/zfs/ user/kmacy/HEAD_fast_multi_xmit/sys/cddl/boot/zfs/README user/kmacy/HEAD_fast_multi_xmit/sys/cddl/boot/zfs/fletcher.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/boot/zfs/lzjb.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/boot/zfs/sha256.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/boot/zfs/zfsimpl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/boot/zfs/zfssubr.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/kern/opensolaris_lookup.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/file.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/kidmap.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/pathname.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/refstr.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/sid.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/sig.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/unicode/ user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/unicode/u8_textprep.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zfs_comutil.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zfs_comutil.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zfs_deleg.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zfs_deleg.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zprop_common.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/vnode.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scrub.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/rrwlock.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_deleg.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/rrwlock.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_boot.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_fuid.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fuid.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/acl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/acl_impl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/extdirent.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/idmap.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/sysevent/ user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/sysevent/eventdefs.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/u8_textprep.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/u8_textprep_data.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_osd.c user/kmacy/HEAD_fast_multi_xmit/sys/modules/ale/ user/kmacy/HEAD_fast_multi_xmit/sys/modules/ale/Makefile Deleted: user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/files.kb920x user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/kb920x_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/acl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/callb.h user/kmacy/HEAD_fast_multi_xmit/sys/contrib/dev/ath/ user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/xen/xenbus.h user/kmacy/HEAD_fast_multi_xmit/sys/modules/ath_hal/ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/ (props changed) user/kmacy/HEAD_fast_multi_xmit/sys/amd64/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/amd64_mem.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/elf_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/identcpu.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/initcpu.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/intr_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/local_apic.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/mp_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/msi.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/GENERIC user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/NOTES user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/atomic.h user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/cputypes.h user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/md_var.h user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/pmc_mdep.h user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/specialreg.h user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux.h user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_proto.h user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_syscall.h user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_sysent.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_sysvec.c user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/syscalls.master user/kmacy/HEAD_fast_multi_xmit/sys/arm/arm/busdma_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/arm/elf_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_mci.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_mcireg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_pdcreg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_pio.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_pioreg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_piovar.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_pmc.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_pmcreg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_pmcvar.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_rtc.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_rtcreg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_spi.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_spireg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_ssc.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_sscreg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_st.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_streg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_twi.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_twiio.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_twireg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_usartreg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91rm92reg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91var.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/files.at91 user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/if_ate.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/if_atereg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/ohci_atmelarm.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/std.at91 user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/std.kb920x user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/uart_bus_at91usart.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/uart_cpu_at91rm9200usart.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/uart_dev_at91usart.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/AVILA user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/BWCT user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/CRB user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/DB-78XXX user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/DB-88F5XXX user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/DB-88F6XXX user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/GUMSTIX user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/HL200 user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/KB920X user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/NSLU user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/SIMICS user/kmacy/HEAD_fast_multi_xmit/sys/arm/conf/SKYEYE user/kmacy/HEAD_fast_multi_xmit/sys/arm/include/atomic.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/common.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/discovery/db78xxx.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/discovery/discovery.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/files.mv user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/kirkwood/db88f6xxx.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/kirkwood/kirkwood.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/mv_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/mvreg.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/mvvar.h user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/obio.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/orion/db88f5xxx.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/mv/orion/orion.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/sa11x0/assabet_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/xscale/i80321/ep80219_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/xscale/i80321/iq31244_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/xscale/i8134x/crb_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/xscale/ixp425/avila_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/arm/xscale/pxa/pxa_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/boot/arm/uboot/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/boot/arm/uboot/conf.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/arm/uboot/version user/kmacy/HEAD_fast_multi_xmit/sys/boot/common/bootstrap.h user/kmacy/HEAD_fast_multi_xmit/sys/boot/common/interp.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/forth/loader.conf user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/boot0/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/boot0/boot0.S user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/libi386/biosdisk.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/libi386/bootinfo32.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/libi386/devicename.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/loader/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/loader/conf.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/i386/loader/main.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/uboot/lib/devicename.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/uboot/lib/disk.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/uboot/lib/glue.c user/kmacy/HEAD_fast_multi_xmit/sys/boot/uboot/lib/glue.h user/kmacy/HEAD_fast_multi_xmit/sys/boot/uboot/lib/libuboot.h user/kmacy/HEAD_fast_multi_xmit/sys/boot/uboot/lib/net.c user/kmacy/HEAD_fast_multi_xmit/sys/bsm/audit.h user/kmacy/HEAD_fast_multi_xmit/sys/bsm/audit_internal.h user/kmacy/HEAD_fast_multi_xmit/sys/bsm/audit_kevents.h user/kmacy/HEAD_fast_multi_xmit/sys/bsm/audit_record.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/kern/opensolaris_misc.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/kern/opensolaris_policy.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/kern/opensolaris_zone.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/atomic.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/cred.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/dnlc.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/kmem.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/misc.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/mntent.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/param.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/policy.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/proc.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/sunddi.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/sysmacros.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/time.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/types.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/uio.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/vfs.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/vnode.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/compat/opensolaris/sys/zone.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/acl/acl_common.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/acl/acl_common.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/atomic/amd64/atomic.S user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/atomic/i386/atomic.S user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/avl/avl.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/nvpair/nvpair.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zfs_namecheck.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zfs_namecheck.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/Makefile.files user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/gfs.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/bplist.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/refcount.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sha256.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_config.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_errlog.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/bplist.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dbuf.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_impl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_traverse.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_tx.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_prop.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_synctask.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/metaslab.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/refcount.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/txg_impl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/uberblock_impl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/unique.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_disk.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_leaf.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ctldir.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_dir.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_vfsops.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_checksum.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_impl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zvol.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/txg.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/unique.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_cache.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_label.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_missing.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_root.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_leaf.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_byteswap.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_replay.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_rlock.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_checksum.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_inject.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/os/callb.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/os/list.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/os/taskq.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/rpc/xdr.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/rpc/xdr.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/rpc/xdr_array.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/avl.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/byteorder.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/callb.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/cpuvar.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/cred.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/dkio.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/dklabel.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/fm/fs/zfs.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/fm/protocol.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/fm/util.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/gfs.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/isa_defs.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/list.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/nvpair.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/processor.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/synch.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/sys/sysmacros.h user/kmacy/HEAD_fast_multi_xmit/sys/cddl/contrib/opensolaris/uts/common/zmod/zmod.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/dev/cyclic/cyclic.c user/kmacy/HEAD_fast_multi_xmit/sys/cddl/dev/dtrace/i386/dtrace_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/freebsd32/freebsd32.h user/kmacy/HEAD_fast_multi_xmit/sys/compat/freebsd32/freebsd32_misc.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/freebsd32/freebsd32_proto.h user/kmacy/HEAD_fast_multi_xmit/sys/compat/freebsd32/freebsd32_syscall.h user/kmacy/HEAD_fast_multi_xmit/sys/compat/freebsd32/freebsd32_syscalls.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/freebsd32/freebsd32_sysent.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/freebsd32/syscalls.master user/kmacy/HEAD_fast_multi_xmit/sys/compat/ia32/ia32_sysvec.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/linprocfs/linprocfs.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/linux/linux_futex.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/linux/linux_ioctl.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/linux/linux_ipc.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/linux/linux_misc.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/linux/linux_socket.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/linux/linux_socket.h user/kmacy/HEAD_fast_multi_xmit/sys/compat/svr4/svr4_sockio.c user/kmacy/HEAD_fast_multi_xmit/sys/compat/svr4/svr4_sysvec.c user/kmacy/HEAD_fast_multi_xmit/sys/conf/Makefile.arm user/kmacy/HEAD_fast_multi_xmit/sys/conf/NOTES user/kmacy/HEAD_fast_multi_xmit/sys/conf/files user/kmacy/HEAD_fast_multi_xmit/sys/conf/files.amd64 user/kmacy/HEAD_fast_multi_xmit/sys/conf/files.arm user/kmacy/HEAD_fast_multi_xmit/sys/conf/files.i386 user/kmacy/HEAD_fast_multi_xmit/sys/conf/files.mips user/kmacy/HEAD_fast_multi_xmit/sys/conf/files.pc98 user/kmacy/HEAD_fast_multi_xmit/sys/conf/files.powerpc user/kmacy/HEAD_fast_multi_xmit/sys/conf/files.sparc64 user/kmacy/HEAD_fast_multi_xmit/sys/conf/kern.pre.mk user/kmacy/HEAD_fast_multi_xmit/sys/conf/options user/kmacy/HEAD_fast_multi_xmit/sys/conf/options.arm user/kmacy/HEAD_fast_multi_xmit/sys/contrib/altq/altq/altq_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c user/kmacy/HEAD_fast_multi_xmit/sys/contrib/pf/ (props changed) user/kmacy/HEAD_fast_multi_xmit/sys/contrib/pf/net/pf.c user/kmacy/HEAD_fast_multi_xmit/sys/contrib/pf/net/pf_if.c user/kmacy/HEAD_fast_multi_xmit/sys/contrib/pf/net/pf_ioctl.c user/kmacy/HEAD_fast_multi_xmit/sys/contrib/pf/net/pf_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/contrib/rdma/rdma_cma.c user/kmacy/HEAD_fast_multi_xmit/sys/crypto/via/padlock.c user/kmacy/HEAD_fast_multi_xmit/sys/fs/cd9660/cd9660_bmap.c user/kmacy/HEAD_fast_multi_xmit/sys/fs/cd9660/cd9660_node.c user/kmacy/HEAD_fast_multi_xmit/sys/fs/cd9660/cd9660_node.h user/kmacy/HEAD_fast_multi_xmit/sys/fs/cd9660/cd9660_rrip.c user/kmacy/HEAD_fast_multi_xmit/sys/fs/cd9660/cd9660_vfsops.c user/kmacy/HEAD_fast_multi_xmit/sys/fs/cd9660/cd9660_vnops.c user/kmacy/HEAD_fast_multi_xmit/sys/fs/nullfs/null_vnops.c user/kmacy/HEAD_fast_multi_xmit/sys/fs/unionfs/union.h user/kmacy/HEAD_fast_multi_xmit/sys/fs/unionfs/union_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/fs/unionfs/union_vfsops.c user/kmacy/HEAD_fast_multi_xmit/sys/fs/unionfs/union_vnops.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/geom_bsd.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/geom_ccd.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/part/g_part.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/part/g_part_bsd.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/part/g_part_gpt.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/part/g_part_mbr.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/part/g_part_pc98.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/vinum/geom_vinum.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/vinum/geom_vinum_list.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/vinum/geom_vinum_move.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/vinum/geom_vinum_rename.c user/kmacy/HEAD_fast_multi_xmit/sys/geom/vinum/geom_vinum_rm.c user/kmacy/HEAD_fast_multi_xmit/sys/gnu/fs/xfs/FreeBSD/xfs_vnode.h user/kmacy/HEAD_fast_multi_xmit/sys/gnu/fs/xfs/xfs_dfrag.c user/kmacy/HEAD_fast_multi_xmit/sys/gnu/fs/xfs/xfs_inode.c user/kmacy/HEAD_fast_multi_xmit/sys/gnu/fs/xfs/xfs_inode.h user/kmacy/HEAD_fast_multi_xmit/sys/gnu/fs/xfs/xfs_vnodeops.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/conf/GENERIC user/kmacy/HEAD_fast_multi_xmit/sys/i386/conf/NOTES user/kmacy/HEAD_fast_multi_xmit/sys/i386/conf/PAE user/kmacy/HEAD_fast_multi_xmit/sys/i386/conf/XEN user/kmacy/HEAD_fast_multi_xmit/sys/i386/cpufreq/est.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/cpufreq/p4tcc.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/cpufreq/powernow.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/elf_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/i686_mem.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/identcpu.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/initcpu.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/intr_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/k6_mem.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/local_apic.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/longrun.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/mp_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/i386/msi.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/ibcs2/ibcs2_sysvec.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/atomic.h user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/cputypes.h user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/md_var.h user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/pmc_mdep.h user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/specialreg.h user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/xen/xen-os.h user/kmacy/HEAD_fast_multi_xmit/sys/i386/linux/linux.h user/kmacy/HEAD_fast_multi_xmit/sys/i386/linux/linux_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/linux/linux_proto.h user/kmacy/HEAD_fast_multi_xmit/sys/i386/linux/linux_syscall.h user/kmacy/HEAD_fast_multi_xmit/sys/i386/linux/linux_sysent.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/linux/linux_sysvec.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/linux/syscalls.master user/kmacy/HEAD_fast_multi_xmit/sys/i386/xen/xen_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/ia64/conf/GENERIC user/kmacy/HEAD_fast_multi_xmit/sys/ia64/ia64/elf_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/ia64/include/atomic.h user/kmacy/HEAD_fast_multi_xmit/sys/isa/isa_common.c user/kmacy/HEAD_fast_multi_xmit/sys/isa/isa_common.h user/kmacy/HEAD_fast_multi_xmit/sys/isa/isahint.c user/kmacy/HEAD_fast_multi_xmit/sys/isa/isavar.h user/kmacy/HEAD_fast_multi_xmit/sys/kern/Make.tags.inc user/kmacy/HEAD_fast_multi_xmit/sys/kern/bus_if.m user/kmacy/HEAD_fast_multi_xmit/sys/kern/imgact_aout.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/init_sysent.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_conf.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_cons.c (props changed) user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_cpuset.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_descrip.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_exit.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_fork.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_jail.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_ktrace.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_lockf.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_mbuf.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_poll.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_proc.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_shutdown.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_sysctl.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_thr.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_thread.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_uuid.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_xxx.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/sched_ule.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/subr_bus.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/subr_firmware.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/subr_prf.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/subr_sleepqueue.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/sys_pipe.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/syscalls.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/syscalls.master user/kmacy/HEAD_fast_multi_xmit/sys/kern/systrace_args.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/tty.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/tty_ttydisc.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mbuf.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mqueue.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_shm.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_socket.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_cache.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_export.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_lookup.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_mount.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_syscalls.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_vnops.c user/kmacy/HEAD_fast_multi_xmit/sys/kgssapi/gsstest.c user/kmacy/HEAD_fast_multi_xmit/sys/mips/conf/IDT user/kmacy/HEAD_fast_multi_xmit/sys/mips/conf/SENTRY5 user/kmacy/HEAD_fast_multi_xmit/sys/mips/include/atomic.h user/kmacy/HEAD_fast_multi_xmit/sys/mips/mips/elf_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/mips/mips/machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/modules/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/ath/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/ath_rate_amrr/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/ath_rate_onoe/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/ath_rate_sample/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/bridgestp/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/cxgb/iw_cxgb/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/cxgb/toecore/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/em/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/hwpmc/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/if_ef/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/if_vlan/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/igb/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/ip_mroute_mod/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/ipfw/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/linprocfs/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/linux/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/netgraph/atm/atm/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/netgraph/ether/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/netgraph/gif/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/nfsclient/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/nfsserver/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/pf/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/powermac_nvram/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/uart/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/usb2/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/wlan/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/modules/zfs/Makefile user/kmacy/HEAD_fast_multi_xmit/sys/net80211/ieee80211_ddb.c user/kmacy/HEAD_fast_multi_xmit/sys/net80211/ieee80211_hostap.c user/kmacy/HEAD_fast_multi_xmit/sys/net80211/ieee80211_output.c user/kmacy/HEAD_fast_multi_xmit/sys/net80211/ieee80211_var.h user/kmacy/HEAD_fast_multi_xmit/sys/net80211/ieee80211_wds.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/atm/ng_atm.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/netgraph.h user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/ng_base.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/ng_eiface.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/ng_ether.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/ng_gif.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/ng_iface.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/ng_l2tp.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/ng_socket.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/ng_tty.c user/kmacy/HEAD_fast_multi_xmit/sys/netgraph/ng_tty.h user/kmacy/HEAD_fast_multi_xmit/sys/nfsclient/bootp_subr.c user/kmacy/HEAD_fast_multi_xmit/sys/nfsclient/nfs_diskless.c user/kmacy/HEAD_fast_multi_xmit/sys/nfsclient/nfs_vnops.c user/kmacy/HEAD_fast_multi_xmit/sys/nfsserver/nfs_serv.c user/kmacy/HEAD_fast_multi_xmit/sys/nfsserver/nfs_srvkrpc.c user/kmacy/HEAD_fast_multi_xmit/sys/nfsserver/nfs_srvsubs.c user/kmacy/HEAD_fast_multi_xmit/sys/nlm/nlm_prot_svc.c user/kmacy/HEAD_fast_multi_xmit/sys/pc98/conf/GENERIC user/kmacy/HEAD_fast_multi_xmit/sys/pc98/conf/NOTES user/kmacy/HEAD_fast_multi_xmit/sys/pci/if_rl.c user/kmacy/HEAD_fast_multi_xmit/sys/pci/if_rlreg.h user/kmacy/HEAD_fast_multi_xmit/sys/powerpc/conf/GENERIC user/kmacy/HEAD_fast_multi_xmit/sys/powerpc/include/atomic.h user/kmacy/HEAD_fast_multi_xmit/sys/powerpc/include/float.h user/kmacy/HEAD_fast_multi_xmit/sys/powerpc/powerpc/elf_machdep.c user/kmacy/HEAD_fast_multi_xmit/sys/rpc/clnt_vc.c user/kmacy/HEAD_fast_multi_xmit/sys/sun4v/conf/GENERIC user/kmacy/HEAD_fast_multi_xmit/sys/sun4v/include/atomic.h user/kmacy/HEAD_fast_multi_xmit/sys/ufs/ffs/ffs_snapshot.c user/kmacy/HEAD_fast_multi_xmit/sys/ufs/ufs/ufs_dirhash.c user/kmacy/HEAD_fast_multi_xmit/sys/ufs/ufs/ufs_lookup.c user/kmacy/HEAD_fast_multi_xmit/sys/vm/uma.h user/kmacy/HEAD_fast_multi_xmit/sys/vm/uma_core.c user/kmacy/HEAD_fast_multi_xmit/sys/vm/vm_pageout.c user/kmacy/HEAD_fast_multi_xmit/sys/xdr/xdr_mbuf.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/Makefile ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/Makefile Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/Makefile Fri Dec 5 07:45:36 2008 (r185632) @@ -1,39 +1,38 @@ # $FreeBSD$ # @(#)Makefile 8.1 (Berkeley) 6/11/93 -# Makefile for i386 links, tags file +# Makefile for amd64 links, tags file # SYS is normally set in Make.tags.inc -# SYS=/sys -SYS=/nsys +SYS=/sys -TAGDIR= i386 +TAGDIR= amd64 .include "../kern/Make.tags.inc" all: @echo "make links or tags only" -# Directories in which to place i386 tags links -DI386= apm i386 ibcs2 include isa linux +# Directories in which to place amd64 tags links +DAMD64= acpica amd64 ia32 include isa linux32 pci links:: -for i in ${COMMDIR1}; do \ (cd $$i && { rm -f tags; ln -s ../${TAGDIR}/tags tags; }) done -for i in ${COMMDIR2}; do \ (cd $$i && { rm -f tags; ln -s ../../${TAGDIR}/tags tags; }) done - -for i in ${DI386}; do \ + -for i in ${DAMD64}; do \ (cd $$i && { rm -f tags; ln -s ../tags tags; }) done -SI386= ${SYS}/i386/apm/*.[ch] \ - ${SYS}/i386/i386/*.[ch] ${SYS}/i386/ibcs2/*.[ch] \ - ${SYS}/i386/include/*.[ch] ${SYS}/i386/isa/*.[ch] \ - ${SYS}/i386/linux/*.[ch] -AI386= ${SYS}/i386/i386/*.s +SAMD64= ${SYS}/amd64/acpica/*.[ch] \ + ${SYS}/amd64/amd64/*.[ch] ${SYS}/amd64/ia32/*.[ch] \ + ${SYS}/amd64/include/*.[ch] ${SYS}/amd64/isa/*.[ch] \ + ${SYS}/amd64/linux32/*.[ch] ${SYS}/amd64/pci/*.[ch] +AAMD64= ${SYS}/amd64/amd64/*.S tags:: - -ctags -wdt ${COMM} ${SI386} - egrep "^ENTRY(.*)|^ALTENTRY(.*)" ${AI386} | \ + -ctags -wdt ${COMM} ${SAMD64} + egrep "^ENTRY(.*)|^ALTENTRY(.*)" ${AAMD64} | \ sed "s;\([^:]*\):\([^(]*\)(\([^, )]*\)\(.*\);\3 \1 /^\2(\3\4$$/;" \ >> tags sort -o tags tags Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/amd64_mem.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/amd64_mem.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/amd64_mem.c Fri Dec 5 07:45:36 2008 (r185632) @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -677,8 +678,8 @@ amd64_mem_drvinit(void *unused) return; if ((cpu_id & 0xf00) != 0x600 && (cpu_id & 0xf00) != 0xf00) return; - if ((strcmp(cpu_vendor, "GenuineIntel") != 0) && - (strcmp(cpu_vendor, "AuthenticAMD") != 0)) + if (cpu_vendor_id != CPU_VENDOR_INTEL && + cpu_vendor_id != CPU_VENDOR_AMD) return; mem_range_softc.mr_op = &amd64_mrops; } Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/elf_machdep.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/elf_machdep.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/elf_machdep.c Fri Dec 5 07:45:36 2008 (r185632) @@ -72,7 +72,8 @@ struct sysentvec elf64_freebsd_sysvec = .sv_copyout_strings = exec_copyout_strings, .sv_setregs = exec_setregs, .sv_fixlimit = NULL, - .sv_maxssiz = NULL + .sv_maxssiz = NULL, + .sv_flags = SV_ABI_FREEBSD | SV_LP64 }; static Elf64_Brandinfo freebsd_brand_info = { Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/identcpu.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/identcpu.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/identcpu.c Fri Dec 5 07:45:36 2008 (r185632) @@ -69,6 +69,7 @@ void identify_cpu(void); void earlysetcpuclass(void); void panicifcpuunsupported(void); +static u_int find_cpu_vendor_id(void); static void print_AMD_info(void); static void print_AMD_assoc(int i); @@ -95,6 +96,14 @@ static struct { { "Sledgehammer", CPUCLASS_K8 }, /* CPU_SLEDGEHAMMER */ }; +static struct { + char *vendor; + u_int vendor_id; +} cpu_vendors[] = { + { INTEL_VENDOR_ID, CPU_VENDOR_INTEL }, /* GenuineIntel */ + { AMD_VENDOR_ID, CPU_VENDOR_AMD }, /* AuthenticAMD */ +}; + int cpu_cores; int cpu_logical; @@ -122,10 +131,10 @@ printcpuinfo(void) } } - if (strcmp(cpu_vendor, "GenuineIntel") == 0) { + if (cpu_vendor_id == CPU_VENDOR_INTEL) { /* Please make up your mind folks! */ strcat(cpu_model, "EM64T"); - } else if (strcmp(cpu_vendor, "AuthenticAMD") == 0) { + } else if (cpu_vendor_id == CPU_VENDOR_AMD) { /* * Values taken from AMD Processor Recognition * http://www.amd.com/K6/k6docs/pdf/20734g.pdf @@ -165,13 +174,13 @@ printcpuinfo(void) printf("Unknown"); /* will panic below... */ } printf("-class CPU)\n"); - if(*cpu_vendor) - printf(" Origin = \"%s\"",cpu_vendor); - if(cpu_id) + if (*cpu_vendor) + printf(" Origin = \"%s\"", cpu_vendor); + if (cpu_id) printf(" Id = 0x%x", cpu_id); - if (strcmp(cpu_vendor, "GenuineIntel") == 0 || - strcmp(cpu_vendor, "AuthenticAMD") == 0) { + if (cpu_vendor_id == CPU_VENDOR_INTEL || + cpu_vendor_id == CPU_VENDOR_AMD) { printf(" Stepping = %u", cpu_id & 0xf); if (cpu_high > 0) { u_int cmp = 1, htt = 1; @@ -343,22 +352,32 @@ printcpuinfo(void) ); } - if (cpu_feature & CPUID_HTT && strcmp(cpu_vendor, - "AuthenticAMD") == 0) + if ((cpu_feature & CPUID_HTT) && + cpu_vendor_id == CPU_VENDOR_AMD) cpu_feature &= ~CPUID_HTT; /* * If this CPU supports P-state invariant TSC then * mention the capability. */ - if (!tsc_is_invariant && - (strcmp(cpu_vendor, "AuthenticAMD") == 0 && - ((amd_pminfo & AMDPM_TSC_INVARIANT) != 0 || - AMD64_CPU_FAMILY(cpu_id) >= 0x10 || - cpu_id == 0x60fb2))) { - tsc_is_invariant = 1; - printf("\n TSC: P-state invariant"); + switch (cpu_vendor_id) { + case CPU_VENDOR_AMD: + if ((amd_pminfo & AMDPM_TSC_INVARIANT) || + AMD64_CPU_FAMILY(cpu_id) >= 0x10 || + cpu_id == 0x60fb2) + tsc_is_invariant = 1; + break; + case CPU_VENDOR_INTEL: + if ((amd_pminfo & AMDPM_TSC_INVARIANT) || + (AMD64_CPU_FAMILY(cpu_id) == 0x6 && + AMD64_CPU_MODEL(cpu_id) >= 0xe) || + (AMD64_CPU_FAMILY(cpu_id) == 0xf && + AMD64_CPU_MODEL(cpu_id) >= 0x3)) + tsc_is_invariant = 1; + break; } + if (tsc_is_invariant) + printf("\n TSC: P-state invariant"); /* * If this CPU supports HTT or CMP then mention the @@ -366,10 +385,10 @@ printcpuinfo(void) */ if (cpu_feature & CPUID_HTT) htt = (cpu_procinfo & CPUID_HTT_CORES) >> 16; - if (strcmp(cpu_vendor, "AuthenticAMD") == 0 && + if (cpu_vendor_id == CPU_VENDOR_AMD && (amd_feature2 & AMDID2_CMP)) cmp = (cpu_procinfo2 & AMDID_CMP_CORES) + 1; - else if (strcmp(cpu_vendor, "GenuineIntel") == 0 && + else if (cpu_vendor_id == CPU_VENDOR_INTEL && (cpu_high >= 4)) { cpuid_count(4, 0, regs); if ((regs[0] & 0x1f) != 0) @@ -391,7 +410,7 @@ printcpuinfo(void) if (!bootverbose) return; - if (strcmp(cpu_vendor, "AuthenticAMD") == 0) + if (cpu_vendor_id == CPU_VENDOR_AMD) print_AMD_info(); } @@ -450,6 +469,7 @@ identify_cpu(void) ((u_int *)&cpu_vendor)[1] = regs[3]; ((u_int *)&cpu_vendor)[2] = regs[2]; cpu_vendor[12] = '\0'; + cpu_vendor_id = find_cpu_vendor_id(); do_cpuid(1, regs); cpu_id = regs[0]; @@ -457,8 +477,8 @@ identify_cpu(void) cpu_feature = regs[3]; cpu_feature2 = regs[2]; - if (strcmp(cpu_vendor, "GenuineIntel") == 0 || - strcmp(cpu_vendor, "AuthenticAMD") == 0) { + if (cpu_vendor_id == CPU_VENDOR_INTEL || + cpu_vendor_id == CPU_VENDOR_AMD) { do_cpuid(0x80000000, regs); cpu_exthigh = regs[0]; } @@ -480,6 +500,17 @@ identify_cpu(void) cpu = CPU_CLAWHAMMER; } +static u_int +find_cpu_vendor_id(void) +{ + int i; + + for (i = 0; i < sizeof(cpu_vendors) / sizeof(cpu_vendors[0]); i++) + if (strcmp(cpu_vendor, cpu_vendors[i].vendor) == 0) + return (cpu_vendors[i].vendor_id); + return (0); +} + static void print_AMD_assoc(int i) { Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/initcpu.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/initcpu.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/initcpu.c Fri Dec 5 07:45:36 2008 (r185632) @@ -60,6 +60,7 @@ u_int cpu_id; /* Stepping ID */ u_int cpu_procinfo; /* HyperThreading Info / Brand Index / CLFUSH */ u_int cpu_procinfo2; /* Multicore info */ char cpu_vendor[20]; /* CPU Origin code */ +u_int cpu_vendor_id; /* CPU vendor ID */ u_int cpu_fxsr; /* SSE enabled */ u_int cpu_mxcsr_mask; /* Valid bits in mxcsr */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/intr_machdep.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/intr_machdep.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/intr_machdep.c Fri Dec 5 07:45:36 2008 (r185632) @@ -239,11 +239,8 @@ void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame) { struct intr_event *ie; - struct thread *td; int vector; - td = curthread; - /* * We count software interrupts when we process them. The * code here follows previous practice, but there's an Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/local_apic.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/local_apic.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/local_apic.c Fri Dec 5 07:45:36 2008 (r185632) @@ -323,7 +323,7 @@ lapic_setup(int boot) /* XXX: Error and thermal LVTs */ - if (strcmp(cpu_vendor, "AuthenticAMD") == 0) { + if (cpu_vendor_id == CPU_VENDOR_AMD) { /* * Detect the presence of C1E capability mostly on latest * dual-cores (or future) k8 family. This feature renders Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/mp_machdep.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/mp_machdep.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/mp_machdep.c Fri Dec 5 07:45:36 2008 (r185632) @@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -374,8 +375,7 @@ cpu_mp_start(void) * First determine if this is an Intel processor which claims * to have hyperthreading support. */ - if ((cpu_feature & CPUID_HTT) && - (strcmp(cpu_vendor, "GenuineIntel") == 0)) { + if ((cpu_feature & CPUID_HTT) && cpu_vendor_id == CPU_VENDOR_INTEL) { /* * If the "deterministic cache parameters" cpuid calls * are available, use them. Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/msi.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/msi.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/amd64/msi.c Fri Dec 5 07:45:36 2008 (r185632) @@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -211,8 +212,8 @@ msi_init(void) { /* Check if we have a supported CPU. */ - if (!(strcmp(cpu_vendor, "GenuineIntel") == 0 || - strcmp(cpu_vendor, "AuthenticAMD") == 0)) + if (!(cpu_vendor_id == CPU_VENDOR_INTEL || + cpu_vendor_id == CPU_VENDOR_AMD)) return; msi_enabled = 1; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/GENERIC ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/GENERIC Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/GENERIC Fri Dec 5 07:45:36 2008 (r185632) @@ -48,7 +48,7 @@ options PROCFS # Process filesystem ( options PSEUDOFS # Pseudo-filesystem framework options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization -options COMPAT_43TTY # BSD 4.3 TTY compat [KEEP THIS!] +options COMPAT_43TTY # BSD 4.3 TTY compat (sgtty) options COMPAT_IA32 # Compatible with i386 binaries options COMPAT_FREEBSD4 # Compatible with FreeBSD4 options COMPAT_FREEBSD5 # Compatible with FreeBSD5 @@ -202,6 +202,7 @@ device vx # 3Com 3c590, 3c595 (``Vorte device miibus # MII bus support device ae # Attansic/Atheros L2 FastEthernet device age # Attansic/Atheros L1 Gigabit Ethernet +device ale # Atheros AR8121/AR8113/AR8114 Ethernet device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet device bfe # Broadcom BCM440x 10/100 Ethernet device bge # Broadcom BCM570xx Gigabit Ethernet @@ -248,7 +249,8 @@ device wlan_tkip # 802.11 TKIP support device wlan_amrr # AMRR transmit rate control algorithm device an # Aironet 4500/4800 802.11 wireless NICs. device ath # Atheros pci/cardbus NIC's -device ath_hal # Atheros HAL (Hardware Access Layer) +device ath_hal # pci/cardbus chip support +options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors device ath_rate_sample # SampleRate tx rate control for ath device ral # Ralink Technology RT2500 wireless NICs. device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs. Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/NOTES ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/NOTES Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/NOTES Fri Dec 5 07:45:36 2008 (r185632) @@ -258,7 +258,6 @@ options DRM_DEBUG # Include debug print # Network interfaces: # -# ath: Atheros a/b/g WiFi adapters (requires ath_hal and wlan) # ed: Western Digital and SMC 80xx; Novell NE1000 and NE2000; 3Com 3C503 # HP PC Lan+, various PC Card devices # (requires miibus) @@ -284,12 +283,12 @@ device ral device ural device wpi -device ath -device ath_hal # Atheros HAL (includes binary component) -#device ath_rate_amrr # AMRR rate control for ath driver -#device ath_rate_onoe # Onoe rate control for ath driver -device ath_rate_sample # SampleRate rate control for the ath driver -#device wlan # 802.11 layer +device ath # Atheros pci/cardbus NIC's +device ath_hal # pci/cardbus chip support +options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors +device ath_rate_sample # SampleRate tx rate control for ath +#device ath_rate_amrr # AMRR rate control for ath driver +#device ath_rate_onoe # Onoe rate control for ath driver # #XXX this stores pointers in a 32bit field that is defined by the hardware Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/atomic.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/atomic.h Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/atomic.h Fri Dec 5 07:45:36 2008 (r185632) @@ -32,6 +32,10 @@ #error this file needs sys/cdefs.h as a prerequisite #endif +#define mb() __asm__ __volatile__ ("mfence;": : :"memory") +#define wmb() __asm__ __volatile__ ("sfence;": : :"memory") +#define rmb() __asm__ __volatile__ ("lfence;": : :"memory") + /* * Various simple operations on memory, each of which is atomic in the * presence of interrupts and multiple processors. Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/cputypes.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/cputypes.h Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/cputypes.h Fri Dec 5 07:45:36 2008 (r185632) @@ -33,15 +33,21 @@ /* * Classes of processor. */ -#define CPUCLASS_X86 0 /* X86 */ -#define CPUCLASS_K8 1 /* K8 AMD64 class */ +#define CPUCLASS_X86 0 /* X86 */ +#define CPUCLASS_K8 1 /* K8 AMD64 class */ /* * Kinds of processor. */ -#define CPU_X86 0 /* Intel */ -#define CPU_CLAWHAMMER 1 /* AMD Clawhammer */ -#define CPU_SLEDGEHAMMER 2 /* AMD Sledgehammer */ +#define CPU_X86 0 /* Intel */ +#define CPU_CLAWHAMMER 1 /* AMD Clawhammer */ +#define CPU_SLEDGEHAMMER 2 /* AMD Sledgehammer */ + +/* + * Vendors of processor. + */ +#define CPU_VENDOR_AMD 0x1022 /* AMD */ +#define CPU_VENDOR_INTEL 0x8086 /* Intel */ #ifndef LOCORE extern int cpu; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/md_var.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/md_var.h Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/md_var.h Fri Dec 5 07:45:36 2008 (r185632) @@ -52,6 +52,7 @@ extern u_int cpu_mxcsr_mask; extern u_int cpu_procinfo; extern u_int cpu_procinfo2; extern char cpu_vendor[]; +extern u_int cpu_vendor_id; extern char kstack[]; extern char sigcode[]; extern int szsigcode; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/pmc_mdep.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/pmc_mdep.h Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/pmc_mdep.h Fri Dec 5 07:45:36 2008 (r185632) @@ -35,15 +35,42 @@ #ifndef _MACHINE_PMC_MDEP_H #define _MACHINE_PMC_MDEP_H 1 +#ifdef _KERNEL +struct pmc_mdep; +#endif + #include +#include #include -#include +#include + +/* + * Intel processors implementing V2 and later of the Intel performance + * measurement architecture have PMCs of the following classes: TSC, + * IAF and IAP. + */ +#define PMC_MDEP_CLASS_INDEX_TSC 0 +#define PMC_MDEP_CLASS_INDEX_K8 1 +#define PMC_MDEP_CLASS_INDEX_P4 1 +#define PMC_MDEP_CLASS_INDEX_IAP 1 +#define PMC_MDEP_CLASS_INDEX_IAF 2 + +/* + * On the amd64 platform we support the following PMCs. + * + * TSC The timestamp counter + * K8 AMD Athlon64 and Opteron PMCs in 64 bit mode. + * PIV Intel P4/HTT and P4/EMT64 + * IAP Intel Core/Core2/Atom CPUs in 64 bits mode. + * IAF Intel fixed-function PMCs in Core2 and later CPUs. + */ union pmc_md_op_pmcallocate { struct pmc_md_amd_op_pmcallocate pm_amd; + struct pmc_md_iaf_op_pmcallocate pm_iaf; + struct pmc_md_iap_op_pmcallocate pm_iap; struct pmc_md_p4_op_pmcallocate pm_p4; - struct pmc_md_ipm_op_pmcallocate pm_ipm; - uint32_t __pad[7]; + uint64_t __pad[4]; }; /* Logging */ @@ -54,12 +81,11 @@ union pmc_md_op_pmcallocate { union pmc_md_pmc { struct pmc_md_amd_pmc pm_amd; + struct pmc_md_iaf_pmc pm_iaf; + struct pmc_md_iap_pmc pm_iap; struct pmc_md_p4_pmc pm_p4; - struct pmc_md_ipm_pmc pm_ipm; }; -struct pmc; - #define PMC_TRAPFRAME_TO_PC(TF) ((TF)->tf_rip) #define PMC_TRAPFRAME_TO_FP(TF) ((TF)->tf_rbp) #define PMC_TRAPFRAME_TO_USER_SP(TF) ((TF)->tf_rsp) @@ -91,5 +117,10 @@ struct pmc; void start_exceptions(void), end_exceptions(void); void pmc_x86_lapic_enable_pmc_interrupt(void); -#endif +struct pmc_mdep *pmc_amd_initialize(void); +void pmc_amd_finalize(struct pmc_mdep *_md); +struct pmc_mdep *pmc_intel_initialize(void); +void pmc_intel_finalize(struct pmc_mdep *_md); + +#endif /* _KERNEL */ #endif /* _MACHINE_PMC_MDEP_H */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/specialreg.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/specialreg.h Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/include/specialreg.h Fri Dec 5 07:45:36 2008 (r185632) @@ -196,8 +196,8 @@ /* * CPUID manufacturers identifiers */ -#define INTEL_VENDOR_ID "GenuineIntel" -#define AMD_VENDOR_ID "AuthenticAMD" +#define AMD_VENDOR_ID "AuthenticAMD" +#define INTEL_VENDOR_ID "GenuineIntel" /* * Model-specific registers for the i386 family Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux.h Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux.h Fri Dec 5 07:45:36 2008 (r185632) @@ -717,6 +717,22 @@ struct l_sockaddr { char sa_data[14]; } __packed; +struct l_msghdr { + l_uintptr_t msg_name; + l_int msg_namelen; + l_uintptr_t msg_iov; + l_size_t msg_iovlen; + l_uintptr_t msg_control; + l_size_t msg_controllen; + l_uint msg_flags; +}; + +struct l_cmsghdr { + l_size_t cmsg_len; + l_int cmsg_level; + l_int cmsg_type; +}; + struct l_ifmap { l_ulong mem_start; l_ulong mem_end; @@ -885,6 +901,16 @@ struct l_user_desc { (LINUX_CLONE_VM | LINUX_CLONE_FS | LINUX_CLONE_FILES | \ LINUX_CLONE_SIGHAND | LINUX_CLONE_THREAD) +struct iovec; + +struct l_iovec32 { + uint32_t iov_base; + l_size_t iov_len; +}; + +int linux32_copyiniov(struct l_iovec32 *iovp32, l_ulong iovcnt, + struct iovec **iovp, int error); + /* robust futexes */ struct linux_robust_list { l_uintptr_t next; @@ -892,7 +918,7 @@ struct linux_robust_list { struct linux_robust_list_head { struct linux_robust_list list; - l_ulong futex_offset; + l_long futex_offset; l_uintptr_t pending_list; }; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_machdep.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_machdep.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_machdep.c Fri Dec 5 07:45:36 2008 (r185632) @@ -232,20 +232,15 @@ linux_execve(struct thread *td, struct l return (error); } -struct iovec32 { - u_int32_t iov_base; - int iov_len; -}; - -CTASSERT(sizeof(struct iovec32) == 8); +CTASSERT(sizeof(struct l_iovec32) == 8); static int -linux32_copyinuio(struct iovec32 *iovp, u_int iovcnt, struct uio **uiop) +linux32_copyinuio(struct l_iovec32 *iovp, l_ulong iovcnt, struct uio **uiop) { - struct iovec32 iov32; + struct l_iovec32 iov32; struct iovec *iov; struct uio *uio; - u_int iovlen; + uint32_t iovlen; int error, i; *uiop = NULL; @@ -255,7 +250,7 @@ linux32_copyinuio(struct iovec32 *iovp, uio = malloc(iovlen + sizeof(*uio), M_IOV, M_WAITOK); iov = (struct iovec *)(uio + 1); for (i = 0; i < iovcnt; i++) { - error = copyin(&iovp[i], &iov32, sizeof(struct iovec32)); + error = copyin(&iovp[i], &iov32, sizeof(struct l_iovec32)); if (error) { free(uio, M_IOV); return (error); @@ -281,6 +276,34 @@ linux32_copyinuio(struct iovec32 *iovp, } int +linux32_copyiniov(struct l_iovec32 *iovp32, l_ulong iovcnt, struct iovec **iovp, + int error) +{ + struct l_iovec32 iov32; + struct iovec *iov; + uint32_t iovlen; + int i; + + *iovp = NULL; + if (iovcnt > UIO_MAXIOV) + return (error); + iovlen = iovcnt * sizeof(struct iovec); + iov = malloc(iovlen, M_IOV, M_WAITOK); + for (i = 0; i < iovcnt; i++) { + error = copyin(&iovp32[i], &iov32, sizeof(struct l_iovec32)); + if (error) { + free(iov, M_IOV); + return (error); + } + iov[i].iov_base = PTRIN(iov32.iov_base); + iov[i].iov_len = iov32.iov_len; + } + *iovp = iov; + return(0); + +} + +int linux_readv(struct thread *td, struct linux_readv_args *uap) { struct uio *auio; @@ -977,33 +1000,20 @@ linux_iopl(struct thread *td, struct lin int linux_pipe(struct thread *td, struct linux_pipe_args *args) { - int pip[2]; int error; - register_t reg_rdx; + int fildes[2]; #ifdef DEBUG if (ldebug(pipe)) printf(ARGS(pipe, "*")); #endif - reg_rdx = td->td_retval[1]; - error = pipe(td, 0); - if (error) { - td->td_retval[1] = reg_rdx; - return (error); - } - - pip[0] = td->td_retval[0]; - pip[1] = td->td_retval[1]; - error = copyout(pip, args->pipefds, 2 * sizeof(int)); - if (error) { - td->td_retval[1] = reg_rdx; + error = kern_pipe(td, fildes); + if (error) return (error); - } - td->td_retval[1] = reg_rdx; - td->td_retval[0] = 0; - return (0); + /* XXX: Close descriptors on error. */ + return (copyout(fildes, args->pipefds, sizeof fildes)); } int Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_proto.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_proto.h Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_proto.h Fri Dec 5 07:45:36 2008 (r185632) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.34 2008/05/13 20:01:26 rdivacky Exp + * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 185438 2008-11-29 14:55:24Z kib */ #ifndef _LINUX_SYSPROTO_H_ @@ -378,6 +378,10 @@ struct linux_clone_args { char dummy_l_[PADL_(int)]; int dummy; char dummy_r_[PADR_(int)]; char child_tidptr_l_[PADL_(void *)]; void * child_tidptr; char child_tidptr_r_[PADR_(void *)]; }; +struct linux_setdomainname_args { + char name_l_[PADL_(char *)]; char * name; char name_r_[PADR_(char *)]; + char len_l_[PADL_(int)]; int len; char len_r_[PADR_(int)]; +}; struct linux_newuname_args { char buf_l_[PADL_(struct l_new_utsname *)]; struct l_new_utsname * buf; char buf_r_[PADR_(struct l_new_utsname *)]; }; @@ -451,14 +455,14 @@ struct linux_msync_args { char fl_l_[PADL_(l_int)]; l_int fl; char fl_r_[PADR_(l_int)]; }; struct linux_readv_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; - char iovp_l_[PADL_(struct iovec32 *)]; struct iovec32 * iovp; char iovp_r_[PADR_(struct iovec32 *)]; - char iovcnt_l_[PADL_(u_int)]; u_int iovcnt; char iovcnt_r_[PADR_(u_int)]; + char fd_l_[PADL_(l_ulong)]; l_ulong fd; char fd_r_[PADR_(l_ulong)]; + char iovp_l_[PADL_(struct l_iovec32 *)]; struct l_iovec32 * iovp; char iovp_r_[PADR_(struct l_iovec32 *)]; + char iovcnt_l_[PADL_(l_ulong)]; l_ulong iovcnt; char iovcnt_r_[PADR_(l_ulong)]; }; struct linux_writev_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; - char iovp_l_[PADL_(struct iovec32 *)]; struct iovec32 * iovp; char iovp_r_[PADR_(struct iovec32 *)]; - char iovcnt_l_[PADL_(u_int)]; u_int iovcnt; char iovcnt_r_[PADR_(u_int)]; + char fd_l_[PADL_(l_ulong)]; l_ulong fd; char fd_r_[PADR_(l_ulong)]; + char iovp_l_[PADL_(struct l_iovec32 *)]; struct l_iovec32 * iovp; char iovp_r_[PADR_(struct l_iovec32 *)]; + char iovcnt_l_[PADL_(l_ulong)]; l_ulong iovcnt; char iovcnt_r_[PADR_(l_ulong)]; }; struct linux_getsid_args { char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; @@ -1077,6 +1081,7 @@ int linux_sysinfo(struct thread *, struc int linux_ipc(struct thread *, struct linux_ipc_args *); int linux_sigreturn(struct thread *, struct linux_sigreturn_args *); int linux_clone(struct thread *, struct linux_clone_args *); +int linux_setdomainname(struct thread *, struct linux_setdomainname_args *); int linux_newuname(struct thread *, struct linux_newuname_args *); int linux_adjtimex(struct thread *, struct linux_adjtimex_args *); int linux_mprotect(struct thread *, struct linux_mprotect_args *); @@ -1339,6 +1344,7 @@ int linux_vmsplice(struct thread *, stru #define LINUX_SYS_AUE_linux_ipc AUE_NULL #define LINUX_SYS_AUE_linux_sigreturn AUE_SIGRETURN #define LINUX_SYS_AUE_linux_clone AUE_RFORK +#define LINUX_SYS_AUE_linux_setdomainname AUE_SYSCTL #define LINUX_SYS_AUE_linux_newuname AUE_NULL #define LINUX_SYS_AUE_linux_adjtimex AUE_ADJTIME #define LINUX_SYS_AUE_linux_mprotect AUE_MPROTECT Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_syscall.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_syscall.h Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_syscall.h Fri Dec 5 07:45:36 2008 (r185632) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.34 2008/05/13 20:01:26 rdivacky Exp + * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 185438 2008-11-29 14:55:24Z kib */ #define LINUX_SYS_exit 1 @@ -112,7 +112,7 @@ #define LINUX_SYS_fsync 118 #define LINUX_SYS_linux_sigreturn 119 #define LINUX_SYS_linux_clone 120 -#define LINUX_SYS_setdomainname 121 +#define LINUX_SYS_linux_setdomainname 121 #define LINUX_SYS_linux_newuname 122 #define LINUX_SYS_linux_adjtimex 124 #define LINUX_SYS_linux_mprotect 125 Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_sysent.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_sysent.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_sysent.c Fri Dec 5 07:45:36 2008 (r185632) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.34 2008/05/13 20:01:26 rdivacky Exp + * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 185438 2008-11-29 14:55:24Z kib */ #include "opt_compat.h" @@ -140,7 +140,7 @@ struct sysent linux_sysent[] = { { AS(fsync_args), (sy_call_t *)fsync, AUE_FSYNC, NULL, 0, 0 }, /* 118 = fsync */ { AS(linux_sigreturn_args), (sy_call_t *)linux_sigreturn, AUE_SIGRETURN, NULL, 0, 0 }, /* 119 = linux_sigreturn */ { AS(linux_clone_args), (sy_call_t *)linux_clone, AUE_RFORK, NULL, 0, 0 }, /* 120 = linux_clone */ - { AS(setdomainname_args), (sy_call_t *)setdomainname, AUE_SYSCTL, NULL, 0, 0 }, /* 121 = setdomainname */ + { AS(linux_setdomainname_args), (sy_call_t *)linux_setdomainname, AUE_SYSCTL, NULL, 0, 0 }, /* 121 = linux_setdomainname */ { AS(linux_newuname_args), (sy_call_t *)linux_newuname, AUE_NULL, NULL, 0, 0 }, /* 122 = linux_newuname */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 123 = modify_ldt */ { 0, (sy_call_t *)linux_adjtimex, AUE_ADJTIME, NULL, 0, 0 }, /* 124 = linux_adjtimex */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_sysvec.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_sysvec.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/linux32_sysvec.c Fri Dec 5 07:45:36 2008 (r185632) @@ -1026,6 +1026,7 @@ struct sysentvec elf_linux_sysvec = { .sv_setregs = exec_linux_setregs, .sv_fixlimit = linux32_fixlimit, .sv_maxssiz = &linux32_maxssiz, + .sv_flags = SV_ABI_LINUX | SV_ILP32 | SV_IA32 }; static Elf32_Brandinfo linux_brand = { Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/syscalls.master ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/syscalls.master Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/linux32/syscalls.master Fri Dec 5 07:45:36 2008 (r185632) @@ -216,7 +216,7 @@ ; linux uses some strange calling convention here so we have to use the dummy arg 120 AUE_RFORK STD { int linux_clone(l_int flags, void *stack, \ void *parent_tidptr, int dummy, void * child_tidptr); } -121 AUE_SYSCTL NOPROTO { int setdomainname(char *name, \ +121 AUE_SYSCTL STD { int linux_setdomainname(char *name, \ int len); } 122 AUE_NULL STD { int linux_newuname( \ struct l_new_utsname *buf); } @@ -252,10 +252,10 @@ 143 AUE_FLOCK NOPROTO { int flock(int fd, int how); } 144 AUE_MSYNC STD { int linux_msync(l_ulong addr, \ l_size_t len, l_int fl); } -145 AUE_READV STD { int linux_readv(int fd, struct iovec32 *iovp, \ - u_int iovcnt); } -146 AUE_WRITEV STD { int linux_writev(int fd, struct iovec32 *iovp, \ - u_int iovcnt); } +145 AUE_READV STD { int linux_readv(l_ulong fd, struct l_iovec32 *iovp, \ + l_ulong iovcnt); } +146 AUE_WRITEV STD { int linux_writev(l_ulong fd, struct l_iovec32 *iovp, \ + l_ulong iovcnt); } 147 AUE_GETSID STD { int linux_getsid(l_pid_t pid); } 148 AUE_NULL STD { int linux_fdatasync(l_uint fd); } 149 AUE_SYSCTL STD { int linux_sysctl( \ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/arm/arm/busdma_machdep.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/arm/arm/busdma_machdep.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/arm/arm/busdma_machdep.c Fri Dec 5 07:45:36 2008 (r185632) @@ -673,9 +673,8 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm bus_addr_t paddr; if ((map->pagesneeded == 0)) { - CTR4(KTR_BUSDMA, "lowaddr= %d Maxmem= %d, boundary= %d, " - "alignment= %d", dmat->lowaddr, ptoa((vm_paddr_t)Maxmem), - dmat->boundary, dmat->alignment); + CTR3(KTR_BUSDMA, "lowaddr= %d, boundary= %d, alignment= %d", + dmat->lowaddr, dmat->boundary, dmat->alignment); CTR2(KTR_BUSDMA, "map= %p, pagesneeded= %d", map, map->pagesneeded); /* Modified: user/kmacy/HEAD_fast_multi_xmit/sys/arm/arm/elf_machdep.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/arm/arm/elf_machdep.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/arm/arm/elf_machdep.c Fri Dec 5 07:45:36 2008 (r185632) @@ -72,7 +72,8 @@ struct sysentvec elf32_freebsd_sysvec = .sv_copyout_strings = exec_copyout_strings, .sv_setregs = exec_setregs, .sv_fixlimit = NULL, - .sv_maxssiz = NULL + .sv_maxssiz = NULL, + .sv_flags = SV_ABI_FREEBSD | SV_ILP32 }; static Elf32_Brandinfo freebsd_brand_info = { Modified: user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91.c Fri Dec 5 07:44:52 2008 (r185631) +++ user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91.c Fri Dec 5 07:45:36 2008 (r185632) @@ -10,16 +10,17 @@ * 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. + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``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 AUTHOR OR CONTRIBUTORS 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 Added: user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_machdep.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/kmacy/HEAD_fast_multi_xmit/sys/arm/at91/at91_machdep.c Fri Dec 5 07:45:36 2008 (r185632) @@ -0,0 +1,399 @@ +/*- + * Copyright (c) 1994-1998 Mark Brinicombe. + * Copyright (c) 1994 Brini. + * All rights reserved. + * + * This code is derived from software written for Brini by Mark Brinicombe + * + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Brini. + * 4. The name of the company nor the name of the author may be used to + * endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY BRINI ``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 BRINI OR CONTRIBUTORS 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. + * + * RiscBSD kernel project + * + * machdep.c + * + * Machine dependant functions for kernel setup + * + * This file needs a lot of work. + * + * Created : 17/09/94 + */ + +#include "opt_msgbuf.h" + +#include +__FBSDID("$FreeBSD$"); + +#define _ARM32_BUS_DMA_PRIVATE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#define KERNEL_PT_SYS 0 /* Page table for mapping proc0 zero page */ +#define KERNEL_PT_KERN 1 +#define KERNEL_PT_KERN_NUM 22 +#define KERNEL_PT_AFKERNEL KERNEL_PT_KERN + KERNEL_PT_KERN_NUM /* L2 table for mapping after kernel */ +#define KERNEL_PT_AFKERNEL_NUM 5 + +/* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */ +#define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM) + +/* Define various stack sizes in pages */ +#define IRQ_STACK_SIZE 1 +#define ABT_STACK_SIZE 1 +#define UND_STACK_SIZE 1 + +extern u_int data_abort_handler_address; +extern u_int prefetch_abort_handler_address; +extern u_int undefined_handler_address; + +struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; + +extern void *_end; + +extern int *end; + +struct pcpu __pcpu; +struct pcpu *pcpup = &__pcpu; + +/* Physical and virtual addresses for some global pages */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 07:47:05 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6DE0F1065672; Fri, 5 Dec 2008 07:47:05 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 589518FC1D; Fri, 5 Dec 2008 07:47:05 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB57l502047394; Fri, 5 Dec 2008 07:47:05 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB57l4ov047375; Fri, 5 Dec 2008 07:47:04 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812050747.mB57l4ov047375@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 07:47:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185633 - in user/kmacy/HEAD_fast_multi_xmit: . bin/df bin/ps bin/sh cddl/compat/opensolaris/include cddl/compat/opensolaris/misc cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolar... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 07:47:05 -0000 Author: kmacy Date: Fri Dec 5 07:47:03 2008 New Revision: 185633 URL: http://svn.freebsd.org/changeset/base/185633 Log: IFC 184756:185625 part 8 Added: user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/include/libshare.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zinject/ user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zinject/translate.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zinject/zinject.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zinject/zinject.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c user/kmacy/HEAD_fast_multi_xmit/cddl/usr.bin/zinject/ user/kmacy/HEAD_fast_multi_xmit/cddl/usr.bin/zinject/Makefile user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/curs_memleaks.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/misc/ncurses.supp user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/CREDITS user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/INSTALL user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/NEWS user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditd/audit_triggers.defs user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditd/auditd_control.defs user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/compat/strlcpy.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/ user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/bsm/ user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/bsm/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/bsm/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/bsm/audit.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/bsm/audit_internal.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/bsm/audit_kevents.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/sys/bsm/audit_record.h user/kmacy/HEAD_fast_multi_xmit/gnu/usr.bin/gdb/gdbserver/fbsd-arm-low.c user/kmacy/HEAD_fast_multi_xmit/gnu/usr.bin/gdb/gdbserver/reg-arm.c user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/libpmcinternal.h user/kmacy/HEAD_fast_multi_xmit/lib/libutil/kinfo_getfile.c user/kmacy/HEAD_fast_multi_xmit/lib/libutil/kinfo_getvmmap.c user/kmacy/HEAD_fast_multi_xmit/share/man/man4/ale.4 user/kmacy/HEAD_fast_multi_xmit/share/man/man4/man4.arm/mge.4 user/kmacy/HEAD_fast_multi_xmit/tools/regression/acltools/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/acltools/00.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/acltools/run user/kmacy/HEAD_fast_multi_xmit/tools/regression/acltools/tools-posix.test user/kmacy/HEAD_fast_multi_xmit/tools/regression/bin/sh/builtins/type1.0.stderr user/kmacy/HEAD_fast_multi_xmit/tools/regression/bin/sh/parameters/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/bin/sh/parameters/exitstatus1.0 user/kmacy/HEAD_fast_multi_xmit/tools/regression/usr.bin/sed/regress.not.out user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/LICENSE user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/misc.sh user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/cache.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/disks.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/doesnt_exist.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/files.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/log.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/mirror.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/option-f_inuse.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_0.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/option-f_replication_level_mismatch_1.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/option-f_size_mismatch.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/option-f_type_mismatch.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/option-n.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/raidz1.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/raidz2.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/add/spare.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/attach/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/attach/log.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/attach/mirror.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/attach/option-f_inuse.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/already_exists.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/automount.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/cache.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/disks.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/files.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/log.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/mirror.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/option-R.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/option-f_inuse.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_0.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/option-f_replication_level_mismatch_1.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/option-f_size_mismatch.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/option-f_type_mismatch.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/option-m.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/option-n.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/option-o.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/raidz1.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/raidz2.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/create/spare.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/offline/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/offline/io.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/offline/log.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/offline/mirror.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/offline/option-t.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/offline/raidz1.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/offline/raidz2.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/remove/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/remove/cache.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/remove/spare.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/replace/ user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/replace/cache.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/replace/disk.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/replace/log.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/replace/mirror.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/replace/raidz1.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/replace/raidz2.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/zfs/zpool/replace/spare.t user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/cmdline.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/test/test_strip_components.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/dumpcis/ user/kmacy/HEAD_fast_multi_xmit/usr.sbin/dumpcis/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/dumpcis/dumpcis.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/dumpcis/main.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/dumpcis/printcis.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/dumpcis/readcis.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/dumpcis/readcis.h user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmcannotate/ user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmcannotate/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmcannotate/pmcannotate.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmcannotate/pmcannotate.c Deleted: user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/FREEBSD-vendor user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/HISTORY user/kmacy/HEAD_fast_multi_xmit/share/man/man9/vfs_mountedon.9 user/kmacy/HEAD_fast_multi_xmit/tools/regression/bin/sh/builtins/type1.0.stdout user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/Makefile.inc user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/dumpcis/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/dumpcis/dumpcis.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/dumpcis/main.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/beep.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/dumpcis.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/dumpcisfile.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/enabler.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/pccardc.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/pccardc.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/pccardmem.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/power.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/printcis.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/rdattr.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/rdmap.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/rdreg.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/wrattr.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardc/wrreg.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardd/readcis.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pccard/pccardd/readcis.h Modified: user/kmacy/HEAD_fast_multi_xmit/COPYRIGHT user/kmacy/HEAD_fast_multi_xmit/Makefile user/kmacy/HEAD_fast_multi_xmit/Makefile.inc1 user/kmacy/HEAD_fast_multi_xmit/ObsoleteFiles.inc user/kmacy/HEAD_fast_multi_xmit/UPDATING user/kmacy/HEAD_fast_multi_xmit/bin/df/df.1 user/kmacy/HEAD_fast_multi_xmit/bin/df/df.c user/kmacy/HEAD_fast_multi_xmit/bin/ps/print.c user/kmacy/HEAD_fast_multi_xmit/bin/sh/eval.c user/kmacy/HEAD_fast_multi_xmit/bin/sh/exec.c user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/include/mnttab.h user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/deviceid.c user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/mnttab.c user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/zmount.c user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/zone.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zdb/zdb.8 user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zdb/zdb.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zdb/zdb_il.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zfs/zfs.8 user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zpool/zpool.8 user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zpool/zpool_iter.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zpool/zpool_util.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zpool/zpool_util.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/ztest/ztest.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/head/assert.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/head/libintl.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/head/synch.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/head/thread.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libnvpair/libnvpair.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libnvpair/libnvpair.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libuutil/common/libuutil.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libuutil/common/libuutil_common.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libuutil/common/uu_alloc.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libuutil/common/uu_avl.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libuutil/common/uu_dprintf.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libuutil/common/uu_list.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_graph.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_impl.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_util.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzpool/common/taskq.c user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/lib/libzpool/common/util.c user/kmacy/HEAD_fast_multi_xmit/cddl/lib/libzfs/Makefile user/kmacy/HEAD_fast_multi_xmit/cddl/lib/libzpool/Makefile user/kmacy/HEAD_fast_multi_xmit/cddl/sbin/zpool/Makefile user/kmacy/HEAD_fast_multi_xmit/cddl/usr.bin/Makefile user/kmacy/HEAD_fast_multi_xmit/cddl/usr.bin/ztest/Makefile user/kmacy/HEAD_fast_multi_xmit/cddl/usr.sbin/zdb/Makefile user/kmacy/HEAD_fast_multi_xmit/contrib/gdb/gdb/arm-tdep.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ (props changed) user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ANNOUNCE user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/FREEBSD-upgrade user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/INSTALL user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/MANIFEST user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/NEWS user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/TO-DO user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/aclocal.m4 user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/announce.html.in user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/config.guess user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/config.sub user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/configure user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/configure.in user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/dist.mk user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/doc/html/announce.html user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/form/form.priv.h user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/form/frm_def.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/form/frm_driver.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/form/frm_req_name.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/include/MKterm.h.awk.in user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/include/capdefaults.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/include/curses.h.in user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/include/curses.tail user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/include/nc_alloc.h user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/include/nc_panel.h user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/include/ncurses_defs user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/include/term_entry.h user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/curs_getcchar.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/curs_terminfo.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/curs_util.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/form.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/form_driver.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/form_field_buffer.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/man_db.renames user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/menu_attributes.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/menu_driver.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/menu_pattern.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/man/ncurses.3x user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/menu/m_driver.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/menu/m_req_name.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/misc/ncu-indent user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/misc/terminfo.src user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/MKkeyname.awk user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/MKlib_gen.sh user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/MKunctrl.awk user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_addch.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_delwin.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_freeall.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_getch.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_getstr.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_initscr.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_mouse.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_newterm.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_newwin.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_overlay.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_restart.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_screen.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_set_term.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_slk.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_slkrefr.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_ungetch.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/lib_window.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/resizeterm.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/tries.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/use_window.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/base/wresize.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/curses.priv.h user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/fifo_defs.h user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/llib-lncurses user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/llib-lncursest user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/llib-lncursesw user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/MKcodes.awk user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/MKnames.awk user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/alloc_entry.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/alloc_ttype.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/captoinfo.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/comp_expand.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/comp_hash.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/comp_parse.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/comp_scan.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/entries.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/home_terminfo.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/init_keytry.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_acs.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_baudrate.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_cur_term.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_data.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_options.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_raw.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_setup.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_termcap.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_tgoto.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_tparm.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_tputs.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/make_keys.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/name_match.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/parse_entry.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/read_entry.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/use_screen.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tinfo/write_entry.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/lib_trace.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/lib_traceatr.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/lib_tracebits.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/lib_tracechr.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/lib_tracedmp.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/lib_tracemse.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/trace_buf.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/trace_tries.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/varargs.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/trace/visbuf.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tty/hardscroll.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tty/lib_mvcur.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tty/lib_twait.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/tty/tty_update.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/widechar/charable.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/widechar/lib_get_wch.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/widechar/lib_get_wstr.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/widechar/lib_key_name.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/ncurses/widechar/lib_unget_wch.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/panel/p_new.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/panel/panel.priv.h user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/MKtermsort.sh user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/dump_entry.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/dump_entry.h user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/infocmp.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/progs.priv.h user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/tic.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/toe.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/tput.c user/kmacy/HEAD_fast_multi_xmit/contrib/ncurses/progs/tset.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/ (props changed) user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/LICENSE user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/README user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/TODO user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/VERSION user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/audit/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/audit/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/audit/audit.8 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/audit/audit.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditd/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditd/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditd/audit_warn.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditd/auditd.8 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditd/auditd.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditd/auditd.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditfilterd/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditfilterd/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditfilterd/auditfilterd.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditreduce/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditreduce/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditreduce/auditreduce.1 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditreduce/auditreduce.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/auditreduce/auditreduce.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/praudit/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/praudit/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/praudit/praudit.1 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bin/praudit/praudit.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bsm/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bsm/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bsm/audit_uevents.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/bsm/libbsm.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/compat/clock_gettime.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/compat/strlcat.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/config/config.h user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/config/config.h.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/configure user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/configure.ac user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/etc/audit_event user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/au_class.3 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/au_free_token.3 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/au_token.3 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/audit_submit.3 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_audit.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_class.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_control.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_event.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_flags.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_io.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_mask.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_notify.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_token.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_user.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/libbsm/bsm_wrappers.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/audit.2 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/audit.log.5 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/audit_class.5 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/audit_control.5 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/audit_event.5 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/audit_user.5 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/audit_warn.5 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/auditctl.2 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/auditon.2 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/getaudit.2 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/getauid.2 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/setaudit.2 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/man/setauid.2 user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/modules/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/modules/auditfilter_noop/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/modules/auditfilter_noop/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/modules/auditfilter_noop/auditfilter_noop.c user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/test/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/test/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/test/bsm/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/test/bsm/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/tools/Makefile.am user/kmacy/HEAD_fast_multi_xmit/contrib/openbsm/tools/Makefile.in user/kmacy/HEAD_fast_multi_xmit/contrib/sendmail/ (props changed) user/kmacy/HEAD_fast_multi_xmit/contrib/sendmail/src/sendmail.h user/kmacy/HEAD_fast_multi_xmit/contrib/telnet/telnetd/ext.h user/kmacy/HEAD_fast_multi_xmit/contrib/telnet/telnetd/sys_term.c user/kmacy/HEAD_fast_multi_xmit/etc/mtree/BSD.include.dist user/kmacy/HEAD_fast_multi_xmit/etc/newsyslog.conf user/kmacy/HEAD_fast_multi_xmit/etc/syslog.conf user/kmacy/HEAD_fast_multi_xmit/gnu/usr.bin/gdb/Makefile user/kmacy/HEAD_fast_multi_xmit/gnu/usr.bin/gdb/gdbserver/Makefile user/kmacy/HEAD_fast_multi_xmit/include/Makefile user/kmacy/HEAD_fast_multi_xmit/include/utmp.h user/kmacy/HEAD_fast_multi_xmit/lib/Makefile user/kmacy/HEAD_fast_multi_xmit/lib/libarchive/test/test_acl_freebsd.c user/kmacy/HEAD_fast_multi_xmit/lib/libc/amd64/sys/Makefile.inc user/kmacy/HEAD_fast_multi_xmit/lib/libc/arm/sys/Makefile.inc user/kmacy/HEAD_fast_multi_xmit/lib/libc/gen/Symbol.map user/kmacy/HEAD_fast_multi_xmit/lib/libc/gen/dlfcn.c user/kmacy/HEAD_fast_multi_xmit/lib/libc/gen/getvfsbyname.3 user/kmacy/HEAD_fast_multi_xmit/lib/libc/gen/times.3 user/kmacy/HEAD_fast_multi_xmit/lib/libc/i386/sys/Makefile.inc user/kmacy/HEAD_fast_multi_xmit/lib/libc/i386/sys/pipe.S user/kmacy/HEAD_fast_multi_xmit/lib/libc/i386/sys/reboot.S user/kmacy/HEAD_fast_multi_xmit/lib/libc/i386/sys/setlogin.S user/kmacy/HEAD_fast_multi_xmit/lib/libc/ia64/sys/Makefile.inc user/kmacy/HEAD_fast_multi_xmit/lib/libc/mips/sys/Makefile.inc user/kmacy/HEAD_fast_multi_xmit/lib/libc/powerpc/sys/Makefile.inc user/kmacy/HEAD_fast_multi_xmit/lib/libc/sparc64/sys/Makefile.inc user/kmacy/HEAD_fast_multi_xmit/lib/libc/stdio/fread.c user/kmacy/HEAD_fast_multi_xmit/lib/libc/stdlib/malloc.c user/kmacy/HEAD_fast_multi_xmit/lib/libc/sys/cpuset_getaffinity.2 user/kmacy/HEAD_fast_multi_xmit/lib/libc/sys/jail.2 user/kmacy/HEAD_fast_multi_xmit/lib/libc/sys/pipe.2 user/kmacy/HEAD_fast_multi_xmit/lib/libc/sys/recv.2 user/kmacy/HEAD_fast_multi_xmit/lib/libkvm/kvm_proc.c user/kmacy/HEAD_fast_multi_xmit/lib/libmd/Makefile user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/libpmc.c user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/pmc.3 user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/pmc.atom.3 user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/pmc.core.3 user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/pmc.core2.3 user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/pmc.iaf.3 user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/pmclog.c user/kmacy/HEAD_fast_multi_xmit/lib/libstand/nfs.c user/kmacy/HEAD_fast_multi_xmit/lib/libstand/printf.c user/kmacy/HEAD_fast_multi_xmit/lib/libthr/thread/thr_fork.c user/kmacy/HEAD_fast_multi_xmit/lib/libthr/thread/thr_rtld.c user/kmacy/HEAD_fast_multi_xmit/lib/libusb20/libusb20.3 user/kmacy/HEAD_fast_multi_xmit/lib/libusb20/libusb20.c user/kmacy/HEAD_fast_multi_xmit/lib/libusb20/libusb20.h user/kmacy/HEAD_fast_multi_xmit/lib/libusb20/libusb20_compat01.c user/kmacy/HEAD_fast_multi_xmit/lib/libusb20/libusb20_compat01.h user/kmacy/HEAD_fast_multi_xmit/lib/libusb20/libusb20_desc.c user/kmacy/HEAD_fast_multi_xmit/lib/libusb20/libusb20_desc.h user/kmacy/HEAD_fast_multi_xmit/lib/libusb20/libusb20_ugen20.c user/kmacy/HEAD_fast_multi_xmit/lib/libutil/ (props changed) user/kmacy/HEAD_fast_multi_xmit/lib/libutil/Makefile user/kmacy/HEAD_fast_multi_xmit/lib/libutil/gr_util.c user/kmacy/HEAD_fast_multi_xmit/lib/libutil/libutil.h user/kmacy/HEAD_fast_multi_xmit/lib/libutil/pty.c user/kmacy/HEAD_fast_multi_xmit/lib/libutil/realhostname.c user/kmacy/HEAD_fast_multi_xmit/lib/ncurses/ncurses/Makefile user/kmacy/HEAD_fast_multi_xmit/lib/ncurses/ncurses/ncurses_cfg.h user/kmacy/HEAD_fast_multi_xmit/libexec/rtld-elf/Symbol.map user/kmacy/HEAD_fast_multi_xmit/libexec/rtld-elf/rtld.c user/kmacy/HEAD_fast_multi_xmit/libexec/rtld-elf/rtld_lock.c user/kmacy/HEAD_fast_multi_xmit/libexec/rtld-elf/rtld_lock.h user/kmacy/HEAD_fast_multi_xmit/libexec/telnetd/Makefile user/kmacy/HEAD_fast_multi_xmit/release/Makefile user/kmacy/HEAD_fast_multi_xmit/release/doc/en_US.ISO8859-1/hardware/article.sgml user/kmacy/HEAD_fast_multi_xmit/release/doc/en_US.ISO8859-1/relnotes/article.sgml user/kmacy/HEAD_fast_multi_xmit/sbin/geom/class/part/Makefile user/kmacy/HEAD_fast_multi_xmit/sbin/geom/class/part/geom_part.c user/kmacy/HEAD_fast_multi_xmit/sbin/geom/class/part/gpart.8 user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/auth_subr.c user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/config.c user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/fsm.c user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/iscontrol.8 user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/iscontrol.c user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/iscontrol.h user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/iscsi.conf.5 user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/login.c user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/misc.c user/kmacy/HEAD_fast_multi_xmit/sbin/iscontrol/pdu.c user/kmacy/HEAD_fast_multi_xmit/sbin/mount_msdosfs/mount_msdosfs.c user/kmacy/HEAD_fast_multi_xmit/sbin/newfs/Makefile user/kmacy/HEAD_fast_multi_xmit/sbin/newfs/mkfs.c user/kmacy/HEAD_fast_multi_xmit/sbin/newfs/newfs.8 user/kmacy/HEAD_fast_multi_xmit/sbin/newfs/newfs.c user/kmacy/HEAD_fast_multi_xmit/sbin/newfs/newfs.h user/kmacy/HEAD_fast_multi_xmit/sbin/newfs_msdos/newfs_msdos.8 user/kmacy/HEAD_fast_multi_xmit/sbin/newfs_msdos/newfs_msdos.c user/kmacy/HEAD_fast_multi_xmit/secure/usr.sbin/sshd/Makefile user/kmacy/HEAD_fast_multi_xmit/share/man/man4/Makefile user/kmacy/HEAD_fast_multi_xmit/share/man/man4/altq.4 user/kmacy/HEAD_fast_multi_xmit/share/man/man4/ath_hal.4 user/kmacy/HEAD_fast_multi_xmit/share/man/man4/bce.4 user/kmacy/HEAD_fast_multi_xmit/share/man/man4/ddb.4 user/kmacy/HEAD_fast_multi_xmit/share/man/man4/man4.arm/Makefile user/kmacy/HEAD_fast_multi_xmit/share/man/man4/miibus.4 user/kmacy/HEAD_fast_multi_xmit/share/man/man4/snd_hda.4 user/kmacy/HEAD_fast_multi_xmit/share/man/man4/upgt.4 user/kmacy/HEAD_fast_multi_xmit/share/man/man4/vlan.4 user/kmacy/HEAD_fast_multi_xmit/share/man/man5/fstab.5 user/kmacy/HEAD_fast_multi_xmit/share/man/man7/hier.7 user/kmacy/HEAD_fast_multi_xmit/share/man/man9/Makefile user/kmacy/HEAD_fast_multi_xmit/share/man/man9/VFS_SET.9 user/kmacy/HEAD_fast_multi_xmit/share/man/man9/bus_dma.9 user/kmacy/HEAD_fast_multi_xmit/share/man/man9/devfs_set_cdevpriv.9 user/kmacy/HEAD_fast_multi_xmit/share/man/man9/ktr.9 user/kmacy/HEAD_fast_multi_xmit/share/man/man9/style.9 user/kmacy/HEAD_fast_multi_xmit/share/man/man9/vn_fullpath.9 user/kmacy/HEAD_fast_multi_xmit/share/misc/bsd-family-tree user/kmacy/HEAD_fast_multi_xmit/share/misc/committers-src.dot user/kmacy/HEAD_fast_multi_xmit/share/mk/bsd.libnames.mk user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/Makefile user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/fstest.c user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/00.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/01.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/02.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/03.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/04.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/05.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/06.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/07.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/08.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/09.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/11.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/12.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chflags/13.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chown/00.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chown/05.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/chown/07.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/conf user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/link/00.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/misc.sh user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/open/16.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/open/23.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/rename/19.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/rename/21.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/rmdir/12.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/truncate/13.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/fstest/tests/unlink/08.t user/kmacy/HEAD_fast_multi_xmit/tools/regression/usr.bin/sed/regress.sh user/kmacy/HEAD_fast_multi_xmit/usr.bin/calendar/calendars/calendar.freebsd user/kmacy/HEAD_fast_multi_xmit/usr.bin/cpio/cpio.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/cpio/cpio.h user/kmacy/HEAD_fast_multi_xmit/usr.bin/cpio/test/test_option_tv.stdout.uu user/kmacy/HEAD_fast_multi_xmit/usr.bin/cpuset/cpuset.1 user/kmacy/HEAD_fast_multi_xmit/usr.bin/cpuset/cpuset.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/killall/killall.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/lsvfs/lsvfs.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/netstat/inet.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/procstat/ (props changed) user/kmacy/HEAD_fast_multi_xmit/usr.bin/procstat/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.bin/procstat/procstat_files.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/procstat/procstat_vm.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/sed/compile.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/bsdtar.1 user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/bsdtar.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/bsdtar.h user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/config_freebsd.h user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/test/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/tree.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/tree.h user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/util.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/tar/write.c user/kmacy/HEAD_fast_multi_xmit/usr.bin/window/wwend.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/audit/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/auditd/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/bluetooth/sdpd/sd.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/boot0cfg/boot0cfg.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/boot0cfg/boot0cfg.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ckdist/ckdist.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/config/config.5 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/config/config.h user/kmacy/HEAD_fast_multi_xmit/usr.sbin/config/config.y user/kmacy/HEAD_fast_multi_xmit/usr.sbin/config/configvers.h user/kmacy/HEAD_fast_multi_xmit/usr.sbin/config/lang.l user/kmacy/HEAD_fast_multi_xmit/usr.sbin/config/mkmakefile.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/cron/cron/cron.h user/kmacy/HEAD_fast_multi_xmit/usr.sbin/cron/crontab/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/cron/crontab/crontab.5 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/cron/crontab/crontab.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/cron/lib/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/cron/lib/entry.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/cron/lib/misc.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/jail/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/jail/jail.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/jail/jail.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/jexec/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/jexec/jexec.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/jexec/jexec.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/jls/Makefile user/kmacy/HEAD_fast_multi_xmit/usr.sbin/jls/jls.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/jls/jls.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/kldxref/kldxref.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/mergemaster/mergemaster.sh user/kmacy/HEAD_fast_multi_xmit/usr.sbin/ntp/doc/ntp-keygen.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pciconf/pciconf.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmccontrol/pmccontrol.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmccontrol/pmccontrol.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmcstat/pmcstat.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmcstat/pmcstat.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmcstat/pmcstat.h user/kmacy/HEAD_fast_multi_xmit/usr.sbin/pmcstat/pmcstat_log.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/powerd/powerd.8 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/powerd/powerd.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/sysinstall/devices.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/usbconfig/dump.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/usbconfig/usbconfig.c user/kmacy/HEAD_fast_multi_xmit/usr.sbin/wpa/wpa_supplicant/wpa_supplicant.conf.5 user/kmacy/HEAD_fast_multi_xmit/usr.sbin/zic/zic.8 Modified: user/kmacy/HEAD_fast_multi_xmit/COPYRIGHT ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/COPYRIGHT Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/COPYRIGHT Fri Dec 5 07:47:03 2008 (r185633) @@ -15,10 +15,10 @@ are met: 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 AUTHOR AND CONTRIBUTORS ``AS IS'' AND +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 AUTHOR OR CONTRIBUTORS BE LIABLE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS 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) Modified: user/kmacy/HEAD_fast_multi_xmit/Makefile ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/Makefile Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/Makefile Fri Dec 5 07:47:03 2008 (r185633) @@ -267,6 +267,10 @@ make: .PHONY ${MMAKE} all && \ ${MMAKE} install DESTDIR=${MAKEPATH} BINDIR= +tinderbox: + cd ${.CURDIR} && \ + DOING_TINDERBOX=YES ${MAKE} ${JFLAG} universe + # # universe # @@ -274,14 +278,24 @@ make: .PHONY # with a reasonable chance of success, regardless of how old your # existing system is. # -.if make(universe) +.if make(universe) || make(tinderbox) TARGETS?=amd64 arm i386 ia64 pc98 powerpc sparc64 sun4v +.if defined(DOING_TINDERBOX) +FAILFILE=tinderbox.failed +MAKEFAIL=tee -a ${FAILFILE} +.else +MAKEFAIL=cat +.endif + universe: universe_prologue universe_prologue: @echo "--------------------------------------------------------------" @echo ">>> make universe started on ${STARTTIME}" @echo "--------------------------------------------------------------" +.if defined(DOING_TINDERBOX) + rm -f ${FAILFILE} +.endif .for target in ${TARGETS} KERNCONFS!= cd ${.CURDIR}/sys/${target}/conf && \ find [A-Z]*[A-Z] -type f -maxdepth 0 \ @@ -292,22 +306,28 @@ universe: universe_${target} universe_${target}: .if !defined(MAKE_JUST_KERNELS) @echo ">> ${target} started on `LC_ALL=C date`" - -cd ${.CURDIR} && ${MAKE} ${JFLAG} buildworld \ + @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ + ${MAKE} ${JFLAG} buildworld \ TARGET=${target} \ - __MAKE_CONF=/dev/null \ - > _.${target}.buildworld 2>&1 + > _.${target}.buildworld 2>&1 || \ + (echo "${target} world failed," \ + "check _.${target}.buildworld for details" | ${MAKEFAIL})) @echo ">> ${target} buildworld completed on `LC_ALL=C date`" .endif .if exists(${.CURDIR}/sys/${target}/conf/NOTES) - -cd ${.CURDIR}/sys/${target}/conf && ${MAKE} LINT \ - > ${.CURDIR}/_.${target}.makeLINT 2>&1 + @(cd ${.CURDIR}/sys/${target}/conf && env __MAKE_CONF=/dev/null \ + ${MAKE} LINT > ${.CURDIR}/_.${target}.makeLINT 2>&1 || \ + (echo "${target} 'make LINT' failed," \ + "check _.${target}.makeLINT for details"| ${MAKEFAIL})) .endif .for kernel in ${KERNCONFS} - -cd ${.CURDIR} && ${MAKE} ${JFLAG} buildkernel \ + @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ + ${MAKE} ${JFLAG} buildkernel \ TARGET=${target} \ KERNCONF=${kernel} \ - __MAKE_CONF=/dev/null \ - > _.${target}.${kernel} 2>&1 + > _.${target}.${kernel} 2>&1 || \ + (echo "${target} ${kernel} kernel failed," \ + "check _.${target}.${kernel} for details"| ${MAKEFAIL})) .endfor @echo ">> ${target} completed on `LC_ALL=C date`" .endfor @@ -317,4 +337,11 @@ universe_epilogue: @echo ">>> make universe completed on `LC_ALL=C date`" @echo " (started ${STARTTIME})" @echo "--------------------------------------------------------------" +.if defined(DOING_TINDERBOX) + @if [ -e ${FAILFILE} ] ; then \ + echo "Tinderbox failed:" ;\ + cat ${FAILFILE} ;\ + exit 1 ;\ + fi +.endif .endif Modified: user/kmacy/HEAD_fast_multi_xmit/Makefile.inc1 ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/Makefile.inc1 Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/Makefile.inc1 Fri Dec 5 07:47:03 2008 (r185633) @@ -506,6 +506,9 @@ distribute32 install32: .if ${MK_CRYPT} != "no" cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} .endif +.if ${MK_KERBEROS} != "no" + cd ${.CURDIR}/kerberos5/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} +.endif cd ${.CURDIR}/libexec/rtld-elf; \ PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//} cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32IMAKE} ${.TARGET:S/32$//} Modified: user/kmacy/HEAD_fast_multi_xmit/ObsoleteFiles.inc ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/ObsoleteFiles.inc Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/ObsoleteFiles.inc Fri Dec 5 07:47:03 2008 (r185633) @@ -14,6 +14,11 @@ # The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last. # +# 20081123: vfs_mountedon.9 removed +OLD_FILES+=usr/share/man/man9/vfs_mountedon.9.gz +# 20081023: FREE.9 and MALLOC.9 removed +OLD_FILES+=usr/share/man/man9/FREE.9.gz +OLD_FILES+=usr/share/man/man9/MALLOC.9.gz # 20080928: removal of inaccurate device_ids(9) manual page OLD_FILES+=usr/share/man/man9/device_ids.9.gz OLD_FILES+=usr/share/man/man9/major.9.gz Modified: user/kmacy/HEAD_fast_multi_xmit/UPDATING ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/UPDATING Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/UPDATING Fri Dec 5 07:47:03 2008 (r185633) @@ -22,6 +22,35 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 8. to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20081130: + __FreeBSD_version 800057 marks the switchover from the + binary ath hal to source code. Users must add the line: + + options AH_SUPPORT_AR5416 + + to their kernel config files when specifying: + + device ath_hal + + The ath_hal module no longer exists; the code is now compiled + together with the driver in the ath module. It is now + possible to tailor chip support (i.e. reduce the set of chips + and thereby the code size); consult ath_hal(4) for details. + +20081121: + __FreeBSD_version 800054 adds memory barriers to + , new interfaces to ifnet to facilitate + multiple hardware transmit queues for cards that support + them, and a lock-less ring-buffer implementation to + enable drivers to more efficiently manage queueing of + packets. + +20081117: + A new version of ZFS (version 13) has been merged to -HEAD. + This version has zpool attribute "listsnapshots" off by + default, which means "zfs list" does not show snapshots, + and is the same as Solaris behavior. + 20081028: dummynet(4) ABI has changed. ipfw(8) needs to be recompiled. Modified: user/kmacy/HEAD_fast_multi_xmit/bin/df/df.1 ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/bin/df/df.1 Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/bin/df/df.1 Fri Dec 5 07:47:03 2008 (r185633) @@ -29,7 +29,7 @@ .\" @(#)df.1 8.3 (Berkeley) 5/8/95 .\" $FreeBSD$ .\" -.Dd April 22, 2004 +.Dd November 23, 2008 .Dt DF 1 .Os .Sh NAME @@ -38,7 +38,7 @@ .Sh SYNOPSIS .Nm .Op Fl b | g | H | h | k | m | P -.Op Fl aciln +.Op Fl acilnT .Op Fl t Ar type .Op Ar file | filesystem ... .Sh DESCRIPTION @@ -140,6 +140,8 @@ The .Xr lsvfs 1 command can be used to find out the types of file systems that are available on the system. +.It Fl T +Include file system type. .El .Sh ENVIRONMENT .Bl -tag -width BLOCKSIZE Modified: user/kmacy/HEAD_fast_multi_xmit/bin/df/df.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/bin/df/df.c Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/bin/df/df.c Fri Dec 5 07:47:03 2008 (r185633) @@ -68,6 +68,7 @@ __FBSDID("$FreeBSD$"); /* Maximum widths of various fields. */ struct maxwidths { int mntfrom; + int fstype; int total; int used; int avail; @@ -93,7 +94,7 @@ imax(int a, int b) return (a > b ? a : b); } -static int aflag = 0, cflag, hflag, iflag, kflag, lflag = 0, nflag; +static int aflag = 0, cflag, hflag, iflag, kflag, lflag = 0, nflag, Tflag; static struct ufs_args mdev; int @@ -115,7 +116,7 @@ main(int argc, char *argv[]) totalbuf.f_bsize = DEV_BSIZE; strlcpy(totalbuf.f_mntfromname, "total", MNAMELEN); vfslist = NULL; - while ((ch = getopt(argc, argv, "abcgHhiklmnPt:")) != -1) + while ((ch = getopt(argc, argv, "abcgHhiklmnPt:T")) != -1) switch (ch) { case 'a': aflag = 1; @@ -176,6 +177,9 @@ main(int argc, char *argv[]) fstype = optarg; vfslist = makevfslist(optarg); break; + case 'T': + Tflag = 1; + break; case '?': default: usage(); @@ -391,6 +395,7 @@ prtstat(struct statfs *sfsp, struct maxw if (++timesthrough == 1) { mwp->mntfrom = imax(mwp->mntfrom, (int)strlen("Filesystem")); + mwp->fstype = imax(mwp->fstype, (int)strlen("Type")); if (hflag) { header = " Size"; mwp->total = mwp->used = mwp->avail = @@ -402,8 +407,10 @@ prtstat(struct statfs *sfsp, struct maxw mwp->used = imax(mwp->used, (int)strlen("Used")); mwp->avail = imax(mwp->avail, (int)strlen("Avail")); - (void)printf("%-*s %-*s %*s %*s Capacity", - mwp->mntfrom, "Filesystem", mwp->total, header, + (void)printf("%-*s", mwp->mntfrom, "Filesystem"); + if (Tflag) + (void)printf(" %-*s", mwp->fstype, "Type"); + (void)printf(" %-*s %*s %*s Capacity", mwp->total, header, mwp->used, "Used", mwp->avail, "Avail"); if (iflag) { mwp->iused = imax(mwp->iused, (int)strlen(" iused")); @@ -414,6 +421,8 @@ prtstat(struct statfs *sfsp, struct maxw (void)printf(" Mounted on\n"); } (void)printf("%-*s", mwp->mntfrom, sfsp->f_mntfromname); + if (Tflag) + (void)printf(" %-*s", mwp->fstype, sfsp->f_fstypename); used = sfsp->f_blocks - sfsp->f_bfree; availblks = sfsp->f_bavail + used; if (hflag) { @@ -468,6 +477,7 @@ update_maxwidths(struct maxwidths *mwp, getbsize(&dummy, &blocksize); mwp->mntfrom = imax(mwp->mntfrom, (int)strlen(sfsp->f_mntfromname)); + mwp->fstype = imax(mwp->fstype, (int)strlen(sfsp->f_fstypename)); mwp->total = imax(mwp->total, int64width( fsbtoblk((int64_t)sfsp->f_blocks, sfsp->f_bsize, blocksize))); mwp->used = imax(mwp->used, @@ -505,7 +515,7 @@ usage(void) { (void)fprintf(stderr, -"usage: df [-b | -g | -H | -h | -k | -m | -P] [-aciln] [-t type] [file | filesystem ...]\n"); +"usage: df [-b | -g | -H | -h | -k | -m | -P] [-acilnT] [-t type] [file | filesystem ...]\n"); exit(EX_USAGE); } Modified: user/kmacy/HEAD_fast_multi_xmit/bin/ps/print.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/bin/ps/print.c Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/bin/ps/print.c Fri Dec 5 07:47:03 2008 (r185633) @@ -196,9 +196,8 @@ tdnam(KINFO *k, VARENT *ve) v = ve->var; if (showthreads && k->ki_p->ki_numthreads > 1) (void)printf("%-*s", v->width, k->ki_p->ki_ocomm); - else - (void)printf("%-*s", v->width, " " ); - + else + (void)printf("%-*s", v->width, " "); } void Modified: user/kmacy/HEAD_fast_multi_xmit/bin/sh/eval.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/bin/sh/eval.c Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/bin/sh/eval.c Fri Dec 5 07:47:03 2008 (r185633) @@ -791,6 +791,7 @@ evalcommand(union node *cmd, int flags, for (sp = varlist.list ; sp ; sp = sp->next) mklocal(sp->text); funcnest++; + exitstatus = oexitstatus; if (flags & EV_TESTED) evaltree(cmdentry.u.func, EV_TESTED); else Modified: user/kmacy/HEAD_fast_multi_xmit/bin/sh/exec.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/bin/sh/exec.c Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/bin/sh/exec.c Fri Dec 5 07:47:03 2008 (r185633) @@ -728,9 +728,6 @@ typecmd_impl(int argc, char **argv, int extern char *const parsekwd[]; for (i = 1; i < argc; i++) { - if (cmd != TYPECMD_SMALLV) - out1str(argv[i]); - /* First look at the keywords */ for (pp = (char **)parsekwd; *pp; pp++) if (**pp == *argv[i] && equal(*pp, argv[i])) @@ -740,7 +737,7 @@ typecmd_impl(int argc, char **argv, int if (cmd == TYPECMD_SMALLV) out1fmt("%s\n", argv[i]); else - out1str(" is a shell keyword\n"); + out1fmt("%s is a shell keyword\n", argv[i]); continue; } @@ -749,7 +746,8 @@ typecmd_impl(int argc, char **argv, int if (cmd == TYPECMD_SMALLV) out1fmt("alias %s='%s'\n", argv[i], ap->val); else - out1fmt(" is an alias for %s\n", ap->val); + out1fmt("%s is an alias for %s\n", argv[i], + ap->val); continue; } @@ -775,7 +773,7 @@ typecmd_impl(int argc, char **argv, int if (cmd == TYPECMD_SMALLV) out1fmt("%s\n", name); else - out1fmt(" is%s %s\n", + out1fmt("%s is%s %s\n", argv[i], (cmdp && cmd == TYPECMD_TYPE) ? " a tracked alias for" : "", name); @@ -784,11 +782,12 @@ typecmd_impl(int argc, char **argv, int if (cmd == TYPECMD_SMALLV) out1fmt("%s\n", argv[i]); else - out1fmt(" is %s\n", argv[i]); + out1fmt("%s is %s\n", argv[i], + argv[i]); } else { if (cmd != TYPECMD_SMALLV) - out1fmt(": %s\n", - strerror(errno)); + outfmt(out2, "%s: %s\n", + argv[i], strerror(errno)); error |= 127; } } @@ -798,19 +797,19 @@ typecmd_impl(int argc, char **argv, int if (cmd == TYPECMD_SMALLV) out1fmt("%s\n", argv[i]); else - out1str(" is a shell function\n"); + out1fmt("%s is a shell function\n", argv[i]); break; case CMDBUILTIN: if (cmd == TYPECMD_SMALLV) out1fmt("%s\n", argv[i]); else - out1str(" is a shell builtin\n"); + out1fmt("%s is a shell builtin\n", argv[i]); break; default: if (cmd != TYPECMD_SMALLV) - out1str(": not found\n"); + outfmt(out2, "%s: not found\n", argv[i]); error |= 127; break; } Added: user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/include/libshare.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/include/libshare.h Fri Dec 5 07:47:03 2008 (r185633) @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2007 Pawel Jakub Dawidek + * 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 AUTHORS AND CONTRIBUTORS ``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 AUTHORS OR CONTRIBUTORS 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. + * + * $FreeBSD$ + */ + +#ifndef _OPENSOLARIS_LIBSHARE_H_ +#define _OPENSOLARIS_LIBSHARE_H_ + +#define SA_OK 0 + +#define SA_INIT_CONTROL_API 0 + +#endif /* !_OPENSOLARIS_LIBSHARE_H_ */ Modified: user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/include/mnttab.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/include/mnttab.h Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/include/mnttab.h Fri Dec 5 07:47:03 2008 (r185633) @@ -9,6 +9,8 @@ #define MNTTAB _PATH_DEVNULL #define MNT_LINE_MAX 1024 +#define umount2(p, f) unmount(p, f) + struct mnttab { char *mnt_special; char *mnt_mountp; Modified: user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/deviceid.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/deviceid.c Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/deviceid.c Fri Dec 5 07:47:03 2008 (r185633) @@ -94,11 +94,7 @@ int devid_get(int fd, ddi_devid_t *retdevid) { - if (ioctl(fd, DIOCGIDENT, retdevid->devid) == -1) - return (errno); - if (retdevid->devid[0] == '\0') - return (ENOENT); - return (0); + return (ENOENT); } int Modified: user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/mnttab.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/mnttab.c Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/mnttab.c Fri Dec 5 07:47:03 2008 (r185633) @@ -37,6 +37,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include static char * mntopt(char **p) Modified: user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/zmount.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/zmount.c Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/zmount.c Fri Dec 5 07:47:03 2008 (r185633) @@ -35,9 +35,10 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include -#include +#include static void build_iovec(struct iovec **iov, int *iovlen, const char *name, void *val, @@ -86,7 +87,7 @@ zmount(const char *spec, const char *dir assert(optlen > 0); optstr = strdup(optptr); - assert(optptr != NULL); + assert(optstr != NULL); iov = NULL; iovlen = 0; Modified: user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/zone.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/zone.c Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/cddl/compat/opensolaris/misc/zone.c Fri Dec 5 07:47:03 2008 (r185633) @@ -32,7 +32,7 @@ #include #include -int +zoneid_t getzoneid(void) { size_t size; @@ -42,5 +42,5 @@ getzoneid(void) size = sizeof(jailid); if (sysctlbyname("security.jail.jailed", &jailid, &size, NULL, 0) == -1) assert(!"No security.jail.jailed sysctl!"); - return (jailid); + return ((zoneid_t)jailid); } Modified: user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zdb/zdb.8 ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zdb/zdb.8 Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zdb/zdb.8 Fri Dec 5 07:47:03 2008 (r185633) @@ -28,13 +28,17 @@ zdb \- ZFS debugger .fi .SH DESCRIPTION +.sp .LP The \fBzdb\fR command is used by support engineers to diagnose failures and gather statistics. Since the \fBZFS\fR file system is always consistent on disk and is self-repairing, \fBzdb\fR should only be run under the direction by a support engineer. +.sp .LP If no arguments are specified, \fBzdb\fR, performs basic consistency checks on the pool and associated datasets, and report any problems detected. +.sp .LP Any options supported by this command are internal to Sun and subject to change at any time. .SH EXIT STATUS +.sp .LP The following exit values are returned: .sp @@ -71,6 +75,7 @@ Invalid command line options were specif .RE .SH ATTRIBUTES +.sp .LP See \fBattributes\fR(5) for descriptions of the following attributes: .sp @@ -89,5 +94,6 @@ Interface StabilityUnstable .TE .SH SEE ALSO +.sp .LP \fBzfs\fR(1M), \fBzpool\fR(1M), \fBattributes\fR(5) Modified: user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zdb/zdb.c Fri Dec 5 07:45:36 2008 (r185632) +++ user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zdb/zdb.c Fri Dec 5 07:47:03 2008 (r185633) @@ -19,12 +19,10 @@ * CDDL HEADER END */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include #include #include @@ -51,6 +49,10 @@ #include #include #include +#include +#undef ZFS_MAXNAMELEN +#undef verify +#include const char cmdname[] = "zdb"; uint8_t dump_opt[256]; @@ -62,6 +64,9 @@ uint64_t *zopt_object = NULL; int zopt_objects = 0; int zdb_advance = ADVANCE_PRE; zbookmark_t zdb_noread = { 0, 0, ZB_NO_LEVEL, 0 }; +libzfs_handle_t *g_zfs; +boolean_t zdb_sig_user_data = B_TRUE; +int zdb_sig_cksumalg = ZIO_CHECKSUM_SHA256; /* * These libumem hooks provide a reasonable set of defaults for the allocator's @@ -83,12 +88,15 @@ static void usage(void) { (void) fprintf(stderr, - "Usage: %s [-udibcsvLU] [-O order] [-B os:obj:level:blkid] " + "Usage: %s [-udibcsvL] [-U cachefile_path] [-O order] " + "[-B os:obj:level:blkid] [-S user:cksumalg] " "dataset [object...]\n" " %s -C [pool]\n" " %s -l dev\n" - " %s -R vdev:offset:size:flags\n", - cmdname, cmdname, cmdname, cmdname); + " %s -R pool:vdev:offset:size:flags\n" + " %s [-p path_to_vdev_dir]\n" + " %s -e pool | GUID | devid ...\n", + cmdname, cmdname, cmdname, cmdname, cmdname, cmdname); (void) fprintf(stderr, " -u uberblock\n"); (void) fprintf(stderr, " -d datasets\n"); @@ -97,16 +105,22 @@ usage(void) (void) fprintf(stderr, " -b block statistics\n"); (void) fprintf(stderr, " -c checksum all data blocks\n"); (void) fprintf(stderr, " -s report stats on zdb's I/O\n"); + (void) fprintf(stderr, " -S : -- " + "dump blkptr signatures\n"); (void) fprintf(stderr, " -v verbose (applies to all others)\n"); (void) fprintf(stderr, " -l dump label contents\n"); (void) fprintf(stderr, " -L live pool (allows some errors)\n"); (void) fprintf(stderr, " -O [!] " "visitation order\n"); - (void) fprintf(stderr, " -U use zpool.cache in /tmp\n"); + (void) fprintf(stderr, " -U cachefile_path -- use alternate " + "cachefile\n"); (void) fprintf(stderr, " -B objset:object:level:blkid -- " "simulate bad block\n"); - (void) fprintf(stderr, " -R read and display block from a" + (void) fprintf(stderr, " -R read and display block from a " "device\n"); + (void) fprintf(stderr, " -e Pool is exported/destroyed/" + "has altroot\n"); + (void) fprintf(stderr, " -p (use with -e)\n"); (void) fprintf(stderr, "Specify an option more than once (e.g. -bb) " "to make only that option verbose\n"); (void) fprintf(stderr, "Default is to dump everything non-verbosely\n"); @@ -367,6 +381,44 @@ dump_zap(objset_t *os, uint64_t object, zap_cursor_fini(&zc); } +/*ARGSUSED*/ +static void +dump_zpldir(objset_t *os, uint64_t object, void *data, size_t size) +{ + zap_cursor_t zc; + zap_attribute_t attr; + const char *typenames[] = { + /* 0 */ "not specified", + /* 1 */ "FIFO", + /* 2 */ "Character Device", + /* 3 */ "3 (invalid)", + /* 4 */ "Directory", + /* 5 */ "5 (invalid)", + /* 6 */ "Block Device", + /* 7 */ "7 (invalid)", + /* 8 */ "Regular File", + /* 9 */ "9 (invalid)", + /* 10 */ "Symbolic Link", + /* 11 */ "11 (invalid)", + /* 12 */ "Socket", + /* 13 */ "Door", + /* 14 */ "Event Port", + /* 15 */ "15 (invalid)", + }; + + dump_zap_stats(os, object); + (void) printf("\n"); + + for (zap_cursor_init(&zc, os, object); + zap_cursor_retrieve(&zc, &attr) == 0; + zap_cursor_advance(&zc)) { + (void) printf("\t\t%s = %lld (type: %s)\n", + attr.za_name, ZFS_DIRENT_OBJ(attr.za_first_integer), + typenames[ZFS_DIRENT_TYPE(attr.za_first_integer)]); + } + zap_cursor_fini(&zc); +} + static void dump_spacemap(objset_t *os, space_map_obj_t *smo, space_map_t *sm) { @@ -456,10 +508,7 @@ dump_metaslabs(spa_t *spa) for (c = 0; c < rvd->vdev_children; c++) { vd = rvd->vdev_child[c]; - spa_config_enter(spa, RW_READER, FTAG); - (void) printf("\n vdev %llu = %s\n\n", - (u_longlong_t)vd->vdev_id, vdev_description(vd)); - spa_config_exit(spa, FTAG); + (void) printf("\n vdev %llu\n\n", (u_longlong_t)vd->vdev_id); if (dump_opt['d'] <= 5) { (void) printf("\t%10s %10s %5s\n", @@ -477,7 +526,6 @@ static void dump_dtl(vdev_t *vd, int indent) { avl_tree_t *t = &vd->vdev_dtl_map.sm_root; - spa_t *spa = vd->vdev_spa; space_seg_t *ss; vdev_t *pvd; int c; @@ -485,9 +533,10 @@ dump_dtl(vdev_t *vd, int indent) if (indent == 0) (void) printf("\nDirty time logs:\n\n"); - spa_config_enter(spa, RW_READER, FTAG); - (void) printf("\t%*s%s\n", indent, "", vdev_description(vd)); - spa_config_exit(spa, FTAG); + (void) printf("\t%*s%s\n", indent, "", + vd->vdev_path ? vd->vdev_path : + vd->vdev_parent ? vd->vdev_ops->vdev_op_type : + spa_name(vd->vdev_spa)); for (ss = avl_first(t); ss; ss = AVL_NEXT(t, ss)) { /* @@ -670,36 +719,49 @@ dump_dsl_dir(objset_t *os, uint64_t obje { dsl_dir_phys_t *dd = data; time_t crtime; - char used[6], compressed[6], uncompressed[6], quota[6], resv[6]; + char nice[6]; if (dd == NULL) return; - ASSERT(size == sizeof (*dd)); + ASSERT3U(size, >=, sizeof (dsl_dir_phys_t)); crtime = dd->dd_creation_time; - nicenum(dd->dd_used_bytes, used); - nicenum(dd->dd_compressed_bytes, compressed); - nicenum(dd->dd_uncompressed_bytes, uncompressed); - nicenum(dd->dd_quota, quota); - nicenum(dd->dd_reserved, resv); - (void) printf("\t\tcreation_time = %s", ctime(&crtime)); (void) printf("\t\thead_dataset_obj = %llu\n", (u_longlong_t)dd->dd_head_dataset_obj); (void) printf("\t\tparent_dir_obj = %llu\n", (u_longlong_t)dd->dd_parent_obj); - (void) printf("\t\tclone_parent_obj = %llu\n", - (u_longlong_t)dd->dd_clone_parent_obj); + (void) printf("\t\torigin_obj = %llu\n", + (u_longlong_t)dd->dd_origin_obj); (void) printf("\t\tchild_dir_zapobj = %llu\n", (u_longlong_t)dd->dd_child_dir_zapobj); - (void) printf("\t\tused_bytes = %s\n", used); - (void) printf("\t\tcompressed_bytes = %s\n", compressed); - (void) printf("\t\tuncompressed_bytes = %s\n", uncompressed); - (void) printf("\t\tquota = %s\n", quota); - (void) printf("\t\treserved = %s\n", resv); + nicenum(dd->dd_used_bytes, nice); + (void) printf("\t\tused_bytes = %s\n", nice); + nicenum(dd->dd_compressed_bytes, nice); + (void) printf("\t\tcompressed_bytes = %s\n", nice); + nicenum(dd->dd_uncompressed_bytes, nice); + (void) printf("\t\tuncompressed_bytes = %s\n", nice); + nicenum(dd->dd_quota, nice); + (void) printf("\t\tquota = %s\n", nice); + nicenum(dd->dd_reserved, nice); + (void) printf("\t\treserved = %s\n", nice); (void) printf("\t\tprops_zapobj = %llu\n", (u_longlong_t)dd->dd_props_zapobj); + (void) printf("\t\tdeleg_zapobj = %llu\n", + (u_longlong_t)dd->dd_deleg_zapobj); + (void) printf("\t\tflags = %llx\n", + (u_longlong_t)dd->dd_flags); + +#define DO(which) \ + nicenum(dd->dd_used_breakdown[DD_USED_ ## which], nice); \ + (void) printf("\t\tused_breakdown[" #which "] = %s\n", nice) + DO(HEAD); + DO(SNAP); + DO(CHILD); + DO(CHILD_RSRV); + DO(REFRSRV); +#undef DO } /*ARGSUSED*/ @@ -722,7 +784,7 @@ dump_dsl_dataset(objset_t *os, uint64_t nicenum(ds->ds_unique_bytes, unique); sprintf_blkptr(blkbuf, BP_SPRINTF_LEN, &ds->ds_bp); - (void) printf("\t\tdataset_obj = %llu\n", + (void) printf("\t\tdir_obj = %llu\n", (u_longlong_t)ds->ds_dir_obj); (void) printf("\t\tprev_snap_obj = %llu\n", (u_longlong_t)ds->ds_prev_snap_obj); @@ -749,6 +811,10 @@ dump_dsl_dataset(objset_t *os, uint64_t (u_longlong_t)ds->ds_guid); (void) printf("\t\tflags = %llx\n", (u_longlong_t)ds->ds_flags); + (void) printf("\t\tnext_clones_obj = %llu\n", + (u_longlong_t)ds->ds_next_clones_obj); + (void) printf("\t\tprops_obj = %llu\n", + (u_longlong_t)ds->ds_props_obj); (void) printf("\t\tbp = %s\n", blkbuf); } @@ -765,9 +831,11 @@ dump_bplist(objset_t *mos, uint64_t obje if (dump_opt['d'] < 3) return; + mutex_init(&bpl.bpl_lock, NULL, MUTEX_DEFAULT, NULL); VERIFY(0 == bplist_open(&bpl, mos, object)); if (bplist_empty(&bpl)) { bplist_close(&bpl); + mutex_destroy(&bpl.bpl_lock); return; } @@ -785,6 +853,7 @@ dump_bplist(objset_t *mos, uint64_t obje if (dump_opt['d'] < 5) { bplist_close(&bpl); + mutex_destroy(&bpl.bpl_lock); return; } @@ -800,6 +869,65 @@ dump_bplist(objset_t *mos, uint64_t obje } bplist_close(&bpl); + mutex_destroy(&bpl.bpl_lock); +} + +static avl_tree_t idx_tree; +static avl_tree_t domain_tree; +static boolean_t fuid_table_loaded; + +static void +fuid_table_destroy() +{ + if (fuid_table_loaded) { + zfs_fuid_table_destroy(&idx_tree, &domain_tree); + fuid_table_loaded = B_FALSE; + } +} + +/* + * print uid or gid information. + * For normal POSIX id just the id is printed in decimal format. + * For CIFS files with FUID the fuid is printed in hex followed by + * the doman-rid string. + */ +static void +print_idstr(uint64_t id, const char *id_type) +{ + if (FUID_INDEX(id)) { + char *domain; + + domain = zfs_fuid_idx_domain(&idx_tree, FUID_INDEX(id)); + (void) printf("\t%s %llx [%s-%d]\n", id_type, + (u_longlong_t)id, domain, (int)FUID_RID(id)); + } else { + (void) printf("\t%s %llu\n", id_type, (u_longlong_t)id); + } + +} + +static void +dump_uidgid(objset_t *os, znode_phys_t *zp) +{ + uint32_t uid_idx, gid_idx; + + uid_idx = FUID_INDEX(zp->zp_uid); + gid_idx = FUID_INDEX(zp->zp_gid); + + /* Load domain table, if not already loaded */ + if (!fuid_table_loaded && (uid_idx || gid_idx)) { + uint64_t fuid_obj; + + /* first find the fuid object. It lives in the master node */ + VERIFY(zap_lookup(os, MASTER_NODE_OBJ, ZFS_FUID_TABLES, + 8, 1, &fuid_obj) == 0); + (void) zfs_fuid_table_load(os, fuid_obj, + &idx_tree, &domain_tree); + fuid_table_loaded = B_TRUE; + } + + print_idstr(zp->zp_uid, "uid"); + print_idstr(zp->zp_gid, "gid"); } /*ARGSUSED*/ @@ -830,6 +958,7 @@ dump_znode(objset_t *os, uint64_t object z_ctime = (time_t)zp->zp_ctime[0]; (void) printf("\tpath %s\n", path); + dump_uidgid(os, zp); (void) printf("\tatime %s", ctime(&z_atime)); (void) printf("\tmtime %s", ctime(&z_mtime)); (void) printf("\tctime %s", ctime(&z_ctime)); @@ -874,9 +1003,9 @@ static object_viewer_t *object_viewer[DM dump_zap, /* DSL props */ dump_dsl_dataset, /* DSL dataset */ dump_znode, /* ZFS znode */ - dump_acl, /* ZFS ACL */ + dump_acl, /* ZFS V0 ACL */ dump_uint8, /* ZFS plain file */ - dump_zap, /* ZFS directory */ + dump_zpldir, /* ZFS directory */ dump_zap, /* ZFS master node */ dump_zap, /* ZFS delete queue */ dump_uint8, /* zvol object */ @@ -888,6 +1017,13 @@ static object_viewer_t *object_viewer[DM dump_uint8, /* SPA history */ dump_uint64, /* SPA history offsets */ dump_zap, /* Pool properties */ + dump_zap, /* DSL permissions */ + dump_acl, /* ZFS ACL */ + dump_uint8, /* ZFS SYSACL */ + dump_none, /* FUID nvlist */ + dump_packed_nvlist, /* FUID nvlist size */ + dump_zap, /* DSL dataset next clones */ + dump_zap, /* DSL scrub queue */ }; static void @@ -930,13 +1066,15 @@ dump_object(objset_t *os, uint64_t objec aux[0] = '\0'; - if (doi.doi_checksum != ZIO_CHECKSUM_INHERIT || verbosity >= 6) + if (doi.doi_checksum != ZIO_CHECKSUM_INHERIT || verbosity >= 6) { (void) snprintf(aux + strlen(aux), sizeof (aux), " (K=%s)", - zio_checksum_table[doi.doi_checksum].ci_name); + zio_checksum_table[doi.doi_checksum].ci_name); + } - if (doi.doi_compress != ZIO_COMPRESS_INHERIT || verbosity >= 6) + if (doi.doi_compress != ZIO_COMPRESS_INHERIT || verbosity >= 6) { (void) snprintf(aux + strlen(aux), sizeof (aux), " (Z=%s)", - zio_compress_table[doi.doi_compress].ci_name); + zio_compress_table[doi.doi_compress].ci_name); + } (void) printf("%10lld %3u %5s %5s %5s %5s %s%s\n", (u_longlong_t)object, doi.doi_indirection, iblk, dblk, lsize, @@ -972,13 +1110,13 @@ dump_object(objset_t *os, uint64_t objec } for (;;) { - error = dnode_next_offset(dn, B_FALSE, &start, minlvl, - blkfill, 0); + error = dnode_next_offset(dn, + 0, &start, minlvl, blkfill, 0); if (error) break; end = start; - error = dnode_next_offset(dn, B_TRUE, &end, minlvl, - blkfill, 0); + error = dnode_next_offset(dn, + DNODE_FIND_HOLE, &end, minlvl, blkfill, 0); nicenum(end - start, segsize); (void) printf("\t\tsegment [%016llx, %016llx)" " size %5s\n", (u_longlong_t)start, @@ -996,7 +1134,6 @@ dump_object(objset_t *os, uint64_t objec static char *objset_types[DMU_OST_NUMTYPES] = { "NONE", "META", "ZPL", "ZVOL", "OTHER", "ANY" }; -/*ARGSUSED*/ static void dump_dir(objset_t *os) { @@ -1019,8 +1156,8 @@ dump_dir(objset_t *os) if (dds.dds_type == DMU_OST_META) { dds.dds_creation_txg = TXG_INITIAL; usedobjs = os->os->os_rootbp->blk_fill; - refdbytes = - os->os->os_spa->spa_dsl_pool->dp_mos_dir->dd_used_bytes; + refdbytes = os->os->os_spa->spa_dsl_pool-> + dp_mos_dir->dd_phys->dd_used_bytes; } else { dmu_objset_space(os, &refdbytes, &scratch, &usedobjs, &scratch); } @@ -1054,6 +1191,9 @@ dump_dir(objset_t *os) if (verbosity < 2) return; + if (os->os->os_rootbp->blk_birth == 0) + return; + if (zopt_objects != 0) { for (i = 0; i < zopt_objects; i++) dump_object(os, zopt_object[i], verbosity, @@ -1115,6 +1255,52 @@ dump_config(const char *pool) } static void +dump_cachefile(const char *cachefile) +{ + int fd; + struct stat64 statbuf; + char *buf; + nvlist_t *config; + + if ((fd = open64(cachefile, O_RDONLY)) < 0) { + (void) printf("cannot open '%s': %s\n", cachefile, + strerror(errno)); + exit(1); + } + + if (fstat64(fd, &statbuf) != 0) { + (void) printf("failed to stat '%s': %s\n", cachefile, + strerror(errno)); + exit(1); + } + + if ((buf = malloc(statbuf.st_size)) == NULL) { + (void) fprintf(stderr, "failed to allocate %llu bytes\n", + (u_longlong_t)statbuf.st_size); + exit(1); + } + + if (read(fd, buf, statbuf.st_size) != statbuf.st_size) { + (void) fprintf(stderr, "failed to read %llu bytes\n", + (u_longlong_t)statbuf.st_size); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 15:01:00 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C55DC1065672; Fri, 5 Dec 2008 15:01:00 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B0F0E8FC26; Fri, 5 Dec 2008 15:01:00 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB5F10J3057471; Fri, 5 Dec 2008 15:01:00 GMT (envelope-from dfr@svn.freebsd.org) Received: (from dfr@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB5F0xsJ057455; Fri, 5 Dec 2008 15:00:59 GMT (envelope-from dfr@svn.freebsd.org) Message-Id: <200812051500.mB5F0xsJ057455@svn.freebsd.org> From: Doug Rabson Date: Fri, 5 Dec 2008 15:00:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185637 - in user/dfr/xenhvm/6/sys: amd64/include/xen dev/xen/blkfront dev/xen/console dev/xen/netfront dev/xen/xenpci i386/conf i386/i386 i386/include i386/include/xen i386/isa i386/xe... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 15:01:01 -0000 Author: dfr Date: Fri Dec 5 15:00:59 2008 New Revision: 185637 URL: http://svn.freebsd.org/changeset/base/185637 Log: Major cleaning up and refactoring, including but not limited to: * Move MI Xen headers from to * Try to cut down the amount of times one include cross-includes another * Remove all the linux compatibiity macros in favour of an unobfuscated native FreeBSD style. * Don't multiplex error and result values using negative errno return values. * On FreeBSD, malloc(..., M_WAITOK) doesn't return NULL - simplify accordingly. Added: user/dfr/xenhvm/6/sys/xen/evtchn.h (contents, props changed) - copied, changed from r185387, user/dfr/xenhvm/6/sys/i386/include/xen/evtchn.h user/dfr/xenhvm/6/sys/xen/features.h (props changed) - copied unchanged from r185387, user/dfr/xenhvm/6/sys/i386/include/xen/features.h user/dfr/xenhvm/6/sys/xen/hypervisor.h (contents, props changed) - copied, changed from r185387, user/dfr/xenhvm/6/sys/amd64/include/xen/hypervisor.h user/dfr/xenhvm/6/sys/xen/xen_intr.h (contents, props changed) - copied, changed from r185387, user/dfr/xenhvm/6/sys/i386/include/xen/xen_intr.h Deleted: user/dfr/xenhvm/6/sys/amd64/include/xen/evtchn.h user/dfr/xenhvm/6/sys/amd64/include/xen/features.h user/dfr/xenhvm/6/sys/amd64/include/xen/hypervisor.h user/dfr/xenhvm/6/sys/amd64/include/xen/xen_intr.h user/dfr/xenhvm/6/sys/amd64/include/xen/xenstored.h user/dfr/xenhvm/6/sys/i386/include/xen/evtchn.h user/dfr/xenhvm/6/sys/i386/include/xen/features.h user/dfr/xenhvm/6/sys/i386/include/xen/hypervisor.h user/dfr/xenhvm/6/sys/i386/include/xen/xen_intr.h user/dfr/xenhvm/6/sys/i386/include/xen/xenstored.h Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h user/dfr/xenhvm/6/sys/amd64/include/xen/xenpmap.h user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c user/dfr/xenhvm/6/sys/dev/xen/console/console.c user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c user/dfr/xenhvm/6/sys/dev/xen/xenpci/evtchn.c user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c user/dfr/xenhvm/6/sys/i386/conf/XEN user/dfr/xenhvm/6/sys/i386/i386/genassym.c user/dfr/xenhvm/6/sys/i386/i386/machdep.c user/dfr/xenhvm/6/sys/i386/i386/sys_machdep.c user/dfr/xenhvm/6/sys/i386/i386/vm_machdep.c user/dfr/xenhvm/6/sys/i386/include/pcpu.h user/dfr/xenhvm/6/sys/i386/include/xen/hypercall.h user/dfr/xenhvm/6/sys/i386/include/xen/xen-os.h user/dfr/xenhvm/6/sys/i386/include/xen/xenfunc.h user/dfr/xenhvm/6/sys/i386/include/xen/xenpmap.h user/dfr/xenhvm/6/sys/i386/include/xen/xenvar.h user/dfr/xenhvm/6/sys/i386/isa/npx.c user/dfr/xenhvm/6/sys/i386/xen/clock.c user/dfr/xenhvm/6/sys/i386/xen/mp_machdep.c user/dfr/xenhvm/6/sys/i386/xen/mptable.c user/dfr/xenhvm/6/sys/i386/xen/pmap.c user/dfr/xenhvm/6/sys/i386/xen/xen_bus.c user/dfr/xenhvm/6/sys/i386/xen/xen_machdep.c user/dfr/xenhvm/6/sys/xen/evtchn/evtchn.c user/dfr/xenhvm/6/sys/xen/evtchn/evtchn_dev.c user/dfr/xenhvm/6/sys/xen/features.c user/dfr/xenhvm/6/sys/xen/gnttab.c user/dfr/xenhvm/6/sys/xen/gnttab.h user/dfr/xenhvm/6/sys/xen/reboot.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_client.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_comms.h user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_dev.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_probe.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_probe_backend.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_xs.c user/dfr/xenhvm/6/sys/xen/xenbus/xenbusvar.h Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h ============================================================================== --- user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/hypercall.h Fri Dec 5 15:00:59 2008 (r185637) @@ -34,12 +34,12 @@ * IN THE SOFTWARE. */ -#ifndef __HYPERCALL_H__ -#define __HYPERCALL_H__ +#ifndef __MACHINE_XEN_HYPERCALL_H__ +#define __MACHINE_XEN_HYPERCALL_H__ #include -#ifndef __HYPERVISOR_H__ +#ifndef __XEN_HYPERVISOR_H__ # error "please don't include this file directly" #endif @@ -412,4 +412,4 @@ HYPERVISOR_kexec_op( #undef __must_check -#endif /* __HYPERCALL_H__ */ +#endif /* __MACHINE_XEN_HYPERCALL_H__ */ Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h ============================================================================== --- user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/xen-os.h Fri Dec 5 15:00:59 2008 (r185637) @@ -6,7 +6,7 @@ #ifndef _XEN_OS_H_ #define _XEN_OS_H_ -#include + #ifdef PAE #define CONFIG_X86_PAE #endif @@ -24,43 +24,10 @@ /* Force a proper event-channel callback from Xen. */ void force_evtchn_callback(void); -#ifndef vtophys -#include -#include -#include -#endif - extern int gdtset; -#ifdef SMP -#include /* XXX for pcpu.h */ -#include /* XXX for PCPU_GET */ -static inline int -smp_processor_id(void) -{ - if (__predict_true(gdtset)) - return PCPU_GET(cpuid); - return 0; -} - -#else -#define smp_processor_id() 0 -#endif - -#ifndef NULL -#define NULL (void *)0 -#endif - -#ifndef PANIC_IF -#define PANIC_IF(exp) if (unlikely(exp)) {panic("%s: %s:%d", #exp, __FILE__, __LINE__);} -#endif extern shared_info_t *HYPERVISOR_shared_info; -/* Somewhere in the middle of the GCC 2.96 development cycle, we implemented - a mechanism by which the user can annotate likely branch directions and - expect the blocks to be reordered appropriately. Define __builtin_expect - to nothing for earlier compilers. */ - /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ static inline void rep_nop(void) { @@ -68,13 +35,6 @@ static inline void rep_nop(void) } #define cpu_relax() rep_nop() - -#if __GNUC__ == 2 && __GNUC_MINOR__ < 96 -#define __builtin_expect(x, expected_value) (x) -#endif - -#define per_cpu(var, cpu) (pcpu_find((cpu))->pc_ ## var) - /* crude memory allocator for memory allocation early in * boot */ @@ -84,7 +44,6 @@ void bootmem_free(void *ptr, unsigned in /* Everything below this point is not included by assembler (.S) files. */ #ifndef __ASSEMBLY__ -#include void printk(const char *fmt, ...); @@ -106,7 +65,7 @@ void trap_init(void); #define __cli() \ do { \ vcpu_info_t *_vcpu; \ - _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ + _vcpu = &HYPERVISOR_shared_info->vcpu_info[PCPU_GET(cpuid)]; \ _vcpu->evtchn_upcall_mask = 1; \ barrier(); \ } while (0) @@ -115,7 +74,7 @@ do { do { \ vcpu_info_t *_vcpu; \ barrier(); \ - _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ + _vcpu = &HYPERVISOR_shared_info->vcpu_info[PCPU_GET(cpuid)]; \ _vcpu->evtchn_upcall_mask = 0; \ barrier(); /* unmask then check (avoid races) */ \ if ( unlikely(_vcpu->evtchn_upcall_pending) ) \ @@ -126,7 +85,7 @@ do { do { \ vcpu_info_t *_vcpu; \ barrier(); \ - _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ + _vcpu = &HYPERVISOR_shared_info->vcpu_info[PCPU_GET(cpuid)]; \ if ((_vcpu->evtchn_upcall_mask = (x)) == 0) { \ barrier(); /* unmask then check (avoid races) */ \ if ( unlikely(_vcpu->evtchn_upcall_pending) ) \ @@ -141,7 +100,7 @@ do { #define __save_and_cli(x) \ do { \ vcpu_info_t *_vcpu; \ - _vcpu = &HYPERVISOR_shared_info->vcpu_info[smp_processor_id()]; \ + _vcpu = &HYPERVISOR_shared_info->vcpu_info[PCPU_GET(cpuid)]; \ (x) = _vcpu->evtchn_upcall_mask; \ _vcpu->evtchn_upcall_mask = 1; \ barrier(); \ @@ -332,33 +291,6 @@ static __inline__ void atomic_inc(atomic #define rdtscll(val) \ __asm__ __volatile__("rdtsc" : "=A" (val)) - - -/* - * Kernel pointers have redundant information, so we can use a - * scheme where we can return either an error code or a dentry - * pointer with the same return value. - * - * This should be a per-architecture thing, to allow different - * error and pointer decisions. - */ -#define IS_ERR_VALUE(x) unlikely((x) > (unsigned long)-1000L) - -static inline void *ERR_PTR(long error) -{ - return (void *) error; -} - -static inline long PTR_ERR(const void *ptr) -{ - return (long) ptr; -} - -static inline long IS_ERR(const void *ptr) -{ - return IS_ERR_VALUE((unsigned long)ptr); -} - #endif /* !__ASSEMBLY__ */ #endif /* _OS_H_ */ Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h ============================================================================== --- user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/xenfunc.h Fri Dec 5 15:00:59 2008 (r185637) @@ -30,15 +30,13 @@ #ifndef _XEN_XENFUNC_H_ #define _XEN_XENFUNC_H_ -#include -#include #ifdef XENHVM #include #else #include #include #endif -#include + #define BKPT __asm__("int3"); #define XPQ_CALL_DEPTH 5 #define XPQ_CALL_COUNT 2 Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xenpmap.h ============================================================================== --- user/dfr/xenhvm/6/sys/amd64/include/xen/xenpmap.h Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/xenpmap.h Fri Dec 5 15:00:59 2008 (r185637) @@ -33,6 +33,9 @@ #ifndef _XEN_XENPMAP_H_ #define _XEN_XENPMAP_H_ + +#include + void _xen_queue_pt_update(vm_paddr_t, vm_paddr_t, char *, int); void xen_pt_switch(vm_paddr_t); void xen_set_ldt(vm_paddr_t, unsigned long); @@ -53,10 +56,6 @@ void pmap_ref(pt_entry_t *pte, vm_paddr_ #define xen_queue_pt_update(a, b) _xen_queue_pt_update((a), (b), NULL, 0) #endif - -#include -#include - #ifdef PMAP_DEBUG #define PMAP_REF pmap_ref #define PMAP_DEC_REF_PAGE pmap_dec_ref_page Modified: user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h ============================================================================== --- user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/amd64/include/xen/xenvar.h Fri Dec 5 15:00:59 2008 (r185637) @@ -37,7 +37,7 @@ extern int xendebug_flags; #else #define XENPRINTF printf #endif -#include +#include #if 0 #define TRACE_ENTER XENPRINTF("(file=%s, line=%d) entered %s\n", __FILE__, __LINE__, __FUNCTION__) @@ -111,18 +111,8 @@ extern xen_pfn_t *xen_machine_phys; #endif - void xpq_init(void); -#define BITS_PER_LONG 32 -#define NR_CPUS MAX_VIRT_CPUS - -#define BITS_TO_LONGS(bits) \ - (((bits)+BITS_PER_LONG-1)/BITS_PER_LONG) -#define DECLARE_BITMAP(name,bits) \ - unsigned long name[BITS_TO_LONGS(bits)] -typedef struct { DECLARE_BITMAP(bits, NR_CPUS); } xen_cpumask_t; - int xen_create_contiguous_region(vm_page_t pages, int npages); void xen_destroy_contiguous_region(void * addr, int npages); Modified: user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/dev/xen/blkfront/blkfront.c Fri Dec 5 15:00:59 2008 (r185637) @@ -40,17 +40,18 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include -#include -#include +#include +#include + +#include +#include +#include #include #include #include #include -#include -#include #include @@ -106,7 +107,7 @@ static char * blkif_status_name[] = { #endif #define WPRINTK(fmt, args...) printf("[XEN] " fmt, ##args) #if 0 -#define DPRINTK(fmt, args...) printf("[XEN] %s:%d" fmt ".\n", __FUNCTION__, __LINE__,##args) +#define DPRINTK(fmt, args...) printf("[XEN] %s:%d: " fmt ".\n", __func__, __LINE__, ##args) #else #define DPRINTK(fmt, args...) #endif @@ -322,17 +323,17 @@ blkfront_probe(device_t dev) static int blkfront_attach(device_t dev) { - int err, vdevice, i, unit; + int error, vdevice, i, unit; struct blkfront_info *info; const char *name; /* FIXME: Use dynamic device id if this is not set. */ - err = xenbus_scanf(XBT_NIL, xenbus_get_node(dev), - "virtual-device", "%i", &vdevice); - if (err != 1) { - xenbus_dev_fatal(dev, err, "reading virtual-device"); + error = xenbus_scanf(XBT_NIL, xenbus_get_node(dev), + "virtual-device", NULL, "%i", &vdevice); + if (error) { + xenbus_dev_fatal(dev, error, "reading virtual-device"); printf("couldn't find virtual device"); - return (err); + return (error); } blkfront_vdevice_to_unit(vdevice, &unit, &name); @@ -361,10 +362,9 @@ blkfront_attach(device_t dev) /* Front end dir is a number, which is used as the id. */ info->handle = strtoul(strrchr(xenbus_get_node(dev),'/')+1, NULL, 0); - err = talk_to_backend(dev, info); - if (err) { - return err; - } + error = talk_to_backend(dev, info); + if (error) + return (error); return (0); } @@ -375,7 +375,7 @@ blkfront_resume(device_t dev) struct blkfront_info *info = device_get_softc(dev); int err; - DPRINTK("blkfront_resume: %s\n", dev->nodename); + DPRINTK("blkfront_resume: %s\n", xenbus_get_node(dev)); blkif_free(info, 1); @@ -450,7 +450,7 @@ static int setup_blkring(device_t dev, struct blkfront_info *info) { blkif_sring_t *sring; - int err; + int error; info->ring_ref = GRANT_INVALID_REF; @@ -462,28 +462,27 @@ setup_blkring(device_t dev, struct blkfr SHARED_RING_INIT(sring); FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE); - err = xenbus_grant_ring(dev, (vtomach(info->ring.sring) >> PAGE_SHIFT)); - if (err < 0) { + error = xenbus_grant_ring(dev, + (vtomach(info->ring.sring) >> PAGE_SHIFT), &info->ring_ref); + if (error) { free(sring, M_DEVBUF); info->ring.sring = NULL; goto fail; } - info->ring_ref = err; - err = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev), - "xbd", (driver_intr_t *)blkif_int, info, - INTR_TYPE_BIO | INTR_MPSAFE, NULL); - if (err <= 0) { - xenbus_dev_fatal(dev, err, - "bind_evtchn_to_irqhandler failed"); + error = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev), + "xbd", (driver_intr_t *)blkif_int, info, + INTR_TYPE_BIO | INTR_MPSAFE, &info->irq); + if (error) { + xenbus_dev_fatal(dev, error, + "bind_evtchn_to_irqhandler failed"); goto fail; } - info->irq = err; - return 0; + return (0); fail: blkif_free(info, 0); - return err; + return (error); } @@ -495,7 +494,7 @@ blkfront_backend_changed(device_t dev, X { struct blkfront_info *info = device_get_softc(dev); - DPRINTK("blkfront:backend_changed.\n"); + DPRINTK("backend_state=%d\n", backend_state); switch (backend_state) { case XenbusStateUnknown: @@ -708,7 +707,7 @@ blkif_open(struct disk *dp) struct xb_softc *sc = (struct xb_softc *)dp->d_drv1; if (sc == NULL) { - printk("xb%d: not found", sc->xb_unit); + printf("xb%d: not found", sc->xb_unit); return (ENXIO); } @@ -999,7 +998,7 @@ blkif_free(struct blkfront_info *info, i info->ring.sring = NULL; } if (info->irq) - unbind_from_irqhandler(info->irq, info); + unbind_from_irqhandler(info->irq); info->irq = 0; } @@ -1022,7 +1021,6 @@ blkif_recover(struct blkfront_info *info /* Stage 1: Make a safe copy of the shadow state. */ copy = (struct blk_shadow *)malloc(sizeof(info->shadow), M_DEVBUF, M_NOWAIT|M_ZERO); - PANIC_IF(copy == NULL); memcpy(copy, info->shadow, sizeof(info->shadow)); /* Stage 2: Set up free list. */ Modified: user/dfr/xenhvm/6/sys/dev/xen/console/console.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/console/console.c Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/dev/xen/console/console.c Fri Dec 5 15:00:59 2008 (r185637) @@ -15,8 +15,8 @@ #include #include #include -#include -#include +#include +#include #include #include @@ -234,7 +234,7 @@ static int xc_attach(device_t dev) { struct xc_softc *sc = (struct xc_softc *)device_get_softc(dev); - + int error; if (xen_start_info->flags & SIF_INITDOMAIN) { xc_consdev.cn_putc = xccnputc_dom0; @@ -259,16 +259,11 @@ xc_attach(device_t dev) callout_reset(&xc_callout, XC_POLLTIME, xc_timeout, xccons); if (xen_start_info->flags & SIF_INITDOMAIN) { - PANIC_IF(bind_virq_to_irqhandler( - VIRQ_CONSOLE, - 0, - "console", - xencons_priv_interrupt, - INTR_TYPE_TTY) < 0); - + error = bind_virq_to_irqhandler(VIRQ_CONSOLE, 0, "console", + xencons_priv_interrupt, INTR_TYPE_TTY, NULL); + KASSERT(error >= 0, ("can't register console interrupt")); } - /* register handler to flush console on shutdown */ if ((EVENTHANDLER_REGISTER(shutdown_post_sync, xc_shutdown, NULL, SHUTDOWN_PRI_DEFAULT)) == NULL) Modified: user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/dev/xen/console/xencons_ring.c Fri Dec 5 15:00:59 2008 (r185637) @@ -13,17 +13,17 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include -#include -#include -#include #include +#include +#include +#include -#include -#include +#include +#include #include +#include #define console_evtchn console.domU.evtchn extern char *console_page; @@ -59,7 +59,8 @@ xencons_ring_send(const char *data, unsi sent = 0; mb(); - PANIC_IF((prod - cons) > sizeof(intf->out)); + KASSERT((prod - cons) <= sizeof(intf->out), + ("console send ring inconsistent")); while ((sent < len) && ((prod - cons) < sizeof(intf->out))) intf->out[MASK_XENCONS_IDX(prod++, intf->out)] = data[sent++]; @@ -116,8 +117,8 @@ xencons_ring_init(void) return 0; err = bind_caller_port_to_irqhandler(xen_start_info->console_evtchn, - "xencons", xencons_handle_input, NULL, - INTR_TYPE_MISC | INTR_MPSAFE, NULL); + "xencons", xencons_handle_input, NULL, + INTR_TYPE_MISC | INTR_MPSAFE, NULL); if (err) { return err; } Modified: user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/dev/xen/netfront/netfront.c Fri Dec 5 15:00:59 2008 (r185637) @@ -63,17 +63,19 @@ __FBSDID("$FreeBSD$"); #include #include -#include -#include -#include +#include #include +#include + +#include +#include #include #include -#include -#include #include #include +#include + #include "xenbus_if.h" #define GRANT_INVALID_REF 0 @@ -368,24 +370,25 @@ makembuf (struct mbuf *buf) static int xen_net_read_mac(device_t dev, uint8_t mac[]) { - char *s; - int i; - char *e; - char *macstr = xenbus_read(XBT_NIL, xenbus_get_node(dev), "mac", NULL); - if (IS_ERR(macstr)) { - return PTR_ERR(macstr); - } + int error, i; + char *s, *e, *macstr; + + error = xenbus_read(XBT_NIL, xenbus_get_node(dev), "mac", NULL, + (void **) &macstr); + if (error) + return (error); + s = macstr; for (i = 0; i < ETHER_ADDR_LEN; i++) { mac[i] = strtoul(s, &e, 16); if (s == e || (e[0] != ':' && e[0] != 0)) { free(macstr, M_DEVBUF); - return ENOENT; + return (ENOENT); } s = &e[1]; } free(macstr, M_DEVBUF); - return 0; + return (0); } /** @@ -537,7 +540,7 @@ setup_device(device_t dev, struct netfro { netif_tx_sring_t *txs; netif_rx_sring_t *rxs; - int err; + int error; struct ifnet *ifp; ifp = info->xn_ifp; @@ -550,51 +553,48 @@ setup_device(device_t dev, struct netfro txs = (netif_tx_sring_t *)malloc(PAGE_SIZE, M_DEVBUF, M_NOWAIT|M_ZERO); if (!txs) { - err = ENOMEM; - xenbus_dev_fatal(dev, err, "allocating tx ring page"); + error = ENOMEM; + xenbus_dev_fatal(dev, error, "allocating tx ring page"); goto fail; } SHARED_RING_INIT(txs); FRONT_RING_INIT(&info->tx, txs, PAGE_SIZE); - err = xenbus_grant_ring(dev, virt_to_mfn(txs)); - if (err < 0) + error = xenbus_grant_ring(dev, virt_to_mfn(txs), &info->tx_ring_ref); + if (error) goto fail; - info->tx_ring_ref = err; rxs = (netif_rx_sring_t *)malloc(PAGE_SIZE, M_DEVBUF, M_NOWAIT|M_ZERO); if (!rxs) { - err = ENOMEM; - xenbus_dev_fatal(dev, err, "allocating rx ring page"); + error = ENOMEM; + xenbus_dev_fatal(dev, error, "allocating rx ring page"); goto fail; } SHARED_RING_INIT(rxs); FRONT_RING_INIT(&info->rx, rxs, PAGE_SIZE); - err = xenbus_grant_ring(dev, virt_to_mfn(rxs)); - if (err < 0) + error = xenbus_grant_ring(dev, virt_to_mfn(rxs), &info->rx_ring_ref); + if (error) goto fail; - info->rx_ring_ref = err; #if 0 network_connect(info); #endif - err = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev), - "xn", xn_intr, info, INTR_TYPE_NET | INTR_MPSAFE, NULL); + error = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev), + "xn", xn_intr, info, INTR_TYPE_NET | INTR_MPSAFE, &info->irq); - if (err <= 0) { - xenbus_dev_fatal(dev, err, + if (error) { + xenbus_dev_fatal(dev, error, "bind_evtchn_to_irqhandler failed"); goto fail; } - info->irq = err; show_device(info); - return 0; + return (0); fail: netif_free(info); - return err; + return (error); } /** @@ -1562,18 +1562,18 @@ xn_stop(struct netfront_info *sc) int network_connect(struct netfront_info *np) { - int i, requeue_idx, err; + int i, requeue_idx, error; grant_ref_t ref; netif_rx_request_t *req; u_int feature_rx_copy, feature_rx_flip; - err = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev), - "feature-rx-copy", "%u", &feature_rx_copy); - if (err != 1) + error = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev), + "feature-rx-copy", NULL, "%u", &feature_rx_copy); + if (error) feature_rx_copy = 0; - err = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev), - "feature-rx-flip", "%u", &feature_rx_flip); - if (err != 1) + error = xenbus_scanf(XBT_NIL, xenbus_get_otherend_path(np->xbdev), + "feature-rx-flip", NULL, "%u", &feature_rx_flip); + if (error) feature_rx_flip = 1; /* @@ -1586,9 +1586,9 @@ network_connect(struct netfront_info *np XN_LOCK(np); /* Recovery procedure: */ - err = talk_to_backend(np->xbdev, np); - if (err) - return (err); + error = talk_to_backend(np->xbdev, np); + if (error) + return (error); /* Step 1: Reinitialise variables. */ netif_release_tx_bufs(np); @@ -1796,7 +1796,7 @@ static void netif_disconnect_backend(str #if 0 if (info->irq) - unbind_from_irqhandler(info->irq, info->netdev); + unbind_from_irqhandler(info->irq); #else panic("FIX ME"); #endif Modified: user/dfr/xenhvm/6/sys/dev/xen/xenpci/evtchn.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/xenpci/evtchn.c Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/dev/xen/xenpci/evtchn.c Fri Dec 5 15:00:59 2008 (r185637) @@ -36,20 +36,17 @@ __FBSDID("$FreeBSD: user/dfr/xenhvm/6/sy #include #include #include +#include #include #include #include #include -#include -#include - #include #include -#include -#include -#include -#include +#include +#include +#include #include #include @@ -81,10 +78,11 @@ static struct mtx irq_alloc_lock; #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) -static int alloc_xen_irq(void) +static unsigned int +alloc_xen_irq(void) { static int warned; - int irq; + unsigned int irq; mtx_lock(&irq_alloc_lock); @@ -107,40 +105,46 @@ static int alloc_xen_irq(void) return -ENOSPC; } -static void free_xen_irq(int irq) +static void +free_xen_irq(int irq) { + mtx_lock(&irq_alloc_lock); irq_evtchn[irq].inuse = 0; mtx_unlock(&irq_alloc_lock); } -int irq_to_evtchn_port(int irq) +int +irq_to_evtchn_port(int irq) { + return irq_evtchn[irq].evtchn; } -void mask_evtchn(int port) +void +mask_evtchn(int port) { shared_info_t *s = HYPERVISOR_shared_info; + synch_set_bit(port, &s->evtchn_mask[0]); } -void unmask_evtchn(int port) +void +unmask_evtchn(int port) { evtchn_unmask_t op = { .port = port }; + HYPERVISOR_event_channel_op(EVTCHNOP_unmask, &op); } -int bind_listening_port_to_irqhandler( - unsigned int remote_domain, - const char *devname, - driver_intr_t handler, - void *arg, - unsigned long irqflags, - void **cookiep) +int +bind_listening_port_to_irqhandler(unsigned int remote_domain, + const char *devname, driver_intr_t handler, void *arg, + unsigned long irqflags, unsigned int *irqp) { struct evtchn_alloc_unbound alloc_unbound; - int err, irq; + unsigned int irq; + int error; irq = alloc_xen_irq(); if (irq < 0) @@ -150,12 +154,12 @@ int bind_listening_port_to_irqhandler( alloc_unbound.dom = DOMID_SELF; alloc_unbound.remote_dom = remote_domain; - err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, + error = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &alloc_unbound); - if (err) { + if (error) { mtx_unlock(&irq_evtchn[irq].lock); free_xen_irq(irq); - return err; + return (-error); } irq_evtchn[irq].handler = handler; @@ -169,18 +173,17 @@ int bind_listening_port_to_irqhandler( mtx_unlock(&irq_evtchn[irq].lock); - return irq; + if (irqp) + *irqp = irq; + return (0); } -int bind_caller_port_to_irqhandler( - unsigned int caller_port, - const char *devname, - driver_intr_t handler, - void *arg, - unsigned long irqflags, - void **cookiep) +int +bind_caller_port_to_irqhandler(unsigned int caller_port, + const char *devname, driver_intr_t handler, void *arg, + unsigned long irqflags, unsigned int *irqp) { - int irq; + unsigned int irq; irq = alloc_xen_irq(); if (irq < 0) @@ -199,10 +202,13 @@ int bind_caller_port_to_irqhandler( mtx_unlock(&irq_evtchn[irq].lock); - return irq; + if (irqp) + *irqp = irq; + return (0); } -void unbind_from_irqhandler(unsigned int irq, void *dev_id) +void +unbind_from_irqhandler(unsigned int irq) { int evtchn; @@ -258,6 +264,7 @@ evtchn_interrupt(void *arg) int irq; shared_info_t *s = HYPERVISOR_shared_info; vcpu_info_t *v = &s->vcpu_info[cpu]; + struct pcpu *pc = pcpu_find(cpu); unsigned long l1, l2; v->evtchn_upcall_pending = 0; @@ -271,17 +278,17 @@ evtchn_interrupt(void *arg) l1 = atomic_readandclear_long(&v->evtchn_pending_sel); - l1i = per_cpu(last_processed_l1i, cpu); - l2i = per_cpu(last_processed_l2i, cpu); + l1i = pc->pc_last_processed_l1i; + l2i = pc->pc_last_processed_l2i; while (l1 != 0) { - l1i = (l1i + 1) % BITS_PER_LONG; + l1i = (l1i + 1) % LONG_BIT; masked_l1 = l1 & ((~0UL) << l1i); if (masked_l1 == 0) { /* if we masked out all events, wrap around to the beginning */ - l1i = BITS_PER_LONG - 1; - l2i = BITS_PER_LONG - 1; + l1i = LONG_BIT - 1; + l2i = LONG_BIT - 1; continue; } l1i = __ffs(masked_l1); @@ -289,17 +296,17 @@ evtchn_interrupt(void *arg) do { l2 = active_evtchns(cpu, s, l1i); - l2i = (l2i + 1) % BITS_PER_LONG; + l2i = (l2i + 1) % LONG_BIT; masked_l2 = l2 & ((~0UL) << l2i); if (masked_l2 == 0) { /* if we masked out all events, move on */ - l2i = BITS_PER_LONG - 1; + l2i = LONG_BIT - 1; break; } l2i = __ffs(masked_l2); /* process port */ - port = (l1i * BITS_PER_LONG) + l2i; + port = (l1i * LONG_BIT) + l2i; synch_clear_bit(port, &s->evtchn_pending[0]); irq = evtchn_to_irq[port]; @@ -327,10 +334,10 @@ evtchn_interrupt(void *arg) mtx_unlock(&irq_evtchn[irq].lock); /* if this is the final port processed, we'll pick up here+1 next time */ - per_cpu(last_processed_l1i, cpu) = l1i; - per_cpu(last_processed_l2i, cpu) = l2i; + pc->pc_last_processed_l1i = l1i; + pc->pc_last_processed_l2i = l2i; - } while (l2i != BITS_PER_LONG - 1); + } while (l2i != LONG_BIT - 1); l2 = active_evtchns(cpu, s, l1i); if (l2 == 0) /* we handled all ports, so we can clear the selector bit */ @@ -363,8 +370,8 @@ xenpci_irq_init(device_t device, struct mtx_init(&irq_evtchn[irq].lock, "irq-evtchn", NULL, MTX_DEF); for (cpu = 0; cpu < mp_ncpus; cpu++) { - per_cpu(last_processed_l1i, cpu) = BITS_PER_LONG - 1; - per_cpu(last_processed_l2i, cpu) = BITS_PER_LONG - 1; + pcpu_find(cpu)->pc_last_processed_l1i = LONG_BIT - 1; + pcpu_find(cpu)->pc_last_processed_l2i = LONG_BIT - 1; } error = BUS_SETUP_INTR(device_get_parent(device), device, Modified: user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c Fri Dec 5 15:00:59 2008 (r185637) @@ -41,8 +41,9 @@ __FBSDID("$FreeBSD$"); #include #include -#include -#include +#include +#include +#include #include #include Modified: user/dfr/xenhvm/6/sys/i386/conf/XEN ============================================================================== --- user/dfr/xenhvm/6/sys/i386/conf/XEN Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/i386/conf/XEN Fri Dec 5 15:00:59 2008 (r185637) @@ -61,8 +61,8 @@ options AUDIT # Security event auditi options KDB # Enable kernel debugger support. options DDB # Support DDB. options GDB # Support remote GDB. -options INVARIANTS # Enable calls of extra sanity checking -options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS +#options INVARIANTS # Enable calls of extra sanity checking +#options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS #options WITNESS # Enable checks to detect deadlocks and cycles #options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed Modified: user/dfr/xenhvm/6/sys/i386/i386/genassym.c ============================================================================== --- user/dfr/xenhvm/6/sys/i386/i386/genassym.c Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/i386/i386/genassym.c Fri Dec 5 15:00:59 2008 (r185637) @@ -229,7 +229,7 @@ ASSYM(BUS_SPACE_HANDLE_IAT, offsetof(str #endif #ifdef XEN -#include +#include ASSYM(PC_CR3, offsetof(struct pcpu, pc_cr3)); ASSYM(HYPERVISOR_VIRT_START, __HYPERVISOR_VIRT_START); #endif Modified: user/dfr/xenhvm/6/sys/i386/i386/machdep.c ============================================================================== --- user/dfr/xenhvm/6/sys/i386/i386/machdep.c Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/i386/i386/machdep.c Fri Dec 5 15:00:59 2008 (r185637) @@ -143,11 +143,11 @@ uint32_t arch_i386_xbox_memsize = 0; #ifdef XEN /* XEN includes */ -#include +#include #include #include #include -#include +#include void Xhypervisor_callback(void); void failsafe_callback(void); @@ -2255,13 +2255,16 @@ init386(int first) ssdtosd(&gdt_segs[x], &gdt[x].sd); - printk("gdt=%p\n", gdt); - printk("PTmap=%p\n", PTmap); - printk("addr=%p\n", *vtopte((unsigned long)gdt) & ~PG_RW); + if (bootverbose) { + printf("gdt=%p\n", gdt); + printf("PTmap=%p\n", PTmap); + printf("addr=%#jx\n", (uintmax_t)*vtopte((unsigned long)gdt) & ~PG_RW); + } gdtmachpfn = vtomach(gdt) >> PAGE_SHIFT; PT_SET_MA(gdt, *vtopte((unsigned long)gdt) & ~(PG_RW|PG_M|PG_A)); - PANIC_IF(HYPERVISOR_set_gdt(&gdtmachpfn, 512) != 0); + error = HYPERVISOR_set_gdt(&gdtmachpfn, 512); + KASSERT(error == 0, ("unexpected result from set_gdt")); lgdt(&r_gdt /* unused */); gdtset = 1; Modified: user/dfr/xenhvm/6/sys/i386/i386/sys_machdep.c ============================================================================== --- user/dfr/xenhvm/6/sys/i386/i386/sys_machdep.c Fri Dec 5 14:37:14 2008 (r185636) +++ user/dfr/xenhvm/6/sys/i386/i386/sys_machdep.c Fri Dec 5 15:00:59 2008 (r185637) @@ -59,6 +59,8 @@ __FBSDID("$FreeBSD$"); #include /* for kernel_map */ #ifdef XEN *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 15:26:19 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7006B1065670; Fri, 5 Dec 2008 15:26:19 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5EF848FC1F; Fri, 5 Dec 2008 15:26:19 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB5FQJif058520; Fri, 5 Dec 2008 15:26:19 GMT (envelope-from dfr@svn.freebsd.org) Received: (from dfr@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB5FQJRb058517; Fri, 5 Dec 2008 15:26:19 GMT (envelope-from dfr@svn.freebsd.org) Message-Id: <200812051526.mB5FQJRb058517@svn.freebsd.org> From: Doug Rabson Date: Fri, 5 Dec 2008 15:26:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185638 - in user/dfr/xenhvm/6/sys: dev/xen/xenpci xen X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 15:26:19 -0000 Author: dfr Date: Fri Dec 5 15:26:19 2008 New Revision: 185638 URL: http://svn.freebsd.org/changeset/base/185638 Log: Don't use pmap_mapdev to map HVM memory areas - this is ordinary physical memory and we shouldn't use uncacheable mappings for it. Also, don't leak virtual address space when the grant table size increases. Modified: user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpcivar.h user/dfr/xenhvm/6/sys/xen/gnttab.c Modified: user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c Fri Dec 5 15:00:59 2008 (r185637) +++ user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpci.c Fri Dec 5 15:26:19 2008 (r185638) @@ -51,6 +51,8 @@ __FBSDID("$FreeBSD$"); #include #include +#include +#include #include #include @@ -248,7 +250,8 @@ static int xenpci_attach(device_t device, struct xenpci_softc * scp) { struct xen_add_to_physmap xatp; - u_long shared_pa; + vm_offset_t shared_va; + vm_paddr_t shared_pa; if (xenpci_allocate_resources(device)) goto errexit; @@ -269,7 +272,9 @@ xenpci_attach(device_t device, struct xe if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp)) panic("HYPERVISOR_memory_op failed"); - HYPERVISOR_shared_info = pmap_mapdev(shared_pa, PAGE_SIZE); + shared_va = kmem_alloc_nofault(kernel_map, PAGE_SIZE); + pmap_kenter(shared_va, shared_pa); + HYPERVISOR_shared_info = (void *) shared_va; /* * Hook the irq up to evtchn @@ -379,7 +384,8 @@ xenpci_deallocate_resources(device_t dev } static int -xenpci_alloc_space_int(struct xenpci_softc *scp, size_t sz, u_long *pa) +xenpci_alloc_space_int(struct xenpci_softc *scp, size_t sz, + vm_paddr_t *pa) { if (scp->phys_next + sz > rman_get_end(scp->res_memory)) { @@ -393,7 +399,7 @@ xenpci_alloc_space_int(struct xenpci_sof } int -xenpci_alloc_space(size_t sz, u_long *pa) +xenpci_alloc_space(size_t sz, vm_paddr_t *pa) { device_t device = devclass_get_device(xenpci_devclass, 0); Modified: user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpcivar.h ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpcivar.h Fri Dec 5 15:00:59 2008 (r185637) +++ user/dfr/xenhvm/6/sys/dev/xen/xenpci/xenpcivar.h Fri Dec 5 15:26:19 2008 (r185638) @@ -36,8 +36,8 @@ struct xenpci_softc { struct resource* res_irq; /* Resource for irq range. */ void *intr_cookie; - u_long phys_next; /* next page from mem range */ + vm_paddr_t phys_next; /* next page from mem range */ }; extern int xenpci_irq_init(device_t device, struct xenpci_softc *scp); -extern int xenpci_alloc_space(size_t sz, u_long *pa); +extern int xenpci_alloc_space(size_t sz, vm_paddr_t *pa); Modified: user/dfr/xenhvm/6/sys/xen/gnttab.c ============================================================================== --- user/dfr/xenhvm/6/sys/xen/gnttab.c Fri Dec 5 15:00:59 2008 (r185637) +++ user/dfr/xenhvm/6/sys/xen/gnttab.c Fri Dec 5 15:26:19 2008 (r185638) @@ -529,7 +529,7 @@ gnttab_suspend(void) #include -static unsigned long resume_frames; +static vm_paddr_t resume_frames; static int gnttab_map(unsigned int start_idx, unsigned int end_idx) { @@ -549,7 +549,19 @@ static int gnttab_map(unsigned int start panic("HYPERVISOR_memory_op failed to map gnttab"); } while (i-- > start_idx); - shared = pmap_mapdev(resume_frames, (end_idx + 1) * PAGE_SIZE); + if (shared == NULL) { + vm_offset_t area; + + area = kmem_alloc_nofault(kernel_map, + PAGE_SIZE * max_nr_grant_frames()); + KASSERT(area, ("can't allocate VM space for grant table")); + shared = (grant_entry_t *)area; + } + + for (i = start_idx; i <= end_idx; i++) { + pmap_kenter((vm_offset_t) shared + i * PAGE_SIZE, + resume_frames + i * PAGE_SIZE); + } return (0); } From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 20:40:03 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 191F3106568A; Fri, 5 Dec 2008 20:40:03 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BDEBF8FC08; Fri, 5 Dec 2008 20:40:02 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB5Ke23h072430; Fri, 5 Dec 2008 20:40:02 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB5Ke2nR072426; Fri, 5 Dec 2008 20:40:02 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812052040.mB5Ke2nR072426@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 20:40:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185646 - in user/kmacy/HEAD_fast_multi_xmit: cddl/contrib/opensolaris/cmd/zfs lib/libpmc lib/libutil sys/i386/include X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 20:40:03 -0000 Author: kmacy Date: Fri Dec 5 20:40:02 2008 New Revision: 185646 URL: http://svn.freebsd.org/changeset/base/185646 Log: Make world build Modified: user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/libpmc.c user/kmacy/HEAD_fast_multi_xmit/lib/libutil/pty.c user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/pmc_mdep.h Modified: user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Fri Dec 5 19:53:12 2008 (r185645) +++ user/kmacy/HEAD_fast_multi_xmit/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Fri Dec 5 20:40:02 2008 (r185646) @@ -2251,7 +2251,7 @@ zfs_do_set(int argc, char **argv) usage(B_FALSE); } - ret = zfs_for_each(argc - 2, argv + 2, NULL, + ret = zfs_for_each(argc - 2, argv + 2, 0, ZFS_TYPE_DATASET, NULL, NULL, set_callback, &cb); return (ret); Modified: user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/libpmc.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/libpmc.c Fri Dec 5 19:53:12 2008 (r185645) +++ user/kmacy/HEAD_fast_multi_xmit/lib/libpmc/libpmc.c Fri Dec 5 20:40:02 2008 (r185646) @@ -59,7 +59,7 @@ static int k8_allocate_pmc(enum pmc_even static int p4_allocate_pmc(enum pmc_event _pe, char *_ctrspec, struct pmc_op_pmcallocate *_pmc_config); #endif -#if defined(__i386__) +#if defined(__i386__) static int p5_allocate_pmc(enum pmc_event _pe, char *_ctrspec, struct pmc_op_pmcallocate *_pmc_config); static int p6_allocate_pmc(enum pmc_event _pe, char *_ctrspec, @@ -68,8 +68,6 @@ static int p6_allocate_pmc(enum pmc_even #if defined(__amd64__) || defined(__i386__) static int tsc_allocate_pmc(enum pmc_event _pe, char *_ctrspec, struct pmc_op_pmcallocate *_pmc_config); -static int iap2_allocate_pmc(enum pmc_event pe, char *ctrspec, - struct pmc_op_pmcallocate *pmc_config); #endif #define PMC_CALL(cmd, params) \ @@ -172,7 +170,6 @@ PMC_MDEP_TABLE(k8, K8, PMC_CLASS_TSC); PMC_MDEP_TABLE(p4, P4, PMC_CLASS_TSC); PMC_MDEP_TABLE(p5, P5, PMC_CLASS_TSC); PMC_MDEP_TABLE(p6, P6, PMC_CLASS_TSC); -PMC_MDEP_TABLE(iap2, IAP2, PMC_CLASS_TSC); static const struct pmc_event_descr tsc_event_table[] = { @@ -210,9 +207,6 @@ PMC_CLASS_TABLE_DESC(p5, P5, p5, p5); PMC_CLASS_TABLE_DESC(p6, P6, p6, p6); #endif #if defined(__i386__) || defined(__amd64__) -#if 0 - PMC_CLASS_TABLE_DESC(iap2, IAP2), -#endif PMC_CLASS_TABLE_DESC(tsc, TSC, tsc, tsc); #endif @@ -1621,7 +1615,7 @@ p4_allocate_pmc(enum pmc_event pe, char #endif -#if defined(__i386__) +#if defined(__i386__) /* * Pentium style PMCs @@ -1646,23 +1640,20 @@ p5_allocate_pmc(enum pmc_event pe, char return (-1 || pe || ctrspec || pmc_config); /* shut up gcc */ } -#endif /* * Pentium Pro style PMCs. These PMCs are found in Pentium II, Pentium III, * and Pentium M CPUs. */ -#if defined(__i386__) || defined(__amd64__) - -static struct pmc_event_alias iap2_aliases[] = { - EV_ALIAS("branches", "iap2-br-inst-retired-any"), - EV_ALIAS("branch-mispredicts", "iap2-br-inst-retired-mispred"), +static struct pmc_event_alias p6_aliases[] = { + EV_ALIAS("branches", "p6-br-inst-retired"), + EV_ALIAS("branch-mispredicts", "p6-br-miss-pred-retired"), EV_ALIAS("cycles", "tsc"), - EV_ALIAS("dc-misses", "iap2-l1d-pend-miss"), - EV_ALIAS("ic-misses", "iap2-l1i-misses"), - EV_ALIAS("instructions", "iap2-instructions-retired"), - EV_ALIAS("interrupts", "iap2-hw-int-rcv"), - EV_ALIAS("unhalted-cycles", "iap2-unhalted-core-cycles"), + EV_ALIAS("dc-misses", "p6-dcu-lines-in"), + EV_ALIAS("ic-misses", "p6-ifu-fetch-miss"), + EV_ALIAS("instructions", "p6-inst-retired"), + EV_ALIAS("interrupts", "p6-hw-int-rx"), + EV_ALIAS("unhalted-cycles", "p6-cpu-clk-unhalted"), EV_ALIAS(NULL, NULL) }; @@ -1672,12 +1663,6 @@ static struct pmc_event_alias iap2_alias #define P6_KW_OS "os" #define P6_KW_UMASK "umask" #define P6_KW_USR "usr" -#define IPM_KW_CMASK P6_KW_CMASK -#define IPM_KW_EDGE P6_KW_EDGE -#define IPM_KW_INV P6_KW_INV -#define IPM_KW_OS P6_KW_OS -#define IPM_KW_UMASK P6_KW_UMASK -#define IPM_KW_USR P6_KW_USR static struct pmc_masks p6_mask_mesi[] = { PMCMASK(m, 0x01), @@ -1686,20 +1671,6 @@ static struct pmc_masks p6_mask_mesi[] = PMCMASK(i, 0x08), NULLMASK }; -#endif - -#if defined(__i386__) -static struct pmc_event_alias p6_aliases[] = { - EV_ALIAS("branches", "p6-br-inst-retired"), - EV_ALIAS("branch-mispredicts", "p6-br-miss-pred-retired"), - EV_ALIAS("cycles", "tsc"), - EV_ALIAS("dc-misses", "p6-dcu-lines-in"), - EV_ALIAS("ic-misses", "p6-ifu-fetch-miss"), - EV_ALIAS("instructions", "p6-inst-retired"), - EV_ALIAS("interrupts", "p6-hw-int-rx"), - EV_ALIAS("unhalted-cycles", "p6-cpu-clk-unhalted"), - EV_ALIAS(NULL, NULL) -}; static struct pmc_masks p6_mask_mesihw[] = { PMCMASK(m, 0x01), @@ -1792,7 +1763,6 @@ static struct pmc_masks p6_mask_esscir[] NULLMASK }; - /* P6 event parser */ static int p6_allocate_pmc(enum pmc_event pe, char *ctrspec, @@ -1992,246 +1962,7 @@ p6_allocate_pmc(enum pmc_event pe, char #endif - #if defined(__i386__) || defined(__amd64__) - -#define ipm_mask_mesi p6_mask_mesi -#define ipm_default_mask_mesi 0x0F /* mesi */ - -static struct pmc_masks ipm_mask_cores[] = { - PMCMASK(cself, 0x40), - PMCMASK(cany, 0xC0), - NULLMASK -}; -#define ipm_default_mask_cores 0x40 /* this core */ - -static struct pmc_masks ipm_mask_agents[] = { - PMCMASK(aself, 0x00), - PMCMASK(aany, 0x20), - NULLMASK -}; -#define ipm_default_mask_agents 0x00 /* this agent */ - -static struct pmc_masks ipm_mask_cores_and_agents[] = { - PMCMASK(cself, 0x40), - PMCMASK(cany, 0xC0), - PMCMASK(aself, 0x00), - PMCMASK(aany, 0x20), - NULLMASK -}; -#define ipm_default_mask_cores_and_agents 0x40 /* this core,this agent */ - -static struct pmc_masks ipm_mask_cores_and_hw[] = { - PMCMASK(cself, 0x40), - PMCMASK(cany, 0xC0), - PMCMASK(nonhw, 0x00), - PMCMASK(hw, 0x10), - PMCMASK(both, 0x30), - NULLMASK -}; -#define ipm_default_mask_cores_and_hw 0x70 /* this core,both */ - -static struct pmc_masks ipm_mask_cores_and_mesi[] = { - PMCMASK(cself, 0x40), - PMCMASK(cany, 0xC0), - PMCMASK(m, 0x01), - PMCMASK(e, 0x02), - PMCMASK(s, 0x04), - PMCMASK(i, 0x08), - NULLMASK -}; -#define ipm_default_mask_cores_and_mesi 0x4F /* this core,mesi */ - -static struct pmc_masks ipm_mask_cores_and_hw_and_mesi[] = { - PMCMASK(cself, 0x40), - PMCMASK(cany, 0xC0), - PMCMASK(nonhw, 0x00), - PMCMASK(hw, 0x10), - PMCMASK(both, 0x30), - PMCMASK(m, 0x01), - PMCMASK(e, 0x02), - PMCMASK(s, 0x04), - PMCMASK(i, 0x08), - NULLMASK -}; -#define ipm_default_mask_cores_and_hw_and_mesi 0x7F /* this core,both,mesi */ - -static struct pmc_masks ipm_mask_cores_and_snoop_response[] = { - PMCMASK(cself, 0x40), - PMCMASK(cany, 0xC0), - PMCMASK(clean, 0x01), - PMCMASK(hit, 0x02), - PMCMASK(hitm, 0x08), - NULLMASK -}; -#define ipm_default_mask_cores_and_snoop_response 0x41 /*this core,clean */ - -static struct pmc_masks ipm_mask_cores_and_snoop_type[] = { - PMCMASK(cself, 0x40), - PMCMASK(cany, 0xC0), - PMCMASK(cmp2s, 0x01), - PMCMASK(cmp2i, 0x02), - NULLMASK -}; -#define ipm_default_mask_cores_and_snoop_type 0x41 /* this core,cmp2s */ - -/* - * Intel Performance Monitoring PMCs event parser - */ -static int -iap2_allocate_pmc(enum pmc_event pe, char *ctrspec, - struct pmc_op_pmcallocate *pmc_config) -{ - char *e, *p, *q; - uint32_t evmask, default_mask = 0; - int count, n, masks = 0; - const struct pmc_masks *pmask; - - pmc_config->pm_caps |= PMC_CAP_READ; - - if (pe == PMC_EV_TSC_TSC) { - if (ctrspec && *ctrspec != '\0') - return -1; - return 0; - } - - pmc_config->pm_caps |= PMC_CAP_WRITE; - - if (pe == PMC_EV_IAF_INSTRUCTIONS_RETIRED || - pe == PMC_EV_IAF_UNHALTED_CORE_CYCLES || - pe == PMC_EV_IAF_UNHALTED_REFERENCE_CYCLES) { - while ((p = strsep(&ctrspec, ",")) != NULL) { - if (KWMATCH(p, IPM_KW_OS)) { - pmc_config->pm_caps |= PMC_CAP_SYSTEM; - } else if (KWMATCH(p, IPM_KW_USR)) { - pmc_config->pm_caps |= PMC_CAP_USER; - } else - return -1; - } - pmc_config->pm_class = PMC_CLASS_IAF; - return 0; - } - - evmask = 0; - -#define IPMMASKSET(M) \ - do { \ - pmask = ipm_mask_ ## M; \ - default_mask = ipm_default_mask_ ## M; \ - } while(0) - - switch(pe) { - case PMC_EV_IAP2_L2_ADS: case PMC_EV_IAP2_L2_DBUS_BUSY_RD: - case PMC_EV_IAP2_L2_NO_REQ: case PMC_EV_IAP2_BUS_DATA_RCV: - case PMC_EV_IAP2_BUSQ_EMPTY: case PMC_EV_IAP2_BUS_IO_WAIT: - case PMC_EV_IAP2_L2_M_LINES_IN: - masks = 1; - IPMMASKSET(cores); - break; - - case PMC_EV_IAP2_BUS_HIT_DRV: case PMC_EV_IAP2_BUS_HITM_DRV: - case PMC_EV_IAP2_BUS_BNR_DRV: case PMC_EV_IAP2_BUS_DRDY_CLOCKS: - masks = 1; - IPMMASKSET(agents); - break; - - case PMC_EV_IAP2_L1D_CACHE_LD: case PMC_EV_IAP2_L1D_CACHE_ST: - case PMC_EV_IAP2_L1D_CACHE_LOCK: - masks = 1; - IPMMASKSET(mesi); - break; - - case PMC_EV_IAP2_L2_LINES_IN: case PMC_EV_IAP2_L2_LINES_OUT: - case PMC_EV_IAP2_L2_M_LINES_OUT: - masks = 2; - IPMMASKSET(cores_and_hw); - break; - - case PMC_EV_IAP2_BUS_TRANS_ANY: case PMC_EV_IAP2_SNOOP_STALL_DRV: - case PMC_EV_IAP2_BUS_TRANS_MEM: case PMC_EV_IAP2_BUS_TRANS_BURST: - case PMC_EV_IAP2_BUS_TRANS_DEF: case PMC_EV_IAP2_BUS_TRANS_IO: - case PMC_EV_IAP2_BUS_TRANS_P: case PMC_EV_IAP2_BUS_TRANS_PWR: - case PMC_EV_IAP2_BUS_TRANS_WB: case PMC_EV_IAP2_BUS_TRANS_INVAL: - case PMC_EV_IAP2_BUS_TRANS_RFO: case PMC_EV_IAP2_BUS_TRANS_IFETCH: - case PMC_EV_IAP2_BUS_TRANS_BRD: case PMC_EV_IAP2_BUS_LOCK_CLOCKS: - case PMC_EV_IAP2_BUS_REQUEST_OUTSTANDING: - masks = 2; - IPMMASKSET(cores_and_agents); - break; - - case PMC_EV_IAP2_L2_IFETCH: case PMC_EV_IAP2_L2_ST: - case PMC_EV_IAP2_L2_LOCK: - masks = 2; - IPMMASKSET(cores_and_mesi); - break; - - case PMC_EV_IAP2_EXT_SNOOP: - masks = 2; - IPMMASKSET(cores_and_snoop_response); - break; - - case PMC_EV_IAP2_CMP_SNOOP: - masks = 2; - IPMMASKSET(cores_and_snoop_type); - break; - - case PMC_EV_IAP2_L2_LD: case PMC_EV_IAP2_L2_RQSTS: - case PMC_EV_IAP2_L2_REJECT_BUSQ: - masks = 3; - IPMMASKSET(cores_and_hw_and_mesi); - break; - - default: - pmask = NULL; - break; - } - - /* Parse additional modifiers if present */ - while ((p = strsep(&ctrspec, ",")) != NULL) { - if (KWPREFIXMATCH(p, IPM_KW_CMASK "=")) { - q = strchr(p, '='); - if (*++q == '\0') /* skip '=' */ - return -1; - count = strtol(q, &e, 0); - if (e == q || *e != '\0') - return -1; - pmc_config->pm_caps |= PMC_CAP_THRESHOLD; -#if 0 - pmc_config->pm_md.pm_ppro.pm_ppro_config |= - P6_EVSEL_TO_CMASK(count); -#endif - } else if (KWMATCH(p, IPM_KW_EDGE)) { - pmc_config->pm_caps |= PMC_CAP_EDGE; - } else if (KWMATCH(p, IPM_KW_INV)) { - pmc_config->pm_caps |= PMC_CAP_INVERT; - } else if (KWMATCH(p, IPM_KW_OS)) { - pmc_config->pm_caps |= PMC_CAP_SYSTEM; - } else if (KWPREFIXMATCH(p, IPM_KW_UMASK "=")) { - evmask = 0; - if ((n = pmc_parse_mask(pmask, p, &evmask)) < 0) - return -1; - if (n > masks) - return -1; - pmc_config->pm_caps |= PMC_CAP_QUALIFIER; - } else if (KWMATCH(p, P6_KW_USR)) { - pmc_config->pm_caps |= PMC_CAP_USER; - } else - return -1; - } - - if (evmask == 0 && pmask) { - evmask = default_mask; - pmc_config->pm_caps |= PMC_CAP_QUALIFIER; - } - - if (pmc_config->pm_caps & PMC_CAP_QUALIFIER) - pmc_config->pm_md.pm_ipm.pm_ipm_config |= - IPM_EVSEL_TO_UMASK(evmask); - - pmc_config->pm_class = PMC_CLASS_IAP2; - return 0; -} - static int tsc_allocate_pmc(enum pmc_event pe, char *ctrspec, struct pmc_op_pmcallocate *pmc_config) @@ -2573,10 +2304,6 @@ pmc_event_names_of_class(enum pmc_class ev = p6_event_table; count = PMC_EVENT_TABLE_SIZE(p6); break; - case PMC_CLASS_IAP2: - ev = iap2_event_table; - count = PMC_EVENT_TABLE_SIZE(iap2); - break; default: errno = EINVAL; return (-1); @@ -2739,10 +2466,6 @@ pmc_init(void) PMC_MDEP_INIT(p4); pmc_class_table[n] = &p4_class_table_descr; break; - case PMC_CPU_INTEL_CORE: - case PMC_CPU_INTEL_CORE2: - PMC_MDEP_INIT(iap2); - break; #endif @@ -2858,9 +2581,6 @@ _pmc_name_of_event(enum pmc_event pe, en } else if (pe == PMC_EV_TSC_TSC) { ev = tsc_event_table; evfence = tsc_event_table + PMC_EVENT_TABLE_SIZE(tsc); - } else if (pe >= PMC_EV_IAP1_FIRST && pe <= PMC_EV_IAP2_LAST) { - ev = iap2_event_table; - evfence = iap2_event_table + PMC_EVENT_TABLE_SIZE(iap2); } for (; ev != evfence; ev++) Modified: user/kmacy/HEAD_fast_multi_xmit/lib/libutil/pty.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/lib/libutil/pty.c Fri Dec 5 19:53:12 2008 (r185645) +++ user/kmacy/HEAD_fast_multi_xmit/lib/libutil/pty.c Fri Dec 5 20:40:02 2008 (r185646) @@ -40,6 +40,7 @@ static char sccsid[] = "@(#)pty.c 8.3 (B #include #include +#include #include #include #include Modified: user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/pmc_mdep.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/pmc_mdep.h Fri Dec 5 19:53:12 2008 (r185645) +++ user/kmacy/HEAD_fast_multi_xmit/sys/i386/include/pmc_mdep.h Fri Dec 5 20:40:02 2008 (r185646) @@ -83,8 +83,7 @@ union pmc_md_op_pmcallocate { struct pmc_md_p4_op_pmcallocate pm_p4; struct pmc_md_pentium_op_pmcallocate pm_pentium; struct pmc_md_ppro_op_pmcallocate pm_ppro; - struct pmc_md_ipm_op_pmcallocate pm_ipm; - uint32_t __pad[7]; + uint64_t __pad[4]; }; /* Logging */ @@ -101,7 +100,6 @@ union pmc_md_pmc { struct pmc_md_p4_pmc pm_p4; struct pmc_md_pentium_pmc pm_pentium; struct pmc_md_ppro_pmc pm_ppro; - struct pmc_md_ipm_pmc pm_ipm; }; struct pmc; From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 21:16:13 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 93E4B1065673; Fri, 5 Dec 2008 21:16:13 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 82FC78FC3F; Fri, 5 Dec 2008 21:16:13 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB5LGDbe073311; Fri, 5 Dec 2008 21:16:13 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB5LGDDr073309; Fri, 5 Dec 2008 21:16:13 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812052116.mB5LGDDr073309@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 21:16:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185649 - in user/kmacy/HEAD_fast_multi_xmit/sys: net sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 21:16:13 -0000 Author: kmacy Date: Fri Dec 5 21:16:13 2008 New Revision: 185649 URL: http://svn.freebsd.org/changeset/base/185649 Log: add inline helper functions for buf_ring enqueue and free Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h Fri Dec 5 21:14:30 2008 (r185648) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/if_var.h Fri Dec 5 21:16:13 2008 (r185649) @@ -82,6 +82,7 @@ struct ifvlantrunk; #include /* XXX */ #include /* XXX */ #include +#include #define IF_DUNIT_NONE -1 @@ -540,6 +541,34 @@ do { \ IFQ_PURGE(ifq); \ } while (0) + +static __inline int +drbr_enqueue(struct buf_ring *br, struct mbuf *m) +{ + int error = 0; + + if ((error = buf_ring_enqueue(br, m)) == ENOBUFS) { + br->br_drops++; + m_freem(m); + } + + return (error); +} + +static __inline void +drbr_free(struct buf_ring *br, struct malloc_type *type) +{ + struct mbuf *m; + + while ((m = buf_ring_dequeue_sc(br)) != NULL) + m_freem(m); + + buf_ring_free(br, type); +} + + + + /* * 72 was chosen below because it is the size of a TCP/IP * header (40) + the minimum mss (32). Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h Fri Dec 5 21:14:30 2008 (r185648) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h Fri Dec 5 21:16:13 2008 (r185649) @@ -48,10 +48,11 @@ struct buf_ring { volatile uint32_t br_prod_tail; int br_prod_size; int br_prod_mask; + uint64_t br_drops; /* * Pad out to next L2 cache line */ - uint64_t _pad0[14]; + uint64_t _pad0[13]; volatile uint32_t br_cons_head; volatile uint32_t br_cons_tail; From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 21:17:19 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 653591065675; Fri, 5 Dec 2008 21:17:19 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5544C8FC31; Fri, 5 Dec 2008 21:17:19 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB5LHJh5073368; Fri, 5 Dec 2008 21:17:19 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB5LHJjE073367; Fri, 5 Dec 2008 21:17:19 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812052117.mB5LHJjE073367@svn.freebsd.org> From: Kip Macy Date: Fri, 5 Dec 2008 21:17:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185650 - user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 21:17:19 -0000 Author: kmacy Date: Fri Dec 5 21:17:19 2008 New Revision: 185650 URL: http://svn.freebsd.org/changeset/base/185650 Log: - convert to drbr helper functions - free buf_ring on detach - pass mbuf to bpf in direct transmit case pointed out by: Gallatin Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Fri Dec 5 21:16:13 2008 (r185649) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Fri Dec 5 21:17:19 2008 (r185650) @@ -889,6 +889,7 @@ em_detach(device_t dev) em_free_pci_resources(adapter); bus_generic_detach(dev); if_free(ifp); + drbr_free(adapter->br, M_DEVBUF); em_free_transmit_structures(adapter); em_free_receive_structures(adapter); @@ -995,23 +996,22 @@ em_transmit_locked(struct ifnet *ifp, st if (((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING) || (!adapter->link_active)) { - if ((error = buf_ring_enqueue(adapter->br, m))) - m_freem(m); + error = drbr_enqueue(adapter->br, m); return (error); } if (buf_ring_empty(adapter->br) && (adapter->num_tx_desc_avail > EM_TX_OP_THRESHOLD)) { - if (em_xmit(adapter, &m)) - if (m && (error = buf_ring_enqueue(adapter->br, m)) != 0) { - m_freem(m); + if (em_xmit(adapter, &m)) { + if (m && (error = drbr_enqueue(adapter->br, m)) != 0) { return (error); } - - } else if ((error = buf_ring_enqueue(adapter->br, m)) != 0) { - m_freem(m); + } else{ + /* Send a copy of the frame to the BPF listener */ + ETHER_BPF_MTAP(ifp, m); + } + } else if ((error = drbr_enqueue(adapter->br, m)) != 0) return (error); - } if (!buf_ring_empty(adapter->br)) em_start_locked(ifp); @@ -1122,10 +1122,8 @@ em_transmit(struct ifnet *ifp, struct mb if (ifp->if_drv_flags & IFF_DRV_RUNNING) error = em_transmit_locked(ifp, m); EM_TX_UNLOCK(adapter); - } else { - if ((error = buf_ring_enqueue(adapter->br, m))) - m_freem(m); - } + } else + error = drbr_enqueue(adapter->br, m); return (error); } From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 22:11:55 2008 Return-Path: Delivered-To: svn-src-user@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3338E1065670; Fri, 5 Dec 2008 22:11:55 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.freebsd.org (Postfix) with ESMTP id E795C8FC08; Fri, 5 Dec 2008 22:11:54 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from [172.31.193.10] (cpe-075-177-134-250.nc.res.rr.com [75.177.134.250]) (authenticated bits=0) by duke.cs.duke.edu (8.14.2/8.14.2) with ESMTP id mB5MBsCT014344 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 5 Dec 2008 17:11:54 -0500 (EST) X-DKIM: Sendmail DKIM Filter v2.5.3 duke.cs.duke.edu mB5MBsCT014344 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=cs.duke.edu; s=mail; t=1228515114; bh=+eR2tt8X+leb9qzs/LinMMna0vP4RrFkKQEFSOSfFek=; h=Message-ID:Date:From:MIME-Version:To:CC:Subject:References: In-Reply-To:Content-Type:Content-Transfer-Encoding; b=qPpPHTcshIEF mw8LD3rZO/Qp7NDKGXcPYqpwZWZDrtr4tUHCZptC50GME5uJvFKFBuRrdiN/7Ni+E3/ LODwep+4ixfbMq7L4LTni8wD2EYN+i/ZyVthpJ5C3Yjy+k9qxrb2nTKAtzb6WmG+Q+G YOGE9Pw0GbCw9TSk4iu4qXb9c= Message-ID: <4939A723.80601@cs.duke.edu> Date: Fri, 05 Dec 2008 17:11:47 -0500 From: Andrew Gallatin User-Agent: Thunderbird 2.0.0.16 (X11/20080724) MIME-Version: 1.0 To: Kip Macy References: <200812052116.mB5LGDDr073309@svn.freebsd.org> In-Reply-To: <200812052116.mB5LGDDr073309@svn.freebsd.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: src-committers@FreeBSD.org, svn-src-user@FreeBSD.org Subject: Re: svn commit: r185649 - in user/kmacy/HEAD_fast_multi_xmit/sys: net sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 22:11:55 -0000 Kip Macy wrote: > Log: > add inline helper functions for buf_ring enqueue and free > + uint64_t br_drops; Do you have any way to make these drops visible in netstat -id, or should driver writers regularly mirror br_drops into their ifp->if_snd.ifq_drops? Drew From owner-svn-src-user@FreeBSD.ORG Fri Dec 5 22:18:50 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A3EBC1065670 for ; Fri, 5 Dec 2008 22:18:50 +0000 (UTC) (envelope-from mat.macy@gmail.com) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.226]) by mx1.freebsd.org (Postfix) with ESMTP id 6EAFF8FC14 for ; Fri, 5 Dec 2008 22:18:50 +0000 (UTC) (envelope-from mat.macy@gmail.com) Received: by rv-out-0506.google.com with SMTP id b25so187198rvf.43 for ; Fri, 05 Dec 2008 14:18:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:sender :to:subject:cc:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references :x-google-sender-auth; bh=Del/AFWM5iIlHdaaMVE5N9jHON/47ZXbrQkFTeNWySI=; b=mZE5VeWUiL2oGfBHRVo7lLwjjvQV1b9RYgJCI5g7SFnDM8AxHxnla2/6Yh/CpHtacQ YqjraG4EAJ+nUejDkjha/e34VUjn2fbZhWo9DqAAm8qLWlhx/Gpk1R0Wb2mKhkY5wkah 0HnJHtNu2EY3NjS2dGjNvoQXkDWBYE4BhtlK4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references:x-google-sender-auth; b=X8Qz074jCvnu4ELBVRRjR8EyIki3eYJEMOqYMAhog9okR2/1lpwhXQSDvUbCj+0sFQ 33UCLye7oK8WWFOYjJzGU9H+RB75TFdewshL5JextYCONW5e92Xqu6FLyRNgtCWRCWrS mQzLTIdnIYSRSdT/Y9ctG3YSvbiVRoQ1XotK4= Received: by 10.141.197.21 with SMTP id z21mr205173rvp.267.1228515529784; Fri, 05 Dec 2008 14:18:49 -0800 (PST) Received: by 10.141.142.3 with HTTP; Fri, 5 Dec 2008 14:18:49 -0800 (PST) Message-ID: <3c1674c90812051418q1a81ca0an970d410dd034447c@mail.gmail.com> Date: Fri, 5 Dec 2008 14:18:49 -0800 From: "Kip Macy" Sender: mat.macy@gmail.com To: "Andrew Gallatin" In-Reply-To: <4939A723.80601@cs.duke.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <200812052116.mB5LGDDr073309@svn.freebsd.org> <4939A723.80601@cs.duke.edu> X-Google-Sender-Auth: cee8849e52b64381 Cc: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: Re: svn commit: r185649 - in user/kmacy/HEAD_fast_multi_xmit/sys: net sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 22:18:50 -0000 On Fri, Dec 5, 2008 at 2:11 PM, Andrew Gallatin wrote: > Kip Macy wrote: > >> Log: >> add inline helper functions for buf_ring enqueue and free > >> + uint64_t br_drops; > > Do you have any way to make these drops visible in netstat -id, > or should driver writers regularly mirror br_drops > into their ifp->if_snd.ifq_drops? There will be an arbitrary number of buf_rings, so I think that br_drops should be mirrored in to ifq_drops in the drivers callout. Incrementing a shared counter on multiple cpus works but is not best practice from a cache standpoint. Thanks, Kip From owner-svn-src-user@FreeBSD.ORG Sat Dec 6 05:41:25 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B0E731065672; Sat, 6 Dec 2008 05:41:25 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9F4778FC13; Sat, 6 Dec 2008 05:41:25 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB65fPMq083974; Sat, 6 Dec 2008 05:41:25 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB65fPk8083972; Sat, 6 Dec 2008 05:41:25 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812060541.mB65fPk8083972@svn.freebsd.org> From: Kip Macy Date: Sat, 6 Dec 2008 05:41:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185663 - in user/kmacy/HEAD_fast_multi_xmit/sys: kern sys X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Dec 2008 05:41:25 -0000 Author: kmacy Date: Sat Dec 6 05:41:25 2008 New Revision: 185663 URL: http://svn.freebsd.org/changeset/base/185663 Log: revert local changes Modified: user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_mbuf.c user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h Modified: user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_mbuf.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_mbuf.c Sat Dec 6 02:10:53 2008 (r185662) +++ user/kmacy/HEAD_fast_multi_xmit/sys/kern/kern_mbuf.c Sat Dec 6 05:41:25 2008 (r185663) @@ -208,7 +208,6 @@ SYSCTL_STRUCT(_kern_ipc, OID_AUTO, mbsta */ uma_zone_t zone_mbuf; uma_zone_t zone_clust; -uma_zone_t zone_iclust; uma_zone_t zone_pack; uma_zone_t zone_jumbop; uma_zone_t zone_jumbo9; @@ -229,10 +228,9 @@ static void mb_zfini_pack(void *, int); static void mb_reclaim(void *); static void mbuf_init(void *); - static void *mbuf_jumbo_alloc(uma_zone_t, int, u_int8_t *, int); static void mbuf_jumbo_free(void *, int, u_int8_t); -static void *mb_alloc_iclust(uma_zone_t, int, u_int8_t *, int); + static MALLOC_DEFINE(M_JUMBOFRAME, "jumboframes", "mbuf jumbo frame buffers"); /* Ensure that MSIZE doesn't break dtom() - it must be a power of 2 */ @@ -258,14 +256,6 @@ mbuf_init(void *dummy) #endif MSIZE - 1, UMA_ZONE_MAXBUCKET); - zone_iclust = uma_zcreate("mbuf_icluster", MICLBYTES, - NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, - UMA_ZONE_MAXBUCKET | UMA_ZONE_STRIPEBUCKET | UMA_ZONE_NOFREE); - uma_zone_set_ppera(zone_iclust, - (MICLBYTES * (PAGE_SIZE / 64)) / PAGE_SIZE); - uma_zone_set_allocf(zone_iclust, mb_alloc_iclust); - uma_prealloc(zone_iclust, 8192); - zone_clust = uma_zcreate(MBUF_CLUSTER_MEM_NAME, MCLBYTES, mb_ctor_clust, mb_dtor_clust, #ifdef INVARIANTS @@ -427,7 +417,6 @@ mb_ctor_mbuf(void *mem, int size, void * m->m_pkthdr.tso_segsz = 0; m->m_pkthdr.ether_vtag = 0; SLIST_INIT(&m->m_pkthdr.tags); - m->m_pkthdr.flowid = 0; #ifdef MAC /* If the label init fails, fail the alloc */ error = mac_mbuf_init(m, how); @@ -557,66 +546,6 @@ mb_ctor_clust(void *mem, int size, void return (0); } -static MALLOC_DEFINE(M_ICLUST, "iclust", "inline clusters"); - -void * -mb_alloc_iclust(uma_zone_t zone, int bytes, u_int8_t *flags, int wait) -{ - - *flags = UMA_SLAB_PRIV; - return contigmalloc(bytes, M_ICLUST, 0, 0, ~0, 1, 0); -} - -void -mb_iclust_free(void *mem, void *arg) -{ - - uma_zfree(zone_iclust, arg); -} - -int -mb_iclust_init(struct mbuf *m, short type, int flags) -{ - int *ref; - - /* - * The mbuf is initialized later. The caller has the - * responsibility to set up any MAC labels too. - */ - if (type == MT_NOINIT) - return (0); - /* - * Initialize header contents. - */ - m->m_next = NULL; - m->m_nextpkt = NULL; - m->m_data = m_icldata(m); - m->m_len = 0; - m->m_flags = flags | M_EXT | M_NOFREE; - m->m_type = type; - if (flags & M_PKTHDR) { - memset(&m->m_pkthdr, 0, sizeof(m->m_pkthdr)); -#ifdef MAC - int error; - /* If the label init fails, fail the alloc */ - error = mac_init_mbuf(m, how); - if (error) - return (error); -#endif - } - m->m_ext.ext_buf = m_icldata(m); - m->m_ext.ext_free = mb_iclust_free; - m->m_ext.ext_arg1 = m; - m->m_ext.ext_size = MCLBYTES; - m->m_ext.ext_type = EXT_EXTREF; - ref = (int *)((uintptr_t)m + (MICLHLEN - sizeof(int))); - m->m_ext.ref_cnt = ref; - *ref = 1; - - return (0); -} - - /* * The Mbuf Cluster zone destructor. */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h Sat Dec 6 02:10:53 2008 (r185662) +++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h Sat Dec 6 05:41:25 2008 (r185663) @@ -44,8 +44,6 @@ #endif #endif -#define M_DPAD_LEN 64 - /* * Mbufs are of a single size, MSIZE (sys/param.h), which includes overhead. * An mbuf may add a single "mbuf cluster" of size MCLBYTES (also in @@ -59,9 +57,6 @@ #define MHLEN (MLEN - sizeof(struct pkthdr)) /* data len w/pkthdr */ #define MINCLSIZE (MHLEN + 1) /* smallest amount to put in cluster */ #define M_MAXCOMPRESS (MHLEN / 2) /* max amount to copy for compression */ -#define MICLHLEN (sizeof(struct m_hdr) + sizeof(struct pkthdr) + M_DPAD_LEN + sizeof(((struct mbuf *)0)->m_ext) + sizeof(int)) -#define MICLDOFF (roundup2(MICLHLEN, 64)) -#define MICLBYTES (MCLBYTES + MICLDOFF) #ifdef _KERNEL /*- @@ -141,8 +136,8 @@ struct m_ext { (void *, void *); void *ext_arg1; /* optional argument pointer */ void *ext_arg2; /* optional argument pointer */ - volatile u_int *ref_cnt; /* pointer to ref count info */ u_int ext_size; /* size of buffer, for ext_free */ + volatile u_int *ref_cnt; /* pointer to ref count info */ int ext_type; /* type of external storage */ }; @@ -357,12 +352,10 @@ extern uma_zone_t zone_jumbop; extern uma_zone_t zone_jumbo9; extern uma_zone_t zone_jumbo16; extern uma_zone_t zone_ext_refcnt; -extern uma_zone_t zone_iclust; static __inline struct mbuf *m_getcl(int how, short type, int flags); static __inline struct mbuf *m_get(int how, short type); static __inline struct mbuf *m_gethdr(int how, short type); -static __inline struct mbuf *m_geticl(int how, short type, int flags); static __inline struct mbuf *m_getjcl(int how, short type, int flags, int size); static __inline struct mbuf *m_getclr(int how, short type); /* XXX */ @@ -372,12 +365,6 @@ static __inline void *m_cljget(struct m static __inline void m_chtype(struct mbuf *m, short new_type); void mb_free_ext(struct mbuf *); static __inline struct mbuf *m_last(struct mbuf *m); -void m_tag_delete_chain(struct mbuf *, - struct m_tag *); - - -int mb_iclust_init(struct mbuf *m, short type, int flags); -void mb_iclust_free(void *mem, void *arg); static __inline int m_gettype(int size) @@ -480,18 +467,7 @@ static __inline struct mbuf * m_getcl(int how, short type, int flags) { struct mb_args args; - struct mbuf *m; - - /* First try an iclust. */ - m = uma_zalloc(zone_iclust, how); - if (m) { - if (type != MT_NOINIT) - mb_iclust_init(m, type, flags); - return (m); - } - /* - * Then fallback to the packetzone. - */ + args.flags = flags; args.type = type; return ((struct mbuf *)(uma_zalloc_arg(zone_pack, &args, how))); @@ -642,50 +618,6 @@ m_last(struct mbuf *m) m = m->m_next; return (m); } -static __inline void * -m_icldata(struct mbuf *m) -{ - - return ((void *)((uintptr_t)m + MICLDOFF)); -} - -static __inline -struct mbuf * -m_geticl(int how, short type, int flags) -{ - struct mbuf *m; - - m = uma_zalloc(zone_iclust, how); - if (m && type != MT_NOINIT) - mb_iclust_init(m, type, flags); - - return (m); -} - -/* - * Determine whether an mbuf can be torn down prior to xmit or not. This - * allows the driver to avoid touching the mbuf header when cleaning - * transmit interrupts. - */ -static inline int -m_fasttest(struct mbuf *m) -{ - if (m->m_next == NULL && (m->m_flags & M_EXT) != 0 && - m->m_ext.ext_free == mb_iclust_free && *m->m_ext.ref_cnt == 1) { - if (SLIST_FIRST(&m->m_pkthdr.tags) != NULL) - m_tag_delete_chain(m, NULL); - return (1); - } - return (0); -} - -static inline void -m_fastfree(struct mbuf *m) -{ - - uma_zfree(zone_iclust, m); -} - /* * mbuf, cluster, and external object allocation macros (for compatibility @@ -935,6 +867,7 @@ struct mbuf *m_unshare(struct mbuf *, in /* Packet tag routines. */ struct m_tag *m_tag_alloc(u_int32_t, int, int, int); void m_tag_delete(struct mbuf *, struct m_tag *); +void m_tag_delete_chain(struct mbuf *, struct m_tag *); void m_tag_free_default(struct m_tag *); struct m_tag *m_tag_locate(struct mbuf *, u_int32_t, int, struct m_tag *); struct m_tag *m_tag_copy(struct m_tag *, int); From owner-svn-src-user@FreeBSD.ORG Sat Dec 6 06:08:13 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5C149106564A; Sat, 6 Dec 2008 06:08:13 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4B75B8FC12; Sat, 6 Dec 2008 06:08:13 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB668CfA084839; Sat, 6 Dec 2008 06:08:12 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB668CpE084838; Sat, 6 Dec 2008 06:08:12 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812060608.mB668CpE084838@svn.freebsd.org> From: Kip Macy Date: Sat, 6 Dec 2008 06:08:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185673 - user/kmacy/HEAD_fast_multi_xmit/sys/kern X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Dec 2008 06:08:13 -0000 Author: kmacy Date: Sat Dec 6 06:08:12 2008 New Revision: 185673 URL: http://svn.freebsd.org/changeset/base/185673 Log: revert local mbuf change Modified: user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mbuf.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mbuf.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mbuf.c Sat Dec 6 06:02:26 2008 (r185672) +++ user/kmacy/HEAD_fast_multi_xmit/sys/kern/uipc_mbuf.c Sat Dec 6 06:08:12 2008 (r185673) @@ -213,14 +213,17 @@ m_extadd(struct mbuf *mb, caddr_t buf, u void mb_free_ext(struct mbuf *m) { - int mbfree; + int skipmbuf; KASSERT((m->m_flags & M_EXT) == M_EXT, ("%s: M_EXT not set", __func__)); KASSERT(m->m_ext.ref_cnt != NULL, ("%s: ref_cnt not set", __func__)); - mbfree = !(m->m_flags & M_NOFREE); - + /* + * check if the header is embedded in the cluster + */ + skipmbuf = (m->m_flags & M_NOFREE); + /* Free attached storage if this mbuf is the only reference to it. */ if (*(m->m_ext.ref_cnt) == 1 || atomic_fetchadd_int(m->m_ext.ref_cnt, -1) == 1) { @@ -257,21 +260,26 @@ mb_free_ext(struct mbuf *m) m->m_ext.ext_arg2); break; default: - if (m->m_ext.ref_cnt != NULL) - uma_zfree(zone_ext_refcnt, __DEVOLATILE(u_int *, - m->m_ext.ref_cnt)); - break; - - + KASSERT(m->m_ext.ext_type == 0, + ("%s: unknown ext_type", __func__)); } } + if (skipmbuf) + return; /* * Free this mbuf back to the mbuf zone with all m_ext * information purged. */ - if (mbfree) - uma_zfree(zone_mbuf, m); + m->m_ext.ext_buf = NULL; + m->m_ext.ext_free = NULL; + m->m_ext.ext_arg1 = NULL; + m->m_ext.ext_arg2 = NULL; + m->m_ext.ref_cnt = NULL; + m->m_ext.ext_size = 0; + m->m_ext.ext_type = 0; + m->m_flags &= ~M_EXT; + uma_zfree(zone_mbuf, m); } /* From owner-svn-src-user@FreeBSD.ORG Sat Dec 6 09:38:41 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D57E7106567A; Sat, 6 Dec 2008 09:38:41 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C2AEC8FC0A; Sat, 6 Dec 2008 09:38:41 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB69cffO089506; Sat, 6 Dec 2008 09:38:41 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB69cfP3089495; Sat, 6 Dec 2008 09:38:41 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812060938.mB69cfP3089495@svn.freebsd.org> From: Kip Macy Date: Sat, 6 Dec 2008 09:38:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185691 - in user/kmacy/HEAD_fast_multi_xmit/sys: amd64/conf contrib/pf/net kern net netinet6 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Dec 2008 09:38:41 -0000 Author: kmacy Date: Sat Dec 6 09:38:41 2008 New Revision: 185691 URL: http://svn.freebsd.org/changeset/base/185691 Log: - convert radix node head lock from mutex to rwlock - make radix node head lock not recursive - fix LOR in rtexpunge - fix LOR in rtredirect Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/PERFTEST user/kmacy/HEAD_fast_multi_xmit/sys/contrib/pf/net/pf_table.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/subr_witness.c user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_export.c user/kmacy/HEAD_fast_multi_xmit/sys/net/radix.c user/kmacy/HEAD_fast_multi_xmit/sys/net/radix.h user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c user/kmacy/HEAD_fast_multi_xmit/sys/net/route.h user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_rmx.c user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/nd6_rtr.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/PERFTEST ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/PERFTEST Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/amd64/conf/PERFTEST Sat Dec 6 09:38:41 2008 (r185691) @@ -279,3 +279,5 @@ device fwe # Ethernet over FireWire (n device fwip # IP over FireWire (RFC 2734,3146) device dcons # Dumb console driver device dcons_crom # Configuration ROM for dcons + +options ALT_BREAK_TO_DEBUGGER Modified: user/kmacy/HEAD_fast_multi_xmit/sys/contrib/pf/net/pf_table.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/contrib/pf/net/pf_table.c Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/contrib/pf/net/pf_table.c Sat Dec 6 09:38:41 2008 (r185691) @@ -43,6 +43,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #ifdef __FreeBSD__ #include #endif Modified: user/kmacy/HEAD_fast_multi_xmit/sys/kern/subr_witness.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/kern/subr_witness.c Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/kern/subr_witness.c Sat Dec 6 09:38:41 2008 (r185691) @@ -505,7 +505,7 @@ static struct witness_order_list_entry o * Routing */ { "so_rcv", &lock_class_mtx_sleep }, - { "radix node head", &lock_class_mtx_sleep }, + { "radix node head", &lock_class_rw }, { "rtentry", &lock_class_mtx_sleep }, { "ifaddr", &lock_class_mtx_sleep }, { NULL, NULL }, Modified: user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_export.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_export.c Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/kern/vfs_export.c Sat Dec 6 09:38:41 2008 (r185691) @@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -425,10 +426,10 @@ vfs_export_lookup(struct mount *mp, stru saddr = nam; rnh = nep->ne_rtable[saddr->sa_family]; if (rnh != NULL) { - RADIX_NODE_HEAD_LOCK(rnh); + RADIX_NODE_HEAD_RLOCK(rnh); np = (struct netcred *) (*rnh->rnh_matchaddr)(saddr, rnh); - RADIX_NODE_HEAD_UNLOCK(rnh); + RADIX_NODE_HEAD_RUNLOCK(rnh); if (np && np->netc_rnodes->rn_flags & RNF_ROOT) np = NULL; } Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/radix.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/radix.c Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/radix.c Sat Dec 6 09:38:41 2008 (r185691) @@ -38,6 +38,7 @@ #ifdef _KERNEL #include #include +#include #include #include #include Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/radix.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/radix.h Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/radix.h Sat Dec 6 09:38:41 2008 (r185691) @@ -36,6 +36,7 @@ #ifdef _KERNEL #include #include +#include #endif #ifdef MALLOC_DECLARE @@ -132,7 +133,7 @@ struct radix_node_head { struct radix_node rnh_nodes[3]; /* empty tree for common case */ int rnh_multipath; /* multipath capable ? */ #ifdef _KERNEL - struct mtx rnh_mtx; /* locks entire radix tree */ + struct rwlock rnh_lock; /* locks entire radix tree */ #endif }; @@ -146,11 +147,16 @@ struct radix_node_head { #define Free(p) free((caddr_t)p, M_RTABLE); #define RADIX_NODE_HEAD_LOCK_INIT(rnh) \ - mtx_init(&(rnh)->rnh_mtx, "radix node head", NULL, MTX_DEF | MTX_RECURSE) -#define RADIX_NODE_HEAD_LOCK(rnh) mtx_lock(&(rnh)->rnh_mtx) -#define RADIX_NODE_HEAD_UNLOCK(rnh) mtx_unlock(&(rnh)->rnh_mtx) -#define RADIX_NODE_HEAD_DESTROY(rnh) mtx_destroy(&(rnh)->rnh_mtx) -#define RADIX_NODE_HEAD_LOCK_ASSERT(rnh) mtx_assert(&(rnh)->rnh_mtx, MA_OWNED) + rw_init_flags(&(rnh)->rnh_lock, "radix node head", 0) +#define RADIX_NODE_HEAD_LOCK(rnh) rw_wlock(&(rnh)->rnh_lock) +#define RADIX_NODE_HEAD_UNLOCK(rnh) rw_wunlock(&(rnh)->rnh_lock) +#define RADIX_NODE_HEAD_RLOCK(rnh) rw_rlock(&(rnh)->rnh_lock) +#define RADIX_NODE_HEAD_RUNLOCK(rnh) rw_runlock(&(rnh)->rnh_lock) +#define RADIX_NODE_HEAD_LOCK_TRY_UPGRADE(rnh) rw_try_upgrade(&(rnh)->rnh_lock) + + +#define RADIX_NODE_HEAD_DESTROY(rnh) rw_destroy(&(rnh)->rnh_lock) +#define RADIX_NODE_HEAD_LOCK_ASSERT(rnh) rw_assert(&(rnh)->rnh_lock, RA_LOCKED) #endif /* _KERNEL */ void rn_init(void); Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/route.c Sat Dec 6 09:38:41 2008 (r185691) @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -269,7 +270,8 @@ rtalloc1_fib(struct sockaddr *dst, int r struct rtentry *newrt; struct rt_addrinfo info; u_long nflags; - int err = 0, msgtype = RTM_MISS; + int needresolve = 0, err = 0, msgtype = RTM_MISS; + int needlock; KASSERT((fibnum < rt_numfibs), ("rtalloc1_fib: bad fibnum")); if (dst->sa_family != AF_INET) /* Only INET supports > 1 fib now */ @@ -283,59 +285,89 @@ rtalloc1_fib(struct sockaddr *dst, int r V_rtstat.rts_unreach++; goto miss2; } - RADIX_NODE_HEAD_LOCK(rnh); - if ((rn = rnh->rnh_matchaddr(dst, rnh)) && - (rn->rn_flags & RNF_ROOT) == 0) { + needlock = !(ignflags & RTF_RNH_LOCKED); +retry: + if (needlock) + RADIX_NODE_HEAD_RLOCK(rnh); + rn = rnh->rnh_matchaddr(dst, rnh); + if (rn && ((rn->rn_flags & RNF_ROOT) == 0)) { + + newrt = rt = RNTORT(rn); + nflags = rt->rt_flags & ~ignflags; + if (report && (nflags & RTF_CLONING)) { + if (needlock && !RADIX_NODE_HEAD_LOCK_TRY_UPGRADE(rnh)) { + RADIX_NODE_HEAD_RUNLOCK(rnh); + RADIX_NODE_HEAD_LOCK(rnh); + /* + * lookup again to make sure it wasn't changed + */ + rn = rnh->rnh_matchaddr(dst, rnh); + if (!(rn && ((rn->rn_flags & RNF_ROOT) == 0))) { + RADIX_NODE_HEAD_UNLOCK(rnh); + needresolve = 0; + log(LOG_INFO, "retrying route lookup ...\n"); + goto retry; + } + } + needresolve = 1; + } else { + RT_LOCK(newrt); + RT_ADDREF(newrt); + RADIX_NODE_HEAD_RUNLOCK(rnh); + goto done; + } + } + + if (!needresolve && needlock) + RADIX_NODE_HEAD_RUNLOCK(rnh); + + + if (needresolve) { + /* * If we find it and it's not the root node, then * get a reference on the rtentry associated. */ - newrt = rt = RNTORT(rn); - nflags = rt->rt_flags & ~ignflags; - if (report && (nflags & RTF_CLONING)) { /* * We are apparently adding (report = 0 in delete). * If it requires that it be cloned, do so. * (This implies it wasn't a HOST route.) */ - err = rtrequest_fib(RTM_RESOLVE, dst, NULL, - NULL, 0, &newrt, fibnum); - if (err) { - /* - * If the cloning didn't succeed, maybe - * what we have will do. Return that. - */ - newrt = rt; /* existing route */ - RT_LOCK(newrt); - RT_ADDREF(newrt); - goto miss; - } - KASSERT(newrt, ("no route and no error")); - RT_LOCK(newrt); - if (newrt->rt_flags & RTF_XRESOLVE) { - /* - * If the new route specifies it be - * externally resolved, then go do that. - */ - msgtype = RTM_RESOLVE; - goto miss; - } - /* Inform listeners of the new route. */ - bzero(&info, sizeof(info)); - info.rti_info[RTAX_DST] = rt_key(newrt); - info.rti_info[RTAX_NETMASK] = rt_mask(newrt); - info.rti_info[RTAX_GATEWAY] = newrt->rt_gateway; - if (newrt->rt_ifp != NULL) { - info.rti_info[RTAX_IFP] = - newrt->rt_ifp->if_addr->ifa_addr; - info.rti_info[RTAX_IFA] = newrt->rt_ifa->ifa_addr; - } - rt_missmsg(RTM_ADD, &info, newrt->rt_flags, 0); - } else { + err = rtrequest_fib(RTM_RESOLVE, dst, NULL, + NULL, RTF_RNH_LOCKED, &newrt, fibnum); + if (err) { + /* + * If the cloning didn't succeed, maybe + * what we have will do. Return that. + */ + newrt = rt; /* existing route */ RT_LOCK(newrt); RT_ADDREF(newrt); + goto miss; } - RADIX_NODE_HEAD_UNLOCK(rnh); + KASSERT(newrt, ("no route and no error")); + RT_LOCK(newrt); + if (newrt->rt_flags & RTF_XRESOLVE) { + /* + * If the new route specifies it be + * externally resolved, then go do that. + */ + msgtype = RTM_RESOLVE; + goto miss; + } + /* Inform listeners of the new route. */ + bzero(&info, sizeof(info)); + info.rti_info[RTAX_DST] = rt_key(newrt); + info.rti_info[RTAX_NETMASK] = rt_mask(newrt); + info.rti_info[RTAX_GATEWAY] = newrt->rt_gateway; + if (newrt->rt_ifp != NULL) { + info.rti_info[RTAX_IFP] = + newrt->rt_ifp->if_addr->ifa_addr; + info.rti_info[RTAX_IFA] = newrt->rt_ifa->ifa_addr; + } + rt_missmsg(RTM_ADD, &info, newrt->rt_flags, 0); + if (needlock) + RADIX_NODE_HEAD_UNLOCK(rnh); } else { /* * Either we hit the root or couldn't find any match, @@ -344,7 +376,8 @@ rtalloc1_fib(struct sockaddr *dst, int r */ V_rtstat.rts_unreach++; miss: - RADIX_NODE_HEAD_UNLOCK(rnh); + if (needlock && needresolve) + RADIX_NODE_HEAD_UNLOCK(rnh); miss2: if (report) { /* * If required, report the failure to the supervising @@ -356,6 +389,7 @@ rtalloc1_fib(struct sockaddr *dst, int r rt_missmsg(msgtype, &info, 0, err); } } +done: if (newrt) RT_LOCK_ASSERT(newrt); return (newrt); @@ -475,6 +509,8 @@ rtredirect_fib(struct sockaddr *dst, short *stat = NULL; struct rt_addrinfo info; struct ifaddr *ifa; + struct radix_node_head *rnh = + V_rt_tables[rt->rt_fibnum][dst->sa_family]; /* verify the gateway is directly reachable */ if ((ifa = ifa_ifwithnet(gateway)) == NULL) { @@ -524,14 +560,17 @@ rtredirect_fib(struct sockaddr *dst, info.rti_info[RTAX_NETMASK] = netmask; info.rti_ifa = ifa; info.rti_flags = flags; + if (rt0) + RT_UNLOCK(rt0); /* drop lock to avoid LOR with RNH */ error = rtrequest1_fib(RTM_ADD, &info, &rt, fibnum); - if (rt != NULL) { + if (rt) { RT_LOCK(rt); - EVENTHANDLER_INVOKE(route_redirect_event, rt0, rt, dst); + if (rt0) + EVENTHANDLER_INVOKE(route_redirect_event, rt0, rt, dst); flags = rt->rt_flags; } if (rt0) - RTFREE_LOCKED(rt0); + RTFREE(rt0); stat = &V_rtstat.rts_dynamic; } else { @@ -547,8 +586,12 @@ rtredirect_fib(struct sockaddr *dst, /* * add the key and gateway (in one malloc'd chunk). */ + RT_UNLOCK(rt); + RADIX_NODE_HEAD_LOCK(rnh); + RT_LOCK(rt); rt_setgate(rt, rt_key(rt), gateway); - gwrt = rtalloc1(gateway, 1, 0); + gwrt = rtalloc1(gateway, 1, RTF_RNH_LOCKED); + RADIX_NODE_HEAD_UNLOCK(rnh); EVENTHANDLER_INVOKE(route_redirect_event, rt, gwrt, dst); RTFREE_LOCKED(gwrt); } @@ -782,7 +825,9 @@ rtexpunge(struct rtentry *rt) struct ifaddr *ifa; int error = 0; + rnh = V_rt_tables[rt->rt_fibnum][rt_key(rt)->sa_family]; RT_LOCK_ASSERT(rt); + RADIX_NODE_HEAD_LOCK_ASSERT(rnh); #if 0 /* * We cannot assume anything about the reference count @@ -798,8 +843,6 @@ rtexpunge(struct rtentry *rt) if (rnh == NULL) return (EAFNOSUPPORT); - RADIX_NODE_HEAD_LOCK(rnh); - /* * Remove the item from the tree; it should be there, * but when callers invoke us blindly it may not (sigh). @@ -853,7 +896,6 @@ rtexpunge(struct rtentry *rt) */ V_rttrash++; bad: - RADIX_NODE_HEAD_UNLOCK(rnh); return (error); } @@ -868,7 +910,7 @@ rtrequest1_fib(int req, struct rt_addrin u_int fibnum) { INIT_VNET_NET(curvnet); - int error = 0; + int error = 0, needlock = 0; register struct rtentry *rt; register struct radix_node *rn; register struct radix_node_head *rnh; @@ -885,7 +927,10 @@ rtrequest1_fib(int req, struct rt_addrin rnh = V_rt_tables[fibnum][dst->sa_family]; if (rnh == NULL) return (EAFNOSUPPORT); - RADIX_NODE_HEAD_LOCK(rnh); + needlock = ((flags & RTF_RNH_LOCKED) == 0); + flags &= ~RTF_RNH_LOCKED; + if (needlock) + RADIX_NODE_HEAD_LOCK(rnh); /* * If we are adding a host route then we don't want to put * a netmask in the tree, nor do we want to clone it. @@ -1198,7 +1243,8 @@ deldone: error = EOPNOTSUPP; } bad: - RADIX_NODE_HEAD_UNLOCK(rnh); + if (needlock) + RADIX_NODE_HEAD_UNLOCK(rnh); return (error); #undef senderr } @@ -1305,7 +1351,8 @@ rt_setgate(struct rtentry *rt, struct so again: RT_LOCK_ASSERT(rt); - + RADIX_NODE_HEAD_LOCK_ASSERT(rnh); + /* * A host route with the destination equal to the gateway * will interfere with keeping LLINFO in the routing @@ -1331,7 +1378,7 @@ again: struct rtentry *gwrt; RT_UNLOCK(rt); /* XXX workaround LOR */ - gwrt = rtalloc1_fib(gate, 1, 0, rt->rt_fibnum); + gwrt = rtalloc1_fib(gate, 1, RTF_RNH_LOCKED, rt->rt_fibnum); if (gwrt == rt) { RT_REMREF(rt); return (EADDRINUSE); /* failure */ @@ -1402,12 +1449,8 @@ again: arg.rnh = rnh; arg.rt0 = rt; - RT_UNLOCK(rt); /* XXX workaround LOR */ - RADIX_NODE_HEAD_LOCK(rnh); - RT_LOCK(rt); rnh->rnh_walktree_from(rnh, rt_key(rt), rt_mask(rt), rt_fixchange, &arg); - RADIX_NODE_HEAD_UNLOCK(rnh); } return 0; Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/route.h ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/route.h Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/route.h Sat Dec 6 09:38:41 2008 (r185691) @@ -197,6 +197,7 @@ struct ortentry { #define RTF_BROADCAST 0x400000 /* route represents a bcast address */ #define RTF_MULTICAST 0x800000 /* route represents a mcast address */ /* 0x1000000 and up unassigned */ +#define RTF_RNH_LOCKED 0x40000000 #define RTF_DESTEN_VALID 0x80000000 /* rtentry_info L2 addr is valid */ /* Mask of RTF flags that are allowed to be modified by RTM_CHANGE. */ Modified: user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/net/rtsock.c Sat Dec 6 09:38:41 2008 (r185691) @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -554,11 +555,11 @@ route_output(struct mbuf *m, struct sock rnh = V_rt_tables[so->so_fibnum][info.rti_info[RTAX_DST]->sa_family]; if (rnh == NULL) senderr(EAFNOSUPPORT); - RADIX_NODE_HEAD_LOCK(rnh); + RADIX_NODE_HEAD_RLOCK(rnh); rt = (struct rtentry *) rnh->rnh_lookup(info.rti_info[RTAX_DST], info.rti_info[RTAX_NETMASK], rnh); if (rt == NULL) { /* XXX looks bogus */ - RADIX_NODE_HEAD_UNLOCK(rnh); + RADIX_NODE_HEAD_RUNLOCK(rnh); senderr(ESRCH); } #ifdef RADIX_MPATH @@ -574,14 +575,14 @@ route_output(struct mbuf *m, struct sock (rtm->rtm_type != RTM_GET || info.rti_info[RTAX_GATEWAY])) { rt = rt_mpath_matchgate(rt, info.rti_info[RTAX_GATEWAY]); if (!rt) { - RADIX_NODE_HEAD_UNLOCK(rnh); + RADIX_NODE_HEAD_RUNLOCK(rnh); senderr(ESRCH); } } #endif RT_LOCK(rt); RT_ADDREF(rt); - RADIX_NODE_HEAD_UNLOCK(rnh); + RADIX_NODE_HEAD_RUNLOCK(rnh); /* * Fix for PR: 82974 Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_rmx.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_rmx.c Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/in6_rmx.c Sat Dec 6 09:38:41 2008 (r185691) @@ -83,6 +83,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include Modified: user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/nd6_rtr.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/nd6_rtr.c Sat Dec 6 09:37:54 2008 (r185690) +++ user/kmacy/HEAD_fast_multi_xmit/sys/netinet6/nd6_rtr.c Sat Dec 6 09:38:41 2008 (r185691) @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include