From 1e01981387bb986789bf176cfda8483ac1623bfd Mon Sep 17 00:00:00 2001 From: Jeffrey Hsu Date: Wed, 28 Apr 2004 08:00:35 +0000 Subject: [PATCH] Remember if an inpcb was entered into the wildcard table to save some cycles when a connection is closed. --- sys/netinet/in_pcb.h | 7 ++++--- sys/netinet/tcp_subr.c | 26 ++++++++++++++------------ sys/netinet/tcp_usrreq.c | 3 ++- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/sys/netinet/in_pcb.h b/sys/netinet/in_pcb.h index ac1ebd4f08..eef4b0f0a1 100644 --- a/sys/netinet/in_pcb.h +++ b/sys/netinet/in_pcb.h @@ -33,7 +33,7 @@ * * @(#)in_pcb.h 8.1 (Berkeley) 6/10/93 * $FreeBSD: src/sys/netinet/in_pcb.h,v 1.32.2.7 2003/01/24 05:11:34 sam Exp $ - * $DragonFly: src/sys/netinet/in_pcb.h,v 1.12 2004/04/24 04:47:29 hsu Exp $ + * $DragonFly: src/sys/netinet/in_pcb.h,v 1.13 2004/04/28 08:00:35 hsu Exp $ */ #ifndef _NETINET_IN_PCB_H_ @@ -277,8 +277,9 @@ struct inpcbinfo { /* XXX documentation, prefixes */ #define INP_MTUDISC 0x100 /* user can do MTU discovery */ #define INP_FAITH 0x200 /* accept FAITH'ed connections */ #define INP_WILDCARD 0x400 /* wildcard match */ -#define INP_CONNECTED 0x800 /* exact match */ -#define INP_WASBOUND_NOTANY 0x1000 /* was bound to non-null laddr */ +#define INP_WILDCARD_MP 0x800 /* distributed wildcard match */ +#define INP_CONNECTED 0x1000 /* exact match */ +#define INP_WASBOUND_NOTANY 0x2000 /* was bound to non-null laddr */ #define IN6P_IPV6_V6ONLY 0x008000 /* restrict AF_INET6 socket for v6 */ diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index d788a67dd0..a0467460b2 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -32,7 +32,7 @@ * * @(#)tcp_subr.c 8.2 (Berkeley) 5/24/95 * $FreeBSD: src/sys/netinet/tcp_subr.c,v 1.73.2.31 2003/01/24 05:11:34 sam Exp $ - * $DragonFly: src/sys/netinet/tcp_subr.c,v 1.29 2004/04/24 04:47:29 hsu Exp $ + * $DragonFly: src/sys/netinet/tcp_subr.c,v 1.30 2004/04/28 08:00:35 hsu Exp $ */ #include "opt_compat.h" @@ -782,17 +782,19 @@ no_valid_rt: soisdisconnected(so); #ifdef SMP - for (cpu = 0; cpu < ncpus2; cpu ++) { - struct netmsg_remwildcard *msg; - - msg = malloc(sizeof(struct netmsg_remwildcard), M_LWKTMSG, - M_INTWAIT); - lwkt_initmsg(&msg->nm_lmsg, &netisr_afree_rport, 0, - lwkt_cmd_func(in_pcbremwildcardhash_handler), - lwkt_cmd_op_none); - msg->nm_inp = inp; - msg->nm_pcbinfo = &tcbinfo[cpu]; - lwkt_sendmsg(tcp_cport(cpu), &msg->nm_lmsg); + if (inp->inp_flags & INP_WILDCARD_MP) { + for (cpu = 0; cpu < ncpus2; cpu ++) { + struct netmsg_remwildcard *msg; + + msg = malloc(sizeof(struct netmsg_remwildcard), + M_LWKTMSG, M_INTWAIT); + lwkt_initmsg(&msg->nm_lmsg, &netisr_afree_rport, 0, + lwkt_cmd_func(in_pcbremwildcardhash_handler), + lwkt_cmd_op_none); + msg->nm_inp = inp; + msg->nm_pcbinfo = &tcbinfo[cpu]; + lwkt_sendmsg(tcp_cport(cpu), &msg->nm_lmsg); + } } #endif diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c index 9afd298a95..b2cb605d6b 100644 --- a/sys/netinet/tcp_usrreq.c +++ b/sys/netinet/tcp_usrreq.c @@ -32,7 +32,7 @@ * * From: @(#)tcp_usrreq.c 8.2 (Berkeley) 1/3/94 * $FreeBSD: src/sys/netinet/tcp_usrreq.c,v 1.51.2.17 2002/10/11 11:46:44 ume Exp $ - * $DragonFly: src/sys/netinet/tcp_usrreq.c,v 1.20 2004/04/24 04:47:29 hsu Exp $ + * $DragonFly: src/sys/netinet/tcp_usrreq.c,v 1.21 2004/04/28 08:00:35 hsu Exp $ */ #include "opt_ipsec.h" @@ -324,6 +324,7 @@ tcp_usr_listen(struct socket *so, struct thread *td) msg->nm_pcbinfo = &tcbinfo[cpu]; lwkt_sendmsg(tcp_cport(cpu), &msg->nm_lmsg); } + inp->inp_flags |= INP_WILDCARD_MP; #else in_pcbinswildcardhash(inp); #endif -- 2.41.0