aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/sk
diff options
context:
space:
mode:
authorSam Leffler <sam@FreeBSD.org>2003-11-14 19:00:32 +0000
committerSam Leffler <sam@FreeBSD.org>2003-11-14 19:00:32 +0000
commit5120abbfb44aea8edaca3311a60e73429dc71942 (patch)
tree0e5901939d8633065a9035209aa5138fe4ea6820 /sys/dev/sk
parent274461c9441dd719a672a8fef48458e127b3885e (diff)
Notes
Diffstat (limited to 'sys/dev/sk')
-rw-r--r--sys/dev/sk/if_sk.c6
-rw-r--r--sys/dev/sk/if_skreg.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/sys/dev/sk/if_sk.c b/sys/dev/sk/if_sk.c
index 1ef44935baec3..3226d91694cec 100644
--- a/sys/dev/sk/if_sk.c
+++ b/sys/dev/sk/if_sk.c
@@ -1839,6 +1839,7 @@ static void
sk_rxeof(sc_if)
struct sk_if_softc *sc_if;
{
+ struct sk_softc *sc;
struct mbuf *m;
struct ifnet *ifp;
struct sk_chain *cur_rx;
@@ -1846,10 +1847,13 @@ sk_rxeof(sc_if)
int i;
u_int32_t rxstat;
+ sc = sc_if->sk_softc;
ifp = &sc_if->arpcom.ac_if;
i = sc_if->sk_cdata.sk_rx_prod;
cur_rx = &sc_if->sk_cdata.sk_rx_chain[i];
+ SK_LOCK_ASSERT(sc);
+
while(!(sc_if->sk_rdata->sk_rx_ring[i].sk_ctl & SK_RXCTL_OWN)) {
cur_rx = &sc_if->sk_cdata.sk_rx_chain[i];
@@ -1891,7 +1895,9 @@ sk_rxeof(sc_if)
}
ifp->if_ipackets++;
+ SK_UNLOCK(sc);
(*ifp->if_input)(ifp, m);
+ SK_LOCK(sc);
}
sc_if->sk_cdata.sk_rx_prod = i;
diff --git a/sys/dev/sk/if_skreg.h b/sys/dev/sk/if_skreg.h
index 7309841592b0e..8e2eb53497016 100644
--- a/sys/dev/sk/if_skreg.h
+++ b/sys/dev/sk/if_skreg.h
@@ -1423,6 +1423,7 @@ struct sk_softc {
#define SK_LOCK(_sc) mtx_lock(&(_sc)->sk_mtx)
#define SK_UNLOCK(_sc) mtx_unlock(&(_sc)->sk_mtx)
+#define SK_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sk_mtx, MA_OWNED)
#define SK_IF_LOCK(_sc) mtx_lock(&(_sc)->sk_softc->sk_mtx)
#define SK_IF_UNLOCK(_sc) mtx_unlock(&(_sc)->sk_softc->sk_mtx)