summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/net/if_llatbl.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-12-09 14:19:03 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-01-10 09:53:34 +0100
commit75b706fde4cbf82bcd41a1cec319778aa0f8eb2d (patch)
treeea39a351a1f6337b5a5dd6036314693adef5ffe6 /freebsd/sys/net/if_llatbl.c
parentVMSTAT(8): Port to RTEMS (diff)
downloadrtems-libbsd-75b706fde4cbf82bcd41a1cec319778aa0f8eb2d.tar.bz2
Update to FreeBSD head 2016-12-10
Git mirror commit 80c55f08a05ab3b26a73b226ccb56adc3122a55c.
Diffstat (limited to 'freebsd/sys/net/if_llatbl.c')
-rw-r--r--freebsd/sys/net/if_llatbl.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/freebsd/sys/net/if_llatbl.c b/freebsd/sys/net/if_llatbl.c
index 20c0b9d2..a4741884 100644
--- a/freebsd/sys/net/if_llatbl.c
+++ b/freebsd/sys/net/if_llatbl.c
@@ -68,8 +68,13 @@ static VNET_DEFINE(SLIST_HEAD(, lltable), lltables) =
SLIST_HEAD_INITIALIZER(lltables);
#define V_lltables VNET(lltables)
-struct rwlock lltable_rwlock;
-RW_SYSINIT(lltable_rwlock, &lltable_rwlock, "lltable_rwlock");
+static struct rwlock lltable_list_lock;
+RW_SYSINIT(lltable_list_lock, &lltable_list_lock, "lltable_list_lock");
+#define LLTABLE_LIST_RLOCK() rw_rlock(&lltable_list_lock)
+#define LLTABLE_LIST_RUNLOCK() rw_runlock(&lltable_list_lock)
+#define LLTABLE_LIST_WLOCK() rw_wlock(&lltable_list_lock)
+#define LLTABLE_LIST_WUNLOCK() rw_wunlock(&lltable_list_lock)
+#define LLTABLE_LIST_LOCK_ASSERT() rw_assert(&lltable_list_lock, RA_LOCKED)
static void lltable_unlink(struct lltable *llt);
static void llentries_unlink(struct lltable *llt, struct llentries *head);
@@ -87,7 +92,7 @@ lltable_dump_af(struct lltable *llt, struct sysctl_req *wr)
{
int error;
- LLTABLE_LOCK_ASSERT();
+ LLTABLE_LIST_LOCK_ASSERT();
if (llt->llt_ifp->if_flags & IFF_LOOPBACK)
return (0);
@@ -110,7 +115,7 @@ lltable_sysctl_dumparp(int af, struct sysctl_req *wr)
struct lltable *llt;
int error = 0;
- LLTABLE_RLOCK();
+ LLTABLE_LIST_RLOCK();
SLIST_FOREACH(llt, &V_lltables, llt_link) {
if (llt->llt_af == af) {
error = lltable_dump_af(llt, wr);
@@ -119,7 +124,7 @@ lltable_sysctl_dumparp(int af, struct sysctl_req *wr)
}
}
done:
- LLTABLE_RUNLOCK();
+ LLTABLE_LIST_RUNLOCK();
return (error);
}
@@ -533,7 +538,7 @@ lltable_drain(int af)
struct llentry *lle;
register int i;
- LLTABLE_RLOCK();
+ LLTABLE_LIST_RLOCK();
SLIST_FOREACH(llt, &V_lltables, llt_link) {
if (llt->llt_af != af)
continue;
@@ -549,7 +554,7 @@ lltable_drain(int af)
}
}
}
- LLTABLE_RUNLOCK();
+ LLTABLE_LIST_RUNLOCK();
}
#endif
@@ -593,14 +598,14 @@ lltable_prefix_free(int af, struct sockaddr *addr, struct sockaddr *mask,
{
struct lltable *llt;
- LLTABLE_RLOCK();
+ LLTABLE_LIST_RLOCK();
SLIST_FOREACH(llt, &V_lltables, llt_link) {
if (llt->llt_af != af)
continue;
llt->llt_prefix_free(llt, addr, mask, flags);
}
- LLTABLE_RUNLOCK();
+ LLTABLE_LIST_RUNLOCK();
}
struct lltable *
@@ -634,18 +639,18 @@ void
lltable_link(struct lltable *llt)
{
- LLTABLE_WLOCK();
+ LLTABLE_LIST_WLOCK();
SLIST_INSERT_HEAD(&V_lltables, llt, llt_link);
- LLTABLE_WUNLOCK();
+ LLTABLE_LIST_WUNLOCK();
}
static void
lltable_unlink(struct lltable *llt)
{
- LLTABLE_WLOCK();
+ LLTABLE_LIST_WLOCK();
SLIST_REMOVE(&V_lltables, llt, lltable, llt_link);
- LLTABLE_WUNLOCK();
+ LLTABLE_LIST_WUNLOCK();
}
@@ -741,13 +746,13 @@ lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info)
}
/* XXX linked list may be too expensive */
- LLTABLE_RLOCK();
+ LLTABLE_LIST_RLOCK();
SLIST_FOREACH(llt, &V_lltables, llt_link) {
if (llt->llt_af == dst->sa_family &&
llt->llt_ifp == ifp)
break;
}
- LLTABLE_RUNLOCK();
+ LLTABLE_LIST_RUNLOCK();
KASSERT(llt != NULL, ("Yep, ugly hacks are bad\n"));
error = 0;