From owner-svn-src-projects@freebsd.org Sat Nov 14 17:21:20 2015 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 504A4A2FB4F for ; Sat, 14 Nov 2015 17:21:20 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 18CAA116E; Sat, 14 Nov 2015 17:21:20 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id tAEHLJm5082953; Sat, 14 Nov 2015 17:21:19 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id tAEHLILH082942; Sat, 14 Nov 2015 17:21:18 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201511141721.tAEHLILH082942@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Sat, 14 Nov 2015 17:21:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r290825 - in projects/routing/sys: net netinet netinet6 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Nov 2015 17:21:20 -0000 Author: melifaro Date: Sat Nov 14 17:21:17 2015 New Revision: 290825 URL: https://svnweb.freebsd.org/changeset/base/290825 Log: Temporrarily revert r287531. Modified: projects/routing/sys/net/if.c projects/routing/sys/net/if_llatbl.c projects/routing/sys/net/if_var.h projects/routing/sys/netinet/if_ether.c projects/routing/sys/netinet/toecore.c projects/routing/sys/netinet6/icmp6.c projects/routing/sys/netinet6/in6_fib.c projects/routing/sys/netinet6/nd6.c projects/routing/sys/netinet6/nd6_nbr.c projects/routing/sys/netinet6/nd6_rtr.c projects/routing/sys/netinet6/scope6.c Modified: projects/routing/sys/net/if.c ============================================================================== --- projects/routing/sys/net/if.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/net/if.c Sat Nov 14 17:21:17 2015 (r290825) @@ -52,7 +52,6 @@ #include #include #include -#include #include #include #include @@ -791,7 +790,8 @@ if_attachdomain1(struct ifnet *ifp) * Since dp->dom_ifattach calls malloc() with M_WAITOK, we * cannot lock ifp->if_afdata initialization, entirely. */ - IF_AFDATA_LOCK(ifp); + if (IF_AFDATA_TRYLOCK(ifp) == 0) + return; if (ifp->if_afdata_initialized >= domain_init_status) { IF_AFDATA_UNLOCK(ifp); log(LOG_WARNING, "%s called more than once on %s\n", @@ -1453,20 +1453,6 @@ if_data_copy(struct ifnet *ifp, struct i ifd->ifi_noproto = ifp->if_get_counter(ifp, IFCOUNTER_NOPROTO); } -void -if_afdata_wlock(struct ifnet *ifp) -{ - - IF_AFDATA_WLOCK(ifp); -} - -void -if_afdata_wunlock(struct ifnet *ifp) -{ - - IF_AFDATA_WUNLOCK(ifp); -} - /* * Wrapper functions for struct ifnet address list locking macros. These are * used by kernel modules to avoid encoding programming interface or binary Modified: projects/routing/sys/net/if_llatbl.c ============================================================================== --- projects/routing/sys/net/if_llatbl.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/net/if_llatbl.c Sat Nov 14 17:21:17 2015 (r290825) @@ -42,7 +42,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #ifdef DDB #include @@ -86,7 +85,6 @@ static int lltable_dump_af(struct lltable *llt, struct sysctl_req *wr) { int error; - struct rm_priotracker if_afdata_tracker; LLTABLE_LOCK_ASSERT(); @@ -322,7 +320,6 @@ llentry_alloc(struct ifnet *ifp, struct struct sockaddr_storage *dst) { struct llentry *la, *la_tmp; - struct rm_priotracker if_afdata_tracker; IF_AFDATA_RLOCK(ifp); la = lla_lookup(lt, LLE_EXCLUSIVE, (struct sockaddr *)dst); Modified: projects/routing/sys/net/if_var.h ============================================================================== --- projects/routing/sys/net/if_var.h Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/net/if_var.h Sat Nov 14 17:21:17 2015 (r290825) @@ -192,7 +192,7 @@ struct ifnet { int if_amcount; /* number of all-multicast requests */ struct ifaddr *if_addr; /* pointer to link-level address */ const u_int8_t *if_broadcastaddr; /* linklevel broadcast bytestring */ - struct rmlock if_afdata_lock; + struct rwlock if_afdata_lock; void *if_afdata[AF_MAX]; int if_afdata_initialized; @@ -340,24 +340,21 @@ EVENTHANDLER_DECLARE(group_change_event, #endif /* _SYS_EVENTHANDLER_H_ */ #define IF_AFDATA_LOCK_INIT(ifp) \ - rm_init(&(ifp)->if_afdata_lock, "if_afdata") + rw_init(&(ifp)->if_afdata_lock, "if_afdata") -#define IF_AFDATA_WLOCK(ifp) rm_wlock(&(ifp)->if_afdata_lock) -#define IF_AFDATA_RLOCK(ifp) rm_rlock(&(ifp)->if_afdata_lock, &if_afdata_tracker) -#define IF_AFDATA_WUNLOCK(ifp) rm_wunlock(&(ifp)->if_afdata_lock) -#define IF_AFDATA_RUNLOCK(ifp) rm_runlock(&(ifp)->if_afdata_lock, &if_afdata_tracker) +#define IF_AFDATA_WLOCK(ifp) rw_wlock(&(ifp)->if_afdata_lock) +#define IF_AFDATA_RLOCK(ifp) rw_rlock(&(ifp)->if_afdata_lock) +#define IF_AFDATA_WUNLOCK(ifp) rw_wunlock(&(ifp)->if_afdata_lock) +#define IF_AFDATA_RUNLOCK(ifp) rw_runlock(&(ifp)->if_afdata_lock) #define IF_AFDATA_LOCK(ifp) IF_AFDATA_WLOCK(ifp) #define IF_AFDATA_UNLOCK(ifp) IF_AFDATA_WUNLOCK(ifp) -#define IF_AFDATA_TRYLOCK(ifp) rm_try_wlock(&(ifp)->if_afdata_lock) -#define IF_AFDATA_DESTROY(ifp) rm_destroy(&(ifp)->if_afdata_lock) +#define IF_AFDATA_TRYLOCK(ifp) rw_try_wlock(&(ifp)->if_afdata_lock) +#define IF_AFDATA_DESTROY(ifp) rw_destroy(&(ifp)->if_afdata_lock) -#define IF_AFDATA_LOCK_ASSERT(ifp) rm_assert(&(ifp)->if_afdata_lock, RA_LOCKED) -#define IF_AFDATA_RLOCK_ASSERT(ifp) rm_assert(&(ifp)->if_afdata_lock, RA_RLOCKED) -#define IF_AFDATA_WLOCK_ASSERT(ifp) rm_assert(&(ifp)->if_afdata_lock, RA_WLOCKED) -#define IF_AFDATA_UNLOCK_ASSERT(ifp) rm_assert(&(ifp)->if_afdata_lock, RA_UNLOCKED) - -void if_afdata_wlock(struct ifnet *); -void if_afdata_wunlock(struct ifnet *); +#define IF_AFDATA_LOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_LOCKED) +#define IF_AFDATA_RLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_RLOCKED) +#define IF_AFDATA_WLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_WLOCKED) +#define IF_AFDATA_UNLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_UNLOCKED) /* * 72 was chosen below because it is the size of a TCP/IP Modified: projects/routing/sys/netinet/if_ether.c ============================================================================== --- projects/routing/sys/netinet/if_ether.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/netinet/if_ether.c Sat Nov 14 17:21:17 2015 (r290825) @@ -375,7 +375,6 @@ arpresolve_fast(struct ifnet *ifp, struc int error; struct llentry *la; struct sockaddr_in sin; - struct rm_priotracker if_afdata_tracker; if (mflags & M_BCAST) { memcpy(dst_addr, ifp->if_broadcastaddr, ifp->if_addrlen); @@ -432,7 +431,6 @@ arpresolve_full(struct ifnet *ifp, int i struct mbuf *curr = NULL; struct mbuf *next = NULL; int error, renew; - struct rm_priotracker if_afdata_tracker; if (pflags != NULL) *pflags = 0; @@ -558,7 +556,6 @@ arpresolve(struct ifnet *ifp, int is_gw, const struct sockaddr *dst, u_char *desten, uint32_t *pflags) { struct llentry *la = 0; - struct rm_priotracker if_afdata_tracker; if (pflags != NULL) *pflags = 0; @@ -710,7 +707,6 @@ in_arpinput(struct mbuf *m) struct nhop4_extended nh_ext; struct sockaddr_in sin; struct sockaddr *dst; - struct rm_priotracker if_afdata_tracker; sin.sin_len = sizeof(struct sockaddr_in); sin.sin_family = AF_INET; sin.sin_addr.s_addr = 0; Modified: projects/routing/sys/netinet/toecore.c ============================================================================== --- projects/routing/sys/netinet/toecore.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/netinet/toecore.c Sat Nov 14 17:21:17 2015 (r290825) @@ -36,8 +36,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include -#include #include #include #include @@ -461,7 +459,6 @@ toe_nd6_resolve(struct ifnet *ifp, struc struct llentry *lle, *lle_tmp; struct sockaddr_in6 *sin6 = (void *)sa; int rc, flags = 0; - struct rm_priotracker if_afdata_tracker; restart: IF_AFDATA_RLOCK(ifp); Modified: projects/routing/sys/netinet6/icmp6.c ============================================================================== --- projects/routing/sys/netinet6/icmp6.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/netinet6/icmp6.c Sat Nov 14 17:21:17 2015 (r290825) @@ -73,7 +73,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -2506,7 +2505,6 @@ icmp6_redirect_output(struct mbuf *m0, s struct route_info ri; struct nhop6_basic nh6; int e; - struct rm_priotracker if_afdata_tracker; icmp6_errcount(ND_REDIRECT, 0); Modified: projects/routing/sys/netinet6/in6_fib.c ============================================================================== --- projects/routing/sys/netinet6/in6_fib.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/netinet6/in6_fib.c Sat Nov 14 17:21:17 2015 (r290825) @@ -129,7 +129,6 @@ fib6_storelladdr(struct ifnet *ifp, stru { struct llentry *ln; struct sockaddr_in6 dst_sa; - struct rm_priotracker if_afdata_tracker; if (mm_flags & M_MCAST) { ETHER_MAP_IPV6_MULTICAST(&dst, desten); Modified: projects/routing/sys/netinet6/nd6.c ============================================================================== --- projects/routing/sys/netinet6/nd6.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/netinet6/nd6.c Sat Nov 14 17:21:17 2015 (r290825) @@ -49,7 +49,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -1102,7 +1101,6 @@ nd6_is_addr_neighbor(struct sockaddr_in6 { struct llentry *lle; int rc = 0; - struct rm_priotracker if_afdata_tracker; IF_AFDATA_UNLOCK_ASSERT(ifp); if (nd6_is_new_addr_neighbor(addr, ifp)) @@ -1268,7 +1266,6 @@ nd6_nud_hint(struct rtentry *rt, struct { struct llentry *ln; struct ifnet *ifp; - struct rm_priotracker if_afdata_tracker; if ((dst6 == NULL) || (rt == NULL)) return; @@ -1356,7 +1353,6 @@ nd6_ioctl(u_long cmd, caddr_t data, stru struct nd_defrouter *dr; struct nd_prefix *pr; int i = 0, error = 0; - struct rm_priotracker if_afdata_tracker; if (ifp->if_afdata[AF_INET6] == NULL) return (EPFNOSUPPORT); @@ -1682,7 +1678,6 @@ nd6_cache_lladdr(struct ifnet *ifp, stru struct sockaddr_in6 sin6; struct mbuf *chain = NULL; int static_route = 0; - struct rm_priotracker if_afdata_tracker; IF_AFDATA_UNLOCK_ASSERT(ifp); @@ -2021,7 +2016,6 @@ nd6_output(struct ifnet *ifp, struct ifn struct sockaddr_in6 *dst, struct rtentry *rt0) { struct llentry *ln = NULL; - struct rm_priotracker if_afdata_tracker; /* discard the packet if IPv6 operation is disabled on the interface */ if ((ND_IFINFO(ifp)->flags & ND6_IFF_IFDISABLED)) { @@ -2077,7 +2071,6 @@ nd6_output_lle(struct ifnet *ifp, struct struct sockaddr_in6 *dst) { struct llentry *lle = NULL, *lle_tmp; - struct rm_priotracker if_afdata_tracker; KASSERT(m != NULL, ("NULL mbuf, nothing to send")); /* discard the packet if IPv6 operation is disabled on the interface */ @@ -2366,7 +2359,6 @@ nd6_storelladdr(struct ifnet *ifp, struc const struct sockaddr *dst, u_char *desten, uint32_t *pflags) { struct llentry *ln; - struct rm_priotracker if_afdata_tracker; if (pflags != NULL) *pflags = 0; Modified: projects/routing/sys/netinet6/nd6_nbr.c ============================================================================== --- projects/routing/sys/netinet6/nd6_nbr.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/netinet6/nd6_nbr.c Sat Nov 14 17:21:17 2015 (r290825) @@ -43,7 +43,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -627,7 +626,6 @@ nd6_na_input(struct mbuf *m, int off, in union nd_opts ndopts; struct mbuf *chain = NULL; struct sockaddr_in6 sin6; - struct rm_priotracker if_afdata_tracker; char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN]; if (ip6->ip6_hlim != 255) { Modified: projects/routing/sys/netinet6/nd6_rtr.c ============================================================================== --- projects/routing/sys/netinet6/nd6_rtr.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/netinet6/nd6_rtr.c Sat Nov 14 17:21:17 2015 (r290825) @@ -634,7 +634,6 @@ defrouter_select(void) { struct nd_defrouter *dr, *selected_dr = NULL, *installed_dr = NULL; struct llentry *ln = NULL; - struct rm_priotracker if_afdata_tracker; /* * Let's handle easy case (3) first: @@ -1308,7 +1307,6 @@ find_pfxlist_reachable_router(struct nd_ struct nd_pfxrouter *pfxrtr; struct llentry *ln; int canreach; - struct rm_priotracker if_afdata_tracker; LIST_FOREACH(pfxrtr, &pr->ndpr_advrtrs, pfr_entry) { IF_AFDATA_RLOCK(pfxrtr->router->ifp); Modified: projects/routing/sys/netinet6/scope6.c ============================================================================== --- projects/routing/sys/netinet6/scope6.c Sat Nov 14 16:18:22 2015 (r290824) +++ projects/routing/sys/netinet6/scope6.c Sat Nov 14 17:21:17 2015 (r290825) @@ -33,8 +33,6 @@ __FBSDID("$FreeBSD$"); #include -#include -#include #include #include #include @@ -150,11 +148,11 @@ scope6_set(struct ifnet *ifp, struct sco int error = 0; struct scope6_id *sid = NULL; - if_afdata_wlock(ifp); + IF_AFDATA_WLOCK(ifp); sid = SID(ifp); if (!sid) { /* paranoid? */ - if_afdata_wunlock(ifp); + IF_AFDATA_WUNLOCK(ifp); return (EINVAL); } @@ -177,7 +175,7 @@ scope6_set(struct ifnet *ifp, struct sco */ if (i == IPV6_ADDR_SCOPE_INTFACELOCAL && idlist->s6id_list[i] != ifp->if_index) { - if_afdata_wunlock(ifp); + IF_AFDATA_WUNLOCK(ifp); return (EINVAL); } @@ -189,7 +187,7 @@ scope6_set(struct ifnet *ifp, struct sco * IDs, but we check the consistency for * safety in later use. */ - if_afdata_wunlock(ifp); + IF_AFDATA_WUNLOCK(ifp); return (EINVAL); } @@ -201,7 +199,7 @@ scope6_set(struct ifnet *ifp, struct sco sid->s6id_list[i] = idlist->s6id_list[i]; } } - if_afdata_wunlock(ifp); + IF_AFDATA_WUNLOCK(ifp); return (error); } @@ -210,7 +208,6 @@ static int scope6_get(struct ifnet *ifp, struct scope6_id *idlist) { struct scope6_id *sid; - struct rm_priotracker if_afdata_tracker; /* We only need to lock the interface's afdata for SID() to work. */ IF_AFDATA_RLOCK(ifp); @@ -413,7 +410,6 @@ in6_setscope(struct in6_addr *in6, struc int scope; u_int32_t zoneid = 0; struct scope6_id *sid; - struct rm_priotracker if_afdata_tracker; /* * special case: the loopback address can only belong to a loopback