From 294410acf6832c570d732a29bc3ca3ba5ca8cbea Mon Sep 17 00:00:00 2001 From: Max Laier Date: Wed, 6 Dec 2006 21:23:51 +0000 Subject: Drop the iwi softc lock when calling back into net80211 on rx. This fixes a LOR with direct dispatch in the netisr. Reported and tested by: Munehiro Matsuda Submitted by: jhb LOR id: 194 --- sys/dev/iwi/if_iwi.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'sys/dev') diff --git a/sys/dev/iwi/if_iwi.c b/sys/dev/iwi/if_iwi.c index c08afd6a4b50..4f5499d51b86 100644 --- a/sys/dev/iwi/if_iwi.c +++ b/sys/dev/iwi/if_iwi.c @@ -1230,6 +1230,7 @@ iwi_frame_intr(struct iwi_softc *sc, struct iwi_rx_data *data, int i, struct mbuf *mnew, *m; struct ieee80211_node *ni; int type, error, framelen; + IWI_LOCK_DECL; framelen = le16toh(frame->len); if (framelen < IEEE80211_MIN_LEN || framelen > MCLBYTES) { @@ -1310,6 +1311,7 @@ iwi_frame_intr(struct iwi_softc *sc, struct iwi_rx_data *data, int i, bpf_mtap2(sc->sc_drvbpf, tap, sc->sc_rxtap_len, m); } + IWI_UNLOCK(sc); ni = ieee80211_find_rxnode(ic, mtod(m, struct ieee80211_frame_min *)); @@ -1319,6 +1321,7 @@ iwi_frame_intr(struct iwi_softc *sc, struct iwi_rx_data *data, int i, /* node is no longer needed */ ieee80211_free_node(ni); + IWI_LOCK(sc); if (sc->sc_softled) { /* * Blink for any data frame. Otherwise do a -- cgit v1.3