aboutsummaryrefslogtreecommitdiff
path: root/sys/net80211
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2019-10-10 23:55:33 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2019-10-10 23:55:33 +0000
commit2b60ecf197e0e187ac028d66d279805e6bece77b (patch)
tree19ab27384b3a74ab2fed99bb837a1df4cdc0bf59 /sys/net80211
parent45c1d51c395e57e78c3ad16ee48a7bc0d0c3d06b (diff)
downloadsrc-2b60ecf197e0e187ac028d66d279805e6bece77b.tar.gz
src-2b60ecf197e0e187ac028d66d279805e6bece77b.zip
Don't use if_maddr_rlock() in 802.11, use epoch(9) directly instead.
Notes
Notes: svn path=/head/; revision=353427
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/ieee80211_ioctl.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c
index 6ef5f9fb2b75..2798657d874f 100644
--- a/sys/net80211/ieee80211_ioctl.c
+++ b/sys/net80211/ieee80211_ioctl.c
@@ -3583,6 +3583,8 @@ ieee80211_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
IEEE80211_UNLOCK(ic);
/* Wait for parent ioctl handler if it was queued */
if (wait) {
+ struct epoch_tracker et;
+
ieee80211_waitfor_parent(ic);
/*
@@ -3592,13 +3594,13 @@ ieee80211_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
* NB: device may be detached during initialization;
* use if_ioctl for existence check.
*/
- if_addr_rlock(ifp);
+ NET_EPOCH_ENTER(et);
if (ifp->if_ioctl == ieee80211_ioctl &&
(ifp->if_flags & IFF_UP) == 0 &&
!IEEE80211_ADDR_EQ(vap->iv_myaddr, IF_LLADDR(ifp)))
IEEE80211_ADDR_COPY(vap->iv_myaddr,
IF_LLADDR(ifp));
- if_addr_runlock(ifp);
+ NET_EPOCH_EXIT(et);
}
break;
case SIOCADDMULTI: