summaryrefslogtreecommitdiffstats
path: root/sys/dev/xl
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2009-06-26 11:45:06 +0000
committerrwatson <rwatson@FreeBSD.org>2009-06-26 11:45:06 +0000
commitbe5740a255fbcb1d4053e709cb7f22bb96320eb0 (patch)
tree30aee113c454323f30d4c201e18a0f29e2938074 /sys/dev/xl
parentffea8e20279ff0d82924add1cef0d8e16d9538a5 (diff)
downloadFreeBSD-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/xl')
-rw-r--r--sys/dev/xl/if_xl.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/dev/xl/if_xl.c b/sys/dev/xl/if_xl.c
index a0f7042..81ed592 100644
--- a/sys/dev/xl/if_xl.c
+++ b/sys/dev/xl/if_xl.c
@@ -724,10 +724,10 @@ xl_setmulti(struct xl_softc *sc)
return;
}
- IF_ADDR_LOCK(ifp);
+ if_maddr_rlock(ifp);
TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
mcnt++;
- IF_ADDR_UNLOCK(ifp);
+ if_maddr_runlock(ifp);
if (mcnt)
rxfilt |= XL_RXFILTER_ALLMULTI;
@@ -766,7 +766,7 @@ xl_setmulti_hash(struct xl_softc *sc)
CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_RX_SET_HASH|i);
/* now program new ones */
- 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;
@@ -788,7 +788,7 @@ xl_setmulti_hash(struct xl_softc *sc)
h | XL_CMD_RX_SET_HASH | XL_HASH_SET);
mcnt++;
}
- IF_ADDR_UNLOCK(ifp);
+ if_maddr_runlock(ifp);
if (mcnt)
rxfilt |= XL_RXFILTER_MULTIHASH;
OpenPOWER on IntegriCloud