From owner-p4-projects@FreeBSD.ORG Fri Apr 24 12:27:22 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E48D61065672; Fri, 24 Apr 2009 12:27:21 +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 8C661106564A for ; Fri, 24 Apr 2009 12:27:21 +0000 (UTC) (envelope-from zec@fer.hr) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 79F218FC12 for ; Fri, 24 Apr 2009 12:27:21 +0000 (UTC) (envelope-from zec@fer.hr) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n3OCRLmk041706 for ; Fri, 24 Apr 2009 12:27:21 GMT (envelope-from zec@fer.hr) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n3OCRLis041704 for perforce@freebsd.org; Fri, 24 Apr 2009 12:27:21 GMT (envelope-from zec@fer.hr) Date: Fri, 24 Apr 2009 12:27:21 GMT Message-Id: <200904241227.n3OCRLis041704@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zec@fer.hr using -f From: Marko Zec To: Perforce Change Reviews Cc: Subject: PERFORCE change 161029 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: Fri, 24 Apr 2009 12:27:22 -0000 http://perforce.freebsd.org/chv.cgi?CH=161029 Change 161029 by zec@zec_tpx32 on 2009/04/24 12:26:53 Manual merge of INIT_VNET_* changes from vimage-commit2 branch. Affected files ... .. //depot/projects/vimage-commit/src/sys/compat/linux/linux_socket.c#8 edit .. //depot/projects/vimage-commit/src/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c#8 edit .. //depot/projects/vimage-commit/src/sys/net/route.c#14 edit .. //depot/projects/vimage-commit/src/sys/net/rtsock.c#13 edit .. //depot/projects/vimage-commit/src/sys/netinet/igmp.c#14 edit .. //depot/projects/vimage-commit/src/sys/netinet/in.c#12 edit .. //depot/projects/vimage-commit/src/sys/netinet/in_mcast.c#14 edit .. //depot/projects/vimage-commit/src/sys/netinet/in_rmx.c#11 edit .. //depot/projects/vimage-commit/src/sys/netinet/ip_divert.c#11 edit .. //depot/projects/vimage-commit/src/sys/netinet/ip_fw2.c#14 edit .. //depot/projects/vimage-commit/src/sys/netinet/ip_mroute.c#12 edit .. //depot/projects/vimage-commit/src/sys/netinet/tcp_subr.c#17 edit .. //depot/projects/vimage-commit/src/sys/netinet/tcp_timewait.c#13 edit .. //depot/projects/vimage-commit/src/sys/netinet/udp_usrreq.c#13 edit .. //depot/projects/vimage-commit/src/sys/netinet6/in6_rmx.c#12 edit .. //depot/projects/vimage-commit/src/sys/netinet6/nd6_rtr.c#12 edit Differences ... ==== //depot/projects/vimage-commit/src/sys/compat/linux/linux_socket.c#8 (text+ko) ==== @@ -584,8 +584,10 @@ linux_socket(struct thread *td, struct linux_socket_args *args) { #ifdef INET6 +#ifndef KLD_MODULE INIT_VNET_INET6(curvnet); #endif +#endif struct socket_args /* { int domain; int type; ==== //depot/projects/vimage-commit/src/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c#8 (text+ko) ==== @@ -213,6 +213,7 @@ int ipfattach() { + INIT_VNET_INET(curvnet); #ifdef USE_SPL int s; #endif @@ -264,6 +265,7 @@ */ int ipfdetach() { + INIT_VNET_INET(curvnet); #ifdef USE_SPL int s; #endif @@ -646,6 +648,7 @@ fr_info_t *fin; mb_t *m, **mpp; { + INIT_VNET_INET(curvnet); fr_info_t fnew; ip_t *ip, *oip; int hlen; ==== //depot/projects/vimage-commit/src/sys/net/route.c#14 (text+ko) ==== @@ -178,7 +178,7 @@ static int vnet_route_iattach(const void *unused __unused) { - INIT_VNET_INET(curvnet); + INIT_VNET_NET(curvnet); int table; struct domain *dom; int fam; ==== //depot/projects/vimage-commit/src/sys/net/rtsock.c#13 (text+ko) ==== @@ -1206,7 +1206,6 @@ static void rt_dispatch(struct mbuf *m, const struct sockaddr *sa) { - INIT_VNET_NET(curvnet); struct m_tag *tag; /* ==== //depot/projects/vimage-commit/src/sys/netinet/igmp.c#14 (text+ko) ==== @@ -141,13 +141,8 @@ static int sysctl_igmp_gsr(SYSCTL_HANDLER_ARGS); static int sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS); -#ifdef VIMAGE static vnet_attach_fn vnet_igmp_iattach; static vnet_detach_fn vnet_igmp_idetach; -#else -static int vnet_igmp_iattach(const void *); -static int vnet_igmp_idetach(const void *); -#endif /* VIMAGE */ /* * System-wide globals. @@ -333,6 +328,7 @@ static int sysctl_igmp_default_version(SYSCTL_HANDLER_ARGS) { + INIT_VNET_INET(curvnet); int error; int new; @@ -372,6 +368,7 @@ static int sysctl_igmp_gsr(SYSCTL_HANDLER_ARGS) { + INIT_VNET_INET(curvnet); int error; int i; @@ -413,6 +410,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) { INIT_VNET_NET(curvnet); + INIT_VNET_INET(curvnet); int *name; int error; u_int namelen; @@ -498,6 +496,7 @@ static __inline int igmp_isgroupreported(const struct in_addr addr) { + INIT_VNET_INET(curvnet); if (in_allhosts(addr) || ((!V_igmp_sendlocal && IN_LOCAL_GROUP(ntohl(addr.s_addr))))) @@ -560,6 +559,7 @@ static struct igmp_ifinfo * igi_alloc_locked(/*const*/ struct ifnet *ifp) { + INIT_VNET_INET(ifp->if_vnet); struct igmp_ifinfo *igi; IGMP_LOCK_ASSERT(); @@ -679,6 +679,7 @@ static void igi_delete_locked(const struct ifnet *ifp) { + INIT_VNET_INET(ifp->if_vnet); struct igmp_ifinfo *igi, *tigi; CTR3(KTR_IGMPV3, "%s: freeing igmp_ifinfo for ifp %p(%s)", @@ -803,6 +804,7 @@ igmp_input_v2_query(struct ifnet *ifp, const struct ip *ip, const struct igmp *igmp) { + INIT_VNET_INET(ifp->if_vnet); struct ifmultiaddr *ifma; struct igmp_ifinfo *igi; struct in_multi *inm; @@ -895,6 +897,7 @@ static void igmp_v2_update_group(struct in_multi *inm, const int timer) { + INIT_VNET_INET(curvnet); CTR4(KTR_IGMPV3, "%s: %s/%s timer=%d", __func__, inet_ntoa(inm->inm_addr), inm->inm_ifp->if_xname, timer); @@ -942,6 +945,7 @@ igmp_input_v3_query(struct ifnet *ifp, const struct ip *ip, /*const*/ struct igmpv3 *igmpv3) { + INIT_VNET_INET(ifp->if_vnet); struct igmp_ifinfo *igi; struct in_multi *inm; uint32_t maxresp, nsrc, qqi; @@ -1086,6 +1090,7 @@ igmp_input_v3_group_query(struct in_multi *inm, struct igmp_ifinfo *igi, int timer, /*const*/ struct igmpv3 *igmpv3) { + INIT_VNET_INET(curvnet); int retval; uint16_t nsrc; @@ -1188,6 +1193,7 @@ igmp_input_v1_report(struct ifnet *ifp, /*const*/ struct ip *ip, /*const*/ struct igmp *igmp) { + INIT_VNET_INET(ifp->if_vnet); struct in_ifaddr *ia; struct in_multi *inm; @@ -1294,6 +1300,7 @@ igmp_input_v2_report(struct ifnet *ifp, /*const*/ struct ip *ip, /*const*/ struct igmp *igmp) { + INIT_VNET_INET(ifp->if_vnet); struct in_ifaddr *ia; struct in_multi *inm; @@ -1579,21 +1586,15 @@ void igmp_fasttimo(void) { -#ifdef VIMAGE VNET_ITERATOR_DECL(vnet_iter); VNET_LIST_RLOCK(); VNET_FOREACH(vnet_iter) { CURVNET_SET(vnet_iter); - INIT_VNET_INET(vnet_iter); igmp_fasttimo_vnet(); CURVNET_RESTORE(); } VNET_LIST_RUNLOCK(); -#else /* !VIMAGE */ - - igmp_fasttimo_vnet(); -#endif /* VIMAGE */ } /* @@ -1605,6 +1606,7 @@ static void igmp_fasttimo_vnet(void) { + INIT_VNET_INET(curvnet); struct ifqueue scq; /* State-change packets */ struct ifqueue qrq; /* Query response packets */ struct ifnet *ifp; @@ -1727,6 +1729,7 @@ static void igmp_v1v2_process_group_timer(struct in_multi *inm, const int version) { + INIT_VNET_INET(curvnet); int report_timer_expired; IN_MULTI_LOCK_ASSERT(); @@ -1775,6 +1778,7 @@ struct ifqueue *qrq, struct ifqueue *scq, struct in_multi *inm, const int uri_fasthz) { + INIT_VNET_INET(curvnet); int query_response_timer_expired; int state_change_retransmit_timer_expired; @@ -1964,6 +1968,7 @@ static void igmp_v3_cancel_link_timers(struct igmp_ifinfo *igi) { + INIT_VNET_INET(curvnet); struct ifmultiaddr *ifma; struct ifnet *ifp; struct in_multi *inm; @@ -2039,6 +2044,7 @@ static void igmp_v1v2_process_querier_timers(struct igmp_ifinfo *igi) { + INIT_VNET_INET(curvnet); IGMP_LOCK_ASSERT(); @@ -2115,20 +2121,15 @@ void igmp_slowtimo(void) { -#ifdef VIMAGE VNET_ITERATOR_DECL(vnet_iter); VNET_LIST_RLOCK(); VNET_FOREACH(vnet_iter) { CURVNET_SET(vnet_iter); - INIT_VNET_INET(vnet_iter); igmp_slowtimo_vnet(); CURVNET_RESTORE(); } VNET_LIST_RUNLOCK(); -#else /* !VIMAGE */ - igmp_slowtimo_vnet(); -#endif /* VIMAGE */ } /* @@ -2137,6 +2138,7 @@ static void igmp_slowtimo_vnet(void) { + INIT_VNET_INET(curvnet); struct igmp_ifinfo *igi; IGMP_LOCK(); @@ -2164,9 +2166,6 @@ IGMP_LOCK_ASSERT(); ifp = inm->inm_ifp; - /* XXX are these needed ? */ - INIT_VNET_NET(ifp->if_vnet); - INIT_VNET_INET(ifp->if_vnet); MGETHDR(m, M_DONTWAIT, MT_DATA); if (m == NULL) @@ -2304,6 +2303,7 @@ static int igmp_initial_join(struct in_multi *inm, struct igmp_ifinfo *igi) { + INIT_VNET_INET(curvnet); struct ifnet *ifp; struct ifqueue *ifq; int error, retval, syncstates; @@ -2432,6 +2432,7 @@ static int igmp_handle_state_change(struct in_multi *inm, struct igmp_ifinfo *igi) { + INIT_VNET_INET(curvnet); struct ifnet *ifp; int retval; @@ -2491,6 +2492,7 @@ static void igmp_final_leave(struct in_multi *inm, struct igmp_ifinfo *igi) { + INIT_VNET_INET(curvnet); int syncstates; syncstates = 1; @@ -3276,6 +3278,7 @@ static void igmp_v3_dispatch_general_query(struct igmp_ifinfo *igi) { + INIT_VNET_INET(curvnet); struct ifmultiaddr *ifma, *tifma; struct ifnet *ifp; struct in_multi *inm; @@ -3357,12 +3360,14 @@ CTR2(KTR_IGMPV3, "%s: transmit %p", __func__, m); /* - * Restore VNET image pointer from enqueued mbuf chain + * Set VNET image pointer from enqueued mbuf chain * before doing anything else. Whilst we use interface * indexes to guard against interface detach, they are * unique to each VIMAGE and must be retrieved. */ CURVNET_SET(m->m_pkthdr.header); + INIT_VNET_NET(curvnet); + INIT_VNET_INET(curvnet); ifindex = igmp_restore_context(m); /* @@ -3444,7 +3449,6 @@ static struct mbuf * igmp_v3_encap_report(struct ifnet *ifp, struct mbuf *m) { - INIT_VNET_NET(curvnet); INIT_VNET_INET(curvnet); struct igmp_report *igmp; struct ip *ip; @@ -3616,15 +3620,28 @@ return (0); } -#ifdef VIMAGE +/* + * XXX Are igi_head and igmpstat really accessed via kmem / kldsym? + * If so, given that they are members of struct vnet_inet, they should + * be registered with VNET_MOD_INET, not here. Revisit!!! + */ +#if 0 static struct vnet_symmap vnet_igmp_symmap[] = { VNET_SYMMAP(igmp, igi_head), VNET_SYMMAP(igmp, igmpstat), VNET_SYMMAP_END }; -VNET_MOD_DECLARE(IGMP, igmp, vnet_igmp_iattach, vnet_igmp_idetach, - vnet_igmp_symmap); -#endif /* VIMAGE */ +#endif + +#ifndef VIMAGE_GLOBALS +static vnet_modinfo_t vnet_igmp_modinfo = { + .vmi_id = VNET_MOD_IGMP, + .vmi_name = "igmp", + .vmi_dependson = VNET_MOD_INET, + .vmi_iattach = vnet_igmp_iattach, + .vmi_idetach = vnet_igmp_idetach +}; +#endif static int igmp_modevent(module_t mod, int type, void *unused __unused) @@ -3633,22 +3650,20 @@ switch (type) { case MOD_LOAD: igmp_sysinit(); -#ifdef VIMAGE +#ifndef VIMAGE_GLOBALS vnet_mod_register(&vnet_igmp_modinfo); #else - (void)vnet_igmp_iattach(NULL); -#endif /* VIMAGE */ + vnet_igmp_iattach(NULL); +#endif break; case MOD_UNLOAD: -#ifdef VIMAGE - /* - * TODO: Allow module unload if any VIMAGE instances - * are using this module. - */ - return (EBUSY); +#ifndef VIMAGE_GLOBALS +#ifdef NOTYET + vnet_mod_deregister(&vnet_igmp_modinfo); +#endif #else - (void)vnet_igmp_idetach(NULL); -#endif /* VIMAGE */ + vnet_igmp_idetach(NULL); +#endif igmp_sysuninit(); break; default: ==== //depot/projects/vimage-commit/src/sys/netinet/in.c#12 (text+ko) ==== @@ -1039,7 +1039,6 @@ static void in_purgemaddrs(struct ifnet *ifp) { - INIT_VNET_INET(ifp->if_vnet); LIST_HEAD(,in_multi) purgeinms; struct in_multi *inm, *tinm; struct ifmultiaddr *ifma; ==== //depot/projects/vimage-commit/src/sys/netinet/in_mcast.c#14 (text+ko) ==== @@ -392,7 +392,6 @@ in_getmulti(struct ifnet *ifp, const struct in_addr *group, struct in_multi **pinm) { - INIT_VNET_INET(ifp->if_vnet); struct sockaddr_in gsin; struct ifmultiaddr *ifma; struct in_ifinfo *ii; @@ -1808,6 +1807,7 @@ inp_lookup_mcast_ifp(const struct inpcb *inp, const struct sockaddr_in *gsin, const struct in_addr ina) { + INIT_VNET_INET(curvnet); struct ifnet *ifp; KASSERT(gsin->sin_family == AF_INET, ("%s: not AF_INET", __func__)); @@ -1853,7 +1853,6 @@ inp_join_group(struct inpcb *inp, struct sockopt *sopt) { INIT_VNET_NET(curvnet); - INIT_VNET_INET(curvnet); struct group_source_req gsr; sockunion_t *gsa, *ssa; struct ifnet *ifp; @@ -2306,6 +2305,7 @@ inp_set_multicast_if(struct inpcb *inp, struct sockopt *sopt) { INIT_VNET_NET(curvnet); + INIT_VNET_INET(curvnet); struct in_addr addr; struct ip_mreqn mreqn; struct ifnet *ifp; ==== //depot/projects/vimage-commit/src/sys/netinet/in_rmx.c#11 (text+ko) ==== @@ -250,6 +250,8 @@ static void in_rtqtimo(void *rock) { + INIT_VNET_NET(curvnet); /* XXX revisit!!! */ + INIT_VNET_INET(curvnet); /* XXX revisit!!! */ int fibnum; void *newrock; struct timeval atv; ==== //depot/projects/vimage-commit/src/sys/netinet/ip_divert.c#11 (text+ko) ==== @@ -132,6 +132,7 @@ static void div_zone_change(void *tag) { + INIT_VNET_INET(curvnet); uma_zone_set_max(V_divcbinfo.ipi_zone, maxsockets); } @@ -723,6 +724,7 @@ static int div_modevent(module_t mod, int type, void *unused) { + INIT_VNET_INET(curvnet); /* XXX move to iattach - revisit!!! */ int err = 0; int n; ==== //depot/projects/vimage-commit/src/sys/netinet/ip_fw2.c#14 (text+ko) ==== @@ -1818,7 +1818,6 @@ add_table_entry(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr, uint8_t mlen, uint32_t value) { - INIT_VNET_IPFW(curvnet); struct radix_node_head *rnh; struct table_entry *ent; struct radix_node *rn; @@ -4535,6 +4534,7 @@ static void ipfw_tick(void * __unused unused) { + INIT_VNET_IPFW(curvnet); struct mbuf *m0, *m, *mnext, **mtailp; int i; ipfw_dyn_rule *q; @@ -4718,6 +4718,7 @@ void ipfw_destroy(void) { + INIT_VNET_IPFW(curvnet); struct ip_fw *reap; ip_fw_chk_ptr = NULL; ==== //depot/projects/vimage-commit/src/sys/netinet/ip_mroute.c#12 (text+ko) ==== @@ -1709,6 +1709,7 @@ static void X_rsvp_input(struct mbuf *m, int off __unused) { + INIT_VNET_INET(curvnet); if (!V_rsvp_on) m_freem(m); ==== //depot/projects/vimage-commit/src/sys/netinet/tcp_subr.c#17 (text+ko) ==== @@ -288,6 +288,7 @@ static void tcp_zone_change(void *tag) { + INIT_VNET_INET(curvnet); uma_zone_set_max(V_tcbinfo.ipi_zone, maxsockets); uma_zone_set_max(V_tcpcb_zone, maxsockets); ==== //depot/projects/vimage-commit/src/sys/netinet/tcp_timewait.c#13 (text+ko) ==== @@ -132,6 +132,7 @@ static int sysctl_maxtcptw(SYSCTL_HANDLER_ARGS) { + INIT_VNET_INET(curvnet); int error, new; if (maxtcptw == 0) @@ -158,6 +159,7 @@ void tcp_tw_zone_change(void) { + INIT_VNET_INET(curvnet); if (maxtcptw == 0) uma_zone_set_max(V_tcptw_zone, tcptw_auto_size()); ==== //depot/projects/vimage-commit/src/sys/netinet/udp_usrreq.c#13 (text+ko) ==== @@ -155,6 +155,7 @@ static void udp_zone_change(void *tag) { + INIT_VNET_INET(curvnet); uma_zone_set_max(V_udbinfo.ipi_zone, maxsockets); } ==== //depot/projects/vimage-commit/src/sys/netinet6/in6_rmx.c#12 (text+ko) ==== @@ -288,9 +288,8 @@ static void in6_rtqtimo(void *rock) { - CURVNET_SET_QUIET((struct vnet *) rock); - INIT_VNET_NET((struct vnet *) rock); - INIT_VNET_INET6((struct vnet *) rock); + CURVNET_SET_QUIET((struct vnet *) rock); /* XXX revisit ! */ + INIT_VNET_INET6(curvnet); /* XXX revisit ! */ struct radix_node_head *rnh = rock; struct rtqk_arg arg; struct timeval atv; @@ -376,9 +375,8 @@ static void in6_mtutimo(void *rock) { - CURVNET_SET_QUIET((struct vnet *) rock); - INIT_VNET_NET((struct vnet *) rock); - INIT_VNET_INET6((struct vnet *) rock); + CURVNET_SET_QUIET((struct vnet *) rock); /* XXX revisit! */ + INIT_VNET_INET6(curvnet); /* XXX revisit! */ struct radix_node_head *rnh = rock; struct mtuex_arg arg; struct timeval atv; ==== //depot/projects/vimage-commit/src/sys/netinet6/nd6_rtr.c#12 (text+ko) ==== @@ -1549,6 +1549,7 @@ int nd6_prefix_onlink(struct nd_prefix *pr) { + INIT_VNET_NET(curvnet); INIT_VNET_INET6(curvnet); struct ifaddr *ifa; struct ifnet *ifp = pr->ndpr_ifp;