Date: Mon, 12 Jul 2004 19:43:20 GMT From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 57211 for review Message-ID: <200407121943.i6CJhKj5029096@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=57211 Change 57211 by rwatson@rwatson_tislabs on 2004/07/12 19:42:38 Integ netperf_socket from FreeBSD CVS: - Locking fixes for umtx. - at_rmx prsockaddr() fixes for MPSAFEty (merged from rwatson_netperf). - netatalk DDP PCB locking (merged from rwatson_netperf). - Additional tcp_input() locking state assertions (merged from rwatson_netperf) - Constification in rpc, spx. Affected files ... .. //depot/projects/netperf_socket/sys/kern/kern_thr.c#9 integrate .. //depot/projects/netperf_socket/sys/kern/kern_umtx.c#4 integrate .. //depot/projects/netperf_socket/sys/netatalk/aarp.c#9 integrate .. //depot/projects/netperf_socket/sys/netatalk/at_rmx.c#3 integrate .. //depot/projects/netperf_socket/sys/netatalk/ddp_input.c#6 integrate .. //depot/projects/netperf_socket/sys/netatalk/ddp_pcb.c#7 integrate .. //depot/projects/netperf_socket/sys/netatalk/ddp_pcb.h#2 integrate .. //depot/projects/netperf_socket/sys/netatalk/ddp_usrreq.c#11 integrate .. //depot/projects/netperf_socket/sys/netatalk/ddp_var.h#4 integrate .. //depot/projects/netperf_socket/sys/netinet/tcp_input.c#17 integrate .. //depot/projects/netperf_socket/sys/netipx/spx_usrreq.c#8 integrate .. //depot/projects/netperf_socket/sys/rpc/rpcclnt.c#5 integrate .. //depot/projects/netperf_socket/sys/vm/vm_pageout.c#8 integrate Differences ... ==== //depot/projects/netperf_socket/sys/kern/kern_thr.c#9 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_thr.c,v 1.21 2004/07/02 00:40:07 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_thr.c,v 1.22 2004/07/12 15:28:31 mtm Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -280,13 +280,10 @@ hz = tvtohz(&tv); } PROC_LOCK(td->td_proc); - mtx_lock_spin(&sched_lock); - if ((td->td_flags & TDF_THRWAKEUP) == 0) { - mtx_unlock_spin(&sched_lock); + if ((td->td_flags & TDF_THRWAKEUP) == 0) error = msleep((void *)td, &td->td_proc->p_mtx, td->td_priority | PCATCH, "lthr", hz); - mtx_lock_spin(&sched_lock); - } + mtx_lock_spin(&sched_lock); td->td_flags &= ~TDF_THRWAKEUP; mtx_unlock_spin(&sched_lock); PROC_UNLOCK(td->td_proc); ==== //depot/projects/netperf_socket/sys/kern/kern_umtx.c#4 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_umtx.c,v 1.15 2004/07/02 00:40:07 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_umtx.c,v 1.16 2004/07/12 15:28:31 mtm Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -217,14 +217,12 @@ * unlocking the umtx. */ PROC_LOCK(td->td_proc); - mtx_lock_spin(&sched_lock); - if (old == owner && (td->td_flags & TDF_UMTXWAKEUP) == 0) { - mtx_unlock_spin(&sched_lock); + if (old == owner && (td->td_flags & TDF_UMTXWAKEUP) == 0) error = msleep(td, &td->td_proc->p_mtx, td->td_priority | PCATCH, "umtx", 0); - mtx_lock_spin(&sched_lock); - } else + else error = 0; + mtx_lock_spin(&sched_lock); td->td_flags &= ~TDF_UMTXWAKEUP; mtx_unlock_spin(&sched_lock); PROC_UNLOCK(td->td_proc); ==== //depot/projects/netperf_socket/sys/netatalk/aarp.c#9 (text+ko) ==== @@ -2,7 +2,7 @@ * Copyright (c) 1990,1991 Regents of The University of Michigan. * All Rights Reserved. * - * $FreeBSD: src/sys/netatalk/aarp.c,v 1.31 2004/04/25 09:24:51 luigi Exp $ + * $FreeBSD: src/sys/netatalk/aarp.c,v 1.32 2004/07/12 18:35:30 rwatson Exp $ */ #include "opt_atalk.h" @@ -71,9 +71,6 @@ 0x09, 0x00, 0x07, 0xff, 0xff, 0xff, }; -/* - * Not used? - */ u_char at_org_code[ 3 ] = { 0x08, 0x00, 0x07, }; ==== //depot/projects/netperf_socket/sys/netatalk/at_rmx.c#3 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * at_rmx.c,v 1.13 1995/05/30 08:09:31 rgrimes Exp - * $FreeBSD: src/sys/netatalk/at_rmx.c,v 1.7 2004/03/22 03:57:01 rwatson Exp $ + * $FreeBSD: src/sys/netatalk/at_rmx.c,v 1.8 2004/07/12 18:37:31 rwatson Exp $ */ /* This code generates debugging traces to the radix code */ @@ -40,10 +40,10 @@ int at_inithead(void **head, int off); -static char hexbuf[256]; +#define HEXBUF_LEN 256 -static char * -prsockaddr(void *v) +static const char * +prsockaddr(void *v, char *hexbuf) { char *bp = &hexbuf[0]; u_char *cp = v; @@ -55,7 +55,7 @@ /* return: "(len) hexdump" */ bp += sprintf(bp, "(%d)", len); - for (cp++; cp < cplim && bp < hexbuf+252; cp++) { + for (cp++; cp < cplim && bp < hexbuf + (HEXBUF_LEN - 4); cp++) { *bp++ = "0123456789abcdef"[*cp / 16]; *bp++ = "0123456789abcdef"[*cp % 16]; } @@ -63,8 +63,7 @@ bp+= sprintf(bp, "null"); } *bp = '\0'; - - return &hexbuf[0]; + return (hexbuf); } static struct radix_node * @@ -72,9 +71,10 @@ struct radix_node *treenodes) { struct radix_node *rn; + char hexbuf[HEXBUF_LEN]; - printf("at_addroute: v=%s\n", prsockaddr(v_arg)); - printf("at_addroute: n=%s\n", prsockaddr(n_arg)); + printf("at_addroute: v=%s\n", prsockaddr(v_arg, hexbuf)); + printf("at_addroute: n=%s\n", prsockaddr(n_arg, hexbuf)); printf("at_addroute: head=%p treenodes=%p\n", (void *)head, (void *)treenodes); @@ -89,8 +89,9 @@ at_matroute(void *v_arg, struct radix_node_head *head) { struct radix_node *rn; + char hexbuf[HEXBUF_LEN]; - printf("at_matroute: v=%s\n", prsockaddr(v_arg)); + printf("at_matroute: v=%s\n", prsockaddr(v_arg, hexbuf)); printf("at_matroute: head=%p\n", (void *)head); rn = rn_match(v_arg, head); @@ -104,9 +105,10 @@ at_lookup(void *v_arg, void *m_arg, struct radix_node_head *head) { struct radix_node *rn; + char hexbuf[HEXBUF_LEN]; - printf("at_lookup: v=%s\n", prsockaddr(v_arg)); - printf("at_lookup: n=%s\n", prsockaddr(m_arg)); + printf("at_lookup: v=%s\n", prsockaddr(v_arg, hexbuf)); + printf("at_lookup: n=%s\n", prsockaddr(m_arg, hexbuf)); printf("at_lookup: head=%p\n", (void *)head); rn = rn_lookup(v_arg, m_arg, head); @@ -120,9 +122,10 @@ at_delroute(void *v_arg, void *netmask_arg, struct radix_node_head *head) { struct radix_node *rn; + char hexbuf[HEXBUF_LEN]; - printf("at_delroute: v=%s\n", prsockaddr(v_arg)); - printf("at_delroute: n=%s\n", prsockaddr(netmask_arg)); + printf("at_delroute: v=%s\n", prsockaddr(v_arg, hexbuf)); + printf("at_delroute: n=%s\n", prsockaddr(netmask_arg, hexbuf)); printf("at_delroute: head=%p\n", (void *)head); rn = rn_delete(v_arg, netmask_arg, head); ==== //depot/projects/netperf_socket/sys/netatalk/ddp_input.c#6 (text+ko) ==== @@ -1,8 +1,9 @@ /* + * Copyright (c) 2004 Robert N. M. Watson * Copyright (c) 1990,1994 Regents of The University of Michigan. * All Rights Reserved. See COPYRIGHT. * - * $FreeBSD: src/sys/netatalk/ddp_input.c,v 1.24 2004/06/13 02:50:05 rwatson Exp $ + * $FreeBSD: src/sys/netatalk/ddp_input.c,v 1.25 2004/07/12 18:39:59 rwatson Exp $ */ #include "opt_mac.h" @@ -24,11 +25,13 @@ #include <netatalk/at_var.h> #include <netatalk/ddp.h> #include <netatalk/ddp_var.h> +#include <netatalk/ddp_pcb.h> #include <netatalk/at_extern.h> static volatile int ddp_forward = 1; static volatile int ddp_firewall = 0; static struct ddpstat ddpstat; + static struct route forwro; static void ddp_input(struct mbuf *, struct ifnet *, struct elaphdr *, int); @@ -360,17 +363,16 @@ * Search for ddp protocol control blocks that match these * addresses. */ + DDP_LIST_SLOCK(); if ((ddp = ddp_search(&from, &to, aa)) == NULL) { - m_freem(m); - return; + goto out; } #ifdef MAC SOCK_LOCK(ddp->ddp_socket); if (mac_check_socket_deliver(ddp->ddp_socket, m) != 0) { SOCK_UNLOCK(ddp->ddp_socket); - m_freem(m); - return; + goto out; } SOCK_UNLOCK(ddp->ddp_socket); #endif @@ -384,13 +386,17 @@ * If the socket is full (or similar error) dump the packet. */ ddpstat.ddps_nosockspace++; - m_freem(m); - return; + goto out; } /* * And wake up whatever might be waiting for it */ sorwakeup(ddp->ddp_socket); + m = NULL; +out: + DDP_LIST_SUNLOCK(); + if (m != NULL) + m_freem(m); } #if 0 ==== //depot/projects/netperf_socket/sys/netatalk/ddp_pcb.c#7 (text+ko) ==== @@ -1,8 +1,9 @@ /* + * Copyright (c) 2004 Robert N. M. Watson * Copyright (c) 1990,1994 Regents of The University of Michigan. * All Rights Reserved. See COPYRIGHT. * - * $FreeBSD: src/sys/netatalk/ddp_pcb.c,v 1.43 2004/06/12 20:47:29 rwatson Exp $ + * $FreeBSD: src/sys/netatalk/ddp_pcb.c,v 1.44 2004/07/12 18:39:59 rwatson Exp $ */ #include <sys/param.h> @@ -22,12 +23,18 @@ #include <netatalk/ddp_pcb.h> #include <netatalk/at_extern.h> +struct mtx ddp_list_mtx; static struct ddpcb *ddp_ports[ ATPORT_LAST ]; -struct ddpcb *ddpcb_list = NULL; +struct ddpcb *ddpcb_list = NULL; void at_sockaddr(struct ddpcb *ddp, struct sockaddr **addr) { + + /* + * Prevent modification of ddp during copy of addr. + */ + DDP_LOCK_ASSERT(ddp); *addr = sodupsockaddr((struct sockaddr *)&ddp->ddp_lsat, M_NOWAIT); } @@ -38,6 +45,12 @@ struct at_ifaddr *aa; struct ddpcb *ddpp; + /* + * We read and write both the ddp passed in, and also ddp_ports. + */ + DDP_LIST_XLOCK_ASSERT(); + DDP_LOCK_ASSERT(ddp); + if (ddp->ddp_lsat.sat_port != ATADDR_ANYPORT) { /* shouldn't be bound */ return (EINVAL); } @@ -134,6 +147,9 @@ struct ifnet *ifp; u_short hintnet = 0, net; + DDP_LIST_XLOCK_ASSERT(); + DDP_LOCK_ASSERT(ddp); + if (sat->sat_family != AF_APPLETALK) { return (EAFNOSUPPORT); } @@ -222,6 +238,9 @@ void at_pcbdisconnect(struct ddpcb *ddp) { + + DDP_LOCK_ASSERT(ddp); + ddp->ddp_fsat.sat_addr.s_net = ATADDR_ANYNET; ddp->ddp_fsat.sat_addr.s_node = ATADDR_ANYNODE; ddp->ddp_fsat.sat_port = ATADDR_ANYPORT; @@ -232,9 +251,15 @@ { struct ddpcb *ddp; - MALLOC(ddp, struct ddpcb *, sizeof *ddp, M_PCB, M_WAITOK | M_ZERO); + DDP_LIST_XLOCK_ASSERT(); + + MALLOC(ddp, struct ddpcb *, sizeof *ddp, M_PCB, M_NOWAIT | M_ZERO); + DDP_LOCK_INIT(ddp); ddp->ddp_lsat.sat_port = ATADDR_ANYPORT; + ddp->ddp_socket = so; + so->so_pcb = (caddr_t)ddp; + ddp->ddp_next = ddpcb_list; ddp->ddp_prev = NULL; ddp->ddp_pprev = NULL; @@ -243,15 +268,19 @@ ddpcb_list->ddp_prev = ddp; } ddpcb_list = ddp; - - ddp->ddp_socket = so; - so->so_pcb = (caddr_t)ddp; - return (0); + return(0); } void at_pcbdetach(struct socket *so, struct ddpcb *ddp) { + + /* + * We modify ddp, ddp_ports, and the global list. + */ + DDP_LIST_XLOCK_ASSERT(); + DDP_LOCK_ASSERT(ddp); + soisdisconnected(so); SOCK_LOCK(so); so->so_pcb = NULL; @@ -282,6 +311,8 @@ if (ddp->ddp_next) { ddp->ddp_next->ddp_prev = ddp->ddp_prev; } + DDP_UNLOCK(ddp); + DDP_LOCK_DESTROY(ddp); FREE(ddp, M_PCB); } @@ -297,6 +328,8 @@ { struct ddpcb *ddp; + DDP_LIST_SLOCK_ASSERT(); + /* * Check for bad ports. */ @@ -309,11 +342,13 @@ * the interface? */ for (ddp = ddp_ports[ to->sat_port - 1 ]; ddp; ddp = ddp->ddp_pnext) { + DDP_LOCK(ddp); /* XXX should we handle 0.YY? */ /* XXXX.YY to socket on destination interface */ if (to->sat_addr.s_net == ddp->ddp_lsat.sat_addr.s_net && to->sat_addr.s_node == ddp->ddp_lsat.sat_addr.s_node) { + DDP_UNLOCK(ddp); break; } @@ -321,6 +356,7 @@ if (to->sat_addr.s_node == ATADDR_BCAST && (to->sat_addr.s_net == 0 || to->sat_addr.s_net == ddp->ddp_lsat.sat_addr.s_net) && ddp->ddp_lsat.sat_addr.s_net == AA_SAT(aa)->sat_addr.s_net) { + DDP_UNLOCK(ddp); break; } @@ -331,8 +367,10 @@ ntohs(aa->aa_firstnet) && ntohs(ddp->ddp_lsat.sat_addr.s_net) <= ntohs(aa->aa_lastnet)) { + DDP_UNLOCK(ddp); break; } + DDP_UNLOCK(ddp); } return (ddp); } ==== //depot/projects/netperf_socket/sys/netatalk/ddp_pcb.h#2 (text+ko) ==== @@ -1,8 +1,9 @@ /* + * Copyright (c) 2004 Robert N. M. Watson * Copyright (c) 1990,1994 Regents of The University of Michigan. * All Rights Reserved. See COPYRIGHT. * - * $FreeBSD: src/sys/netatalk/ddp_pcb.h,v 1.1 2004/03/19 07:21:22 rwatson Exp $ + * $FreeBSD: src/sys/netatalk/ddp_pcb.h,v 1.2 2004/07/12 18:39:59 rwatson Exp $ */ #ifndef _NETATALK_DDP_PCB_H_ @@ -17,4 +18,23 @@ struct thread *td); void at_sockaddr(struct ddpcb *ddp, struct sockaddr **addr); +/* Lock macros for per-pcb locks. */ +#define DDP_LOCK_INIT(ddp) mtx_init(&(ddp)->ddp_mtx, "ddp_mtx", \ + NULL, MTX_DEF) +#define DDP_LOCK_DESTROY(ddp) mtx_destroy(&(ddp)->ddp_mtx) +#define DDP_LOCK(ddp) mtx_lock(&(ddp)->ddp_mtx) +#define DDP_UNLOCK(ddp) mtx_unlock(&(ddp)->ddp_mtx) +#define DDP_LOCK_ASSERT(ddp) mtx_assert(&(ddp)->ddp_mtx, MA_OWNED) + +/* Lock macros for global pcb list lock. */ +#define DDP_LIST_LOCK_INIT() mtx_init(&ddp_list_mtx, "ddp_list_mtx", \ + NULL, MTX_DEF) +#define DDP_LIST_LOCK_DESTROY() mtx_destroy(&ddp_list_mtx) +#define DDP_LIST_XLOCK() mtx_lock(&ddp_list_mtx) +#define DDP_LIST_XUNLOCK() mtx_unlock(&ddp_list_mtx) +#define DDP_LIST_XLOCK_ASSERT() mtx_assert(&ddp_list_mtx, MA_OWNED) +#define DDP_LIST_SLOCK() mtx_lock(&ddp_list_mtx) +#define DDP_LIST_SUNLOCK() mtx_unlock(&ddp_list_mtx) +#define DDP_LIST_SLOCK_ASSERT() mtx_assert(&ddp_list_mtx, MA_OWNED) + #endif ==== //depot/projects/netperf_socket/sys/netatalk/ddp_usrreq.c#11 (text+ko) ==== @@ -1,8 +1,9 @@ /* + * Copyright (c) 2004 Robert N. M. Watson * Copyright (c) 1990,1994 Regents of The University of Michigan. * All Rights Reserved. See COPYRIGHT. * - * $FreeBSD: src/sys/netatalk/ddp_usrreq.c,v 1.41 2004/07/12 04:33:58 rwatson Exp $ + * $FreeBSD: src/sys/netatalk/ddp_usrreq.c,v 1.42 2004/07/12 18:39:59 rwatson Exp $ */ #include <sys/param.h> @@ -33,17 +34,22 @@ struct ddpcb *ddp; int error = 0; + ddp = sotoddpcb(so); + if (ddp != NULL) + return (EINVAL); - ddp = sotoddpcb(so); - if (ddp != NULL) { - return (EINVAL); - } + /* + * Allocate socket buffer space first so that it's present + * before first use. + */ + error = soreserve(so, ddp_sendspace, ddp_recvspace); + if (error) + return (error); + DDP_LIST_XLOCK(); error = at_pcballoc(so); - if (error) { - return (error); - } - return (soreserve(so, ddp_sendspace, ddp_recvspace)); + DDP_LIST_XUNLOCK(); + return (error); } static int @@ -52,10 +58,13 @@ struct ddpcb *ddp; ddp = sotoddpcb(so); - if (ddp == NULL) { + if (ddp == NULL) return (EINVAL); - } + + DDP_LIST_XLOCK(); + DDP_LOCK(ddp); at_pcbdetach(so, ddp); + DDP_LIST_XUNLOCK(); return (0); } @@ -69,7 +78,11 @@ if (ddp == NULL) { return (EINVAL); } + DDP_LIST_XLOCK(); + DDP_LOCK(ddp); error = at_pcbsetaddr(ddp, nam, td); + DDP_UNLOCK(ddp); + DDP_LIST_XUNLOCK(); return (error); } @@ -84,11 +97,17 @@ return (EINVAL); } + DDP_LIST_XLOCK(); + DDP_LOCK(ddp); if (ddp->ddp_fsat.sat_port != ATADDR_ANYPORT) { + DDP_UNLOCK(ddp); + DDP_LIST_XUNLOCK(); return (EISCONN); } - error = at_pcbconnect(ddp, nam, td); + error = at_pcbconnect( ddp, nam, td ); + DDP_UNLOCK(ddp); + DDP_LIST_XUNLOCK(); if (error == 0) soisconnected(so); return (error); @@ -104,12 +123,15 @@ if (ddp == NULL) { return (EINVAL); } + DDP_LOCK(ddp); if (ddp->ddp_fsat.sat_addr.s_node == ATADDR_ANYNODE) { + DDP_UNLOCK(ddp); return (ENOTCONN); } at_pcbdisconnect(ddp); ddp->ddp_fsat.sat_addr.s_node = ATADDR_ANYNODE; + DDP_UNLOCK(ddp); soisdisconnected(so); return (0); } @@ -144,23 +166,28 @@ } if (addr != NULL) { + DDP_LIST_XLOCK(); + DDP_LOCK(ddp); if (ddp->ddp_fsat.sat_port != ATADDR_ANYPORT) { - return (EISCONN); + error = EISCONN; + goto out; } error = at_pcbconnect(ddp, addr, td); - if (error) { - return (error); + if (error == 0) { + error = ddp_output(m, so); + at_pcbdisconnect(ddp); } +out: + DDP_UNLOCK(ddp); + DDP_LIST_XUNLOCK(); } else { - if (ddp->ddp_fsat.sat_port == ATADDR_ANYPORT) { - return (ENOTCONN); - } - } - - error = ddp_output(m, so); - if (addr != NULL) { - at_pcbdisconnect(ddp); + DDP_LOCK(ddp); + if (ddp->ddp_fsat.sat_port == ATADDR_ANYPORT) + error = ENOTCONN; + else + error = ddp_output(m, so); + DDP_UNLOCK(ddp); } return (error); } @@ -174,20 +201,23 @@ if (ddp == NULL) { return (EINVAL); } + DDP_LIST_XLOCK(); + DDP_LOCK(ddp); at_pcbdetach(so, ddp); + DDP_LIST_XUNLOCK(); return (0); } void ddp_init(void) { - atintrq1.ifq_maxlen = IFQ_MAXLEN; atintrq2.ifq_maxlen = IFQ_MAXLEN; aarpintrq.ifq_maxlen = IFQ_MAXLEN; mtx_init(&atintrq1.ifq_mtx, "at1_inq", NULL, MTX_DEF); mtx_init(&atintrq2.ifq_mtx, "at2_inq", NULL, MTX_DEF); mtx_init(&aarpintrq.ifq_mtx, "aarp_inq", NULL, MTX_DEF); + DDP_LIST_LOCK_INIT(); netisr_register(NETISR_ATALK1, at1intr, &atintrq1, 0); netisr_register(NETISR_ATALK2, at2intr, &atintrq2, 0); netisr_register(NETISR_AARP, aarpintr, &aarpintrq, 0); @@ -202,6 +232,7 @@ for (ddp = ddpcb_list; ddp != NULL; ddp = ddp->ddp_next) { at_pcbdetach(ddp->ddp_socket, ddp); } + DDP_LIST_LOCK_DESTROY(); } #endif @@ -220,7 +251,9 @@ if (ddp == NULL) { return (EINVAL); } + DDP_LOCK(ddp); at_sockaddr(ddp, nam); + DDP_UNLOCK(ddp); return (0); } ==== //depot/projects/netperf_socket/sys/netatalk/ddp_var.h#4 (text+ko) ==== @@ -2,7 +2,7 @@ * Copyright (c) 1990,1994 Regents of The University of Michigan. * All Rights Reserved. See COPYRIGHT. * - * $FreeBSD: src/sys/netatalk/ddp_var.h,v 1.6 2004/03/22 04:54:36 rwatson Exp $ + * $FreeBSD: src/sys/netatalk/ddp_var.h,v 1.7 2004/07/12 18:39:59 rwatson Exp $ */ #ifndef _NETATALK_DDP_VAR_H_ @@ -13,6 +13,7 @@ struct socket *ddp_socket; struct ddpcb *ddp_prev, *ddp_next; struct ddpcb *ddp_pprev, *ddp_pnext; + struct mtx ddp_mtx; }; #define sotoddpcb(so) ((struct ddpcb *)(so)->so_pcb) @@ -34,5 +35,6 @@ extern int ddp_cksum; extern struct ddpcb *ddpcb_list; extern struct pr_usrreqs ddp_usrreqs; +extern struct mtx ddp_list_mtx; #endif #endif /* _NETATALK_DDP_VAR_H_ */ ==== //depot/projects/netperf_socket/sys/netinet/tcp_input.c#17 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)tcp_input.c 8.12 (Berkeley) 5/24/95 - * $FreeBSD: src/sys/netinet/tcp_input.c,v 1.249 2004/07/01 23:34:06 jayanth Exp $ + * $FreeBSD: src/sys/netinet/tcp_input.c,v 1.250 2004/07/12 19:28:07 rwatson Exp $ */ #include "opt_ipfw.h" /* for ipfw_fwd */ @@ -985,6 +985,8 @@ goto drop; } after_listen: + KASSERT(headlocked, ("tcp_input(): after_listen head is not locked")); + INP_LOCK_ASSERT(inp); /* XXX temp debugging */ /* should not happen - syncache should pick up these connections */ @@ -1474,6 +1476,10 @@ } trimthenstep6: + KASSERT(headlocked, + ("tcp_input(): trimthenstep6 head is not locked")); + INP_LOCK_ASSERT(inp); + /* * Advance th->th_seq to correspond to first data byte. * If data, trim to stay within window, @@ -2083,6 +2089,10 @@ } process_ACK: + KASSERT(headlocked, + ("tcp_input(): process_ACK head is not locked")); + INP_LOCK_ASSERT(inp); + acked = th->th_ack - tp->snd_una; tcpstat.tcps_rcvackpack++; tcpstat.tcps_rcvackbyte += acked; @@ -2263,6 +2273,9 @@ } step6: + KASSERT(headlocked, ("tcp_input(): step6 head is not locked")); + INP_LOCK_ASSERT(inp); + /* * Update window information. * Don't look at window if no ACK: TAC's send garbage on first SYN. @@ -2345,7 +2358,9 @@ tp->rcv_up = tp->rcv_nxt; } dodata: /* XXX */ - KASSERT(headlocked, ("headlocked")); + KASSERT(headlocked, ("tcp_input(): dodata head is not locked")); + INP_LOCK_ASSERT(inp); + /* * Process the segment text, merging it into the TCP sequencing queue, * and arranging for acknowledgment of receipt if necessary. @@ -2481,6 +2496,7 @@ (void) tcp_output(tp); check_delack: + INP_LOCK_ASSERT(inp); if (tp->t_flags & TF_DELACK) { tp->t_flags &= ~TF_DELACK; callout_reset(tp->tt_delack, tcp_delacktime, ==== //depot/projects/netperf_socket/sys/netipx/spx_usrreq.c#8 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netipx/spx_usrreq.c,v 1.45 2004/06/24 04:29:53 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/netipx/spx_usrreq.c,v 1.46 2004/07/12 19:35:29 rwatson Exp $"); #include <sys/param.h> #include <sys/lock.h> @@ -77,7 +77,7 @@ #define spxstat spx_istat.newstats #endif -static int spx_backoff[SPX_MAXRXTSHIFT+1] = +static const int spx_backoff[SPX_MAXRXTSHIFT+1] = { 1, 2, 4, 8, 16, 32, 64, 64, 64, 64, 64, 64, 64 }; static struct spxpcb *spx_close(struct spxpcb *cb); ==== //depot/projects/netperf_socket/sys/rpc/rpcclnt.c#5 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/rpc/rpcclnt.c,v 1.9 2004/03/28 05:55:27 kan Exp $ */ +/* $FreeBSD: src/sys/rpc/rpcclnt.c,v 1.10 2004/07/12 19:37:08 rwatson Exp $ */ /* $Id: rpcclnt.c,v 1.9 2003/11/05 14:59:03 rees Exp $ */ /* @@ -141,7 +141,7 @@ */ #define RPC_CWNDSCALE 256 #define RPC_MAXCWND (RPC_CWNDSCALE * 32) -static int rpcclnt_backoff[8] = {2, 4, 8, 16, 32, 64, 128, 256,}; +static const int rpcclnt_backoff[8] = {2, 4, 8, 16, 32, 64, 128, 256,}; /* XXX ugly debug strings */ #define RPC_ERRSTR_ACCEPTED_SIZE 6 ==== //depot/projects/netperf_socket/sys/vm/vm_pageout.c#8 (text+ko) ==== @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/vm/vm_pageout.c,v 1.258 2004/06/24 04:08:43 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/vm/vm_pageout.c,v 1.259 2004/07/12 17:45:37 alc Exp $"); #include "opt_vm.h" #include <sys/param.h> @@ -148,7 +148,7 @@ static int vm_max_launder = 32; static int vm_pageout_stats_max=0, vm_pageout_stats_interval = 0; static int vm_pageout_full_stats_interval = 0; -static int vm_pageout_stats_free_max=0, vm_pageout_algorithm=0; +static int vm_pageout_algorithm=0; static int defer_swap_pageouts=0; static int disable_swap_pageouts=0; @@ -175,9 +175,6 @@ SYSCTL_INT(_vm, OID_AUTO, pageout_stats_interval, CTLFLAG_RW, &vm_pageout_stats_interval, 0, "Interval for partial stats scan"); -SYSCTL_INT(_vm, OID_AUTO, pageout_stats_free_max, - CTLFLAG_RW, &vm_pageout_stats_free_max, 0, "Not implemented"); - #if defined(NO_SWAPPING) SYSCTL_INT(_vm, VM_SWAPPING_ENABLED, swap_enabled, CTLFLAG_RD, &vm_swap_enabled, 0, ""); @@ -1390,12 +1387,6 @@ if (vm_pageout_full_stats_interval == 0) vm_pageout_full_stats_interval = vm_pageout_stats_interval * 4; - /* - * Set maximum free per pass - */ - if (vm_pageout_stats_free_max == 0) - vm_pageout_stats_free_max = 5; - swap_pager_swap_init(); pass = 0; /*
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200407121943.i6CJhKj5029096>