diff options
author | rwatson <rwatson@FreeBSD.org> | 2009-06-26 11:45:06 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2009-06-26 11:45:06 +0000 |
commit | be5740a255fbcb1d4053e709cb7f22bb96320eb0 (patch) | |
tree | 30aee113c454323f30d4c201e18a0f29e2938074 /sys/dev/usb/wlan | |
parent | ffea8e20279ff0d82924add1cef0d8e16d9538a5 (diff) | |
download | FreeBSD-src-be5740a255fbcb1d4053e709cb7f22bb96320eb0.zip FreeBSD-src-be5740a255fbcb1d4053e709cb7f22bb96320eb0.tar.gz |
Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/
IF_ADDR_UNLOCK() across network device drivers when accessing the
per-interface multicast address list, if_multiaddrs. This will
allow us to change the locking strategy without affecting our driver
programming interface or binary interface.
For two wireless drivers, remove unnecessary locking, since they
don't actually access the multicast address list.
Approved by: re (kib)
MFC after: 6 weeks
Diffstat (limited to 'sys/dev/usb/wlan')
-rw-r--r-- | sys/dev/usb/wlan/if_upgt.c | 2 | ||||
-rw-r--r-- | sys/dev/usb/wlan/if_urtw.c | 2 | ||||
-rw-r--r-- | sys/dev/usb/wlan/if_zyd.c | 4 |
3 files changed, 2 insertions, 6 deletions
diff --git a/sys/dev/usb/wlan/if_upgt.c b/sys/dev/usb/wlan/if_upgt.c index 9ab02a7..ff3220b 100644 --- a/sys/dev/usb/wlan/if_upgt.c +++ b/sys/dev/usb/wlan/if_upgt.c @@ -809,9 +809,7 @@ upgt_set_multi(void *arg) * XXX don't know how to set a device. Lack of docs. Just try to set * IFF_ALLMULTI flag here. */ - IF_ADDR_LOCK(ifp); ifp->if_flags |= IFF_ALLMULTI; - IF_ADDR_UNLOCK(ifp); } static void diff --git a/sys/dev/usb/wlan/if_urtw.c b/sys/dev/usb/wlan/if_urtw.c index 0f8fe44..5c10a6f 100644 --- a/sys/dev/usb/wlan/if_urtw.c +++ b/sys/dev/usb/wlan/if_urtw.c @@ -1945,9 +1945,7 @@ urtw_set_multi(void *arg) * XXX don't know how to set a device. Lack of docs. Just try to set * IFF_ALLMULTI flag here. */ - IF_ADDR_LOCK(ifp); ifp->if_flags |= IFF_ALLMULTI; - IF_ADDR_UNLOCK(ifp); } static usb_error_t diff --git a/sys/dev/usb/wlan/if_zyd.c b/sys/dev/usb/wlan/if_zyd.c index 8216a75..9bdb6ea 100644 --- a/sys/dev/usb/wlan/if_zyd.c +++ b/sys/dev/usb/wlan/if_zyd.c @@ -2016,7 +2016,7 @@ zyd_set_multi(struct zyd_softc *sc) low = 0xffffffff; high = 0xffffffff; } else { - IF_ADDR_LOCK(ifp); + if_maddr_rlock(ifp); TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { if (ifma->ifma_addr->sa_family != AF_LINK) continue; @@ -2027,7 +2027,7 @@ zyd_set_multi(struct zyd_softc *sc) else high |= 1 << (v - 32); } - IF_ADDR_UNLOCK(ifp); + if_maddr_runlock(ifp); } /* reprogram multicast global hash table */ |