From owner-p4-projects@FreeBSD.ORG Sun Jan 14 18:56:43 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5F82816A417; Sun, 14 Jan 2007 18:56:43 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 25D7B16A40F for ; Sun, 14 Jan 2007 18:56:43 +0000 (UTC) (envelope-from zec@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 16C8913C43E for ; Sun, 14 Jan 2007 18:56:43 +0000 (UTC) (envelope-from zec@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id l0EIug8J055880 for ; Sun, 14 Jan 2007 18:56:42 GMT (envelope-from zec@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l0EIug7d055877 for perforce@freebsd.org; Sun, 14 Jan 2007 18:56:42 GMT (envelope-from zec@FreeBSD.org) Date: Sun, 14 Jan 2007 18:56:42 GMT Message-Id: <200701141856.l0EIug7d055877@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zec@FreeBSD.org using -f From: Marko Zec To: Perforce Change Reviews Cc: Subject: PERFORCE change 112911 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: Sun, 14 Jan 2007 18:56:43 -0000 http://perforce.freebsd.org/chv.cgi?CH=112911 Change 112911 by zec@zec_tca51 on 2007/01/14 18:56:38 Use a separate rtq_timer callout handle for each vnet instance. Cought by: change 112910 Affected files ... .. //depot/projects/vimage/src/sys/netinet/in_rmx.c#3 edit .. //depot/projects/vimage/src/sys/netinet/vinet.h#7 edit Differences ... ==== //depot/projects/vimage/src/sys/netinet/in_rmx.c#3 (text+ko) ==== @@ -57,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -253,20 +254,29 @@ } #define RTQ_TIMEOUT 60*10 /* run no less than once every ten minutes */ -static int rtq_timeout = RTQ_TIMEOUT; +#ifndef VIMAGE +static int rtq_timeout; static struct callout rtq_timer; +#endif static void in_rtqtimo(void *rock) { + CURVNETB_SET_QUIET((struct vnet_base *) rock); + INIT_VNET_NET((struct vnet_base *) rock); + INIT_VNET_INET((struct vnet_base *) rock); +#ifdef VIMAGE + struct radix_node_head *rnh = V_rt_tables[AF_INET]; +#else struct radix_node_head *rnh = rock; +#endif struct rtqk_arg arg; struct timeval atv; static time_t last_adjusted_timeout = 0; arg.found = arg.killed = 0; arg.rnh = rnh; - arg.nextstop = time_uptime + rtq_timeout; + arg.nextstop = time_uptime + V_rtq_timeout; arg.draining = arg.updating = 0; RADIX_NODE_HEAD_LOCK(rnh); rnh->rnh_walktree(rnh, in_rtqkill, &arg); @@ -281,7 +291,7 @@ * hard. */ if ((arg.found - arg.killed > rtq_toomany) && - (time_uptime - last_adjusted_timeout >= rtq_timeout) && + (time_uptime - last_adjusted_timeout >= V_rtq_timeout) && rtq_reallyold > rtq_minreallyold) { rtq_reallyold = 2 * rtq_reallyold / 3; if (rtq_reallyold < rtq_minreallyold) { @@ -302,7 +312,8 @@ atv.tv_usec = 0; atv.tv_sec = arg.nextstop - time_uptime; - callout_reset(&rtq_timer, tvtohz(&atv), in_rtqtimo, rock); + callout_reset(&V_rtq_timer, tvtohz(&atv), in_rtqtimo, rock); + CURVNETB_RESTORE(); } void @@ -329,6 +340,7 @@ in_inithead(void **head, int off) { INIT_VNET_NET(curvnetb); + INIT_VNET_INET(curvnetb); struct radix_node_head *rnh; if (!rn_inithead(head, off)) @@ -337,12 +349,17 @@ if (head != (void **)&V_rt_tables[AF_INET]) /* BOGUS! */ return 1; /* only do this for the real routing table */ + V_rtq_timeout = RTQ_TIMEOUT; rnh = *head; rnh->rnh_addaddr = in_addroute; rnh->rnh_matchaddr = in_matroute; rnh->rnh_close = in_clsroute; - callout_init(&rtq_timer, CALLOUT_MPSAFE); + callout_init(&V_rtq_timer, CALLOUT_MPSAFE); +#ifdef VIMAGE + in_rtqtimo(curvnetb); /* kick off timeout first time */ +#else in_rtqtimo(rnh); /* kick off timeout first time */ +#endif return 1; } ==== //depot/projects/vimage/src/sys/netinet/vinet.h#7 (text+ko) ==== @@ -95,6 +95,9 @@ struct igmpstat _igmpstat; SLIST_HEAD(, router_info) _router_info_head; + + int _rtq_timeout; + struct callout _rtq_timer; }; extern struct vnet_inet vnet_inet_0; @@ -149,4 +152,7 @@ #define V_router_info_head VNET_INET(router_info_head) +#define V_rtq_timeout VNET_INET(rtq_timeout) +#define V_rtq_timer VNET_INET(rtq_timer) + #endif /* !_NETINET_VINET_H_ */