From owner-p4-projects@FreeBSD.ORG Sun Apr 22 21:40:15 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 3211E16A401; Sun, 22 Apr 2007 21:40:14 +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 B426516A404 for ; Sun, 22 Apr 2007 21:40:14 +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 A501213C45B for ; Sun, 22 Apr 2007 21:40:14 +0000 (UTC) (envelope-from zec@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l3MLeEIc035307 for ; Sun, 22 Apr 2007 21:40:14 GMT (envelope-from zec@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l3MLeE6b035304 for perforce@freebsd.org; Sun, 22 Apr 2007 21:40:14 GMT (envelope-from zec@FreeBSD.org) Date: Sun, 22 Apr 2007 21:40:14 GMT Message-Id: <200704222140.l3MLeE6b035304@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 118611 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, 22 Apr 2007 21:40:15 -0000 http://perforce.freebsd.org/chv.cgi?CH=118611 Change 118611 by zec@zec_tca51 on 2007/04/22 21:39:58 Introduce the notion of home_vnet for an ifnet, indicating the vnet instance where the ifnet was attached for the first time. Implement an idetach() routine for cleaning up the container holding virtualized state from sys/net stuff. Affected files ... .. //depot/projects/vimage/src/sys/net/if.c#11 edit .. //depot/projects/vimage/src/sys/net/if_var.h#8 edit Differences ... ==== //depot/projects/vimage/src/sys/net/if.c#11 (text+ko) ==== @@ -138,6 +138,9 @@ #endif static int vnet_net_iattach(void); +#ifdef VIMAGE +static int vnet_net_idetach(void); +#endif int ifqmaxlen = IFQ_MAXLEN; struct mtx ifnet_lock; @@ -176,7 +179,7 @@ .name = "net", .symmap = vnet_net_symmap, .i_attach = vnet_net_iattach, - .i_detach = NULL, + .i_detach = vnet_net_idetach }; MALLOC_DEFINE(M_NET, "net", "NET instance"); @@ -370,6 +373,27 @@ return 0; } +#ifdef VIMAGE +static int +vnet_net_idetach() +{ + INIT_VNET_NET(curvnet); + + VNET_ASSERT(TAILQ_EMPTY(&V_ifnet)); +#ifdef NOTYET + VNET_ASSERT(TAILQ_EMPTY(&V_ifg_head)); +#endif + VNET_ASSERT(SLIST_EMPTY(&V_ifklist.kl_list)); + + free((caddr_t)V_ifindex_table, M_IFNET); + + curvnet->mod_data[vnet_net_modinfo.id] = NULL; + free((caddr_t)vnet_net, M_NET); + + return 0; +} +#endif + void if_grow(void) { @@ -517,8 +541,9 @@ ifp->if_xname); #ifdef VIMAGE - ifp->if_vnet = vnet_net->parent_vnet; - ifp->if_vnet->ifccnt++; /* XXX locking? */ + ifp->if_vnet = curvnet; + if (ifp->if_home_vnet == NULL) + ifp->if_home_vnet = curvnet; #endif TASK_INIT(&ifp->if_starttask, 0, if_start_deferred, ifp); TASK_INIT(&ifp->if_linktask, 0, do_link_state_change, ifp); @@ -606,6 +631,9 @@ IFNET_WLOCK(); TAILQ_INSERT_TAIL(&V_ifnet, ifp, if_link); +#ifdef VIMAGE + curvnet->ifccnt++; +#endif IFNET_WUNLOCK(); if (domain_init_status >= 2) @@ -752,16 +780,14 @@ found = 1; break; } +#ifdef VIMAGE + if (found) + curvnet->ifccnt--; +#endif IFNET_WUNLOCK(); if (!found) return; -#ifdef VIMAGE - IFNET_WLOCK(); - ifp->if_vnet->ifccnt--; - IFNET_WUNLOCK(); -#endif - /* * Remove/wait for pending events. */ ==== //depot/projects/vimage/src/sys/net/if_var.h#8 (text+ko) ==== @@ -187,7 +187,9 @@ /* protected by if_addr_mtx */ void *if_pf_kif; void *if_lagg; /* lagg glue */ + struct vnet *if_vnet; /* network stack instance */ + struct vnet *if_home_vnet; /* where this ifnet originates from */ }; typedef void if_init_f_t(void *);