From owner-p4-projects@FreeBSD.ORG Mon Jul 28 09:26:28 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0E9EC1065671; Mon, 28 Jul 2008 09:26:28 +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 C6217106564A for ; Mon, 28 Jul 2008 09:26:27 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id B044C8FC12 for ; Mon, 28 Jul 2008 09:26:27 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.2/8.14.2) with ESMTP id m6S9QRLx078789 for ; Mon, 28 Jul 2008 09:26:27 GMT (envelope-from ed@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.2/8.14.1/Submit) id m6S9QRS8078787 for perforce@freebsd.org; Mon, 28 Jul 2008 09:26:27 GMT (envelope-from ed@FreeBSD.org) Date: Mon, 28 Jul 2008 09:26:27 GMT Message-Id: <200807280926.m6S9QRS8078787@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to ed@FreeBSD.org using -f From: Ed Schouten To: Perforce Change Reviews Cc: Subject: PERFORCE change 146096 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Jul 2008 09:26:28 -0000 http://perforce.freebsd.org/chv.cgi?CH=146096 Change 146096 by ed@ed_dull on 2008/07/28 09:25:55 IFC my procstat.1 changes. Affected files ... .. //depot/projects/mpsafetty/lib/libc/gen/Makefile.inc#3 integrate .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawn.3#1 branch .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawn_file_actions_addopen.3#1 branch .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawn_file_actions_init.3#1 branch .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawnattr_getflags.3#1 branch .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawnattr_getpgroup.3#1 branch .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawnattr_getschedparam.3#1 branch .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawnattr_getschedpolicy.3#1 branch .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawnattr_getsigdefault.3#1 branch .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawnattr_getsigmask.3#1 branch .. //depot/projects/mpsafetty/lib/libc/gen/posix_spawnattr_init.3#1 branch .. //depot/projects/mpsafetty/sys/amd64/amd64/pmap.c#6 integrate .. //depot/projects/mpsafetty/sys/dev/jme/if_jme.c#3 integrate .. //depot/projects/mpsafetty/sys/i386/i386/pmap.c#3 integrate .. //depot/projects/mpsafetty/sys/kern/subr_lock.c#2 integrate .. //depot/projects/mpsafetty/sys/kern/vfs_subr.c#3 integrate .. //depot/projects/mpsafetty/sys/netinet/ip_divert.c#2 integrate .. //depot/projects/mpsafetty/sys/netinet/raw_ip.c#4 integrate .. //depot/projects/mpsafetty/sys/netinet6/icmp6.c#2 integrate .. //depot/projects/mpsafetty/sys/netinet6/raw_ip6.c#3 integrate .. //depot/projects/mpsafetty/usr.bin/procstat/procstat.1#3 integrate Differences ... ==== //depot/projects/mpsafetty/lib/libc/gen/Makefile.inc#3 (text+ko) ==== @@ -1,5 +1,5 @@ # @(#)Makefile.inc 8.6 (Berkeley) 5/4/95 -# $FreeBSD: src/lib/libc/gen/Makefile.inc,v 1.139 2008/07/22 11:33:49 ache Exp $ +# $FreeBSD: src/lib/libc/gen/Makefile.inc,v 1.140 2008/07/28 02:22:19 davidxu Exp $ # machine-independent gen sources .PATH: ${.CURDIR}/${MACHINE_ARCH}/gen ${.CURDIR}/gen @@ -56,7 +56,13 @@ getttyent.3 getusershell.3 getvfsbyname.3 \ glob.3 initgroups.3 isgreater.3 ldexp.3 lockf.3 makecontext.3 \ modf.3 msgctl.3 msgget.3 msgrcv.3 msgsnd.3 \ - nice.3 nlist.3 pause.3 popen.3 pselect.3 psignal.3 pwcache.3 \ + nice.3 nlist.3 pause.3 popen.3 \ + posix_spawn.3 posix_spawn_file_actions_addopen.3 \ + posix_spawn_file_actions_init.3 posix_spawnattr_getflags.3 \ + posix_spawnattr_getpgroup.3 posix_spawnattr_getschedparam.3 \ + posix_spawnattr_getschedpolicy.3 posix_spawnattr_init.3 \ + posix_spawnattr_getsigdefault.3 posix_spawnattr_getsigmask.3 \ + pselect.3 psignal.3 pwcache.3 \ raise.3 rand48.3 readpassphrase.3 rfork_thread.3 \ scandir.3 sem_destroy.3 sem_getvalue.3 sem_init.3 \ sem_open.3 sem_post.3 sem_timedwait.3 sem_wait.3 \ @@ -124,6 +130,17 @@ MLINKS+=makecontext.3 swapcontext.3 MLINKS+=modf.3 modff.3 modf.3 modfl.3 MLINKS+=popen.3 pclose.3 +MLINKS+=posix_spawn.3 posix_spawnp.3 \ + posix_spawn_file_actions_addopen.3 posix_spawn_file_actions_addclose.3 \ + posix_spawn_file_actions_addopen.3 posix_spawn_file_actions_adddup2.3 \ + posix_spawn_file_actions_init.3 posix_spawn_file_actions_destroy.3 \ + posix_spawnattr_getflags.3 posix_spawnattr_setflags.3 \ + posix_spawnattr_getpgroup.3 posix_spawnattr_setpgroup.3 \ + posix_spawnattr_getschedparam.3 posix_spawnattr_setschedparam.3 \ + posix_spawnattr_getschedpolicy.3 posix_spawnattr_setschedpolicy.3 \ + posix_spawnattr_getsigdefault.3 posix_spawnattr_setsigdefault.3 \ + posix_spawnattr_getsigmask.3 posix_spawnattr_setsigmask.3 \ + posix_spawnattr_init.3 posix_spawnattr_destroy.3 MLINKS+=psignal.3 strsignal.3 psignal.3 sys_siglist.3 psignal.3 sys_signame.3 MLINKS+=pwcache.3 group_from_gid.3 pwcache.3 user_from_uid.3 MLINKS+=rand48.3 _rand48.3 rand48.3 drand48.3 rand48.3 erand48.3 \ ==== //depot/projects/mpsafetty/sys/amd64/amd64/pmap.c#6 (text+ko) ==== @@ -77,7 +77,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.634 2008/07/18 22:05:51 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.638 2008/07/28 04:59:48 alc Exp $"); /* * Manages physical address maps. @@ -3350,9 +3350,8 @@ * are taken, but the code works. */ void -pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, - vm_object_t object, vm_pindex_t pindex, - vm_size_t size) +pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, + vm_pindex_t pindex, vm_size_t size) { vm_offset_t va; vm_page_t p, pdpg; @@ -3500,7 +3499,7 @@ void pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len, - vm_offset_t src_addr) + vm_offset_t src_addr) { vm_page_t free; vm_offset_t addr; @@ -4355,12 +4354,10 @@ } int -pmap_change_attr(va, size, mode) - vm_offset_t va; - vm_size_t size; - int mode; +pmap_change_attr(vm_offset_t va, vm_size_t size, int mode) { vm_offset_t base, offset, tmpva; + pdp_entry_t *pdpe; pd_entry_t *pde; pt_entry_t *pte; @@ -4368,32 +4365,53 @@ offset = va & PAGE_MASK; size = roundup(offset + size, PAGE_SIZE); - /* Only supported on kernel virtual addresses. */ - if (base <= VM_MAXUSER_ADDRESS) + /* + * Only supported on kernel virtual addresses, including the direct + * map but excluding the recursive map. + */ + if (base < DMAP_MIN_ADDRESS) return (EINVAL); /* - * XXX: We have to support tearing 2MB pages down into 4k pages if - * needed here. + * Pages that aren't mapped aren't supported. Also break down 2MB pages + * into 4KB pages if required. */ - /* Pages that aren't mapped aren't supported. */ - for (tmpva = base; tmpva < (base + size); ) { - pde = pmap_pde(kernel_pmap, tmpva); - if (*pde == 0) + PMAP_LOCK(kernel_pmap); + for (tmpva = base; tmpva < base + size; ) { + pdpe = pmap_pdpe(kernel_pmap, tmpva); + if (*pdpe == 0 || (*pdpe & PG_PS)) { + PMAP_UNLOCK(kernel_pmap); + return (EINVAL); + } + pde = pmap_pdpe_to_pde(pdpe, tmpva); + if (*pde == 0) { + PMAP_UNLOCK(kernel_pmap); return (EINVAL); + } if (*pde & PG_PS) { - /* Handle 2MB pages that are completely contained. */ - if (size >= NBPDR) { + /* + * If the current offset aligns with a 2MB page frame + * and there is at least 2MB left within the range, then + * we need not break down this page into 4KB pages. + */ + if ((tmpva & PDRMASK) == 0 && + tmpva + PDRMASK < base + size) { tmpva += NBPDR; continue; } - return (EINVAL); + if (!pmap_demote_pde(kernel_pmap, pde, tmpva)) { + PMAP_UNLOCK(kernel_pmap); + return (ENOMEM); + } } pte = vtopte(tmpva); - if (*pte == 0) + if (*pte == 0) { + PMAP_UNLOCK(kernel_pmap); return (EINVAL); + } tmpva += PAGE_SIZE; } + PMAP_UNLOCK(kernel_pmap); /* * Ok, all the pages exist, so run through them updating their ==== //depot/projects/mpsafetty/sys/dev/jme/if_jme.c#3 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/jme/if_jme.c,v 1.2 2008/07/18 04:20:48 yongari Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/jme/if_jme.c,v 1.3 2008/07/28 02:37:15 yongari Exp $"); #include #include @@ -2346,7 +2346,10 @@ if (jme_newbuf(sc, rxd) != 0) { ifp->if_iqdrops++; /* Reuse buffer. */ - jme_discard_rxbuf(sc, sc->jme_cdata.jme_rx_cons); + for (; count < nsegs; count++) { + jme_discard_rxbuf(sc, cons); + JME_DESC_INC(cons, JME_RX_RING_CNT); + } if (sc->jme_cdata.jme_rxhead != NULL) { m_freem(sc->jme_cdata.jme_rxhead); JME_RXCHAIN_RESET(sc); ==== //depot/projects/mpsafetty/sys/i386/i386/pmap.c#3 (text+ko) ==== @@ -75,7 +75,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.623 2008/07/18 22:05:51 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.626 2008/07/28 05:41:35 alc Exp $"); /* * Manages physical address maps. @@ -3415,9 +3415,8 @@ * are taken, but the code works. */ void -pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, - vm_object_t object, vm_pindex_t pindex, - vm_size_t size) +pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, + vm_pindex_t pindex, vm_size_t size) { vm_page_t p; @@ -3545,7 +3544,7 @@ void pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len, - vm_offset_t src_addr) + vm_offset_t src_addr) { vm_page_t free; vm_offset_t addr; @@ -4422,10 +4421,7 @@ } int -pmap_change_attr(va, size, mode) - vm_offset_t va; - vm_size_t size; - int mode; +pmap_change_attr(vm_offset_t va, vm_size_t size, int mode) { vm_offset_t base, offset, tmpva; pt_entry_t *pte; @@ -4436,8 +4432,10 @@ offset = va & PAGE_MASK; size = roundup(offset + size, PAGE_SIZE); - /* Only supported on kernel virtual addresses. */ - if (base <= VM_MAXUSER_ADDRESS) + /* + * Only supported on kernel virtual addresses above the recursive map. + */ + if (base < VM_MIN_KERNEL_ADDRESS) return (EINVAL); /* 4MB pages and pages that aren't mapped aren't supported. */ ==== //depot/projects/mpsafetty/sys/kern/subr_lock.c#2 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/kern/subr_lock.c,v 1.23 2008/05/15 20:10:06 attilio Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/subr_lock.c,v 1.24 2008/07/27 21:45:20 kmacy Exp $"); #include "opt_ddb.h" #include "opt_mprof.h" @@ -152,6 +152,7 @@ const char *name; int line; int ticks; + uintmax_t cnt_wait_max; uintmax_t cnt_max; uintmax_t cnt_tot; uintmax_t cnt_wait; @@ -267,8 +268,8 @@ for (p = lp->file; p != NULL && strncmp(p, "../", 3) == 0; p += 3); sbuf_printf(sb, - "%6ju %12ju %12ju %11ju %5ju %5ju %12ju %12ju %s:%d (%s:%s)\n", - lp->cnt_max / 1000, lp->cnt_tot / 1000, + "%8ju %9ju %11ju %11ju %11ju %6ju %6ju %2ju %6ju %s:%d (%s:%s)\n", + lp->cnt_max / 1000, lp->cnt_wait_max / 1000, lp->cnt_tot / 1000, lp->cnt_wait / 1000, lp->cnt_cur, lp->cnt_cur == 0 ? (uintmax_t)0 : lp->cnt_tot / (lp->cnt_cur * 1000), @@ -304,6 +305,8 @@ l->ticks = t; if (l->cnt_max > dst->cnt_max) dst->cnt_max = l->cnt_max; + if (l->cnt_wait_max > dst->cnt_wait_max) + dst->cnt_wait_max = l->cnt_wait_max; dst->cnt_tot += l->cnt_tot; dst->cnt_wait += l->cnt_wait; dst->cnt_cur += l->cnt_cur; @@ -344,8 +347,8 @@ retry_sbufops: sb = sbuf_new(NULL, NULL, LPROF_SBUF_SIZE * multiplier, SBUF_FIXEDLEN); - sbuf_printf(sb, "\n%6s %12s %12s %11s %5s %5s %12s %12s %s\n", - "max", "total", "wait_total", "count", "avg", "wait_avg", "cnt_hold", "cnt_lock", "name"); + sbuf_printf(sb, "\n%8s %9s %11s %11s %11s %6s %6s %2s %6s %s\n", + "max", "wait_max", "total", "wait_total", "count", "avg", "wait_avg", "cnt_hold", "cnt_lock", "name"); enabled = lock_prof_enable; lock_prof_enable = 0; pause("lpreset", hz / 10); @@ -542,6 +545,8 @@ */ if (holdtime > lp->cnt_max) lp->cnt_max = holdtime; + if (l->lpo_waittime > lp->cnt_wait_max) + lp->cnt_wait_max = l->lpo_waittime; lp->cnt_tot += holdtime; lp->cnt_wait += l->lpo_waittime; lp->cnt_contest_locking += l->lpo_contest_locking; ==== //depot/projects/mpsafetty/sys/kern/vfs_subr.c#3 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/kern/vfs_subr.c,v 1.733 2008/07/21 23:01:09 attilio Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/vfs_subr.c,v 1.735 2008/07/27 11:48:15 pjd Exp $"); #include "opt_ddb.h" #include "opt_mac.h" @@ -2282,7 +2282,7 @@ vinactive(struct vnode *vp, struct thread *td) { - ASSERT_VOP_LOCKED(vp, "vinactive"); + ASSERT_VOP_ELOCKED(vp, "vinactive"); ASSERT_VI_LOCKED(vp, "vinactive"); VNASSERT((vp->v_iflag & VI_DOINGINACT) == 0, vp, ("vinactive: recursed on VI_DOINGINACT")); @@ -2439,7 +2439,7 @@ { int recycled; - ASSERT_VOP_LOCKED(vp, "vrecycle"); + ASSERT_VOP_ELOCKED(vp, "vrecycle"); recycled = 0; VI_LOCK(vp); if (vp->v_usecount == 0) { @@ -2474,7 +2474,7 @@ struct mount *mp; CTR1(KTR_VFS, "vgonel: vp %p", vp); - ASSERT_VOP_LOCKED(vp, "vgonel"); + ASSERT_VOP_ELOCKED(vp, "vgonel"); ASSERT_VI_LOCKED(vp, "vgonel"); VNASSERT(vp->v_holdcnt, vp, ("vgonel: vp %p has no reference.", vp)); @@ -3581,7 +3581,8 @@ * This only exists to supress warnings from unlocked specfs accesses. It is * no longer ok to have an unlocked VFS. */ -#define IGNORE_LOCK(vp) ((vp)->v_type == VCHR || (vp)->v_type == VBAD) +#define IGNORE_LOCK(vp) (panicstr != NULL || (vp) == NULL || \ + (vp)->v_type == VCHR || (vp)->v_type == VBAD) int vfs_badlock_ddb = 1; /* Drop into debugger on violation. */ SYSCTL_INT(_debug, OID_AUTO, vfs_badlock_ddb, CTLFLAG_RW, &vfs_badlock_ddb, 0, ""); @@ -3631,7 +3632,7 @@ assert_vop_locked(struct vnode *vp, const char *str) { - if (vp && !IGNORE_LOCK(vp) && VOP_ISLOCKED(vp) == 0) + if (!IGNORE_LOCK(vp) && VOP_ISLOCKED(vp) == 0) vfs_badlock("is not locked but should be", str, vp); } @@ -3639,8 +3640,7 @@ assert_vop_unlocked(struct vnode *vp, const char *str) { - if (vp && !IGNORE_LOCK(vp) && - VOP_ISLOCKED(vp) == LK_EXCLUSIVE) + if (!IGNORE_LOCK(vp) && VOP_ISLOCKED(vp) == LK_EXCLUSIVE) vfs_badlock("is locked but should not be", str, vp); } @@ -3648,8 +3648,7 @@ assert_vop_elocked(struct vnode *vp, const char *str) { - if (vp && !IGNORE_LOCK(vp) && - VOP_ISLOCKED(vp) != LK_EXCLUSIVE) + if (!IGNORE_LOCK(vp) && VOP_ISLOCKED(vp) != LK_EXCLUSIVE) vfs_badlock("is not exclusive locked but should be", str, vp); } @@ -3658,8 +3657,7 @@ assert_vop_elocked_other(struct vnode *vp, const char *str) { - if (vp && !IGNORE_LOCK(vp) && - VOP_ISLOCKED(vp) != LK_EXCLOTHER) + if (!IGNORE_LOCK(vp) && VOP_ISLOCKED(vp) != LK_EXCLOTHER) vfs_badlock("is not exclusive locked by another thread", str, vp); } @@ -3668,8 +3666,7 @@ assert_vop_slocked(struct vnode *vp, const char *str) { - if (vp && !IGNORE_LOCK(vp) && - VOP_ISLOCKED(vp) != LK_SHARED) + if (!IGNORE_LOCK(vp) && VOP_ISLOCKED(vp) != LK_SHARED) vfs_badlock("is not locked shared but should be", str, vp); } #endif /* 0 */ ==== //depot/projects/mpsafetty/sys/netinet/ip_divert.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/netinet/ip_divert.c,v 1.133 2008/04/21 12:03:59 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/ip_divert.c,v 1.134 2008/07/27 20:48:22 mav Exp $"); #if !defined(KLD_MODULE) #include "opt_inet.h" @@ -268,9 +268,9 @@ nport = htons((u_int16_t)divert_info(mtag)); INP_INFO_RLOCK(&divcbinfo); LIST_FOREACH(inp, &divcb, inp_list) { - INP_RLOCK(inp); /* XXX why does only one socket match? */ if (inp->inp_lport == nport) { + INP_RLOCK(inp); sa = inp->inp_socket; SOCKBUF_LOCK(&sa->so_rcv); if (sbappendaddr_locked(&sa->so_rcv, @@ -283,7 +283,6 @@ INP_RUNLOCK(inp); break; } - INP_RUNLOCK(inp); } INP_INFO_RUNLOCK(&divcbinfo); if (sa == NULL) { ==== //depot/projects/mpsafetty/sys/netinet/raw_ip.c#4 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/netinet/raw_ip.c,v 1.190 2008/07/26 21:12:00 mav Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet/raw_ip.c,v 1.191 2008/07/28 06:57:28 mav Exp $"); #include "opt_inet6.h" #include "opt_ipsec.h" @@ -126,12 +126,13 @@ INP_INFO_WLOCK_ASSERT(pcbinfo); INP_WLOCK_ASSERT(inp); - if (inp->inp_ip_p && inp->inp_laddr.s_addr && inp->inp_faddr.s_addr) { + if (inp->inp_ip_p != 0 && + inp->inp_laddr.s_addr != INADDR_ANY && + inp->inp_faddr.s_addr != INADDR_ANY) { hash = INP_PCBHASH_RAW(inp->inp_ip_p, inp->inp_laddr.s_addr, inp->inp_faddr.s_addr, pcbinfo->ipi_hashmask); - } else { + } else hash = 0; - } pcbhash = &pcbinfo->ipi_hashbase[hash]; LIST_INSERT_HEAD(pcbhash, inp, inp_hash); } @@ -139,7 +140,10 @@ static void rip_delhash(struct inpcb *inp) { + + INP_INFO_WLOCK_ASSERT(inp->inp_pcbinfo); INP_WLOCK_ASSERT(inp); + LIST_REMOVE(inp, inp_hash); } @@ -708,6 +712,8 @@ static void rip_dodisconnect(struct socket *so, struct inpcb *inp) { + + INP_INFO_WLOCK_ASSERT(inp->inp_pcbinfo); INP_WLOCK_ASSERT(inp); rip_delhash(inp); ==== //depot/projects/mpsafetty/sys/netinet6/icmp6.c#2 (text+ko) ==== @@ -61,7 +61,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/netinet6/icmp6.c,v 1.85 2008/07/05 13:10:10 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet6/icmp6.c,v 1.86 2008/07/27 20:30:34 mav Exp $"); #include "opt_inet.h" #include "opt_inet6.h" @@ -1897,24 +1897,20 @@ INP_INFO_RLOCK(&ripcbinfo); LIST_FOREACH(in6p, &ripcb, inp_list) { - INP_RLOCK(in6p); - if ((in6p->inp_vflag & INP_IPV6) == 0) { - docontinue: - INP_RUNLOCK(in6p); + if ((in6p->inp_vflag & INP_IPV6) == 0) continue; - } if (in6p->in6p_ip6_nxt != IPPROTO_ICMPV6) - goto docontinue; + continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_laddr) && !IN6_ARE_ADDR_EQUAL(&in6p->in6p_laddr, &ip6->ip6_dst)) - goto docontinue; + continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr) && !IN6_ARE_ADDR_EQUAL(&in6p->in6p_faddr, &ip6->ip6_src)) - goto docontinue; + continue; if (in6p->in6p_icmp6filt && ICMP6_FILTER_WILLBLOCK(icmp6->icmp6_type, in6p->in6p_icmp6filt)) - goto docontinue; + continue; if (last) { struct mbuf *n = NULL; @@ -1974,7 +1970,9 @@ INP_RUNLOCK(last); } last = in6p; + INP_RLOCK(last); } + INP_INFO_RUNLOCK(&ripcbinfo); if (last) { if (last->in6p_flags & IN6P_CONTROLOPTS) ip6_savecontrol(last, m, &opts); @@ -2014,7 +2012,6 @@ m_freem(m); ip6stat.ip6s_delivered--; } - INP_INFO_RUNLOCK(&ripcbinfo); return IPPROTO_DONE; } ==== //depot/projects/mpsafetty/sys/netinet6/raw_ip6.c#3 (text+ko) ==== @@ -60,7 +60,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/netinet6/raw_ip6.c,v 1.80 2008/07/08 18:41:36 bz Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet6/raw_ip6.c,v 1.81 2008/07/27 20:30:34 mav Exp $"); #include "opt_ipsec.h" #include "opt_inet6.h" @@ -154,27 +154,23 @@ INP_INFO_RLOCK(&ripcbinfo); LIST_FOREACH(in6p, &ripcb, inp_list) { - INP_RLOCK(in6p); - if ((in6p->in6p_vflag & INP_IPV6) == 0) { -docontinue: - INP_RUNLOCK(in6p); + if ((in6p->in6p_vflag & INP_IPV6) == 0) continue; - } if (in6p->in6p_ip6_nxt && in6p->in6p_ip6_nxt != proto) - goto docontinue; + continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_laddr) && !IN6_ARE_ADDR_EQUAL(&in6p->in6p_laddr, &ip6->ip6_dst)) - goto docontinue; + continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr) && !IN6_ARE_ADDR_EQUAL(&in6p->in6p_faddr, &ip6->ip6_src)) - goto docontinue; + continue; if (in6p->in6p_cksum != -1) { rip6stat.rip6s_isum++; if (in6_cksum(m, proto, *offp, m->m_pkthdr.len - *offp)) { rip6stat.rip6s_badsum++; - goto docontinue; + continue; } } if (last) { @@ -210,7 +206,9 @@ INP_RUNLOCK(last); } last = in6p; + INP_RLOCK(last); } + INP_INFO_RUNLOCK(&ripcbinfo); #ifdef IPSEC /* * Check AH/ESP integrity. @@ -252,7 +250,6 @@ } ip6stat.ip6s_delivered--; } - INP_INFO_RUNLOCK(&ripcbinfo); return (IPPROTO_DONE); } ==== //depot/projects/mpsafetty/usr.bin/procstat/procstat.1#3 (text+ko) ==== @@ -23,7 +23,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/usr.bin/procstat/procstat.1,v 1.4 2008/04/21 17:09:53 rwatson Exp $ +.\" $FreeBSD: src/usr.bin/procstat/procstat.1,v 1.5 2008/07/28 08:01:24 ed Exp $ .\" .Dd April 19, 2008 .Dt PROCSTAT 1