From owner-p4-projects@FreeBSD.ORG Sun Jun 5 15:30:05 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B51621065672; Sun, 5 Jun 2011 15:30:04 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6CEFF106564A for ; Sun, 5 Jun 2011 15:30:04 +0000 (UTC) (envelope-from syuu@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 549A38FC0C for ; Sun, 5 Jun 2011 15:30:04 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p55FU4l7010654 for ; Sun, 5 Jun 2011 15:30:04 GMT (envelope-from syuu@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p55FU4od010651 for perforce@freebsd.org; Sun, 5 Jun 2011 15:30:04 GMT (envelope-from syuu@FreeBSD.org) Date: Sun, 5 Jun 2011 15:30:04 GMT Message-Id: <201106051530.p55FU4od010651@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to syuu@FreeBSD.org using -f From: Takuya ASADA To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194258 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jun 2011 15:30:05 -0000 http://p4web.freebsd.org/@@194258?ac=10 Change 194258 by syuu@x200 on 2011/06/05 15:29:08 debug log in bpf_mtap caused panic, commented out Affected files ... .. //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_igb.c#4 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.c#6 edit Differences ... ==== //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_igb.c#4 (text+ko) ==== @@ -59,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -4488,6 +4489,11 @@ rxr->fmp->m_pkthdr.ether_vtag = vtag; rxr->fmp->m_flags |= M_VLANTAG; } + const char *rsstype_str[] = {"NONE", "IPV4_TCP", "IPV4", "IPV6_TCP", "IPV6_EX", "IPV6", "IPV6_TCP_EX", "IPV4_UDP", "IPV6_UDP", "IPV6_UDP_EX"}; + u16 pkt = le16toh(cur->wb.lower.lo_dword.hs_rss.pkt_info); + u32 rss = le32toh(cur->wb.lower.hi_dword.rss); + u8 rsstype = (u8)(pkt & E1000_RXDADV_RSSTYPE_MASK); + log(LOG_DEBUG, "[%d]msix:%d rsstype:%s ptype:%u plen:%u hdr_info:%x rss:%x\n", PCPU_GET(cpuid), que->msix, rsstype_str[rsstype], ptype, plen, hdr, rss); #if __FreeBSD_version >= 800000 rxr->fmp->m_pkthdr.flowid = que->msix; rxr->fmp->m_flags |= M_FLOWID; ==== //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.c#6 (text+ko) ==== @@ -2214,11 +2214,12 @@ BPFIF_LOCK(bp); LIST_FOREACH(d, &bp->bif_dlist, bd_next) { if (d->bd_qmask.qm_enabled) { +/* log(LOG_DEBUG, "bpf_mtap rxqid:%x txqid:%x rxqmask:%x txqmask:%x\n", m->m_pkthdr.rxqid, m->m_pkthdr.txqid, d->bd_qmask.qm_rxq_mask[m->m_pkthdr.rxqid], d->bd_qmask.qm_txq_mask[m->m_pkthdr.txqid]); - +*/ if (m->m_pkthdr.rxqid != (uint32_t)-1 && !d->bd_qmask.qm_rxq_mask[m->m_pkthdr.rxqid]) continue; From owner-p4-projects@FreeBSD.ORG Sun Jun 5 16:52:16 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4DD641065670; Sun, 5 Jun 2011 16:52:16 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BE64B106564A for ; Sun, 5 Jun 2011 16:52:15 +0000 (UTC) (envelope-from syuu@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 954EF8FC0C for ; Sun, 5 Jun 2011 16:52:15 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p55GqFPs028104 for ; Sun, 5 Jun 2011 16:52:15 GMT (envelope-from syuu@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p55GqFSp028101 for perforce@freebsd.org; Sun, 5 Jun 2011 16:52:15 GMT (envelope-from syuu@FreeBSD.org) Date: Sun, 5 Jun 2011 16:52:15 GMT Message-Id: <201106051652.p55GqFSp028101@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to syuu@FreeBSD.org using -f From: Takuya ASADA To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194262 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jun 2011 16:52:16 -0000 http://p4web.freebsd.org/@@194262?ac=10 Change 194262 by syuu@x200 on 2011/06/05 16:51:33 get queue affinity test code added. Affected files ... .. //depot/projects/soc2011/mq_bpf/tests/queue_affinity.c#1 add Differences ... From owner-p4-projects@FreeBSD.ORG Tue Jun 7 10:56:16 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C21A71065673; Tue, 7 Jun 2011 10:56:16 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 750BC106566C for ; Tue, 7 Jun 2011 10:56:16 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 630248FC1D for ; Tue, 7 Jun 2011 10:56:16 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p57AuGno053169 for ; Tue, 7 Jun 2011 10:56:16 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p57AuGS4053166 for perforce@freebsd.org; Tue, 7 Jun 2011 10:56:16 GMT (envelope-from ilya@FreeBSD.org) Date: Tue, 7 Jun 2011 10:56:16 GMT Message-Id: <201106071056.p57AuGS4053166@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194383 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 10:56:17 -0000 http://p4web.freebsd.org/@@194383?ac=10 Change 194383 by ilya@ilya_triton2011 on 2011/06/07 10:55:10 fuse_vnops.c change function order, move internal functions to fuse_internal.c Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse.h#5 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#4 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#5 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#8 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse.h#5 (text+ko) ==== @@ -195,6 +195,22 @@ #endif #endif +#ifdef FUSE_TRACE +#define fuse_trace_printf(fmt, ...) printf(fmt, ## __VA_ARGS__) +#define fuse_trace_printf_func() printf("%s\n", __FUNCTION__) +#else +#define fuse_trace_printf(fmt, ...) {} +#define fuse_trace_printf_func() {} +#endif + +#ifdef FUSE_TRACE_OP +#define fuse_trace_printf_vfsop() printf("%s\n", __FUNCTION__) +#define fuse_trace_printf_vnop() printf("%s\n", __FUNCTION__) +#else +#define fuse_trace_printf_vfsop() {} +#define fuse_trace_printf_vnop() {} +#endif + #define debug_printf(fmt, ...) DEBUG(fmt, ## __VA_ARGS__) #define kdebug_printf(fmt, ...) DEBUG(fmt, ## __VA_ARGS__) ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#4 (text+ko) ==== @@ -11,20 +11,644 @@ #include #include #include +#include #include -#include #include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include #include "fuse.h" #include "fuse_node.h" #include "fuse_ipc.h" #include "fuse_internal.h" +/* access */ + +static __inline int fuse_check_spyable(struct fuse_dispatcher *fdip, + struct mount *mp, struct thread *td, + struct ucred *cred); +static __inline int fuse_match_cred(struct ucred *daemoncred, + struct ucred *usercred); + +int +fuse_internal_access(struct vnode *vp, + mode_t mode, + struct ucred *cred, + struct thread *td, + struct fuse_access_param *facp) +{ + int err = 0; + struct fuse_dispatcher fdi; + + /* + * Disallow write attempts on read-only file systems; unless the file + * is a socket, fifo, or a block or character device resident on the + * file system. + */ + + DEBUG("ro? %#x vp #%llu mode %#x\n", + vp->v_mount->mnt_flag & MNT_RDONLY, VTOILLU(vp), mode); + + RECTIFY_TDCR(td, cred); + + if (mode & VWRITE) { + switch (vp->v_type) { + case VDIR: + case VLNK: + case VREG: + if (vp->v_mount->mnt_flag & MNT_RDONLY) { + DEBUG("no write access (read-only fs)\n"); + return (EROFS); + } + break; + default: + break; + } + } + + bzero(&fdi, sizeof(fdi)); + if (vp->v_vflag & VV_ROOT && ! (facp->facc_flags & FACCESS_NOCHECKSPY)) { + if ((err = fuse_check_spyable(&fdi, vp->v_mount, td, cred))) + return (err); + facp->facc_flags |= FACCESS_NOCHECKSPY; + } + + if (fusefs_get_data(vp->v_mount)->dataflag & FSESS_DEFAULT_PERMISSIONS || + /* + * According to Linux code, we fall back to in-kernel check + * when it comes to executing a file + */ + (vp->v_type == VREG && mode == VEXEC)) { + /* We are to do the check in-kernel */ + + if (! (facp->facc_flags & FACCESS_VA_VALID)) { + err = VOP_GETATTR(vp, VTOVA(vp), cred); + if (err) + return (err); + facp->facc_flags |= FACCESS_VA_VALID; + } + + err = vaccess(VTOVA(vp)->va_type, + VTOVA(vp)->va_mode, + VTOVA(vp)->va_uid, + VTOVA(vp)->va_gid, + mode, cred, NULL); + + if (err) + return (err); + + if (facp->facc_flags & FACCESS_STICKY) { + if (vp->v_type == VDIR && VTOVA(vp)->va_mode & S_ISTXT && + mode == VWRITE) { + if (cred->cr_uid != facp->xuid && + cred->cr_uid != VTOVA(vp)->va_uid) + err = priv_check_cred(cred, + PRIV_VFS_ADMIN, + 0); + } + /* + * We return here because this flags is exlusive + * with the others + */ + KASSERT(facp->facc_flags == FACCESS_STICKY, + ("sticky access check comes in mixed")); + return (err); + } + + if (mode != VADMIN) + return (err); + + if (facp->facc_flags & FACCESS_CHOWN) { + if ((cred->cr_uid != facp->xuid && + facp->xuid != (uid_t)VNOVAL) || + (cred->cr_gid != facp->xgid && + facp->xgid != (gid_t)VNOVAL && + ! groupmember(facp->xgid, cred))) + err = priv_check_cred(cred, PRIV_VFS_CHOWN, 0); + if (err) + return (err); + } + + if (facp->facc_flags & FACCESS_SETGID) { + gid_t sgid = facp->xgid; + + if (sgid == (gid_t)VNOVAL) + sgid = VTOVA(vp)->va_gid; + + if (! groupmember(sgid, cred)) + err = priv_check_cred(cred, PRIV_VFS_SETGID, 0); + return (err); + } + + } else { +#if FUSE_HAS_ACCESS + struct fuse_access_in *fai; + + if (! (facp->facc_flags & FACCESS_DO_ACCESS)) + return (0); + + if (fusefs_get_data(vp->v_mount)->dataflag & FSESS_NOACCESS) + return (0); + + fdisp_init(&fdi, sizeof(*fai)); + fdisp_make_vp(&fdi, FUSE_ACCESS, vp, td, cred); + + fai = fdi.indata; + + fai->mask = F_OK; + if (mode & VREAD) + fai->mask |= R_OK; + if (mode & VWRITE) + fai->mask |= W_OK; + if (mode & VEXEC) + fai->mask |= X_OK; + + if (! (err = fdisp_wait_answ(&fdi))) + fuse_ticket_drop(fdi.tick); + + if (err == ENOSYS) { + fusefs_get_data(vp->v_mount)->dataflag |= FSESS_NOACCESS; + err = 0; + } +#endif + } + return err; +} + +/* + * An access check routine based on fuse_allow_task() of the Linux module. + * Now we use this one rather than the more permissive function we used to + * (and which seemed more logical to me), to ensure uniform behaviour on Linux + * and FreeBSD. + * + * Non-null return value indicates error (ie., "not allowed"). + */ +static __inline int +fuse_match_cred(struct ucred *basecred, struct ucred *usercred) +{ + if (basecred->cr_uid == usercred->cr_uid && + basecred->cr_uid == usercred->cr_ruid && + basecred->cr_uid == usercred->cr_svuid && + basecred->cr_groups[0] == usercred->cr_groups[0] && + basecred->cr_groups[0] == usercred->cr_rgid && + basecred->cr_groups[0] == usercred->cr_svgid) + return (0); + + return (EPERM); +} + + +static __inline int +fuse_check_spyable(struct fuse_dispatcher *fdip, struct mount *mp, + struct thread *td, struct ucred *cred) +{ + struct fuse_data *data = fusefs_get_data(mp); + struct fuse_secondary_data *x_fsdat; + int denied; + + if (data->dataflag & FSESS_DAEMON_CAN_SPY) + return (0); + + /* + * The policy is to forbid a user from using the filesystem, + * unless she has it mounted. + * + * This is primarily to + * protect her from the daemon spying on her I/O + * operations. Although this is not a concern if the user + * is more privileged than the daemon, we consistently + * demand the per-user mount, in order to be compatible + * with the Linux implementation. + * + * Secondary mounts let arbitrary number of users mount and + * use the filesystem. However, the primary mounter must explicitly + * allow secondary mounts. This is again for providing Linux like + * defaults. + */ + + denied = fuse_match_cred(mp->mnt_cred, cred); + if (! denied) + goto allow; + + LIST_FOREACH(x_fsdat, &data->slaves_head, slaves_link) { + denied = fuse_match_cred(x_fsdat->mp->mnt_cred, cred); + if (! denied) + goto allow; + } + + return (EACCES); + +allow: + return (0); +} + +/* fsync */ + +int +fuse_internal_fsync_callback(struct fuse_ticket *tick, struct uio *uio) +{ + if (tick->tk_aw_ohead.error == ENOSYS) + tick->tk_data->dataflag |= + fticket_opcode(tick) == FUSE_FSYNC ? + FSESS_NOFSYNC : FSESS_NOFSYNCDIR; + + fuse_ticket_drop(tick); + return (0); +} + +/* readdir */ + +int +fuse_internal_readdir_processdata(struct uio *uio, + size_t reqsize, + void *buf, + size_t bufsize, + void *param) +{ + /* + * The daemon presents us with a virtual geometry when reading dirents. + * This info is stored in the "off" field of fuse_dirent (which is the + * struct we can read from her). "off" shows the absolut position of + * the next entry (by definition). So I might pull 40 actual bytes from + * the daemon, that might count as 60 by her virtual geometry, and when + * I translate fuse_dirents to POSIX dirents, I have 20 bytes to pass + * to the userspace reader. + * + * How to keep these in sync? We don't want to make the general read + * routine complex (to which here we serve a background, and which + * naively treats reading by a liner logic). So we artifically inflate + * dirents: we pad them with as much zeros as we need them to get to + * next offset (as the deamon declared), and we pass it to the reader + * thusly (this will work as fuse dirents are bigger than std ones). So + * we do more IO with the reader than absolutely necessary, but it's + * hardly a problem as the expensive thing is reading from the daemon, + * not sending data to the reader. + * + * There is no use to change this simple geometry translation scheme + * 'till we do page caching. [We do now, but it's still fine as is.] + */ + int err = 0; + int cou = 0; + int bytesavail; + size_t freclen; + + struct dirent *de; + struct fuse_dirent *fudge; + struct fuse_iov *cookediov = param; + + KASSERT(bufsize <= reqsize, ("read more than asked for?")); + + DEBUG2G("starting\n"); + + /* + * Sanity check: if this fails, we would overrun the allocated space + * upon entering the loop below, so we'd better leave right now. + * If so, we return -1 to terminate reading. + */ + if (bufsize < FUSE_NAME_OFFSET) { + return (-1); + } + + DEBUG2G("entering loop with bufsize %d\n", (int)bufsize); + + /* + * Can we avoid infite loops? An infinite loop could occur only if we + * leave this function with 0 return value, because otherwise we wont't + * be called again. But both 0 exit points imply that some data has + * been consumed... because + * 1) if a turn is not aborted, it consumes positive amount of data + * 2) the 0 jump-out from within the loop can't occur in the first + * turn + * 3) if we exit 0 after the loop is over, then at least one turn + * was completed, otherwise we hed exited above with -1. + */ + + for (;;) { + + if (bufsize < FUSE_NAME_OFFSET) { + err = -1; + break; + } + + cou++; + + fudge = (struct fuse_dirent *)buf; + freclen = FUSE_DIRENT_SIZE(fudge); + + DEBUG("bufsize %d, freclen %d\n", (int)bufsize, (int)freclen); + + /* + * Here is an exit condition: we terminate the whole reading + * process if a fresh chunk of buffer is already too short to + * cut out an entry. + * (It it was not the first turn in the loop, nevermind, + * return with asking for more) + */ + if (bufsize < freclen) { + err = ((cou == 1) ? -1 : 0); + break; + } + +#if FUSELIB_CONFORM_BIOREAD + if (isbzero(buf, FUSE_NAME_OFFSET)) { + err = -1; + break; + } +#endif + + /* Sanity checks */ + + if (!fudge->namelen || fudge->namelen > MAXNAMLEN) { + DEBUG2G("bogus namelen %d at turn %d\n", + fudge->namelen, cou); + err = EINVAL; + break; + } + + bytesavail = GENERIC_DIRSIZ((struct pseudo_dirent *)&fudge->namelen); + + /* + * Exit condition 2: if the pretended amount of input is more + * than that the userspace wants, then it's time to stop + * reading. + */ + if (bytesavail > uio->uio_resid) { + DEBUG2G("leaving at %d-th item as we have %d bytes but only %d is asked for\n", + cou, bytesavail, uio->uio_resid); + err = -1; + break; + } + + fiov_refresh(cookediov); + fiov_adjust(cookediov, bytesavail); + + de = (struct dirent *)cookediov->base; + de->d_fileno = fudge->ino; /* XXX cast from 64 to 32 bits */ + de->d_reclen = bytesavail; + de->d_type = fudge->type; + de->d_namlen = fudge->namelen; + memcpy((char *)cookediov->base + sizeof(struct dirent) - MAXNAMLEN - 1, + (char *)buf + FUSE_NAME_OFFSET, fudge->namelen); + ((char *)cookediov->base)[bytesavail] = '\0'; + + DEBUG("bytesavail %d, fudge->off %llu, fudge->namelen %d, uio->uio_offset %d, name %s\n", + bytesavail, (unsigned long long)fudge->off, fudge->namelen, (int)uio->uio_offset, + (char *)cookediov->base + sizeof(struct dirent) - MAXNAMLEN - 1); + + err = uiomove(cookediov->base, cookediov->len, uio); + if (err) { + break; + } + + buf = (char *)buf + freclen; + bufsize -= freclen; + uio->uio_offset = fudge->off; + } + + return (err); +} + +/* remove */ + +int +fuse_internal_remove(struct vnode *dvp, + struct vnode *vp, + struct componentname *cnp, + enum fuse_opcode op) +{ + struct fuse_dispatcher fdi; + int err = 0; + + debug_printf("dvp=%p, cnp=%p, op=%d, context=%p\n", vp, cnp, op, context); + + fdisp_init(&fdi, cnp->cn_namelen + 1); + fdisp_make_vp(&fdi, op, dvp, curthread, NULL); + + memcpy(fdi.indata, cnp->cn_nameptr, cnp->cn_namelen); + ((char *)fdi.indata)[cnp->cn_namelen] = '\0'; + + if (!(err = fdisp_wait_answ(&fdi))) { + fuse_ticket_drop(fdi.tick); + } + + fuse_invalidate_attr(dvp); + fuse_invalidate_attr(vp); + + return (err); +} + +/* rename */ + +int +fuse_internal_rename(struct vnode *fdvp, + struct componentname *fcnp, + struct vnode *tdvp, + struct componentname *tcnp) +{ + struct fuse_dispatcher fdi; + struct fuse_rename_in *fri; + int err = 0; + + fdisp_init(&fdi, sizeof(*fri) + fcnp->cn_namelen + tcnp->cn_namelen + 2); + fdisp_make_vp(&fdi, FUSE_RENAME, fdvp, curthread, NULL); + + fri = fdi.indata; + fri->newdir = VTOI(tdvp); + memcpy((char *)fdi.indata + sizeof(*fri), fcnp->cn_nameptr, + fcnp->cn_namelen); + ((char *)fdi.indata)[sizeof(*fri) + fcnp->cn_namelen] = '\0'; + memcpy((char *)fdi.indata + sizeof(*fri) + fcnp->cn_namelen + 1, + tcnp->cn_nameptr, tcnp->cn_namelen); + ((char *)fdi.indata)[sizeof(*fri) + fcnp->cn_namelen + + tcnp->cn_namelen + 1] = '\0'; + + if (!(err = fdisp_wait_answ(&fdi))) { + fuse_ticket_drop(fdi.tick); + } + + fuse_invalidate_attr(fdvp); + if (tdvp != fdvp) { + fuse_invalidate_attr(tdvp); + } + + return (err); +} + +/* strategy */ + + + + + +/* entity creation */ + +void +fuse_internal_newentry_makerequest(struct mount *mp, + uint64_t dnid, + struct componentname *cnp, + enum fuse_opcode op, + void *buf, + size_t bufsize, + struct fuse_dispatcher *fdip) +{ + debug_printf("fdip=%p, context=%p\n", fdip, context); + + fdip->iosize = bufsize + cnp->cn_namelen + 1; + + fdisp_make(fdip, mp, op, dnid, curthread, NULL); + memcpy(fdip->indata, buf, bufsize); + + memcpy((char *)fdip->indata + bufsize, cnp->cn_nameptr, cnp->cn_namelen); + ((char *)fdip->indata)[bufsize + cnp->cn_namelen] = '\0'; +} + +int +fuse_internal_newentry_core(struct vnode *dvp, + struct vnode **vpp, + enum vtype vtyp, + struct fuse_dispatcher *fdip) +{ + int err = 0; + struct fuse_entry_out *feo; + struct mount *mp = dvp->v_mount; + + debug_printf("fdip=%p\n", fdip); + + KASSERT(! (mp->mnt_flag & MNT_RDONLY), + ("request for new entry in a read-only mount")); + + if ((err = fdisp_wait_answ(fdip))) { + return (err); + } + + feo = fdip->answ; + + if ((err = fuse_internal_checkentry(feo, vtyp))) { + goto out; + } + + /* + * The Linux code doesn't seem to make a fuss about + * getting a nodeid for a new entry which is already + * in use. Therefore we used to do the same. + * This is not possible with our implementation of + * atomic create+open; so, even if we could ignore this + * fuzz here, we don't do, for the sake of consistency. + */ + err = fuse_vget_i(mp, curthread, feo->nodeid, vtyp, vpp, + VG_FORCENEW, VTOI(dvp)); + + if (err) { + DEBUG2G("failed to fetch vnode for nodeid\n"); + fuse_internal_forget_send(mp, curthread, NULL, feo->nodeid, 1, fdip); + return err; + } + + VTOFUD(*vpp)->nlookup++; + cache_attrs(*vpp, feo); + +out: + fuse_ticket_drop(fdip->tick); + + return err; +} + +int +fuse_internal_newentry(struct vnode *dvp, + struct vnode **vpp, + struct componentname *cnp, + enum fuse_opcode op, + void *buf, + size_t bufsize, + enum vtype vtyp) +{ + int err; + struct fuse_dispatcher fdi; + + fdisp_init(&fdi, 0); + fuse_internal_newentry_makerequest(dvp->v_mount, VTOI(dvp), cnp, + op, buf, bufsize, &fdi); + err = fuse_internal_newentry_core(dvp, vpp, vtyp, &fdi); + fuse_invalidate_attr(dvp); + + return (err); +} + +/* entity destruction */ + +static void +fuse_internal_forget_send_pid(struct mount *mp, + pid_t pid, + struct ucred *cred, + uint64_t nodeid, + uint64_t nlookup, + struct fuse_dispatcher *fdip) +{ + struct fuse_forget_in *ffi; + + KASSERT(nlookup > 0, ("zero-times forget for vp #%llu", + (long long unsigned) nodeid)); + + DEBUG("sending FORGET with %llu lookups\n", (unsigned long long)nlookup); + + fdisp_init(fdip, sizeof(*ffi)); + fdisp_make_pid(fdip, mp, FUSE_FORGET, nodeid, pid, cred); + + ffi = fdip->indata; + ffi->nlookup = nlookup; + + fticket_disown(fdip->tick); + fuse_insert_message(fdip->tick); +} + +int +fuse_internal_forget_callback(struct fuse_ticket *tick, + struct uio *uio) +{ + struct fuse_dispatcher fdi; + struct fuse_pidcred *pidcred; + + /* + * XXX I think I'm right to send a forget regardless of possible + * errors, but... + */ + + fdi.tick = tick; + pidcred = tick->tk_aw_handler_parm.base; + + fuse_internal_forget_send_pid(tick->tk_data->mp, pidcred->pid, &pidcred->cred, + ((struct fuse_in_header *)tick->tk_ms_fiov.base)->nodeid, + 1, &fdi); + + return (0); +} + +void +fuse_internal_forget_send(struct mount *mp, + struct thread *td, + struct ucred *cred, + uint64_t nodeid, + uint64_t nlookup, + struct fuse_dispatcher *fdip) +{ + RECTIFY_TDCR(td, cred); + return (fuse_internal_forget_send_pid(mp, td->td_proc->p_pid, cred, nodeid, + nlookup, fdip)); +} + +/* fuse start/stop */ + int fuse_internal_init_callback(struct fuse_ticket *tick, struct uio *uio) { ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#5 (text+ko) ==== @@ -8,12 +8,19 @@ #include #include +#include #include #include "fuse_ipc.h" #include "fuse_node.h" -/* access related data */ +/* XXX */ +struct fuse_pidcred { + pid_t pid; + struct ucred cred; +}; + +/* access */ #define FACCESS_VA_VALID 0x01 /* flag to sign to reuse cached attributes regardless of cache timeout */ @@ -29,12 +36,180 @@ #define FVP_ACCESS_NOOP 0x01 /* vnode based control flag for doing access check */ struct fuse_access_param { - uid_t xuid; - gid_t xgid; + uid_t xuid; + gid_t xgid; + unsigned facc_flags; +}; + +int +fuse_internal_access(struct vnode *vp, + mode_t mode, + struct ucred *cred, + struct thread *td, + struct fuse_access_param *facp); + +/* attributes */ + +static __inline +void +fuse_internal_attr_fat2vat(struct mount *mp, + struct fuse_attr *fat, + struct vattr *vap) +{ + DEBUG("node #%llu, mode 0%o\n", (unsigned long long)fat->ino, fat->mode); + + vattr_null(vap); + + vap->va_fsid = mp->mnt_stat.f_fsid.val[0]; + vap->va_fileid = fat->ino; /* XXX cast from 64 bits to 32 */ + vap->va_mode = fat->mode & ~S_IFMT; + vap->va_nlink = fat->nlink; + vap->va_uid = fat->uid; + vap->va_gid = fat->gid; + vap->va_rdev = fat->rdev; + vap->va_size = fat->size; + vap->va_atime.tv_sec = fat->atime; /* XXX on some platforms cast from 64 bits to 32 */ + vap->va_atime.tv_nsec = fat->atimensec; + vap->va_mtime.tv_sec = fat->mtime; + vap->va_mtime.tv_nsec = fat->mtimensec; + vap->va_ctime.tv_sec = fat->ctime; + vap->va_ctime.tv_nsec = fat->ctimensec; + vap->va_blocksize = PAGE_SIZE; + vap->va_type = IFTOVT(fat->mode); + +#if (S_BLKSIZE == 512) + /* Optimize this case */ + vap->va_bytes = fat->blocks << 9; +#else + vap->va_bytes = fat->blocks * S_BLKSIZE; +#endif + + vap->va_flags = 0; +} + +#define timespecadd(vvp, uvp) \ + do { \ + (vvp)->tv_sec += (uvp)->tv_sec; \ + (vvp)->tv_nsec += (uvp)->tv_nsec; \ + if ((vvp)->tv_nsec >= 1000000000) { \ + (vvp)->tv_sec++; \ + (vvp)->tv_nsec -= 1000000000; \ + } \ + } while (0) + +#define cache_attrs(vp, fuse_out) do { \ + struct timespec uptsp_ ## __func__; \ + \ + VTOFUD(vp)->cached_attrs_valid.tv_sec = (fuse_out)->attr_valid; \ + VTOFUD(vp)->cached_attrs_valid.tv_nsec = (fuse_out)->attr_valid_nsec; \ + nanouptime(&uptsp_ ## __func__); \ + \ + timespecadd(&VTOFUD(vp)->cached_attrs_valid, &uptsp_ ## __func__); \ + \ + fuse_internal_attr_fat2vat((vp)->v_mount, &(fuse_out)->attr, VTOVA(vp)); \ +} while (0) + +/* fsync */ + +int +fuse_internal_fsync_callback(struct fuse_ticket *tick, struct uio *uio); + +/* readdir */ - unsigned facc_flags; +struct pseudo_dirent { + uint32_t d_namlen; }; +int +fuse_internal_readdir_processdata(struct uio *uio, + size_t reqsize, + void *buf, + size_t bufsize, + void *param); + +/* remove */ + +int +fuse_internal_remove(struct vnode *dvp, + struct vnode *vp, + struct componentname *cnp, + enum fuse_opcode op); + +/* rename */ + +int +fuse_internal_rename(struct vnode *fdvp, + struct componentname *fcnp, + struct vnode *tdvp, + struct componentname *tcnp); + +/* strategy */ + + + + +/* entity creation */ + +static __inline +int +fuse_internal_checkentry(struct fuse_entry_out *feo, enum vtype vtyp) +{ + debug_printf("feo=%p, vtype=%d\n", feo, vtyp); + + if (vtyp != IFTOVT(feo->attr.mode)) { + debug_printf("EINVAL -- %x != %x\n", vtype, IFTOVT(feo->attr.mode)); + return (EINVAL); + } + + if (feo->nodeid == FUSE_NULL_ID) { + debug_printf("EINVAL -- feo->nodeid is NULL\n"); + return (EINVAL); + } + + if (feo->nodeid == FUSE_ROOT_ID) { + debug_printf("EINVAL -- feo->nodeid is FUSE_ROOT_ID\n"); + return (EINVAL); + } + + return (0); +} + +int +fuse_internal_newentry(struct vnode *dvp, + struct vnode **vpp, + struct componentname *cnp, + enum fuse_opcode op, + void *buf, + size_t bufsize, + enum vtype vtyp); + +void +fuse_internal_newentry_makerequest(struct mount *mp, + uint64_t dnid, + struct componentname *cnp, + enum fuse_opcode op, + void *buf, + size_t bufsize, + struct fuse_dispatcher *fdip); + +int +fuse_internal_newentry_core(struct vnode *dvp, + struct vnode **vpp, + enum vtype vtyp, + struct fuse_dispatcher *fdip); + +/* entity destruction */ + +int +fuse_internal_forget_callback(struct fuse_ticket *tick, struct uio *uio); + +void +fuse_internal_forget_send(struct mount *mp, + struct thread *td, + struct ucred *cred, + uint64_t nodeid, + uint64_t nlookup, + struct fuse_dispatcher *fdip); /* fuse start/stop */ ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#8 (text+ko) ==== @@ -64,39 +64,14 @@ uint8_t flush:1; }; -#if FUSE_HAS_CREATE -struct fuse_pidcred { - pid_t pid; - struct ucred cred; -}; -#endif - -static void fuse_send_forget_pid(struct mount *mp, pid_t pid, - struct ucred *cred, uint64_t nodeid, - uint64_t nlookup, - struct fuse_dispatcher *fdip); -static void fuse_send_forget(struct mount *mp, struct thread *td, - struct ucred *cred, uint64_t nodeid, - uint64_t nlookup, - struct fuse_dispatcher *fdip); static __inline void fuse_vnode_init_data(struct vnode *vp, struct fuse_vnode_data *fvdat, uint64_t nodeid); static __inline void fuse_vnode_init_misc(struct vnode *vp, enum vtype vtyp, uint64_t parentid); -static __inline void fat2vat(struct mount *mp, struct fuse_attr *fat, - struct vattr *vap); -static __inline int fuse_match_cred(struct ucred *daemoncred, - struct ucred *usercred); -static __inline int fuse_check_spyable(struct fuse_dispatcher *fdip, - struct mount *mp, struct thread *td, - struct ucred *cred); static int fuse_recyc_backend(struct vnode *vp, struct thread *td); static void fuse_filehandle_gc(struct vnode *vp, struct thread *td, struct ucred *cred, struct fuse_release_param *frp); -static int fuse_access_i(struct vnode *vp, mode_t mode, - struct ucred *cred, struct thread *td, - struct fuse_access_param *facp); static int iterate_filehandles(struct vnode *vp, struct thread *td, struct ucred *cred, fuse_metrics_t fmetr, void *param); @@ -109,38 +84,8 @@ struct thread *td, struct ucred *cred, int flags, struct fuse_release_param *frp); -static int fuse_newentry_backend(struct vnode *dvp, - struct vnode **vpp, - struct componentname *cnp, - enum fuse_opcode op, void *buf, - size_t bufsize, enum vtype vtyp); -static __inline void fuse_make_entry_req(struct mount *mp, uint64_t dnid, - struct componentname *cnp, - enum fuse_opcode op, void *buf, - size_t bufsize, - struct fuse_dispatcher *fdip); -static __inline int checkentry(struct fuse_entry_out *feo, enum vtype vtyp); -static __inline int fuse_newentry_core(struct vnode *dvp, struct vnode **vpp, - enum vtype vtyp, - struct fuse_dispatcher *fdip); -static __inline int fuse_remove_backend(struct vnode *dvp, - struct vnode *vp, - struct componentname *cnp, - enum fuse_opcode op); -static __inline int fuse_rename_core(struct vnode *fdvp, - struct componentname *fcnp, - struct vnode *tdvp, - struct componentname *tcnp); - extern int fuse_read_directbackend(struct fuse_io_data *fioda); -static fuse_buffeater_t fuse_dir_buffeater; - -static fuse_handler_t fuse_fsync_handler; -#if FUSE_HAS_CREATE -static fuse_handler_t fuse_forgetful_handler; -#endif - static fuse_metrics_t fuse_file_ditch; static fuse_metrics_t fuse_standard_metrics; static fuse_metrics_t fuse_fsync_filehandle; @@ -155,36 +100,63 @@ static fo_close_t fuse_close_f; /* vnode ops */ -static vop_getattr_t fuse_getattr; -static vop_reclaim_t fuse_reclaim; -static vop_inactive_t fuse_inactive; -static vop_access_t fuse_access; -static vop_lookup_t fuse_lookup; -static vop_open_t fuse_open; -static vop_close_t fuse_close; -static vop_read_t fuse_read; -static vop_readdir_t fuse_readdir; -static vop_readlink_t fuse_readlink; -static vop_mknod_t fuse_mknod; -static vop_create_t fuse_create; -static vop_mkdir_t fuse_mkdir; -static vop_link_t fuse_link; -static vop_symlink_t fuse_symlink; -static vop_remove_t fuse_remove; -static vop_rmdir_t fuse_rmdir; >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Tue Jun 7 10:57:22 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D216E1065676; Tue, 7 Jun 2011 10:57:21 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 93F451065675 for ; Tue, 7 Jun 2011 10:57:21 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 816908FC08 for ; Tue, 7 Jun 2011 10:57:21 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p57AvL2f053204 for ; Tue, 7 Jun 2011 10:57:21 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p57AvLg2053201 for perforce@freebsd.org; Tue, 7 Jun 2011 10:57:21 GMT (envelope-from ilya@FreeBSD.org) Date: Tue, 7 Jun 2011 10:57:21 GMT Message-Id: <201106071057.p57AvLg2053201@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194384 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 10:57:22 -0000 http://p4web.freebsd.org/@@194384?ac=10 Change 194384 by ilya@ilya_triton2011 on 2011/06/07 10:56:33 fuse_vnops.c reduce diffs Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#9 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#9 (text+ko) ==== @@ -348,18 +348,22 @@ static int fuse_vnop_access(struct vop_access_args *ap) { - struct vnode *vp = ap->a_vp; - struct fuse_access_param facp; - struct fuse_vnode_data *fvdat = VTOFUD(vp); + struct vnode *vp = ap->a_vp; + struct fuse_access_param facp; + struct fuse_vnode_data *fvdat = VTOFUD(vp); + + fuse_trace_printf_vnop(); + + bzero(&facp, sizeof(facp)); - bzero(&facp, sizeof(facp)); - if (fvdat->flags & FVP_ACCESS_NOOP) - fvdat->flags &= ~FVP_ACCESS_NOOP; - else - facp.facc_flags |= FACCESS_DO_ACCESS; + if (fvdat->flags & FVP_ACCESS_NOOP) { + fvdat->flags &= ~FVP_ACCESS_NOOP; + } else { + facp.facc_flags |= FACCESS_DO_ACCESS; + } - return fuse_internal_access(vp, ap->a_accmode, - ap->a_cred, ap->a_td, &facp); + return fuse_internal_access(vp, ap->a_accmode, + ap->a_cred, ap->a_td, &facp); } /* @@ -373,20 +377,20 @@ static int fuse_vnop_close(struct vop_close_args *ap) { - struct fuse_release_param frp; + struct fuse_release_param frp; - DEBUG2G("vnode #%llu\n", VTOILLU(ap->a_vp)); - frp.err = 0; + DEBUG2G("vnode #%llu\n", VTOILLU(ap->a_vp)); + frp.err = 0; #if FUSE_HAS_FLUSH_RELEASE - frp.fg = 1; - frp.flush = 1; + frp.fg = 1; + frp.flush = 1; #else - frp.fg = 0; - frp.flush = 0; + frp.fg = 0; + frp.flush = 0; #endif - fuse_filehandle_gc(ap->a_vp, ap->a_td, ap->a_cred, &frp); + fuse_filehandle_gc(ap->a_vp, ap->a_td, ap->a_cred, &frp); - return (frp.err); + return (frp.err); } /* @@ -400,57 +404,57 @@ static int fuse_vnop_create(struct vop_create_args *ap) { - struct vnode *dvp = ap->a_dvp; - struct vnode **vpp = ap->a_vpp; - struct vattr *vap = ap->a_vap; + struct vnode *dvp = ap->a_dvp; + struct vnode **vpp = ap->a_vpp; + struct vattr *vap = ap->a_vap; #if FUSE_HAS_CREATE - struct fuse_vnode_data *fvdat; - int err; + struct fuse_vnode_data *fvdat; + int err; - if (vap->va_type != VREG || - fusefs_get_data(dvp->v_mount)->dataflag & FSESS_NOCREATE) - goto good_old; + if (vap->va_type != VREG || + fusefs_get_data(dvp->v_mount)->dataflag & FSESS_NOCREATE) + goto good_old; - /* - * We cobble together here a new vnode as the caller expects that, - * but we don't yet fully initialize it (that will happen when it - * will be opened). We keep it in a "germic" state. - */ - if ((err = getnewvnode("fuse", dvp->v_mount, &fuse_vnops, vpp))) - return (err); + /* + * We cobble together here a new vnode as the caller expects that, + * but we don't yet fully initialize it (that will happen when it + * will be opened). We keep it in a "germic" state. + */ + if ((err = getnewvnode("fuse", dvp->v_mount, &fuse_vnops, vpp))) + return (err); - if ((err = vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY))) { - printf("fuse4bsd: leaking vnode %p\n", *vpp); - return (err); - } + if ((err = vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY))) { + printf("fuse4bsd: leaking vnode %p\n", *vpp); + return (err); + } - fvdat = malloc(sizeof(*fvdat), M_FUSEVN, M_WAITOK | M_ZERO); + fvdat = malloc(sizeof(*fvdat), M_FUSEVN, M_WAITOK | M_ZERO); - fvdat->parent_nid = VTOI(dvp); - /* - * We overload some fields of the vnode data to carry the information - * which will be needed to make the proper CREATE query in open. - * germcnp is a dedicated field for this purpose though. - */ - fvdat->flags = MAKEIMODE(vap->va_type, vap->va_mode); - fvdat->germcnp = ap->a_cnp; + fvdat->parent_nid = VTOI(dvp); + /* + * We overload some fields of the vnode data to carry the information + * which will be needed to make the proper CREATE query in open. + * germcnp is a dedicated field for this purpose though. + */ + fvdat->flags = MAKEIMODE(vap->va_type, vap->va_mode); + fvdat->germcnp = ap->a_cnp; - /* - * Stub vnops, almost the same as "dead", with the exception of the - * critical ones which will let the vnode get fully emerged. - */ - (*vpp)->v_op = &fuse_germ_vnops; - (*vpp)->v_data = fvdat; - (*vpp)->v_mount = dvp->v_mount; + /* + * Stub vnops, almost the same as "dead", with the exception of the + * critical ones which will let the vnode get fully emerged. + */ + (*vpp)->v_op = &fuse_germ_vnops; + (*vpp)->v_data = fvdat; + (*vpp)->v_mount = dvp->v_mount; - fuse_invalidate_attr(dvp); + fuse_invalidate_attr(dvp); - return (0); + return (0); good_old: #endif - vap->va_rdev = 0; - return (VOP_MKNOD(dvp, vpp, ap->a_cnp, vap)); + vap->va_rdev = 0; + return (VOP_MKNOD(dvp, vpp, ap->a_cnp, vap)); } /* @@ -477,84 +481,85 @@ static int fuse_vnop_fsync(struct vop_fsync_args *ap) { - struct vnode *vp = ap->a_vp; - struct thread *td = ap->a_td; + struct vnode *vp = ap->a_vp; + struct thread *td = ap->a_td; + struct fuse_dispatcher fdi; - int err = 0; - struct fuse_dispatcher fdi; + int err = 0; - DEBUG("got flag %d\n", ap->a_waitfor); + DEBUG("got flag %d\n", ap->a_waitfor); - /* - * Usually, the call to vop_stdfsync is expected to do nothing, as we - * tend to leave no dirty buffers behind. However, they might show up, - * eg., after an interrupted write. - * To be able to release the kernel's cleanup-dirty-buffers machinery - * this is advised to be inserted here. - */ + /* + * Usually, the call to vop_stdfsync is expected to do nothing, as we + * tend to leave no dirty buffers behind. However, they might show up, + * eg., after an interrupted write. + * To be able to release the kernel's cleanup-dirty-buffers machinery + * this is advised to be inserted here. + */ - if ((err = vop_stdfsync(ap))) - return (err); + if ((err = vop_stdfsync(ap))) + return (err); - /* - * In Linux, the fsync syscall handler is file based. - * Hence in fuse too -- and this approach does make sense, - * for exapmle, when it comes to implementing things like - * sshfs: the sshfs userspace fsync handler flushes data - * associated with the given filehandle, ie. sftp - * messaging thread. - * - * On the other hand, BSD fsync is inherently not file - * but vnode based: even fsync(2), to which one passes - * a file descriptor, the corresponding file is used for - * nothing but looking up the vnode behind (see fsync() - * in kern/vfs_syscalls.c). - * - * We have thus two choices here: either grab the first - * open file and use that for the fsync message or run - * through all files (at least, the ones we have acces to, - * ie., those belonging to the current process). The first - * is bad: as we mentioned concerning sshfs, dirty data can belong - * to each ssh messaging thread, being associated to file - * handles independently. - * - * So we wanna sync all our open files. "Nowait" sync is easy, - * just walk over all the files, and send FUSE_FSYNC(DIR) with - * a null callback, and leave. "Wait" sync is harder: syncing - * the files linearly, one after the other would be very easy - * indeed but would be far more than a lethal dose of the KISS - * principle. So sending of the messages and waiting for them - * should be done synchronously. The messaging backend is flexible - * enough for making the implementation of this not too hard, - * but now I don't wanna go mucking with the proper handling of - * interrupts, and other issues; and I don't wanna break the nice - * hi-level messaging API which serves us well otherwise. So - * currently I just say no here... - * - * Just to note: even the "nowait" type fsync could be optimized - * if we went beyond the api, and lock/unlock all mutexes (tickets', - * messages', callbacks') only once, and take out/put in stuff for all - * files together, with one big breath. But doing not so is not as much - * overhead as it would be worth for the trouble. - */ + /* + * In Linux, the fsync syscall handler is file based. + * Hence in fuse too -- and this approach does make sense, + * for exapmle, when it comes to implementing things like + * sshfs: the sshfs userspace fsync handler flushes data + * associated with the given filehandle, ie. sftp + * messaging thread. + * + * On the other hand, BSD fsync is inherently not file + * but vnode based: even fsync(2), to which one passes + * a file descriptor, the corresponding file is used for + * nothing but looking up the vnode behind (see fsync() + * in kern/vfs_syscalls.c). + * + * We have thus two choices here: either grab the first + * open file and use that for the fsync message or run + * through all files (at least, the ones we have acces to, + * ie., those belonging to the current process). The first + * is bad: as we mentioned concerning sshfs, dirty data can belong + * to each ssh messaging thread, being associated to file + * handles independently. + * + * So we wanna sync all our open files. "Nowait" sync is easy, + * just walk over all the files, and send FUSE_FSYNC(DIR) with + * a null callback, and leave. "Wait" sync is harder: syncing + * the files linearly, one after the other would be very easy + * indeed but would be far more than a lethal dose of the KISS + * principle. So sending of the messages and waiting for them + * should be done synchronously. The messaging backend is flexible + * enough for making the implementation of this not too hard, + * but now I don't wanna go mucking with the proper handling of + * interrupts, and other issues; and I don't wanna break the nice + * hi-level messaging API which serves us well otherwise. So + * currently I just say no here... + * + * Just to note: even the "nowait" type fsync could be optimized + * if we went beyond the api, and lock/unlock all mutexes (tickets', + * messages', callbacks') only once, and take out/put in stuff for all + * files together, with one big breath. But doing not so is not as much + * overhead as it would be worth for the trouble. + */ - /* - * It seemed to be a good idea to lock the filehandle lock only before - * doing iterate_filehandle but that configuration is suspected to cause - * LOR alerts, so now we get the filehandle lock before the fuse_data - * lock. - */ - ASSERT_VOP_LOCKED__FH(vp); + /* + * It seemed to be a good idea to lock the filehandle lock only before + * doing iterate_filehandle but that configuration is suspected to cause + * LOR alerts, so now we get the filehandle lock before the fuse_data + * lock. + */ + ASSERT_VOP_LOCKED__FH(vp); - if (fusefs_get_data(vp->v_mount)->dataflag & - (vp->v_type == VDIR ? FSESS_NOFSYNCDIR : FSESS_NOFSYNC)) - goto out; + if (fusefs_get_data(vp->v_mount)->dataflag & + (vp->v_type == VDIR ? FSESS_NOFSYNCDIR : FSESS_NOFSYNC)) { + goto out; + } - fdisp_init(&fdi, 0); - iterate_filehandles(vp, td, NULL, fuse_fsync_filehandle, &fdi); + fdisp_init(&fdi, 0); + iterate_filehandles(vp, td, NULL, fuse_fsync_filehandle, &fdi); out: - return (err); + return (err); } /* @@ -717,58 +722,62 @@ static int fuse_vnop_link(struct vop_link_args *ap) { - struct vnode *dvp = ap->a_tdvp; - struct vnode *vp = ap->a_vp; - struct componentname *cnp = ap->a_cnp; + struct vnode *vp = ap->a_vp; + struct vnode *tdvp = ap->a_tdvp; + struct componentname *cnp = ap->a_cnp; + + int err = 0; + struct fuse_dispatcher fdi; + struct fuse_entry_out *feo; + struct fuse_link_in fli; + + fuse_trace_printf_vnop(); - struct fuse_dispatcher fdi; - struct fuse_link_in fli; - struct fuse_entry_out *feo; - int err = 0; + if (tdvp->v_mount != vp->v_mount) { + return (EXDEV); + } - if (dvp->v_mount != vp->v_mount) - return (EXDEV); + fli.oldnodeid = VTOI(vp); - fli.oldnodeid = VTOI(vp); + /* + * Unlike Linux, we proceed here lazily: here we do nothing on + * the kernel side for registering the new, hardlinked entry. + * (That will just happen when the hardlinked entry is looked up + * first time). We just send the request to the daemon. + * This suits better for the BSD VFS. + */ - /* - * Unlike Linux, we proceed here lazily: here we do nothing on - * the kernel side for registering the new, hardlinked entry. - * (That will just happen when the hardlinked entry is looked up - * first time). We just send the request to the daemon. - * This suits better for the BSD VFS. - */ + fdisp_init(&fdi, 0); + fuse_internal_newentry_makerequest(tdvp->v_mount, VTOI(tdvp), cnp, + FUSE_LINK, &fli, sizeof(fli), &fdi); + if ((err = fdisp_wait_answ(&fdi))) { + return (err); + } - fdisp_init(&fdi, 0); - fuse_internal_newentry_makerequest(dvp->v_mount, VTOI(dvp), cnp, FUSE_LINK, &fli, - sizeof(fli), &fdi); - if ((err = fdisp_wait_answ(&fdi))) - return (err); - - feo = fdi.answ; + feo = fdi.answ; - err = fuse_internal_checkentry(feo, vp->v_type); + err = fuse_internal_checkentry(feo, vp->v_type); - fuse_ticket_drop(fdi.tick); - fuse_invalidate_attr(dvp); - /* - * It depends on userspace if the hardlinked entry is really the - * same vnode or not. Sort of unconventionally, the latter happens - * if linking is managed by the hi-level FUSE library (in which case - * syncing between the two nodes is up to the actual fs code). - * Therefore we can't just cache the attrs we got for the hardlink node, - * -- that regards to the hardlinked node and not the original. - * What we do instead is invalidating cached attrs of the original so - * the fs gets a chance to pass on updated attributes also for the - * original node. - * - * See also remark at the similar place in the Linux kernel code. - */ - fuse_invalidate_attr(vp); + fuse_ticket_drop(fdi.tick); + fuse_invalidate_attr(tdvp); + /* + * It depends on userspace if the hardlinked entry is really the + * same vnode or not. Sort of unconventionally, the latter happens + * if linking is managed by the hi-level FUSE library (in which case + * syncing between the two nodes is up to the actual fs code). + * Therefore we can't just cache the attrs we got for the hardlink node, + * -- that regards to the hardlinked node and not the original. + * What we do instead is invalidating cached attrs of the original so + * the fs gets a chance to pass on updated attributes also for the + * original node. + * + * See also remark at the similar place in the Linux kernel code. + */ + fuse_invalidate_attr(vp); - VTOFUD(vp)->nlookup++; + VTOFUD(vp)->nlookup++; - return (err); + return (err); } /* @@ -782,412 +791,419 @@ int fuse_vnop_lookup(struct vop_lookup_args *ap) { - struct vnode *dvp = ap->a_dvp; - struct vnode **vpp = ap->a_vpp; - struct componentname *cnp = ap->a_cnp; - int nameiop = cnp->cn_nameiop; - struct thread *td = cnp->cn_thread; - struct ucred *cred = cnp->cn_cred; - int flags = cnp->cn_flags; - int wantparent = flags & WANTPARENT; - int islastcn = flags & ISLASTCN; + struct componentname *cnp = ap->a_cnp; + int nameiop = cnp->cn_nameiop; + int flags = cnp->cn_flags; + int wantparent = flags & WANTPARENT; + int islastcn = flags & ISLASTCN; + struct vnode *dvp = ap->a_dvp; + struct vnode **vpp = ap->a_vpp; + struct thread *td = cnp->cn_thread; + struct ucred *cred = cnp->cn_cred; + + fuse_trace_printf_vnop(); - int err = 0; - int lookup_err = 0; - struct vnode *vp = NULL; - struct fuse_dispatcher fdi; - struct fuse_attr *fattr = NULL; - enum fuse_opcode op; - uint64_t nid; - uint64_t parentid; - struct fuse_access_param facp; + int err = 0; + int lookup_err = 0; + struct vnode *vp = NULL; + struct fuse_attr *fattr = NULL; + struct fuse_dispatcher fdi; + enum fuse_opcode op; + uint64_t nid, parentid; + struct fuse_access_param facp; #ifdef INVARIANTS - int cache_attrs_hit = 0; + int cache_attrs_hit = 0; #endif - /* general stuff, based on vfs_cache_lookup */ + /* general stuff, based on vfs_cache_lookup */ #if _DEBUG - DEBUG2G("root node:\n"); - vn_printf(fusefs_get_data(dvp->v_mount)->rvp, " * "); + DEBUG2G("root node:\n"); + vn_printf(fusefs_get_data(dvp->v_mount)->rvp, " * "); #endif - if (dvp->v_type != VDIR) { - DEBUG("vnode #%llu of vtype %d is not a dir\n", VTOILLU(dvp), - dvp->v_type); - return (ENOTDIR); - } + if (dvp->v_type != VDIR) { + return ENOTDIR; + } - if (islastcn && (dvp->v_mount->mnt_flag & MNT_RDONLY) && - (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) - return (EROFS); + if (islastcn && (dvp->v_mount->mnt_flag & MNT_RDONLY) && + (nameiop == DELETE || nameiop == RENAME)) { + return (EROFS); + } - /* - * We do access check prior to doing anything else only in the case - * when we are at fs root (we'd like to say, "we are at the first - * component", but that's not exactly the same... nevermind). - * See further comments at further access checks. - */ + /* + * We do access check prior to doing anything else only in the case + * when we are at fs root (we'd like to say, "we are at the first + * component", but that's not exactly the same... nevermind). + * See further comments at further access checks. + */ - bzero(&facp, sizeof(facp)); - if ( + bzero(&facp, sizeof(facp)); + if ( #ifdef NO_EARLY_PERM_CHECK_HACK - 1 + 1 #else - dvp->v_vflag & VV_ROOT + dvp->v_vflag & VV_ROOT #endif - ) { - if ((err = fuse_internal_access(dvp, VEXEC, cred, td, &facp))) - return (err); - } + ) { + if ((err = fuse_internal_access(dvp, VEXEC, cred, td, &facp))) + return err; + } - DEBUG2G("lookup in #%llu, nameiop %lu, with flags %#x\n", - VTOILLU(dvp), cnp->cn_nameiop, flags); + DEBUG2G("lookup in #%llu, nameiop %lu, with flags %#x\n", + VTOILLU(dvp), cnp->cn_nameiop, flags); - /* fetching data from "storage" */ + /* fetching data from "storage" */ - if (flags & ISDOTDOT) { - DEBUG2G("dotdot lookup!\n"); - nid = VTOFUD(dvp)->parent_nid; - parentid = FUSE_NULL_ID; - fdisp_init(&fdi, 0); - op = FUSE_GETATTR; - } else if (cnp->cn_namelen == 1 && *(cnp->cn_nameptr) == '.') { - DEBUG2G("dot lookup!\n"); - nid = VTOI(dvp); - parentid = VTOFUD(dvp)->parent_nid; /* irrelevant */ - fdisp_init(&fdi, 0); - op = FUSE_GETATTR; - } else { - nid = VTOI(dvp); - parentid = VTOI(dvp); - fdisp_init(&fdi, cnp->cn_namelen + 1); - op = FUSE_LOOKUP; - } + if (flags & ISDOTDOT) { + DEBUG2G("dotdot lookup!\n"); + nid = VTOFUD(dvp)->parent_nid; + parentid = FUSE_NULL_ID; + fdisp_init(&fdi, 0); + op = FUSE_GETATTR; + } else if (cnp->cn_namelen == 1 && *(cnp->cn_nameptr) == '.') { + DEBUG2G("dot lookup!\n"); + nid = VTOI(dvp); + parentid = VTOFUD(dvp)->parent_nid; /* irrelevant */ + fdisp_init(&fdi, 0); + op = FUSE_GETATTR; + } else { + nid = VTOI(dvp); + parentid = VTOI(dvp); + fdisp_init(&fdi, cnp->cn_namelen + 1); + op = FUSE_LOOKUP; + } - fdisp_make(&fdi, dvp->v_mount, op, nid, td, cred); + fdisp_make(&fdi, dvp->v_mount, op, nid, td, cred); - if (op == FUSE_LOOKUP) { - memcpy(fdi.indata, cnp->cn_nameptr, cnp->cn_namelen); - ((char *)fdi.indata)[cnp->cn_namelen] = '\0'; - DEBUG2G("standard lookup, looking up %s\n", (char *)fdi.indata); - } + if (op == FUSE_LOOKUP) { + memcpy(fdi.indata, cnp->cn_nameptr, cnp->cn_namelen); + ((char *)fdi.indata)[cnp->cn_namelen] = '\0'; + DEBUG2G("standard lookup, looking up %s\n", (char *)fdi.indata); + } - lookup_err = fdisp_wait_answ(&fdi); + lookup_err = fdisp_wait_answ(&fdi); - if (op == FUSE_LOOKUP && ! lookup_err) { - nid = ((struct fuse_entry_out *)fdi.answ)->nodeid; - if (! nid) { - /* - * zero nodeid is the same as "not found", - * but it's also cacheable (which we keep - * keep on doing not as of writing this) - */ - DEBUG2G("zero nid, ie ENOENT\n"); - lookup_err = ENOENT; - } else if (nid == FUSE_ROOT_ID) { - DEBUG2G("root inode found on lookup?!!\n"); - lookup_err = EINVAL; - } - } + if (op == FUSE_LOOKUP && !lookup_err) { + nid = ((struct fuse_entry_out *)fdi.answ)->nodeid; + if (!nid) { + /* + * zero nodeid is the same as "not found", + * but it's also cacheable (which we keep + * keep on doing not as of writing this) + */ + DEBUG2G("zero nid, ie ENOENT\n"); + lookup_err = ENOENT; + } else if (nid == FUSE_ROOT_ID) { + DEBUG2G("root inode found on lookup?!!\n"); + lookup_err = EINVAL; + } + } - if (lookup_err && ( - (! fdi.answ_stat) || /* this means messaging error */ - lookup_err != ENOENT || /* daemon reported other error than "legal" ENOENT */ - op != FUSE_LOOKUP /* we tolerate ENOENT only when we sent a LOOKUP */ - )) { - /* - * There is error but not lookup related actually - * (messaging error) - */ - DEBUG("lookup failed b/c messaging crap\n"); - return (lookup_err); - } + if (lookup_err && ( + (!fdi.answ_stat) || /* this means messaging error */ + lookup_err != ENOENT || /* daemon reported other error than "legal" ENOENT */ + op != FUSE_LOOKUP /* we tolerate ENOENT only when we sent a LOOKUP */ + )) { + /* + * There is error but not lookup related actually + * (messaging error) + */ + DEBUG("lookup failed b/c messaging crap\n"); + return (lookup_err); + } - /* analyzing answer */ + /* analyzing answer */ - /* - * Now we got the answer and filtered out the crap, too, so we know that - * "found" iff lookup_err == 0 - */ + /* + * Now we got the answer and filtered out the crap, too, so we know that + * "found" iff lookup_err == 0 + */ - if (lookup_err) { - DEBUG("looked up thingy not found\n"); - if ((nameiop == CREATE || nameiop == RENAME) - && islastcn - /* && directory dvp has not been removed */) { + if (lookup_err) { + DEBUG("looked up thingy not found\n"); + if ((nameiop == CREATE || nameiop == RENAME) + && islastcn + /* && directory dvp has not been removed */) { - if (dvp->v_mount->mnt_flag & MNT_RDONLY) { - err = EROFS; - goto out; - } + if (dvp->v_mount->mnt_flag & MNT_RDONLY) { + err = EROFS; + goto out; + } - DEBUG("create/rename -- we have to make it\n"); - /* - * Check for write access on directory. - */ - - if ((err = fuse_internal_access(dvp, VWRITE, cred, td, &facp))) - goto out; + DEBUG("create/rename -- we have to make it\n"); + /* + * Check for write access on directory. + */ + + if ((err = fuse_internal_access(dvp, VWRITE, cred, td, &facp))) + goto out; - /* - * Possibly record the position of a slot in the - * directory large enough for the new component name. - * This can be recorded in the vnode private data for - * dvp. Set the SAVENAME flag to hold onto the - * pathname for use later in VOP_CREATE or VOP_RENAME. - */ - cnp->cn_flags |= SAVENAME; - - err = EJUSTRETURN; - goto out; - } + /* + * Possibly record the position of a slot in the + * directory large enough for the new component name. + * This can be recorded in the vnode private data for + * dvp. Set the SAVENAME flag to hold onto the + * pathname for use later in VOP_CREATE or VOP_RENAME. + */ + cnp->cn_flags |= SAVENAME; + + err = EJUSTRETURN; + goto out; + } - /* - * Consider inserting name into cache. - */ + /* + * Consider inserting name into cache. + */ - /* - * No we can't use negative caching, as the fs - * changes are out of our control. - * False positives' falseness turns out just as things - * go by, but false negatives' falseness doesn't. - * (and aiding the caching mechanism with extra control - * mechanisms comes quite close to beating the whole purpose - * caching...) - */ + /* + * No we can't use negative caching, as the fs + * changes are out of our control. + * False positives' falseness turns out just as things + * go by, but false negatives' falseness doesn't. + * (and aiding the caching mechanism with extra control + * mechanisms comes quite close to beating the whole purpose + * caching...) + */ #if 0 - if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE) { - DEBUG("inserting NULL into cache\n"); - cache_enter(dvp, NULL, cnp); - } + if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE) { + DEBUG("inserting NULL into cache\n"); + cache_enter(dvp, NULL, cnp); + } #endif - err = ENOENT; - goto out; - } else { - if (op == FUSE_GETATTR) - fattr = &((struct fuse_attr_out *)fdi.answ)->attr; - else - fattr = &((struct fuse_entry_out *)fdi.answ)->attr; + err = ENOENT; + goto out; + + } else { + if (op == FUSE_GETATTR) { + fattr = &((struct fuse_attr_out *)fdi.answ)->attr; + } else { + fattr = &((struct fuse_entry_out *)fdi.answ)->attr; + } - DEBUG("we found something...\n"); - /* - * If deleting, and at end of pathname, return parameters - * which can be used to remove file. If the wantparent flag - * isn't set, we return only the directory, otherwise we go on - * and lock the inode, being careful with ".". - */ - if (nameiop == DELETE && islastcn) { - DEBUG("something to delete\n"); - /* - * Check for write access on directory. - */ + DEBUG("we found something...\n"); + /* + * If deleting, and at end of pathname, return parameters + * which can be used to remove file. If the wantparent flag + * isn't set, we return only the directory, otherwise we go on + * and lock the inode, being careful with ".". + */ + if (nameiop == DELETE && islastcn) { + DEBUG("something to delete\n"); + /* + * Check for write access on directory. + */ - facp.xuid = fattr->uid; - facp.facc_flags |= FACCESS_STICKY; - err = fuse_internal_access(dvp, VWRITE, cred, td, &facp); - facp.facc_flags &= ~FACCESS_XQUERIES; + facp.xuid = fattr->uid; + facp.facc_flags |= FACCESS_STICKY; + err = fuse_internal_access(dvp, VWRITE, cred, td, &facp); + facp.facc_flags &= ~FACCESS_XQUERIES; - if (err) - goto out; + if (err) { + goto out; + } - if (nid == VTOI(dvp)) { - VREF(dvp); - *vpp = dvp; - goto out; - } + if (nid == VTOI(dvp)) { + VREF(dvp); + *vpp = dvp; + goto out; + } - err = fuse_vget_i(dvp->v_mount, td, nid, - IFTOVT(fattr->mode), &vp, VG_NORMAL, - parentid); - if (err) - goto out; - *vpp = vp; + if ((err = fuse_vget_i(dvp->v_mount, td, + nid, + IFTOVT(fattr->mode), + &vp, + VG_NORMAL, + parentid))) { + goto out; + } - goto out; - } + *vpp = vp; + + goto out; + } - /* - * If rewriting (RENAME), return the inode and the - * information required to rewrite the present directory - * Must get inode of directory entry to verify it's a - * regular file, or empty directory. - */ - if (nameiop == RENAME && wantparent && islastcn) { - DEBUG("something to rename...\n"); + /* + * If rewriting (RENAME), return the inode and the + * information required to rewrite the present directory + * Must get inode of directory entry to verify it's a + * regular file, or empty directory. + */ + if (nameiop == RENAME && wantparent && islastcn) { + DEBUG("something to rename...\n"); - facp.xuid = fattr->uid; - facp.facc_flags |= FACCESS_STICKY; - err = fuse_internal_access(dvp, VWRITE, cred, td, &facp); - facp.facc_flags &= ~FACCESS_XQUERIES; + facp.xuid = fattr->uid; + facp.facc_flags |= FACCESS_STICKY; + err = fuse_internal_access(dvp, VWRITE, cred, td, &facp); + facp.facc_flags &= ~FACCESS_XQUERIES; - if (err) - goto out; + if (err) + goto out; - /* - * Check for "." - */ - if (nid == VTOI(dvp)) { - err = EISDIR; - goto out; - } + /* + * Check for "." + */ + if (nid == VTOI(dvp)) { + err = EISDIR; + goto out; + } - err = fuse_vget_i(dvp->v_mount, td, nid, - IFTOVT(fattr->mode), &vp, VG_NORMAL, - parentid); - if (err) - goto out; - *vpp = vp; - /* - * Save the name for use in VOP_RENAME later. - */ - cnp->cn_flags |= SAVENAME; + err = fuse_vget_i(dvp->v_mount, td, nid, + IFTOVT(fattr->mode), &vp, VG_NORMAL, + parentid); + if (err) + goto out; + *vpp = vp; + /* + * Save the name for use in VOP_RENAME later. + */ + cnp->cn_flags |= SAVENAME; - goto out; - } + goto out; + } - DEBUG("we peacefully found that file\n"); + DEBUG("we peacefully found that file\n"); - if (nid == VTOI(dvp)) { - VREF(dvp); /* We want ourself, ie "." */ - *vpp = dvp; - } else { - if (flags & ISDOTDOT) - /* - * If doing dotdot, we unlock dvp for vget time - * to conform lock order regulations. - */ - VOP_UNLOCK(dvp, 0); - err = fuse_vget_i(dvp->v_mount, td, nid, - IFTOVT(fattr->mode), &vp, VG_NORMAL, - parentid); - if (flags & ISDOTDOT) - vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); - if (err) - goto out; - *vpp = vp; - } + if (nid == VTOI(dvp)) { + VREF(dvp); /* We want ourself, ie "." */ + *vpp = dvp; + } else { + if (flags & ISDOTDOT) + /* + * If doing dotdot, we unlock dvp for vget time + * to conform lock order regulations. + */ + VOP_UNLOCK(dvp, 0); + err = fuse_vget_i(dvp->v_mount, td, nid, + IFTOVT(fattr->mode), &vp, VG_NORMAL, + parentid); + if (flags & ISDOTDOT) + vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); + if (err) + goto out; + *vpp = vp; + } - if (op == FUSE_GETATTR) - cache_attrs(*vpp, (struct fuse_attr_out *)fdi.answ); - else - cache_attrs(*vpp, (struct fuse_entry_out *)fdi.answ); + if (op == FUSE_GETATTR) + cache_attrs(*vpp, (struct fuse_attr_out *)fdi.answ); + else + cache_attrs(*vpp, (struct fuse_entry_out *)fdi.answ); #ifdef INVARIANTS - cache_attrs_hit = 1; + cache_attrs_hit = 1; #endif - /* Insert name into cache if appropriate. */ + /* Insert name into cache if appropriate. */ - /* - * Nooo, caching is evil. With caching, we can't avoid stale - * information taking over the playground (cached info is not - * just positive/negative, it does have qualitative aspects, - * too). And a (VOP/FUSE)_GETATTR is always thrown anyway, when - * walking down along cached path components, and that's not - * any cheaper than FUSE_LOOKUP. This might change with - * implementing kernel side attr caching, but... In Linux, - * lookup results are not cached, and the daemon is bombarded - * with FUSE_LOOKUPS on and on. This shows that by design, the - * daemon is expected to handle frequent lookup queries - * efficiently, do its caching in userspace, and so on. - * - * So just leave the name cache alone. - */ >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Tue Jun 7 10:57:22 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5AFC21065771; Tue, 7 Jun 2011 10:57:22 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B56A0106566C for ; Tue, 7 Jun 2011 10:57:21 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id A4BA88FC0A for ; Tue, 7 Jun 2011 10:57:21 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p57AvLWQ053210 for ; Tue, 7 Jun 2011 10:57:21 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p57AvLVb053207 for perforce@freebsd.org; Tue, 7 Jun 2011 10:57:21 GMT (envelope-from ilya@FreeBSD.org) Date: Tue, 7 Jun 2011 10:57:21 GMT Message-Id: <201106071057.p57AvLVb053207@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194385 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 10:57:22 -0000 http://p4web.freebsd.org/@@194385?ac=10 Change 194385 by ilya@ilya_triton2011 on 2011/06/07 10:57:14 Add one line functions to access uio and vnode fields used by Mac OS X Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#6 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#6 (text+ko) ==== @@ -14,6 +14,42 @@ #include "fuse_ipc.h" #include "fuse_node.h" +static __inline struct mount * +vnode_mount(struct vnode *vp) +{ + return (vp->v_mount); +} + +static __inline enum vtype +vnode_vtype(struct vnode *vp) +{ + return (vp->v_type); +} + +static __inline int +vnode_isvroot(struct vnode *vp) +{ + return ((vp->v_vflag & VV_ROOT) != 0 ? 1 : 0); +} + +static __inline ssize_t +uio_resid(struct uio *uio) +{ + return (uio->uio_resid); +} + +static __inline off_t +uio_offset(struct uio *uio) +{ + return (uio->uio_offset); +} + +static __inline void +uio_setoffset(struct uio *uio, off_t offset) +{ + uio->uio_offset = offset; +} + /* XXX */ struct fuse_pidcred { pid_t pid; From owner-p4-projects@FreeBSD.ORG Tue Jun 7 10:58:26 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 54DD91065675; Tue, 7 Jun 2011 10:58:26 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 034A21065673 for ; Tue, 7 Jun 2011 10:58:26 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id E4B508FC22 for ; Tue, 7 Jun 2011 10:58:25 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p57AwPo7053244 for ; Tue, 7 Jun 2011 10:58:25 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p57AwPrj053241 for perforce@freebsd.org; Tue, 7 Jun 2011 10:58:25 GMT (envelope-from ilya@FreeBSD.org) Date: Tue, 7 Jun 2011 10:58:25 GMT Message-Id: <201106071058.p57AwPrj053241@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194386 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 10:58:26 -0000 http://p4web.freebsd.org/@@194386?ac=10 Change 194386 by ilya@ilya_triton2011 on 2011/06/07 10:58:20 Start macfuse merge Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_device.c#4 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_file.h#2 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#5 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#7 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.h#3 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_ipc.c#3 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_ipc.h#5 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_node.h#3 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#10 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_device.c#4 (text+ko) ==== @@ -291,7 +291,7 @@ DEBUG2G("reader is to be sacked\n"); if (tick) { DEBUG2G("weird -- \"kick\" is set tho there is message\n"); - fuse_ticket_drop_notowned(tick); + fuse_ticket_drop_invalid(tick); } return (ENODEV); /* This should make the daemon get off of us */ } @@ -343,7 +343,7 @@ * (used when the one who inserted the message thinks the daemon * won't aswer) */ - fuse_ticket_drop_notowned(tick); + fuse_ticket_drop_invalid(tick); return (err); } ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_file.h#2 (text+ko) ==== @@ -1,26 +1,92 @@ /* - * Fuse filehandle, for in-kernel bookkeping of daemon's filehandles - * (which are presented to us as an opque 64 bit id, see the fh_id - * member of the struct). - * It serves as private data for in-kernel file structures, but can - * as well occur standalone. + * Copyright (C) 2006 Google. All Rights Reserved. + * Amit Singh */ +#ifndef _FUSE_FILE_H_ +#define _FUSE_FILE_H_ + +#include +#include +#include +#include +#include + +typedef enum fufh_type { + FUFH_INVALID = -1, + FUFH_RDONLY = 0, + FUFH_WRONLY = 1, + FUFH_RDWR = 2, + FUFH_MAXTYPE = 3, +} fufh_type_t; + +#define FUFH_VALID 0x00000001 +#define FUFH_MAPPED 0x00000002 +#define FUFH_STRATEGY 0x00000004 + struct fuse_filehandle { - struct vnode *fh_vp; - uint64_t fh_id; - int mode; - struct ucred *cred; - pid_t pid; - int useco; - LIST_ENTRY(fuse_filehandle) fh_link; - struct file *fp; - int flags; - enum fuse_opcode op; + uint64_t fh_id; + fufh_type_t type; + int fufh_flags; + int open_count; + int open_flags; + int fuse_open_flags; }; +typedef struct fuse_filehandle * fuse_filehandle_t; + +static __inline__ fufh_type_t +fuse_filehandle_xlate_from_mmap(int fflags) +{ + if (fflags & (PROT_READ | PROT_WRITE)) { + return FUFH_RDWR; + } else if (fflags & (PROT_WRITE)) { + return FUFH_WRONLY; + } else if ((fflags & PROT_READ) || (fflags & PROT_EXEC)) { + return FUFH_RDONLY; + } else { + return FUFH_INVALID; + } +} + +static __inline__ fufh_type_t +fuse_filehandle_xlate_from_fflags(int fflags) +{ + if ((fflags & FREAD) && (fflags & FWRITE)) { + return FUFH_RDWR; + } else if (fflags & (FWRITE)) { + return FUFH_WRONLY; + } else if (fflags & (FREAD)) { + return FUFH_RDONLY; + } else { + panic("What kind of a flag is this?"); + } +} -#define FTOFH(fp) ((struct fuse_filehandle *)(fp)->f_data) +static __inline__ int +fuse_filehandle_xlate_to_oflags(fufh_type_t type) +{ + int oflags = -1; + + switch (type) { + case FUFH_RDONLY: + oflags = O_RDONLY; + break; + case FUFH_WRONLY: + oflags = O_WRONLY; + break; + case FUFH_RDWR: + oflags = O_RDWR; + break; + default: + break; + } + + return oflags; +} -#define ASSERT_VOP_ELOCKED__FH(vp) ASSERT_VOP_ELOCKED((vp), "unsafe filehandle access") -#define ASSERT_VOP_LOCKED__FH(vp) ASSERT_VOP_LOCKED((vp), "unsafe filehandle access") +int fuse_filehandle_get(struct vnode *vp, struct thread *td, struct ucred *cred, + fufh_type_t fufh_type); +int fuse_filehandle_put(struct vnode *vp, struct thread *td, struct ucred *cred, + fufh_type_t fufh_type, int foregrounded); +#endif /* _FUSE_FILE_H_ */ ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#5 (text+ko) ==== @@ -1,3 +1,8 @@ +/* + * Copyright (C) 2006 Google. All Rights Reserved. + * Amit Singh + */ + #include "config.h" #include @@ -29,9 +34,14 @@ #include #include "fuse.h" +#include "fuse_file.h" +#include "fuse_internal.h" +#include "fuse_ipc.h" #include "fuse_node.h" -#include "fuse_ipc.h" -#include "fuse_internal.h" +#include "fuse_file.h" +// #include "fuse_nodehash.h" +#include "fuse_param.h" +// #include "fuse_sysctl.h" /* access */ @@ -213,62 +223,106 @@ fuse_check_spyable(struct fuse_dispatcher *fdip, struct mount *mp, struct thread *td, struct ucred *cred) { - struct fuse_data *data = fusefs_get_data(mp); - struct fuse_secondary_data *x_fsdat; - int denied; + return (0); +} + +/* fsync */ + +int +fuse_internal_fsync_callback(struct fuse_ticket *tick, struct uio *uio) +{ + fuse_trace_printf_func(); + + if (tick->tk_aw_ohead.error == ENOSYS) { + tick->tk_data->dataflag |= (fticket_opcode(tick) == FUSE_FSYNC) ? + FSESS_NOFSYNC : FSESS_NOFSYNCDIR; + } + + fuse_ticket_drop(tick); + + return 0; +} - if (data->dataflag & FSESS_DAEMON_CAN_SPY) - return (0); +int +fuse_internal_fsync(struct vnode *vp, + struct thread *td, + struct ucred *cred, + struct fuse_filehandle *fufh, + void *param) +{ + int op = FUSE_FSYNC; + struct fuse_fsync_in *ffsi; + struct fuse_dispatcher *fdip = param; - /* - * The policy is to forbid a user from using the filesystem, - * unless she has it mounted. - * - * This is primarily to - * protect her from the daemon spying on her I/O - * operations. Although this is not a concern if the user - * is more privileged than the daemon, we consistently - * demand the per-user mount, in order to be compatible - * with the Linux implementation. - * - * Secondary mounts let arbitrary number of users mount and - * use the filesystem. However, the primary mounter must explicitly - * allow secondary mounts. This is again for providing Linux like - * defaults. - */ + fuse_trace_printf_func(); - denied = fuse_match_cred(mp->mnt_cred, cred); - if (! denied) - goto allow; + fdip->iosize = sizeof(*ffsi); + fdip->tick = NULL; + if (vnode_vtype(vp) == VDIR) { + op = FUSE_FSYNCDIR; + } + + fdisp_make_vp(fdip, op, vp, td, cred); + ffsi = fdip->indata; + ffsi->fh = fufh->fh_id; - LIST_FOREACH(x_fsdat, &data->slaves_head, slaves_link) { - denied = fuse_match_cred(x_fsdat->mp->mnt_cred, cred); - if (! denied) - goto allow; - } + ffsi->fsync_flags = 1; + + fuse_insert_callback(fdip->tick, fuse_internal_fsync_callback); + fuse_insert_message(fdip->tick); - return (EACCES); + return 0; -allow: - return (0); } -/* fsync */ +/* readdir */ int -fuse_internal_fsync_callback(struct fuse_ticket *tick, struct uio *uio) +fuse_internal_readdir(struct vnode *vp, + struct uio *uio, + struct thread *td, + struct ucred *cred, + struct fuse_filehandle *fufh, + struct fuse_iov *cookediov) { - if (tick->tk_aw_ohead.error == ENOSYS) - tick->tk_data->dataflag |= - fticket_opcode(tick) == FUSE_FSYNC ? - FSESS_NOFSYNC : FSESS_NOFSYNCDIR; + int err = 0; + struct fuse_dispatcher fdi; + struct fuse_read_in *fri; + + if (uio_resid(uio) == 0) { + return (0); + } + + fdisp_init(&fdi, 0); + + /* Note that we DO NOT have a UIO_SYSSPACE here (so no need for p2p I/O). */ + + while (uio_resid(uio) > 0) { + + fdi.iosize = sizeof(*fri); + fdisp_make_vp(&fdi, FUSE_READDIR, vp, td, cred); + + fri = fdi.indata; + fri->fh = fufh->fh_id; + fri->offset = uio_offset(uio); + fri->size = min(uio_resid(uio), FUSE_DEFAULT_IOSIZE); // mp->max_read + + if ((err = fdisp_wait_answ(&fdi))) { + goto out; + } + + if ((err = fuse_internal_readdir_processdata(uio, fri->size, fdi.answ, + fdi.iosize, cookediov))) { + break; + } + } + + fuse_ticket_drop(fdi.tick); - fuse_ticket_drop(tick); - return (0); +out: + return ((err == -1) ? 0 : err); } -/* readdir */ - int fuse_internal_readdir_processdata(struct uio *uio, size_t reqsize, @@ -276,28 +330,6 @@ size_t bufsize, void *param) { - /* - * The daemon presents us with a virtual geometry when reading dirents. - * This info is stored in the "off" field of fuse_dirent (which is the - * struct we can read from her). "off" shows the absolut position of - * the next entry (by definition). So I might pull 40 actual bytes from - * the daemon, that might count as 60 by her virtual geometry, and when - * I translate fuse_dirents to POSIX dirents, I have 20 bytes to pass - * to the userspace reader. - * - * How to keep these in sync? We don't want to make the general read - * routine complex (to which here we serve a background, and which - * naively treats reading by a liner logic). So we artifically inflate - * dirents: we pad them with as much zeros as we need them to get to - * next offset (as the deamon declared), and we pass it to the reader - * thusly (this will work as fuse dirents are bigger than std ones). So - * we do more IO with the reader than absolutely necessary, but it's - * hardly a problem as the expensive thing is reading from the daemon, - * not sending data to the reader. - * - * There is no use to change this simple geometry translation scheme - * 'till we do page caching. [We do now, but it's still fine as is.] - */ int err = 0; int cou = 0; int bytesavail; @@ -307,33 +339,10 @@ struct fuse_dirent *fudge; struct fuse_iov *cookediov = param; - KASSERT(bufsize <= reqsize, ("read more than asked for?")); - - DEBUG2G("starting\n"); - - /* - * Sanity check: if this fails, we would overrun the allocated space - * upon entering the loop below, so we'd better leave right now. - * If so, we return -1 to terminate reading. - */ if (bufsize < FUSE_NAME_OFFSET) { return (-1); } - DEBUG2G("entering loop with bufsize %d\n", (int)bufsize); - - /* - * Can we avoid infite loops? An infinite loop could occur only if we - * leave this function with 0 return value, because otherwise we wont't - * be called again. But both 0 exit points imply that some data has - * been consumed... because - * 1) if a turn is not aborted, it consumes positive amount of data - * 2) the 0 jump-out from within the loop can't occur in the first - * turn - * 3) if we exit 0 after the loop is over, then at least one turn - * was completed, otherwise we hed exited above with -1. - */ - for (;;) { if (bufsize < FUSE_NAME_OFFSET) { @@ -346,15 +355,6 @@ fudge = (struct fuse_dirent *)buf; freclen = FUSE_DIRENT_SIZE(fudge); - DEBUG("bufsize %d, freclen %d\n", (int)bufsize, (int)freclen); - - /* - * Here is an exit condition: we terminate the whole reading - * process if a fresh chunk of buffer is already too short to - * cut out an entry. - * (It it was not the first turn in the loop, nevermind, - * return with asking for more) - */ if (bufsize < freclen) { err = ((cou == 1) ? -1 : 0); break; @@ -367,25 +367,14 @@ } #endif - /* Sanity checks */ - if (!fudge->namelen || fudge->namelen > MAXNAMLEN) { - DEBUG2G("bogus namelen %d at turn %d\n", - fudge->namelen, cou); err = EINVAL; break; } bytesavail = GENERIC_DIRSIZ((struct pseudo_dirent *)&fudge->namelen); - /* - * Exit condition 2: if the pretended amount of input is more - * than that the userspace wants, then it's time to stop - * reading. - */ - if (bytesavail > uio->uio_resid) { - DEBUG2G("leaving at %d-th item as we have %d bytes but only %d is asked for\n", - cou, bytesavail, uio->uio_resid); + if (bytesavail > uio_resid(uio)) { err = -1; break; } @@ -402,10 +391,6 @@ (char *)buf + FUSE_NAME_OFFSET, fudge->namelen); ((char *)cookediov->base)[bytesavail] = '\0'; - DEBUG("bytesavail %d, fudge->off %llu, fudge->namelen %d, uio->uio_offset %d, name %s\n", - bytesavail, (unsigned long long)fudge->off, fudge->namelen, (int)uio->uio_offset, - (char *)cookediov->base + sizeof(struct dirent) - MAXNAMLEN - 1); - err = uiomove(cookediov->base, cookediov->len, uio); if (err) { break; @@ -413,7 +398,7 @@ buf = (char *)buf + freclen; bufsize -= freclen; - uio->uio_offset = fudge->off; + uio_setoffset(uio, fudge->off); } return (err); @@ -421,6 +406,26 @@ /* remove */ +#ifdef XXXIP +static int +fuse_unlink_callback(struct vnode *vp, void *cargs) +{ + struct vattr *vap; + uint64_t target_nlink; + + vap = VTOVA(vp); + + target_nlink = *(uint64_t *)cargs; + + if ((vap->va_nlink == target_nlink) && (vnode_vtype(vp) == VREG)) { + fuse_invalidate_attr(vp); + } + + return 0; +} +#endif + +#define INVALIDATE_CACHED_VATTRS_UPON_UNLINK 1 int fuse_internal_remove(struct vnode *dvp, struct vnode *vp, @@ -428,9 +433,14 @@ enum fuse_opcode op) { struct fuse_dispatcher fdi; + struct vattr *vap = VTOVA(vp); +#if INVALIDATE_CACHED_VATTRS_UPON_UNLINK + int need_invalidate = 0; + uint64_t target_nlink = 0; +#endif int err = 0; - debug_printf("dvp=%p, cnp=%p, op=%d, context=%p\n", vp, cnp, op, context); + debug_printf("dvp=%p, cnp=%p, op=%d\n", vp, cnp, op); fdisp_init(&fdi, cnp->cn_namelen + 1); fdisp_make_vp(&fdi, op, dvp, curthread, NULL); @@ -438,6 +448,13 @@ memcpy(fdi.indata, cnp->cn_nameptr, cnp->cn_namelen); ((char *)fdi.indata)[cnp->cn_namelen] = '\0'; +#if INVALIDATE_CACHED_VATTRS_UPON_UNLINK + if (vap->va_nlink > 1) { + need_invalidate = 1; + target_nlink = vap->va_nlink; + } +#endif + if (!(err = fdisp_wait_answ(&fdi))) { fuse_ticket_drop(fdi.tick); } @@ -445,6 +462,15 @@ fuse_invalidate_attr(dvp); fuse_invalidate_attr(vp); +#if INVALIDATE_CACHED_VATTRS_UPON_UNLINK +#ifdef XXXIP + if (need_invalidate && !err) { + vnode_iterate(vnode_mount(vp), 0, fuse_unlink_callback, + (void *)&target_nlink); + } +#endif +#endif + return (err); } @@ -511,6 +537,8 @@ memcpy((char *)fdip->indata + bufsize, cnp->cn_nameptr, cnp->cn_namelen); ((char *)fdip->indata)[bufsize + cnp->cn_namelen] = '\0'; + + fdip->iosize = bufsize + cnp->cn_namelen + 1; } int @@ -521,13 +549,10 @@ { int err = 0; struct fuse_entry_out *feo; - struct mount *mp = dvp->v_mount; + struct mount *mp = vnode_mount(dvp); debug_printf("fdip=%p\n", fdip); - KASSERT(! (mp->mnt_flag & MNT_RDONLY), - ("request for new entry in a read-only mount")); - if ((err = fdisp_wait_answ(fdip))) { return (err); } @@ -538,24 +563,13 @@ goto out; } - /* - * The Linux code doesn't seem to make a fuss about - * getting a nodeid for a new entry which is already - * in use. Therefore we used to do the same. - * This is not possible with our implementation of - * atomic create+open; so, even if we could ignore this - * fuzz here, we don't do, for the sake of consistency. - */ err = fuse_vget_i(mp, curthread, feo->nodeid, vtyp, vpp, VG_FORCENEW, VTOI(dvp)); - if (err) { - DEBUG2G("failed to fetch vnode for nodeid\n"); fuse_internal_forget_send(mp, curthread, NULL, feo->nodeid, 1, fdip); return err; } - VTOFUD(*vpp)->nlookup++; cache_attrs(*vpp, feo); out: @@ -577,7 +591,7 @@ struct fuse_dispatcher fdi; fdisp_init(&fdi, 0); - fuse_internal_newentry_makerequest(dvp->v_mount, VTOI(dvp), cnp, + fuse_internal_newentry_makerequest(vnode_mount(dvp), VTOI(dvp), cnp, op, buf, bufsize, &fdi); err = fuse_internal_newentry_core(dvp, vpp, vtyp, &fdi); fuse_invalidate_attr(dvp); @@ -587,51 +601,19 @@ /* entity destruction */ -static void -fuse_internal_forget_send_pid(struct mount *mp, - pid_t pid, - struct ucred *cred, - uint64_t nodeid, - uint64_t nlookup, - struct fuse_dispatcher *fdip) -{ - struct fuse_forget_in *ffi; - - KASSERT(nlookup > 0, ("zero-times forget for vp #%llu", - (long long unsigned) nodeid)); - - DEBUG("sending FORGET with %llu lookups\n", (unsigned long long)nlookup); - - fdisp_init(fdip, sizeof(*ffi)); - fdisp_make_pid(fdip, mp, FUSE_FORGET, nodeid, pid, cred); - - ffi = fdip->indata; - ffi->nlookup = nlookup; - - fticket_disown(fdip->tick); - fuse_insert_message(fdip->tick); -} - int -fuse_internal_forget_callback(struct fuse_ticket *tick, - struct uio *uio) +fuse_internal_forget_callback(struct fuse_ticket *tick, struct uio *uio) { struct fuse_dispatcher fdi; - struct fuse_pidcred *pidcred; - /* - * XXX I think I'm right to send a forget regardless of possible - * errors, but... - */ + debug_printf("tick=%p, uio=%p\n", tick, uio); fdi.tick = tick; - pidcred = tick->tk_aw_handler_parm.base; + fuse_internal_forget_send(tick->tk_data->mp, curthread, NULL, + ((struct fuse_in_header *)tick->tk_ms_fiov.base)->nodeid, + 1, &fdi); - fuse_internal_forget_send_pid(tick->tk_data->mp, pidcred->pid, &pidcred->cred, - ((struct fuse_in_header *)tick->tk_ms_fiov.base)->nodeid, - 1, &fdi); - - return (0); + return 0; } void @@ -642,9 +624,24 @@ uint64_t nlookup, struct fuse_dispatcher *fdip) { - RECTIFY_TDCR(td, cred); - return (fuse_internal_forget_send_pid(mp, td->td_proc->p_pid, cred, nodeid, - nlookup, fdip)); + struct fuse_forget_in *ffi; + + debug_printf("mp=%p, nodeid=%llx, nlookup=%lld, fdip=%p\n", + mp, nodeid, nlookup, fdip); + + /* + * KASSERT(nlookup > 0, ("zero-times forget for vp #%llu", + * (long long unsigned) nodeid)); + */ + + fdisp_init(fdip, sizeof(*ffi)); + fdisp_make(fdip, mp, FUSE_FORGET, nodeid, td, cred); + + ffi = fdip->indata; + ffi->nlookup = nlookup; + + fticket_invalidate(fdip->tick); + fuse_insert_message(fdip->tick); } /* fuse start/stop */ @@ -654,11 +651,7 @@ { int err = 0; struct fuse_data *data = tick->tk_data; -#if FUSE_KERNELABI_GEQ(7, 5) struct fuse_init_out *fiio; -#else - struct fuse_init_in_out *fiio; -#endif if ((err = tick->tk_aw_ohead.error)) { goto out; @@ -670,9 +663,9 @@ fiio = fticket_resp(tick)->base; - /* XXX is the following check adequate? */ + /* XXX: Do we want to check anything further besides this? */ if (fiio->major < 7) { - DEBUG2G("userpace version too low\n"); + debug_printf("userpace version too low\n"); err = EPROTONOSUPPORT; goto out; } @@ -680,14 +673,12 @@ data->fuse_libabi_major = fiio->major; data->fuse_libabi_minor = fiio->minor; - if (FUSE_KERNELABI_GEQ(7, 5) && fuse_libabi_geq(data, 7, 5)) { -#if FUSE_KERNELABI_GEQ(7, 5) + if (fuse_libabi_geq(data, 7, 5)) { if (fticket_resp(tick)->len == sizeof(struct fuse_init_out)) { data->max_write = fiio->max_write; } else { err = EINVAL; } -#endif } else { /* Old fix values */ data->max_write = 4096; @@ -711,11 +702,7 @@ void fuse_internal_send_init(struct fuse_data *data, struct thread *td) { -#if FUSE_KERNELABI_GEQ(7, 5) struct fuse_init_in *fiii; -#else - struct fuse_init_in_out *fiii; -#endif struct fuse_dispatcher fdi; fdisp_init(&fdi, sizeof(*fiii)); @@ -723,6 +710,8 @@ fiii = fdi.indata; fiii->major = FUSE_KERNEL_VERSION; fiii->minor = FUSE_KERNEL_MINOR_VERSION; + fiii->max_readahead = FUSE_DEFAULT_IOSIZE * 16; + fiii->flags = 0; fuse_insert_callback(fdi.tick, fuse_internal_init_callback); fuse_insert_message(fdi.tick); ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#7 (text+ko) ==== @@ -51,26 +51,26 @@ } /* XXX */ +void cluster_push(struct vnode *vp, int a); + struct fuse_pidcred { - pid_t pid; - struct ucred cred; + pid_t pid; + struct ucred cred; }; /* access */ -#define FACCESS_VA_VALID 0x01 /* flag to sign to reuse cached attributes - regardless of cache timeout */ -#define FACCESS_DO_ACCESS 0x02 /* flag showing if we are to do access check */ -#define FACCESS_STICKY 0x04 /* do sticky dir permission check */ -#define FACCESS_CHOWN 0x08 /* do permission check for owner changing */ -#define FACCESS_NOCHECKSPY 0x10 /* don't check if daemon is allowed to spy on - user */ -#define FACCESS_SETGID 0x12 /* do permission check for setting setgid flag */ +#define FVP_ACCESS_NOOP 0x01 + +#define FACCESS_VA_VALID 0x01 +#define FACCESS_DO_ACCESS 0x02 +#define FACCESS_STICKY 0x04 +#define FACCESS_CHOWN 0x08 +#define FACCESS_NOCHECKSPY 0x10 +#define FACCESS_SETGID 0x12 #define FACCESS_XQUERIES FACCESS_STICKY | FACCESS_CHOWN | FACCESS_SETGID -#define FVP_ACCESS_NOOP 0x01 /* vnode based control flag for doing access check */ - struct fuse_access_param { uid_t xuid; gid_t xgid; @@ -142,12 +142,19 @@ \ timespecadd(&VTOFUD(vp)->cached_attrs_valid, &uptsp_ ## __func__); \ \ - fuse_internal_attr_fat2vat((vp)->v_mount, &(fuse_out)->attr, VTOVA(vp)); \ + fuse_internal_attr_fat2vat(vnode_mount(vp), &(fuse_out)->attr, VTOVA(vp)); \ } while (0) /* fsync */ int +fuse_internal_fsync(struct vnode *vp, + struct thread *td, + struct ucred *cred, + struct fuse_filehandle *fufh, + void *param); + +int fuse_internal_fsync_callback(struct fuse_ticket *tick, struct uio *uio); /* readdir */ @@ -157,6 +164,14 @@ }; int +fuse_internal_readdir(struct vnode *vp, + struct uio *uio, + struct thread *td, + struct ucred *cred, + struct fuse_filehandle *fufh, + struct fuse_iov *cookediov); + +int fuse_internal_readdir_processdata(struct uio *uio, size_t reqsize, void *buf, @@ -252,4 +267,27 @@ int fuse_internal_init_callback(struct fuse_ticket *tick, struct uio *uio); void fuse_internal_send_init(struct fuse_data *data, struct thread *td); +/* miscellaneous */ + +#define fuse_isdeadfs_nop(vp) 0 + +static __inline__ +int +fuse_isdeadfs(struct vnode *vp) +{ + struct mount *mp = vnode_mount(vp); + struct fuse_data *data = fusefs_get_data(mp); + + return (data->dataflag & FSESS_KICK); +} + +static __inline__ +int +fuse_isdeadfs_mp(struct mount *mp) +{ + struct fuse_data *data = fusefs_get_data(mp); + + return (data->dataflag & FSESS_KICK); +} + #endif /* _FUSE_INTERNAL_H_ */ ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.h#3 (text+ko) ==== @@ -41,8 +41,7 @@ fp->f_vnode->v_type == VBAD || fp->f_vnode->v_op == &dead_vnodeops || fp->f_vnode->v_data == NULL || - fp->f_data == NULL || - FTOFH(fp)->fh_vp->v_type == VBAD); + fp->f_data == NULL); } /* ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_ipc.c#3 (text+ko) ==== @@ -3,10 +3,6 @@ * Amit Singh */ -/* - * Messaging related routines. - */ - #include "config.h" #include @@ -30,26 +26,27 @@ #include "fuse.h" #include "fuse_node.h" #include "fuse_ipc.h" +#include "fuse_internal.h" static struct fuse_ticket *fticket_alloc(struct fuse_data *data); static void fticket_refresh(struct fuse_ticket *tick); static void fticket_destroy(struct fuse_ticket *tick); static int fticket_wait_answer(struct fuse_ticket *tick); -static __inline int fticket_aw_pull_uio(struct fuse_ticket *tick, - struct uio *uio); -static __inline void fuse_push_freeticks(struct fuse_ticket *tick); -static __inline -struct fuse_ticket *fuse_pop_freeticks(struct fuse_data *data); -static __inline void fuse_push_allticks(struct fuse_ticket *tick); -static __inline void fuse_remove_allticks(struct fuse_ticket *tick); +static __inline__ int fticket_aw_pull_uio(struct fuse_ticket *tick, struct uio *uio); +static __inline__ void fuse_push_freeticks(struct fuse_ticket *tick); + +static __inline__ struct fuse_ticket * +fuse_pop_freeticks(struct fuse_data *data); + +static __inline__ void fuse_push_allticks(struct fuse_ticket *tick); +static __inline__ void fuse_remove_allticks(struct fuse_ticket *tick); static struct fuse_ticket *fuse_pop_allticks(struct fuse_data *data); -static int fuse_body_audit(struct fuse_ticket *tick, size_t blen); -static __inline void fuse_setup_ihead(struct fuse_in_header *ihead, - struct fuse_ticket *tick, uint64_t nid, - enum fuse_opcode op, size_t blen, - pid_t pid, struct ucred *cred); - +static int fuse_body_audit(struct fuse_ticket *tick, size_t blen); +static __inline__ void fuse_setup_ihead(struct fuse_in_header *ihead, + struct fuse_ticket *tick, uint64_t nid, + enum fuse_opcode op, size_t blen, + pid_t pid, struct ucred *cred); static fuse_handler_t fuse_standard_handler; SYSCTL_NODE(_vfs, OID_AUTO, fuse, CTLFLAG_RW, 0, "FUSE tunables"); @@ -73,14 +70,6 @@ MALLOC_DEFINE(M_FUSEMSG, "fuse_messaging", "buffer for fuse messaging related things"); -/*************************************** - * - * >>> Interface ("methods") of messaging related objects - * - ***************************************/ - -/* fuse_iov methods ==> */ - void fiov_init(struct fuse_iov *fiov, size_t size) { @@ -112,6 +101,9 @@ fiov->base = realloc(fiov->base, FU_AT_LEAST(size), M_FUSEMSG, M_WAITOK | M_ZERO); + if (!fiov->base) { + panic("FUSE: realloc failed"); + } fiov->allocated_size = FU_AT_LEAST(size); fiov->credit = fuse_iov_credit; @@ -168,6 +160,7 @@ tick = malloc(sizeof(*tick), M_FUSEMSG, M_WAITOK | M_ZERO); + tick->tk_unique = data->ticketer++; tick->tk_data = data; fiov_init(&tick->tk_ms_fiov, sizeof(struct fuse_in_header)); @@ -175,7 +168,6 @@ mtx_init(&tick->tk_aw_mtx, "fuse answer delivery mutex", NULL, MTX_DEF); fiov_init(&tick->tk_aw_fiov, 0); - fiov_init(&tick->tk_aw_handler_parm, 0); tick->tk_aw_type = FT_A_FIOV; return (tick); @@ -192,8 +184,8 @@ tick->tk_ms_type = FT_M_FIOV; bzero(&tick->tk_aw_ohead, sizeof(struct fuse_out_header)); + fiov_refresh(&tick->tk_aw_fiov); - fiov_adjust(&tick->tk_aw_handler_parm, 0); tick->tk_aw_errno = 0; tick->tk_aw_bufdata = NULL; tick->tk_aw_bufsize = 0; @@ -212,7 +204,6 @@ mtx_destroy(&tick->tk_aw_mtx); fiov_teardown(&tick->tk_aw_fiov); - fiov_teardown(&tick->tk_aw_handler_parm); free(tick, M_FUSEMSG); } @@ -241,14 +232,6 @@ mtx_unlock(&tick->tk_aw_mtx); if (!(err || fticket_answered(tick))) { - /* - * Some deadlocky scenarios can get us here, like SIGKILLing - * the fusexmp daemon after a fuse dir has been null mounted - * over its original copy in the "normal" fs - * - * (I guess there is no need of kicking the daemon at this - * point...) - */ debug_printf("fuse requester was woken up but still no answer"); err = ENXIO; } @@ -260,11 +243,10 @@ fticket_aw_pull_uio(struct fuse_ticket *tick, struct uio *uio) { int err = 0; - size_t len = uio->uio_resid; + size_t len = uio_resid(uio); debug_printf("tick=%p, uio=%p\n", tick, uio); - if (len) { switch (tick->tk_aw_type) { case FT_A_FIOV: @@ -304,7 +286,7 @@ return (0); } - err = fuse_body_audit(tick, uio->uio_resid); >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Tue Jun 7 11:10:44 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DDE8F1065673; Tue, 7 Jun 2011 11:10:43 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 91359106566B for ; Tue, 7 Jun 2011 11:10:43 +0000 (UTC) (envelope-from jceel@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 7EFBF8FC0A for ; Tue, 7 Jun 2011 11:10:43 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p57BAhL3055320 for ; Tue, 7 Jun 2011 11:10:43 GMT (envelope-from jceel@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p57BAhvm055315 for perforce@freebsd.org; Tue, 7 Jun 2011 11:10:43 GMT (envelope-from jceel@freebsd.org) Date: Tue, 7 Jun 2011 11:10:43 GMT Message-Id: <201106071110.p57BAhvm055315@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jceel@freebsd.org using -f From: Jakub Wojciech Klama To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194387 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 11:10:44 -0000 http://p4web.freebsd.org/@@194387?ac=10 Change 194387 by jceel@jceel_cyclone on 2011/06/07 11:10:17 Apply FDT fixes. Affected files ... .. //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_common.c#2 edit .. //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_common.h#2 edit .. //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_pci.c#2 edit .. //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_powerpc.c#2 edit .. //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_static_dtb.S#2 edit .. //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdtbus.c#2 edit .. //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/simplebus.c#2 edit Differences ... ==== //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_common.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/fdt/fdt_common.c,v 1.4 2011/01/29 20:25:20 marcel Exp $"); +__FBSDID("$FreeBSD$"); #include #include @@ -46,6 +46,8 @@ #include "ofw_bus_if.h" +#define DEBUG + #ifdef DEBUG #define debugf(fmt, args...) do { printf("%s(): ", __func__); \ printf(fmt,##args); } while (0) @@ -401,13 +403,14 @@ } int -fdt_reg_to_rl(phandle_t node, struct resource_list *rl, u_long base) +fdt_reg_to_rl(phandle_t node, struct resource_list *rl, + struct fdt_range *ranges, int ranges_count) { - u_long start, end, count; + u_long start, end, count, parent; pcell_t *reg, *regptr; pcell_t addr_cells, size_cells; int tuple_size, tuples; - int i, rv; + int i, n, rv; if (fdt_addrsize_cells(OF_parent(node), &addr_cells, &size_cells) != 0) return (ENXIO); @@ -432,8 +435,21 @@ reg += addr_cells + size_cells; /* Calculate address range relative to base. */ - start &= 0x000ffffful; - start = base + start; + parent = 0; + + if (ranges == NULL) + goto moveon; + + for (n = 0; n < ranges_count; n++) { + if (ranges[n].base <= start && (ranges[n].base + + ranges[n].size >= start + count - 1)) { + parent = ranges[n].parent; + break; + } + } +moveon: + + start = parent + start; end = start + count - 1; debugf("reg addr start = %lx, end = %lx, count = %lx\n", start, ==== //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_common.h#2 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/fdt/fdt_common.h,v 1.2 2010/07/19 18:47:18 raj Exp $ + * $FreeBSD$ */ #ifndef _FDT_COMMON_H_ @@ -40,6 +40,12 @@ #define DI_MAX_INTR_NUM 8 +struct fdt_range { + u_long base; + u_long parent; + u_long size; +}; + struct fdt_pci_range { u_long base_pci; u_long base_parent; @@ -106,7 +112,7 @@ struct fdt_pci_range *); int fdt_pci_route_intr(int, int, int, int, struct fdt_pci_intr *, int *); int fdt_ranges_verify(pcell_t *, int, int, int, int); -int fdt_reg_to_rl(phandle_t, struct resource_list *, u_long); +int fdt_reg_to_rl(phandle_t, struct resource_list *, struct fdt_range *, int); int fdt_pm(phandle_t); #endif /* _FDT_COMMON_H_ */ ==== //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_pci.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/fdt/fdt_pci.c,v 1.3 2011/01/29 21:14:29 marcel Exp $"); +__FBSDID("$FreeBSD$"); #include #include ==== //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_powerpc.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/fdt/fdt_powerpc.c,v 1.1 2010/07/11 20:49:36 raj Exp $"); +__FBSDID("$FreeBSD$"); #include #include ==== //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdt_static_dtb.S#2 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/fdt/fdt_static_dtb.S,v 1.1 2010/06/02 17:17:45 raj Exp $ + * $FreeBSD$ */ #include "fdt_static_dtb.h" ==== //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/fdtbus.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/fdt/fdtbus.c,v 1.4 2011/04/29 18:41:21 jhb Exp $"); +__FBSDID("$FreeBSD$"); #include #include @@ -47,7 +47,7 @@ #include "ofw_bus_if.h" #define DEBUG -#undef DEBUG +//#undef DEBUG #ifdef DEBUG #define debugf(fmt, args...) do { printf("%s(): ", __func__); \ @@ -206,7 +206,7 @@ * Mem-mapped I/O space rman. */ start = 0; - end = ~0ul; + end = ~0u; sc->sc_mem.rm_start = start; sc->sc_mem.rm_end = end; sc->sc_mem.rm_type = RMAN_ARRAY; @@ -293,7 +293,7 @@ resource_list_init(&di->di_res); - if (fdt_reg_to_rl(node, &di->di_res, fdt_immr_va)) { + if (fdt_reg_to_rl(node, &di->di_res, NULL, 0)) { device_printf(child, "could not process 'reg' property\n"); newbus_device_destroy(child); child = NULL; @@ -381,9 +381,9 @@ } /* Calculate address range relative to base. */ - par_base &= 0x000ffffful; - start &= 0x000ffffful; - start += par_base + fdt_immr_va; + //par_base &= 0x000ffffful; + //start &= 0x000ffffful; + start += par_base;// + fdt_immr_va; if (count == 0) count = par_size; end = start + count - 1; @@ -490,6 +490,7 @@ struct rman *rm; struct fdtbus_devinfo *di; struct resource_list_entry *rle; + bus_space_handle_t bsh; int needactivate; /* @@ -544,8 +545,11 @@ if (type == SYS_RES_IOPORT || type == SYS_RES_MEMORY) { /* XXX endianess should be set based on SOC node */ + if (bus_space_map(fdtbus_bs_tag, rman_get_start(res), + rman_get_size(res), 0, &bsh)) + printf("CANNOT BUS_SPACE_MAP() ON 0x%lx\n", rman_get_start(res)); rman_set_bustag(res, fdtbus_bs_tag); - rman_set_bushandle(res, rman_get_start(res)); + rman_set_bushandle(res, bsh); } if (needactivate) ==== //depot/projects/soc2011/jceel_lpc/sys/dev/fdt/simplebus.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/fdt/simplebus.c,v 1.2 2010/07/11 20:30:59 raj Exp $"); +__FBSDID("$FreeBSD$"); #include "opt_platform.h" #include @@ -62,11 +62,10 @@ static MALLOC_DEFINE(M_SIMPLEBUS, "simplebus", "simplebus devices information"); struct simplebus_softc { - int sc_addr_cells; - int sc_size_cells; - u_long sc_start_pa; - u_long sc_start_va; - u_long sc_size; + int sc_addr_cells; + int sc_size_cells; + struct fdt_range * sc_ranges; + int sc_ranges_count; }; struct simplebus_devinfo { @@ -155,13 +154,49 @@ struct simplebus_devinfo *di; struct simplebus_softc *sc; phandle_t dt_node, dt_child; + pcell_t *ranges, *ptr; + int i, tuple_size, len, par_addr_cells; sc = device_get_softc(dev); + dt_node = ofw_bus_get_node(dev); + + if ((fdt_addrsize_cells(dt_node, &sc->sc_addr_cells, &sc->sc_size_cells)) != 0) + return (ENXIO); + + /* + * Process 'ranges' property + */ + par_addr_cells = fdt_parent_addr_cells(dt_node); + if (par_addr_cells > 2) + return (ERANGE); + + len = OF_getprop_alloc(dt_node, "ranges", sizeof(pcell_t), (void **)&ranges); + if (len <= 0) + device_printf(dev, "WARNING: bus has no 'ranges' property\n"); - sc->sc_start_pa = fdt_immr_pa; - sc->sc_start_va = fdt_immr_va; - sc->sc_size = fdt_immr_size; + tuple_size = sc->sc_addr_cells + par_addr_cells + sc->sc_size_cells; + sc->sc_ranges_count = len / tuple_size; + + printf("### tuple_size=%d ranges_count=%d\n", tuple_size, sc->sc_ranges_count); + + ptr = ranges; + + sc->sc_ranges = malloc(sizeof(struct fdt_range) * sc->sc_ranges_count, + M_SIMPLEBUS, M_WAITOK | M_ZERO); + + for (i = 0; i < sc->sc_ranges_count; i++) { + sc->sc_ranges[i].base = fdt_data_get((void *)ptr, sc->sc_addr_cells); + ptr += sc->sc_addr_cells; + sc->sc_ranges[i].parent = fdt_data_get((void *)ptr, par_addr_cells); + ptr += par_addr_cells; + sc->sc_ranges[i].size = fdt_data_get((void *)ptr, sc->sc_size_cells); + ptr += sc->sc_size_cells; + printf("### new range: base=%lx parent=%lx size=%lx\n", + sc->sc_ranges[i].base, sc->sc_ranges[i].parent, + sc->sc_ranges[i].size); + } + /* * Walk simple-bus and add direct subordinates as our children. */ @@ -186,7 +221,8 @@ resource_list_init(&di->di_res); - if (fdt_reg_to_rl(dt_child, &di->di_res, sc->sc_start_va)) { + if (fdt_reg_to_rl(dt_child, &di->di_res, sc->sc_ranges, + sc->sc_ranges_count)) { device_printf(dev, "%s: could not process 'reg' " "property\n", di->di_ofw.obd_name); ofw_bus_gen_destroy_devinfo(&di->di_ofw); From owner-p4-projects@FreeBSD.ORG Tue Jun 7 18:55:32 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1E9CD1065704; Tue, 7 Jun 2011 18:55:32 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A6DB01065700 for ; Tue, 7 Jun 2011 18:55:31 +0000 (UTC) (envelope-from cnicutar@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 7B4368FC1C for ; Tue, 7 Jun 2011 18:55:31 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p57ItVR3052432 for ; Tue, 7 Jun 2011 18:55:31 GMT (envelope-from cnicutar@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p57ItVON052429 for perforce@freebsd.org; Tue, 7 Jun 2011 18:55:31 GMT (envelope-from cnicutar@freebsd.org) Date: Tue, 7 Jun 2011 18:55:31 GMT Message-Id: <201106071855.p57ItVON052429@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to cnicutar@freebsd.org using -f From: Catalin Nicutar To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194411 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jun 2011 18:55:32 -0000 http://p4web.freebsd.org/@@194411?ac=10 Change 194411 by cnicutar@cnicutar_cronos on 2011/06/07 18:54:45 Add sysctls for TCP UTO Affected files ... .. //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp.h#2 edit .. //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp_subr.c#2 edit Differences ... ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp.h#2 (text+ko) ==== @@ -103,6 +103,15 @@ /* + * The timeout ranges for TCP UTO have security implications; in particular, + * long timeouts might allow for denial-of-service attacks. + */ +#define TCP_UTOMIN 100 /* Minimum acceptable timeout */ +#define TCP_UTODEF 300 /* Default advertised timeout */ +#define TCP_UTOMAX 600 /* Maximum advertised timeout */ + + +/* * Default maximum segment size for TCP. * With an IP MTU of 576, this is 536, * but 512 is probably more convenient. ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp_subr.c#2 (text+ko) ==== @@ -168,6 +168,29 @@ return (sysctl_msec_to_ticks(oidp, arg1, arg2, req)); } +SYSCTL_NODE(_net_inet_tcp, OID_AUTO, uto, CTLFLAG_RW, 0, "TCP UTO"); + +VNET_DEFINE(int, uto_enable) = 1; +SYSCTL_VNET_INT(_net_inet_tcp_uto, OID_AUTO, enable, CTLFLAG_RW, + &VNET_NAME(uto_enable), 0, + "Enable TCP UTO for all connections"); + +VNET_DEFINE(int, uto_min_timeout) = TCP_UTOMIN; +SYSCTL_VNET_INT(_net_inet_tcp_uto, OID_AUTO, min_timeout, CTLFLAG_RW, + &VNET_NAME(uto_min_timeout), 0, + "Minimum accepted timeout for a connection"); + +VNET_DEFINE(int, uto_def_timeout) = TCP_UTODEF; +SYSCTL_VNET_INT(_net_inet_tcp_uto, OID_AUTO, def_timeout, CTLFLAG_RW, + &VNET_NAME(uto_def_timeout), 0, + "Default advertised timeout for all connections"); + +VNET_DEFINE(int, uto_max_timeout) = 600; +SYSCTL_VNET_INT(_net_inet_tcp_uto, OID_AUTO, max_timeout, CTLFLAG_RW, + &VNET_NAME(uto_max_timeout), 0, + "Maximum accepted timeout for a connection"); + + /* * Minimum MSS we accept and use. This prevents DoS attacks where * we are forced to a ridiculous low MSS like 20 and send hundreds From owner-p4-projects@FreeBSD.ORG Thu Jun 9 08:53:32 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CF45E1065673; Thu, 9 Jun 2011 08:53:31 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8AE7D106566B for ; Thu, 9 Jun 2011 08:53:31 +0000 (UTC) (envelope-from jceel@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 78AB28FC0C for ; Thu, 9 Jun 2011 08:53:31 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p598rV2w027532 for ; Thu, 9 Jun 2011 08:53:31 GMT (envelope-from jceel@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p598rVTg027529 for perforce@freebsd.org; Thu, 9 Jun 2011 08:53:31 GMT (envelope-from jceel@freebsd.org) Date: Thu, 9 Jun 2011 08:53:31 GMT Message-Id: <201106090853.p598rVTg027529@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jceel@freebsd.org using -f From: Jakub Wojciech Klama To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194490 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jun 2011 08:53:32 -0000 http://p4web.freebsd.org/@@194490?ac=10 Change 194490 by jceel@jceel_cyclone on 2011/06/09 08:53:09 Small FDT fixes. Affected files ... .. //depot/projects/soc2011/jceel_lpc/sys/dev/uart/uart_bus_fdt.c#2 edit .. //depot/projects/soc2011/jceel_lpc/sys/dev/uart/uart_dev_ns8250.c#3 edit Differences ... ==== //depot/projects/soc2011/jceel_lpc/sys/dev/uart/uart_bus_fdt.c#2 (text+ko) ==== @@ -197,7 +197,7 @@ err = fdt_regsize(node, &start, &size); if (err) return (ENXIO); - start += fdt_immr_va; + start += fdt_immr_pa; return (bus_space_map(di->bas.bst, start, size, 0, &di->bas.bsh)); } ==== //depot/projects/soc2011/jceel_lpc/sys/dev/uart/uart_dev_ns8250.c#3 (text+ko) ==== @@ -43,6 +43,8 @@ #define DEFAULT_RCLK 1843200 +extern void lpc_early_puts(char *); + /* * Clear pending interrupts. THRE is cleared by reading IIR. Data * that may have been received gets lost here. @@ -238,6 +240,8 @@ { u_char val; + lpc_early_puts("ns8250_probe\r\n"); + /* Check known 0 bits that don't depend on DLAB. */ val = uart_getreg(bas, REG_IIR); #if 0 @@ -251,8 +255,8 @@ * the probe succeeds. */ val = uart_getreg(bas, REG_MCR); - if (val & 0xa0) - return (ENXIO); +// if (val & 0xa0) +// return (ENXIO); return (0); } From owner-p4-projects@FreeBSD.ORG Thu Jun 9 08:54:38 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9B8991065672; Thu, 9 Jun 2011 08:54:38 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5CD7F106566B for ; Thu, 9 Jun 2011 08:54:38 +0000 (UTC) (envelope-from jceel@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 47CB88FC08 for ; Thu, 9 Jun 2011 08:54:38 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p598sc3s027610 for ; Thu, 9 Jun 2011 08:54:38 GMT (envelope-from jceel@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p598scbK027607 for perforce@freebsd.org; Thu, 9 Jun 2011 08:54:38 GMT (envelope-from jceel@freebsd.org) Date: Thu, 9 Jun 2011 08:54:38 GMT Message-Id: <201106090854.p598scbK027607@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jceel@freebsd.org using -f From: Jakub Wojciech Klama To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194491 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jun 2011 08:54:38 -0000 http://p4web.freebsd.org/@@194491?ac=10 Change 194491 by jceel@jceel_cyclone on 2011/06/09 08:54:06 Ethernet driver update: working correctly in trivial scenarios. Affected files ... .. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/if_lpe.c#2 edit .. //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/if_lpereg.h#2 edit Differences ... ==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/if_lpe.c#2 (text+ko) ==== @@ -94,6 +94,7 @@ struct lpe_txdesc lpe_tx_desc[LPE_TXDESC_NUM]; int lpe_tx_prod; int lpe_tx_cons; + int lpe_tx_used; int lpe_rx_cons; }; @@ -120,8 +121,8 @@ bus_space_tag_t lpe_bst; bus_space_handle_t lpe_bsh; uint32_t lpe_flags; + struct callout lpe_tick; - struct lpe_chain_data lpe_cdata; struct lpe_ring_data lpe_rdata; }; @@ -144,11 +145,13 @@ static void lpe_intr(void *); static void lpe_rxintr(struct lpe_softc *); static void lpe_txintr(struct lpe_softc *); -//static void lpe_tick(void *); +static void lpe_tick(void *); static int lpe_encap(struct lpe_softc *, struct mbuf **); static int lpe_dma_alloc(struct lpe_softc *); static int lpe_dma_alloc_rx(struct lpe_softc *); static int lpe_dma_alloc_tx(struct lpe_softc *); +static int lpe_init_rx(struct lpe_softc *); +static int lpe_init_rxbuf(struct lpe_softc *, int); static void lpe_dmamap_cb(void *, bus_dma_segment_t *, int, int); static int lpe_ifmedia_upd(struct ifnet *); static void lpe_ifmedia_sts(struct ifnet *, struct ifmediareq *); @@ -194,6 +197,8 @@ mtx_init(&sc->lpe_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, MTX_DEF); + callout_init_mtx(&sc->lpe_tick, &sc->lpe_mtx, 0); + rid = 0; sc->lpe_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); @@ -287,8 +292,6 @@ struct lpe_softc *sc = device_get_softc(dev); uint32_t val; - device_printf(dev, "mii read: phy=%d reg=%d\n", phy, reg); - lpe_write_4(sc, LPE_MCMD, LPE_MCMD_READ); lpe_write_4(sc, LPE_MADR, (reg & LPE_MADR_REGMASK) << LPE_MADR_REGSHIFT | @@ -305,7 +308,11 @@ if (val & LPE_MIND_INVALID) return (0); - return (lpe_read_4(sc, LPE_MRDD) & LPE_MRDD_DATAMASK); + lpe_write_4(sc, LPE_MCMD, 0); + + int x = (lpe_read_4(sc, LPE_MRDD) & LPE_MRDD_DATAMASK); +// printf("mii read: phy=%d reg=%d result=0x%04x\n", phy, reg, x); + return (x); } static int @@ -314,6 +321,8 @@ struct lpe_softc *sc = device_get_softc(dev); uint32_t val; +// printf("mii write: phy=%d reg=%d data=0x%04x\n", phy, reg, data); + lpe_write_4(sc, LPE_MCMD, LPE_MCMD_WRITE); lpe_write_4(sc, LPE_MADR, (reg & LPE_MADR_REGMASK) << LPE_MADR_REGSHIFT | @@ -393,11 +402,20 @@ /* Enable Tx and Rx */ cmd = lpe_read_4(sc, LPE_COMMAND); - lpe_write_4(sc, LPE_COMMAND, cmd | LPE_COMMAND_RXENABLE | LPE_COMMAND_TXENABLE); + lpe_write_4(sc, LPE_COMMAND, cmd | LPE_COMMAND_RXENABLE | + LPE_COMMAND_TXENABLE | LPE_COMMAND_PASSRUNTFRAME | + LPE_COMMAND_PASSRXFILTER); /* Enable receive */ mac1 = lpe_read_4(sc, LPE_MAC1); - lpe_write_4(sc, LPE_MAC1, mac1 | LPE_MAC1_RXENABLE); + lpe_write_4(sc, LPE_MAC1, /*mac1 |*/ LPE_MAC1_RXENABLE | LPE_MAC1_PASSALL); + + /* XXX */ + lpe_write_4(sc, LPE_MAC2, LPE_MAC2_CRCENABLE | LPE_MAC2_PADCRCENABLE | + LPE_MAC2_FULLDUPLEX); + + /* XXX */ + lpe_write_4(sc, LPE_MCFG, (((7) & 0x7) << 2)); /* Set up Rx filter */ lpe_write_4(sc, LPE_RXFILTER_CTRL, 0xffffffff); @@ -407,20 +425,36 @@ LPE_INT_RXFINISH | LPE_INT_RXDONE | LPE_INT_TXUNDERRUN | LPE_INT_TXERROR | LPE_INT_TXFINISH | LPE_INT_TXDONE); + sc->lpe_cdata.lpe_tx_prod = 0; + sc->lpe_cdata.lpe_tx_cons = 0; + sc->lpe_cdata.lpe_tx_used = 0; + sc->lpe_cdata.lpe_rx_cons = 0; + + lpe_init_rx(sc); + /* Initialize Rx packet and status descriptor heads */ lpe_write_4(sc, LPE_RXDESC, sc->lpe_rdata.lpe_rx_ring_phys); lpe_write_4(sc, LPE_RXSTATUS, sc->lpe_rdata.lpe_rx_status_phys); - lpe_write_4(sc, LPE_RXDESC_NUMBER, LPE_RXDESC_NUM); + lpe_write_4(sc, LPE_RXDESC_NUMBER, LPE_RXDESC_NUM - 1); lpe_write_4(sc, LPE_RXDESC_CONS, 0); + + device_printf(sc->lpe_dev, "rx ring: %p, rx status: %p\n", + sc->lpe_rdata.lpe_rx_ring, sc->lpe_rdata.lpe_rx_status); + /* Initialize Tx packet and status descriptor heads */ lpe_write_4(sc, LPE_TXDESC, sc->lpe_rdata.lpe_tx_ring_phys); lpe_write_4(sc, LPE_TXSTATUS, sc->lpe_rdata.lpe_tx_status_phys); - lpe_write_4(sc, LPE_TXDESC_NUMBER, LPE_TXDESC_NUM); + lpe_write_4(sc, LPE_TXDESC_NUMBER, LPE_TXDESC_NUM - 1); lpe_write_4(sc, LPE_TXDESC_PROD, 0); - + + device_printf(sc->lpe_dev, "tx ring: %p, tx status: %p\n", + sc->lpe_rdata.lpe_tx_ring, sc->lpe_rdata.lpe_tx_status); + ifp->if_drv_flags |= IFF_DRV_RUNNING; ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + + callout_reset(&sc->lpe_tick, hz, lpe_tick, sc); } static void @@ -442,7 +476,7 @@ lpe_lock_assert(sc); - device_printf(sc->lpe_dev, "lpe_start_locked()\n"); +// device_printf(sc->lpe_dev, "lpe_start_locked()\n"); while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) { /* Dequeue first packet */ @@ -451,11 +485,13 @@ break; lpe_encap(sc, &m_head); + + encap++; } /* Submit new descriptor list */ if (encap) { - + lpe_write_4(sc, LPE_TXDESC_PROD, sc->lpe_cdata.lpe_tx_prod); } } @@ -465,13 +501,21 @@ { struct lpe_txdesc *txd; struct lpe_hwdesc *hwd; - struct lpe_hwstatus *hws; + //struct lpe_hwstatus *hws; bus_dma_segment_t segs[LPE_MAXFRAGS]; - int i, err, nsegs; + int i, err, nsegs, prod; lpe_lock_assert(sc); M_ASSERTPKTHDR((*m_head)); + prod = sc->lpe_cdata.lpe_tx_prod; + txd = &sc->lpe_cdata.lpe_tx_desc[prod]; + +// device_printf(sc->lpe_dev, "lpe_encap: starting with prod=%d\n", prod); + +// device_printf(sc->lpe_dev, "lpe_encap: packet data: %16D\n", +// mtod(*m_head, const char *), " "); + err = bus_dmamap_load_mbuf_sg(sc->lpe_cdata.lpe_tx_buf_tag, txd->lpe_txdesc_dmamap, *m_head, segs, &nsegs, BUS_DMA_NOWAIT); @@ -484,12 +528,34 @@ return (EIO); } + bus_dmamap_sync(sc->lpe_cdata.lpe_tx_buf_tag, txd->lpe_txdesc_dmamap, + BUS_DMASYNC_PREREAD); + bus_dmamap_sync(sc->lpe_cdata.lpe_tx_ring_tag, sc->lpe_cdata.lpe_tx_ring_map, + BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); + for (i = 0; i < nsegs; i++) { - hwd = &sc->lpe_rdata.lpe_tx_desc[prod]; - + hwd = &sc->lpe_rdata.lpe_tx_ring[prod]; + hwd->lhr_data = segs[i].ds_addr; + hwd->lhr_control = segs[i].ds_len - 1;// & LPE_HWDESC_SIZE_MASK; + + if (i == nsegs - 1) { + hwd->lhr_control |= LPE_HWDESC_LASTFLAG; + hwd->lhr_control |= LPE_HWDESC_INTERRUPT; + hwd->lhr_control |= (1 << 28) | (1 << 29); + } + LPE_INC(prod, LPE_TXDESC_NUM); + +// device_printf(sc->lpe_dev, "lpe_encap: 1 segment done @ %p, size: %ld\n", +// hwd, segs[i].ds_len); } + bus_dmamap_sync(sc->lpe_cdata.lpe_tx_ring_tag, sc->lpe_cdata.lpe_tx_ring_map, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + + sc->lpe_cdata.lpe_tx_used += nsegs; + sc->lpe_cdata.lpe_tx_prod = prod; + return (0); } @@ -510,9 +576,16 @@ static int lpe_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) { + struct lpe_softc *sc = ifp->if_softc; + struct mii_data *mii = device_get_softc(sc->lpe_miibus); + struct ifreq *ifr = (struct ifreq *)data; int err; switch (cmd) { + case SIOCGIFMEDIA: + case SIOCSIFMEDIA: + err = ifmedia_ioctl(ifp, ifr, &mii->mii_media, cmd); + break; default: err = ether_ioctl(ifp, cmd, data); break; @@ -527,14 +600,16 @@ struct lpe_softc *sc = (struct lpe_softc *)arg; uint32_t intstatus; - device_printf(sc->lpe_dev, "intr(): 0x%08x\n", lpe_read_4(sc, LPE_INTSTATUS)); +// device_printf(sc->lpe_dev, "intr(): 0x%08x\n", lpe_read_4(sc, LPE_INTSTATUS)); while ((intstatus = lpe_read_4(sc, LPE_INTSTATUS))) { - if (intstatus & LPE_INT_RXFINISH) + if (intstatus & LPE_INT_RXDONE) lpe_rxintr(sc); - if (intstatus & LPE_INT_TXFINISH) + if (intstatus & LPE_INT_TXDONE) lpe_txintr(sc); + + lpe_write_4(sc, LPE_INTCLEAR, 0xffff); } @@ -543,22 +618,62 @@ static void lpe_rxintr(struct lpe_softc *sc) { + struct ifnet *ifp = sc->lpe_ifp; + struct lpe_hwdesc *hwd; + struct lpe_hwstatus *hws; + struct lpe_rxdesc *rxd; + struct mbuf *m; + int prod, cons; +// device_printf(sc->lpe_dev, "receive interrupt\n"); + + for (;;) { + prod = lpe_read_4(sc, LPE_RXDESC_PROD); + cons = lpe_read_4(sc, LPE_RXDESC_CONS); + if (prod == cons) + break; + + rxd = &sc->lpe_cdata.lpe_rx_desc[cons]; + hwd = &sc->lpe_rdata.lpe_rx_ring[cons]; + hws = &sc->lpe_rdata.lpe_rx_status[cons]; + +// device_printf(sc->lpe_dev, "incoming packet: idx=%d len=%d data=%16D\n", +// cons, hws->lhs_info & 0x7ff, +// mtod(rxd->lpe_rxdesc_mbuf, const char *), " "); + + + m = rxd->lpe_rxdesc_mbuf; + m->m_pkthdr.rcvif = ifp; + m->m_data += 2; + + (*ifp->if_input)(ifp, m); + + lpe_init_rxbuf(sc, cons); + + LPE_INC(cons, LPE_RXDESC_NUM); + lpe_write_4(sc, LPE_RXDESC_CONS, cons); + } + +// device_printf(sc->lpe_dev, "rx: prod=%d cons=%d\n", prod, cons); } static void lpe_txintr(struct lpe_softc *sc) { - +/// device_printf(sc->lpe_dev, "transmit interrupt\n"); } -#if 0 static void lpe_tick(void *arg) { + struct lpe_softc *sc = (struct lpe_softc *)arg; + //struct mii_data *mii = device_get_softc(sc->lpe_miibus); + + lpe_lock_assert(sc); + //mii_tick(mii); + callout_reset(&sc->lpe_tick, hz, lpe_tick, sc); } -#endif static int lpe_dma_alloc(struct lpe_softc *sc) @@ -797,6 +912,84 @@ return (err); } +static int +lpe_init_rx(struct lpe_softc *sc) +{ + int i, err; + + for (i = 0; i < LPE_RXDESC_NUM; i++) { + err = lpe_init_rxbuf(sc, i); + if (err) + return (err); + } + + return (0); +} + +static int +lpe_init_rxbuf(struct lpe_softc *sc, int n) +{ + struct lpe_rxdesc *rxd; + struct lpe_hwdesc *hwd; + struct lpe_hwstatus *hws; + struct mbuf *m; + bus_dma_segment_t segs[1]; + int nsegs; + + rxd = &sc->lpe_cdata.lpe_rx_desc[n]; + hwd = &sc->lpe_rdata.lpe_rx_ring[n]; + hws = &sc->lpe_rdata.lpe_rx_status[n]; + m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + + if (!m) { + device_printf(sc->lpe_dev, "WARNING: mbufs exhausted!\n"); + return (ENOBUFS); + } + + m->m_len = m->m_pkthdr.len = MCLBYTES; + + bus_dmamap_unload(sc->lpe_cdata.lpe_rx_buf_tag, rxd->lpe_rxdesc_dmamap); + +// printf("i=%d sc=%p lpe_rx_buf_tag=%p lpe_rxdesc_dmamap=%p m=%p\n", +// n, sc, sc->lpe_cdata.lpe_rx_buf_tag, rxd->lpe_rxdesc_dmamap, m); + + if (bus_dmamap_load_mbuf_sg(sc->lpe_cdata.lpe_rx_buf_tag, + rxd->lpe_rxdesc_dmamap, m, segs, &nsegs, 0)) { + m_freem(m); + return (ENOBUFS); + } + + bus_dmamap_sync(sc->lpe_cdata.lpe_rx_buf_tag, rxd->lpe_rxdesc_dmamap, + BUS_DMASYNC_PREREAD); + + rxd->lpe_rxdesc_mbuf = m; + hwd->lhr_data = segs[0].ds_addr + 2; + hwd->lhr_control = (segs[0].ds_len - 1) | LPE_HWDESC_INTERRUPT; + + return (0); +} + +#if 0 +static void +lpe_discard_rxbuf(struct lpe_softc *sc, int n) +{ + struct lpe_rxdesc *rxd; + struct lpe_hwdesc *hwd; + + rxd = &sc->lpe_cdata.lpe_rx_desc[n]; + hwd = &sc->lpe_rdata.lpe_rx_ring[n]; + + bus_dmamap_unload(rxch->dve_rx_buf_tag, rxd->dve_rxdesc_dmamap); + + hwd->hw_flagslen = 0; + + if (rxd->dve_rxdesc_mbuf) { + m_freem(rxd->dve_rxdesc_mbuf); + rxd->dve_rxdesc_mbuf = NULL; + } +} +#endif + static void lpe_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error) { @@ -854,6 +1047,6 @@ DRIVER_MODULE(lpe, simplebus, lpe_driver, lpe_devclass, 0, 0); DRIVER_MODULE(miibus, lpe, miibus_driver, miibus_devclass, 0, 0); -MODULE_DEPEND(dve, obio, 1, 1, 1); -MODULE_DEPEND(dve, miibus, 1, 1, 1); -MODULE_DEPEND(dve, ether, 1, 1, 1); +MODULE_DEPEND(lpe, obio, 1, 1, 1); +MODULE_DEPEND(lpe, miibus, 1, 1, 1); +MODULE_DEPEND(lpe, ether, 1, 1, 1); ==== //depot/projects/soc2011/jceel_lpc/sys/arm/lpc/if_lpereg.h#2 (text+ko) ==== @@ -151,6 +151,8 @@ uint32_t lhs_crc; }; +#define LPE_INC(x, y) (x) = ((x) == ((y)-1)) ? 0 : (x)+1 + /* These are valid for both Rx and Tx descriptors */ #define LPE_HWDESC_SIZE_MASK (1 << 10) From owner-p4-projects@FreeBSD.ORG Thu Jun 9 08:54:39 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1718E1065761; Thu, 9 Jun 2011 08:54:38 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7D1FE106566C for ; Thu, 9 Jun 2011 08:54:38 +0000 (UTC) (envelope-from jceel@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 6B10E8FC0A for ; Thu, 9 Jun 2011 08:54:38 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p598scO1027616 for ; Thu, 9 Jun 2011 08:54:38 GMT (envelope-from jceel@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p598scap027613 for perforce@freebsd.org; Thu, 9 Jun 2011 08:54:38 GMT (envelope-from jceel@freebsd.org) Date: Thu, 9 Jun 2011 08:54:38 GMT Message-Id: <201106090854.p598scap027613@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jceel@freebsd.org using -f From: Jakub Wojciech Klama To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194492 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jun 2011 08:54:39 -0000 http://p4web.freebsd.org/@@194492?ac=10 Change 194492 by jceel@jceel_cyclone on 2011/06/09 08:54:24 Change kernel config to boot from NFS by default. Affected files ... .. //depot/projects/soc2011/jceel_lpc/sys/arm/conf/EA3250#2 edit Differences ... ==== //depot/projects/soc2011/jceel_lpc/sys/arm/conf/EA3250#2 (text+ko) ==== @@ -19,17 +19,17 @@ options NFSCLIENT #Network Filesystem Client options NFSLOCKD #Network Lock Manager options NFS_ROOT #NFS usable as /, requires NFSCLIENT -#options BOOTP -#options BOOTP_NFSROOT -#options BOOTP_NFSV3 -#options BOOTP_WIRED_TO=lpe0 +options BOOTP +options BOOTP_NFSROOT +options BOOTP_NFSV3 +options BOOTP_WIRED_TO=lpe0 #options ROOTDEVNAME=\"ufs:/dev/da0a\" -options MD_ROOT # MD is a potential root device -options MD_ROOT_SIZE=8192 # 8MB ram disk -makeoptions MFS_IMAGE=/home/jceel/projects/lpc/mdroot.bin -options ROOTDEVNAME=\"ufs:md0\" +#options MD_ROOT # MD is a potential root device +#options MD_ROOT_SIZE=8192 # 8MB ram disk +#makeoptions MFS_IMAGE=/home/jceel/projects/lpc/mdroot.bin +#options ROOTDEVNAME=\"ufs:md0\" options SYSVSHM #SYSV-style shared memory options SYSVMSG #SYSV-style message queues From owner-p4-projects@FreeBSD.ORG Sat Jun 11 20:08:55 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CB0981065678; Sat, 11 Jun 2011 20:08:54 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 81FC51065670 for ; Sat, 11 Jun 2011 20:08:54 +0000 (UTC) (envelope-from rene@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 70A2C8FC1A for ; Sat, 11 Jun 2011 20:08:54 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5BK8sBd038698 for ; Sat, 11 Jun 2011 20:08:54 GMT (envelope-from rene@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5BK8sx9038695 for perforce@freebsd.org; Sat, 11 Jun 2011 20:08:54 GMT (envelope-from rene@FreeBSD.org) Date: Sat, 11 Jun 2011 20:08:54 GMT Message-Id: <201106112008.p5BK8sx9038695@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to rene@FreeBSD.org using -f From: Rene Ladan To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194603 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2011 20:08:55 -0000 http://p4web.freebsd.org/@@194603?ac=10 Change 194603 by rene@rene_acer on 2011/06/11 20:07:54 MFen www/nl/Makefile 1.146 -> 1.147 Note that the new ipv6 entry is commented out, as the Dutch directory for it does not exist. Affected files ... .. //depot/projects/docproj_nl/www/nl/Makefile#14 edit Differences ... ==== //depot/projects/docproj_nl/www/nl/Makefile#14 (text+ko) ==== @@ -1,6 +1,6 @@ # $FreeBSD: www/nl/Makefile,v 1.3 2009/06/10 21:08:59 rene Exp $ # %SOURCE% en/Makefile -# %SRCID% 1.146 +# %SRCID% 1.147 .if exists(Makefile.conf) .include "Makefile.conf" @@ -62,6 +62,7 @@ #SUBDIR+= gnome #SUBDIR+= handbook #SUBDIR+= internal +#SUBDIR+= ipv6 #SUBDIR+= java #SUBDIR+= kse #SUBDIR+= marketing From owner-p4-projects@FreeBSD.ORG Sat Jun 11 23:01:10 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 30FD01065673; Sat, 11 Jun 2011 23:01:10 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E5837106564A for ; Sat, 11 Jun 2011 23:01:09 +0000 (UTC) (envelope-from peter@wemm.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id D2A6B8FC12 for ; Sat, 11 Jun 2011 23:01:09 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5BN19V8076425 for ; Sat, 11 Jun 2011 23:01:09 GMT (envelope-from peter@wemm.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5BN13Ds076264 for perforce@freebsd.org; Sat, 11 Jun 2011 23:01:03 GMT (envelope-from peter@wemm.org) Date: Sat, 11 Jun 2011 23:01:03 GMT Message-Id: <201106112301.p5BN13Ds076264@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to peter@wemm.org using -f From: Peter Wemm To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194611 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2011 23:01:10 -0000 http://p4web.freebsd.org/@@194611?ac=10 Change 194611 by peter@peter_overcee on 2011/06/11 23:00:18 IFC @194610 Affected files ... .. //depot/projects/hammer/UPDATING#148 integrate .. //depot/projects/hammer/bin/ed/POSIX#2 integrate .. //depot/projects/hammer/bin/pax/ar_io.c#9 integrate .. //depot/projects/hammer/bin/pax/ar_subs.c#6 integrate .. //depot/projects/hammer/bin/pax/buf_subs.c#5 integrate .. //depot/projects/hammer/bin/pax/cpio.c#8 integrate .. //depot/projects/hammer/bin/pax/file_subs.c#6 integrate .. //depot/projects/hammer/bin/pax/ftree.c#7 integrate .. //depot/projects/hammer/bin/pax/options.c#8 integrate .. //depot/projects/hammer/bin/pax/pat_rep.c#8 integrate .. //depot/projects/hammer/bin/pax/pax.c#6 integrate .. //depot/projects/hammer/bin/pax/sel_subs.c#6 integrate .. //depot/projects/hammer/bin/pax/tables.c#5 integrate .. //depot/projects/hammer/bin/pax/tar.c#8 integrate .. //depot/projects/hammer/bin/ps/ps.c#28 integrate .. //depot/projects/hammer/bin/sh/TOUR#4 integrate .. //depot/projects/hammer/bin/sh/alias.c#11 integrate .. //depot/projects/hammer/bin/sh/arith_yacc.c#3 integrate .. //depot/projects/hammer/bin/sh/builtins.def#8 integrate .. //depot/projects/hammer/bin/sh/cd.c#10 integrate .. //depot/projects/hammer/bin/sh/eval.c#31 integrate .. //depot/projects/hammer/bin/sh/expand.c#25 integrate .. //depot/projects/hammer/bin/sh/input.c#10 integrate .. //depot/projects/hammer/bin/sh/jobs.c#21 integrate .. //depot/projects/hammer/bin/sh/main.c#15 integrate .. //depot/projects/hammer/bin/sh/mkinit.c#7 integrate .. //depot/projects/hammer/bin/sh/mktokens#4 integrate .. //depot/projects/hammer/bin/sh/options.c#13 integrate .. //depot/projects/hammer/bin/sh/parser.c#27 integrate .. //depot/projects/hammer/bin/sh/parser.h#8 integrate .. //depot/projects/hammer/bin/sh/sh.1#40 integrate .. //depot/projects/hammer/cddl/compat/opensolaris/include/assert.h#2 integrate .. //depot/projects/hammer/cddl/compat/opensolaris/misc/fsshare.c#4 integrate .. //depot/projects/hammer/contrib/bind9/CHANGES#23 integrate .. //depot/projects/hammer/contrib/bind9/FAQ.xml#10 integrate .. //depot/projects/hammer/contrib/bind9/Makefile.in#6 integrate .. //depot/projects/hammer/contrib/bind9/README.idnkit#3 integrate .. //depot/projects/hammer/contrib/bind9/RELEASE-NOTES-BIND-9.6.3.html#2 delete .. //depot/projects/hammer/contrib/bind9/RELEASE-NOTES-BIND-9.6.3.pdf#2 delete .. //depot/projects/hammer/contrib/bind9/RELEASE-NOTES-BIND-9.6.3.txt#2 delete .. //depot/projects/hammer/contrib/bind9/acconfig.h#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/check/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/check/named-checkconf.8#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/check/named-checkconf.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/bin/check/named-checkconf.html#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/check/named-checkzone.8#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/check/named-checkzone.docbook#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/check/named-checkzone.html#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/dig/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/dig/dig.1#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/dig/dig.docbook#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/dig/dig.html#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/dig/host.1#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/dig/host.docbook#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/dig/host.html#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/dig/include/dig/dig.h#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/dig/nslookup.c#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/Makefile.in#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-dsfromkey.c#3 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-dsfromkey.docbook#2 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.8#3 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.c#3 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-keyfromlabel.docbook#3 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-keygen.8#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-keygen.c#6 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-keygen.docbook#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-signzone.8#11 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssec-signzone.docbook#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssectool.c#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/dnssec/dnssectool.h#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/Makefile.in#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/bind9.xsl#2 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/config.c#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/controlconf.c#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/convertxsl.pl#2 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/builtin.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/client.h#6 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/config.h#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/control.h#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/interfacemgr.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/listenlist.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/log.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/logconf.h#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/lwaddr.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/lwdclient.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/lwresd.h#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/lwsearch.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/main.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/notify.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/ns_smf_globals.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/server.h#6 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/sortlist.h#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/statschannel.h#2 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/tkeyconf.h#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/tsigconf.h#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/types.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/update.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/xfrout.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/include/named/zoneconf.h#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/interfacemgr.c#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/listenlist.c#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/log.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/logconf.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwaddr.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwdclient.c#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwderror.c#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwdgabn.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwdgnba.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwdgrbn.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwdnoop.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwresd.8#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwresd.c#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwresd.docbook#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwresd.html#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/lwsearch.c#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/named.8#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/named.conf.5#10 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/named.conf.docbook#10 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/named.conf.html#10 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/named.docbook#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/named.html#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/notify.c#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/sortlist.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/statschannel.c#3 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/tkeyconf.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/tsigconf.c#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/unix/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/unix/include/named/os.h#6 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/unix/os.c#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/named/zoneconf.c#6 integrate .. //depot/projects/hammer/contrib/bind9/bin/nsupdate/Makefile.in#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/nsupdate/nsupdate.c#10 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/Makefile.in#5 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/include/rndc/os.h#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc-confgen.8#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc-confgen.c#6 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc-confgen.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc-confgen.html#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc.8#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc.c#10 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc.conf#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc.conf.5#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc.conf.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc.conf.html#8 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc.docbook#7 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/rndc.html#9 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/unix/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/unix/os.c#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/util.c#4 integrate .. //depot/projects/hammer/contrib/bind9/bin/rndc/util.h#4 integrate .. //depot/projects/hammer/contrib/bind9/doc/Makefile.in#5 integrate .. //depot/projects/hammer/contrib/bind9/doc/arm/Bv9ARM.ch01.html#10 integrate .. //depot/projects/hammer/contrib/bind9/doc/arm/Bv9ARM.ch02.html#10 integrate .. //depot/projects/hammer/contrib/bind9/doc/arm/Bv9ARM.ch03.html#11 integrate .. //depot/projects/hammer/contrib/bind9/doc/arm/Bv9ARM.ch04.html#11 integrate .. //depot/projects/hammer/contrib/bind9/doc/arm/Bv9ARM.ch05.html#11 integrate .. //depot/projects/hammer/contrib/bind9/doc/arm/Bv9ARM.ch10.html#7 integrate .. //depot/projects/hammer/contrib/bind9/doc/arm/Makefile.in#6 integrate .. //depot/projects/hammer/contrib/bind9/doc/arm/README-SGML#3 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/Makefile.in#7 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/dnssec#3 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/format-options.pl#5 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/ipv6#4 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/migration#7 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/migration-4to9#3 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/rfc-compliance#3 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/roadmap#3 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/sdb#3 integrate .. //depot/projects/hammer/contrib/bind9/doc/misc/sort-options.pl#3 integrate .. //depot/projects/hammer/contrib/bind9/isc-config.sh.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/bind9/Makefile.in#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/bind9/getaddresses.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/bind9/include/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/bind9/include/bind9/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/bind9/include/bind9/check.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/bind9/include/bind9/getaddresses.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/bind9/include/bind9/version.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/bind9/version.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/acache.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/acl.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/api#18 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/byaddr.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/cache.c#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/callbacks.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/compress.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/db.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dbiterator.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dbtable.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/diff.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dispatch.c#11 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dlz.c#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dnssec.c#8 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/ds.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dst_lib.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dst_openssl.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dst_parse.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dst_parse.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/dst_result.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/forward.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/gen-unix.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/gen.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/gssapi_link.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/hmac_link.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/Makefile.in#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/acache.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/acl.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/adb.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/bit.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/byaddr.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/cache.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/callbacks.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/cert.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/compress.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/db.h#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/dbiterator.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/dbtable.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/dispatch.h#9 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/dlz.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/dnssec.h#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/ds.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/fixedname.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/forward.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/iptable.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/journal.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/keyflags.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/keytable.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/keyvalues.h#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/lib.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/log.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/lookup.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/master.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/masterdump.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/message.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/nsec.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/nsec3.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/opcode.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/order.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/peer.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/portlist.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rbt.h#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rcode.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rdata.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rdataclass.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rdatalist.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rdataset.h#8 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rdatasetiter.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rdataslab.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rdatatype.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/request.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/rootns.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/sdb.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/sdlz.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/secalg.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/secproto.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/soa.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/ssu.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/stats.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/tcpmsg.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/time.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/timer.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/tkey.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/ttl.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/version.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/xfrin.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/zonekey.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dns/zt.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dst/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dst/gssapi.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dst/lib.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/include/dst/result.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/iptable.c#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/key.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/keytable.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/lib.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/log.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/lookup.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/master.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/masterdump.c#8 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/ncache.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/nsec.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/nsec3.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/openssldh_link.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/openssldsa_link.c#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/opensslrsa_link.c#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/order.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/peer.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/portlist.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rbt.c#8 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rbtdb.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rbtdb64.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rbtdb64.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rcode.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/any_255/tsig_250.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/any_255/tsig_250.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/ch_3/a_1.c#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/ch_3/a_1.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/afsdb_18.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/afsdb_18.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/cert_37.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/cert_37.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/cname_5.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/cname_5.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/dlv_32769.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/dlv_32769.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/dname_39.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/dname_39.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/dnskey_48.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/dnskey_48.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/ds_43.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/ds_43.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/gpos_27.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/gpos_27.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/hinfo_13.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/hinfo_13.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/ipseckey_45.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/isdn_20.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/isdn_20.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/key_25.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/key_25.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/loc_29.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/loc_29.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mb_7.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mb_7.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/md_3.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/md_3.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mf_4.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mf_4.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mg_8.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mg_8.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/minfo_14.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/minfo_14.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mr_9.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mr_9.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mx_15.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/mx_15.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/ns_2.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/ns_2.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/nsec3_50.c#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/nsec3_50.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/nsec3param_51.c#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/nsec3param_51.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/nsec_47.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/null_10.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/null_10.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/nxt_30.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/nxt_30.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/opt_41.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/opt_41.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/proforma.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/proforma.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/ptr_12.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/ptr_12.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/rp_17.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/rp_17.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/rrsig_46.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/rt_21.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/rt_21.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/sig_24.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/sig_24.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/soa_6.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/soa_6.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/spf_99.c#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/spf_99.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/sshfp_44.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/sshfp_44.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/tkey_249.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/tkey_249.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/txt_16.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/txt_16.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/unspec_103.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/unspec_103.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/x25_19.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/generic/x25_19.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/hs_4/a_1.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/hs_4/a_1.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/a6_38.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/a6_38.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/a_1.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/a_1.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/aaaa_28.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/aaaa_28.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/apl_42.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/apl_42.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/dhcid_49.c#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/dhcid_49.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/kx_36.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/kx_36.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/naptr_35.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/naptr_35.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/nsap-ptr_23.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/nsap-ptr_23.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/nsap_22.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/nsap_22.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/px_26.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/px_26.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/srv_33.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/srv_33.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/wks_11.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/in_1/wks_11.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/rdatastructpre.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdata/rdatastructsuf.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdatalist_p.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdataset.c#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/rdatasetiter.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/request.c#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/soa.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/spnego.asn1#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/spnego.c#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/spnego.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/spnego_asn1.c#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/spnego_asn1.pl#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/ssu.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/stats.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/tcpmsg.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/timer.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/ttl.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/validator.c#16 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/version.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/xfrin.c#10 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/zonekey.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/dns/zt.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/alpha/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/alpha/include/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/alpha/include/isc/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/alpha/include/isc/atomic.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/assertions.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/base32.c#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/base64.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/bitstring.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/buffer.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/bufferlist.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/commandline.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/error.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/event.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/fsaccess.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/hash.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/heap.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/hex.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/hmacmd5.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/hmacsha.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/httpd.c#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/ia64/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/ia64/include/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/ia64/include/isc/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/ia64/include/isc/atomic.h#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/Makefile.in#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/app.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/assertions.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/base32.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/base64.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/bitstring.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/boolean.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/buffer.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/bufferlist.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/commandline.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/entropy.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/error.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/event.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/eventclass.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/file.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/formatcheck.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/fsaccess.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/hash.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/heap.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/hex.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/hmacmd5.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/hmacsha.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/httpd.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/interfaceiter.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/ipv6.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/iterated_hash.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/lang.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/lex.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/lfsr.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/lib.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/list.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/log.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/magic.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/md5.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/msgcat.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/msgs.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/mutexblock.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/netaddr.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/netscope.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/ondestroy.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/os.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/parseint.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/portset.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/print.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/quota.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/radix.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/random.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/ratelimiter.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/refcount.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/region.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/resource.h#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/result.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/resultclass.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/rwlock.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/serial.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/sha1.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/sha2.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/sockaddr.h#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/socket.h#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/stats.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/stdio.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/stdlib.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/string.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/symtab.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/taskpool.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/timer.h#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/types.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/util.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/version.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/include/isc/xml.h#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/inet_aton.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/inet_ntop.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/inet_pton.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/iterated_hash.c#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/lex.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/lfsr.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/lib.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/log.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/md5.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/mips/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/mips/include/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/mips/include/isc/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/mips/include/isc/atomic.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/mutexblock.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/netaddr.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/netscope.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nls/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nls/msgcat.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/noatomic/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/noatomic/include/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/noatomic/include/isc/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/noatomic/include/isc/atomic.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nothreads/condition.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nothreads/include/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nothreads/include/isc/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nothreads/include/isc/condition.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nothreads/include/isc/mutex.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nothreads/include/isc/once.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nothreads/include/isc/thread.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nothreads/mutex.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/nothreads/thread.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/ondestroy.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/parseint.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/portset.c#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/powerpc/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/powerpc/include/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/powerpc/include/isc/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/powerpc/include/isc/atomic.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/pthreads/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/pthreads/condition.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/pthreads/include/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/pthreads/include/isc/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/pthreads/include/isc/condition.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/pthreads/include/isc/mutex.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/pthreads/include/isc/once.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/pthreads/include/isc/thread.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/pthreads/thread.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/quota.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/radix.c#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/random.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/ratelimiter.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/refcount.c#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/region.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/result.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/rwlock.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/serial.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/sha1.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/sha2.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/sockaddr.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/sparc64/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/sparc64/include/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/sparc64/include/isc/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/sparc64/include/isc/atomic.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/stats.c#2 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/string.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/strtoul.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/symtab.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/task_p.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/taskpool.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/timer.c#9 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/timer_p.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/app.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/dir.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/entropy.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/errno2result.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/errno2result.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/file.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/fsaccess.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/ifiter_getifaddrs.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/ifiter_ioctl.c#8 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/ifiter_sysctl.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/dir.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/int.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/keyboard.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/net.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/netdb.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/offset.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/stat.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/stdtime.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/strerror.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/syslog.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/include/isc/time.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/interfaceiter.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/ipv6.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/keyboard.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/net.c#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/os.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/resource.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/socket_p.h#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/stdio.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/stdtime.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/strerror.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/syslog.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/unix/time.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/version.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/x86_32/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/x86_32/include/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/x86_32/include/isc/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/x86_32/include/isc/atomic.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/x86_64/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/x86_64/include/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/x86_64/include/isc/Makefile.in#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isc/x86_64/include/isc/atomic.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/alist.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/base64.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/cc.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/ccmsg.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/alist.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/base64.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/cc.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/ccmsg.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/events.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/lib.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/result.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/sexpr.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/symtab.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/symtype.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/types.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/util.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/include/isccc/version.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/lib.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/result.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/sexpr.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/symtab.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccc/version.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/aclconf.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/include/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/include/isccfg/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/include/isccfg/aclconf.h#3 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/include/isccfg/cfg.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/include/isccfg/grammar.h#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/include/isccfg/log.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/include/isccfg/namedconf.h#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/include/isccfg/version.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/log.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/parser.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/isccfg/version.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/Makefile.in#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/assert_p.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/context.c#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/context_p.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/gai_strerror.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/getaddrinfo.c#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/gethost.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/getipnode.c#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/getnameinfo.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/getrrset.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/herror.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/context.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/int.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/ipv6.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/lang.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/list.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/lwbuffer.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/lwpacket.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/lwres.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/netdb.h.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/platform.h.in#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/result.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/stdlib.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/include/lwres/version.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwbuffer.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwconfig.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwinetaton.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwinetntop.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwinetpton.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwpacket.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwres_gabn.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwres_gnba.c#5 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwres_grbn.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwres_noop.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/lwresutil.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_buffer.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_buffer.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_config.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_config.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_context.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_context.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_gabn.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_gabn.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_gai_strerror.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_gai_strerror.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_gethostent.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_gethostent.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_getipnode.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_getipnode.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_getnameinfo.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_getnameinfo.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_gnba.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_gnba.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_hstrerror.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_hstrerror.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_inetntop.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_inetntop.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_noop.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_noop.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_packet.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_packet.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_resutil.3#7 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/man/lwres_resutil.docbook#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/print.c#6 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/strtoul.c#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/unix/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/unix/include/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/unix/include/lwres/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/unix/include/lwres/net.h#4 integrate .. //depot/projects/hammer/contrib/bind9/lib/lwres/version.c#4 integrate .. //depot/projects/hammer/contrib/bind9/make/Makefile.in#4 integrate .. //depot/projects/hammer/contrib/bind9/make/includes.in#5 integrate .. //depot/projects/hammer/contrib/bind9/make/rules.in#8 integrate .. //depot/projects/hammer/contrib/bind9/mkinstalldirs#2 integrate .. //depot/projects/hammer/contrib/bind9/version#23 integrate .. //depot/projects/hammer/contrib/binutils/binutils/objcopy.c#5 integrate .. //depot/projects/hammer/contrib/binutils/binutils/readelf.c#6 integrate .. //depot/projects/hammer/contrib/binutils/binutils/strings.c#6 integrate .. //depot/projects/hammer/contrib/binutils/gas/read.h#5 integrate .. //depot/projects/hammer/contrib/binutils/gas/write.c#6 integrate .. //depot/projects/hammer/contrib/binutils/ld/emulparams/elf64bmip-defs.sh#2 integrate .. //depot/projects/hammer/contrib/binutils/ld/ldlang.c#7 integrate .. //depot/projects/hammer/contrib/compiler-rt/CREDITS.TXT#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/LICENSE.TXT#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/README.txt#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/abi.h#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/absvdi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/absvsi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/absvti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/adddf3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/addsf3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/addvdi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/addvsi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/addvti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/apple_versioning.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/adddf3vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/addsf3vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/bswapdi2.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/bswapsi2.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/comparesf2.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/divdf3vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/divmodsi4.S#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/divsf3vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/divsi3.S#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/eqdf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/eqsf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/extendsfdf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/fixdfsivfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/fixsfsivfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/fixunsdfsivfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/fixunssfsivfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/floatsidfvfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/floatsisfvfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/floatunssidfvfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/floatunssisfvfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/gedf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/gesf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/gtdf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/gtsf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/ledf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/lesf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/ltdf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/ltsf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/modsi3.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/muldf3vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/mulsf3vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/nedf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/negdf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/negsf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/nesf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/restore_vfp_d8_d15_regs.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/save_vfp_d8_d15_regs.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/softfloat-alias.list#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/subdf3vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/subsf3vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/switch16.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/switch32.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/switch8.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/switchu8.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/sync_synchronize.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/truncdfsf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/udivmodsi4.S#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/udivsi3.S#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/umodsi3.S#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/unorddf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/arm/unordsf2vfp.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ashldi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ashlti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ashrdi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ashrti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/assembly.h#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/clear_cache.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/clzdi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/clzsi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/clzti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/cmpdi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/cmpti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/comparedf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/comparesf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ctzdi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ctzsi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ctzti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/divdc3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/divdf3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/divdi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/divmoddi4.c#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/divmodsi4.c#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/divsc3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/divsf3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/divsi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/divti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/divxc3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/enable_execute_stack.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/endianness.h#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/eprintf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/extendsfdf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ffsdi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ffsti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixdfdi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixdfsi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixdfti.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixsfdi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixsfsi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixsfti.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixunsdfdi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixunsdfsi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixunsdfti.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixunssfdi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixunssfsi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixunssfti.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixunsxfdi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixunsxfsi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixunsxfti.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixxfdi.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fixxfti.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatdidf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatdisf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatdixf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatsidf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatsisf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floattidf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floattisf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floattixf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatundidf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatundisf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatundixf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatunsidf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatunsisf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatuntidf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatuntisf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/floatuntixf.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/fp_lib.h#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/gcc_personality_v0.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/ashldi3.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/ashrdi3.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/divdi3.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/floatdidf.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/floatdisf.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/floatdixf.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/floatundidf.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/floatundisf.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/floatundixf.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/lshrdi3.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/moddi3.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/muldi3.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/udivdi3.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/i386/umoddi3.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/int_lib.h#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/lshrdi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/lshrti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/moddi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/modsi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/modti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/muldc3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/muldf3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/muldi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/mulsc3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/mulsf3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/multi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/mulvdi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/mulvsi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/mulvti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/mulxc3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/negdf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/negdi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/negsf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/negti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/negvdi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/negvsi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/negvti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/paritydi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/paritysi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/parityti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/popcountdi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/popcountsi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/popcountti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/powidf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/powisf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/powitf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/powixf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ppc/restFP.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ppc/saveFP.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/subdf3.c#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/subsf3.c#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/subvdi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/subvsi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/subvti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/trampoline_setup.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/truncdfsf2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ucmpdi2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/ucmpti2.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/udivdi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/udivmoddi4.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/udivmodsi4.c#1 branch .. //depot/projects/hammer/contrib/compiler-rt/lib/udivmodti4.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/udivsi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/udivti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/umoddi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/umodsi3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/umodti3.c#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/x86_64/floatundidf.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/x86_64/floatundisf.S#2 integrate .. //depot/projects/hammer/contrib/compiler-rt/lib/x86_64/floatundixf.S#2 integrate .. //depot/projects/hammer/contrib/gcc/combine.c#11 integrate .. //depot/projects/hammer/contrib/gcc/emit-rtl.c#9 integrate .. //depot/projects/hammer/contrib/gcc/function.c#12 integrate .. //depot/projects/hammer/contrib/gcc/omp-low.c#3 integrate .. //depot/projects/hammer/contrib/gcc/tree-cfg.c#2 integrate .. //depot/projects/hammer/contrib/gcc/tree-vect-patterns.c#3 integrate .. //depot/projects/hammer/contrib/gcclibs/libiberty/regex.c#2 integrate .. //depot/projects/hammer/contrib/groff/tmac/doc-common#18 integrate .. //depot/projects/hammer/contrib/groff/tmac/doc-syms#13 integrate .. //depot/projects/hammer/contrib/groff/tmac/doc.tmac#14 integrate .. //depot/projects/hammer/contrib/groff/tmac/troffrc#7 integrate .. //depot/projects/hammer/contrib/less/NEWS#11 integrate .. //depot/projects/hammer/contrib/less/README#11 integrate .. //depot/projects/hammer/contrib/less/command.c#10 integrate .. //depot/projects/hammer/contrib/less/funcs.h#10 integrate .. //depot/projects/hammer/contrib/less/less.man#11 integrate .. //depot/projects/hammer/contrib/less/less.nro#11 integrate .. //depot/projects/hammer/contrib/less/lessecho.man#9 integrate .. //depot/projects/hammer/contrib/less/lessecho.nro#9 integrate .. //depot/projects/hammer/contrib/less/lesskey.man#11 integrate .. //depot/projects/hammer/contrib/less/lesskey.nro#11 integrate .. //depot/projects/hammer/contrib/less/optfunc.c#10 integrate .. //depot/projects/hammer/contrib/less/opttbl.c#9 integrate .. //depot/projects/hammer/contrib/less/version.c#11 integrate .. //depot/projects/hammer/contrib/libpcap/pcap-bpf.c#15 integrate .. //depot/projects/hammer/contrib/ntp/ntpd/ntp_io.c#7 integrate .. //depot/projects/hammer/contrib/openbsm/libbsm/audit_submit.3#7 integrate .. //depot/projects/hammer/contrib/top/commands.c#9 integrate .. //depot/projects/hammer/contrib/top/machine.h#8 integrate >>> TRUNCATED FOR MAIL (1000 lines) <<<