summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb')
-rw-r--r--sys/dev/usb/if_aue.c2
-rw-r--r--sys/dev/usb/if_axe.c2
-rw-r--r--sys/dev/usb/if_cue.c2
-rw-r--r--sys/dev/usb/if_kue.c2
-rw-r--r--sys/dev/usb/if_rue.c2
-rw-r--r--sys/dev/usb/if_udav.c2
6 files changed, 12 insertions, 0 deletions
diff --git a/sys/dev/usb/if_aue.c b/sys/dev/usb/if_aue.c
index 3118baa..af5fe5f 100644
--- a/sys/dev/usb/if_aue.c
+++ b/sys/dev/usb/if_aue.c
@@ -539,6 +539,7 @@ aue_setmulti(struct aue_softc *sc)
aue_csr_write_1(sc, AUE_MAR0 + i, 0);
/* now program new ones */
+ IF_ADDR_LOCK(ifp);
#if __FreeBSD_version >= 500000
TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
#else
@@ -551,6 +552,7 @@ aue_setmulti(struct aue_softc *sc)
ifma->ifma_addr), ETHER_ADDR_LEN) & ((1 << AUE_BITS) - 1);
AUE_SETBIT(sc, AUE_MAR + (h >> 3), 1 << (h & 0x7));
}
+ IF_ADDR_UNLOCK(ifp);
return;
}
diff --git a/sys/dev/usb/if_axe.c b/sys/dev/usb/if_axe.c
index 9551649..c549390 100644
--- a/sys/dev/usb/if_axe.c
+++ b/sys/dev/usb/if_axe.c
@@ -338,6 +338,7 @@ axe_setmulti(struct axe_softc *sc)
} else
rxmode &= ~AXE_RXCMD_ALLMULTI;
+ IF_ADDR_LOCK(ifp);
#if __FreeBSD_version >= 500000
TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
#else
@@ -350,6 +351,7 @@ axe_setmulti(struct axe_softc *sc)
ifma->ifma_addr), ETHER_ADDR_LEN) >> 26;
hashtbl[h / 8] |= 1 << (h % 8);
}
+ IF_ADDR_UNLOCK(ifp);
axe_cmd(sc, AXE_CMD_WRITE_MCAST, 0, 0, (void *)&hashtbl);
axe_cmd(sc, AXE_CMD_RXCTL_WRITE, 0, rxmode, NULL);
diff --git a/sys/dev/usb/if_cue.c b/sys/dev/usb/if_cue.c
index 604f9c5..ae21957 100644
--- a/sys/dev/usb/if_cue.c
+++ b/sys/dev/usb/if_cue.c
@@ -356,6 +356,7 @@ cue_setmulti(struct cue_softc *sc)
sc->cue_mctab[i] = 0;
/* now program new ones */
+ IF_ADDR_LOCK(ifp);
#if __FreeBSD_version >= 500000
TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
#else
@@ -367,6 +368,7 @@ cue_setmulti(struct cue_softc *sc)
h = cue_mchash(LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
sc->cue_mctab[h >> 3] |= 1 << (h & 0x7);
}
+ IF_ADDR_UNLOCK(ifp);
/*
* Also include the broadcast address in the filter
diff --git a/sys/dev/usb/if_kue.c b/sys/dev/usb/if_kue.c
index b4c65e4..fce9adf 100644
--- a/sys/dev/usb/if_kue.c
+++ b/sys/dev/usb/if_kue.c
@@ -327,6 +327,7 @@ kue_setmulti(struct kue_softc *sc)
sc->kue_rxfilt &= ~KUE_RXFILT_ALLMULTI;
+ IF_ADDR_LOCK(ifp);
#if __FreeBSD_version >= 500000
TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
#else
@@ -345,6 +346,7 @@ kue_setmulti(struct kue_softc *sc)
KUE_MCFILT(sc, i), ETHER_ADDR_LEN);
i++;
}
+ IF_ADDR_UNLOCK(ifp);
if (i == KUE_MCFILTCNT(sc))
sc->kue_rxfilt |= KUE_RXFILT_ALLMULTI;
diff --git a/sys/dev/usb/if_rue.c b/sys/dev/usb/if_rue.c
index 9990da1..e544e11 100644
--- a/sys/dev/usb/if_rue.c
+++ b/sys/dev/usb/if_rue.c
@@ -500,6 +500,7 @@ rue_setmulti(struct rue_softc *sc)
rue_csr_write_4(sc, RUE_MAR4, 0);
/* now program new ones */
+ IF_ADDR_LOCK(ifp);
#if __FreeBSD_version >= 500000
TAILQ_FOREACH (ifma, &ifp->if_multiaddrs, ifma_link)
#else
@@ -516,6 +517,7 @@ rue_setmulti(struct rue_softc *sc)
hashes[1] |= (1 << (h - 32));
mcnt++;
}
+ IF_ADDR_UNLOCK(ifp);
if (mcnt)
rxcfg |= RUE_RCR_AM;
diff --git a/sys/dev/usb/if_udav.c b/sys/dev/usb/if_udav.c
index daa426d..19f64cb 100644
--- a/sys/dev/usb/if_udav.c
+++ b/sys/dev/usb/if_udav.c
@@ -1044,6 +1044,7 @@ udav_setmulti(struct udav_softc *sc)
ETHER_NEXT_MULTI(step, enm);
}
#elif defined(__FreeBSD__)
+ IF_ADDR_LOCK(ifp);
#if __FreeBSD_version >= 500000
TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
#else
@@ -1056,6 +1057,7 @@ udav_setmulti(struct udav_softc *sc)
ifma->ifma_addr));
hashes[h>>3] |= 1 << (h & 0x7);
}
+ IF_ADDR_UNLOCK(ifp);
#endif
/* disable all multicast */
OpenPOWER on IntegriCloud