LOR with netisr changes
John Baldwin
jhb at freebsd.org
Wed Nov 29 10:21:44 PST 2006
On Tuesday 28 November 2006 14:41, Sam Leffler wrote:
> Robert Watson wrote:
> >
> > On Wed, 29 Nov 2006, Munehiro Matsuda wrote:
> >
> >> JFYI, I got following LOR started after the netisr changes:
> >
> > In general, device driver locks should not be held over entry to the
> > network stack. However, things get a bit tricky in the 802.11 code due
> > to lock sharing, I believe, so it could be a bit more tricky to fix that.
>
> It's just a bug in the driver. Driver locks should be dropped when
> packets get passed up the stack. This issue was pointed out before iwi
> ever was committed but since nothing immediately comes back via the
> bridge (or similar) it's been ignored.
How about this:
Index: if_iwi.c
===================================================================
RCS file: /usr/cvs/src/sys/dev/iwi/if_iwi.c,v
retrieving revision 1.42
diff -u -r1.42 if_iwi.c
--- if_iwi.c 7 Nov 2006 19:03:42 -0000 1.42
+++ if_iwi.c 29 Nov 2006 17:38:12 -0000
@@ -1310,6 +1310,7 @@
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 +1320,7 @@
/* node is no longer needed */
ieee80211_free_node(ni);
+ IWI_LOCK(sc);
if (sc->sc_softled) {
/*
* Blink for any data frame. Otherwise do a
(I'm unsure if the net82011 layer protects 'ic' or if the driver is supposed
to do that.)
--
John Baldwin
More information about the freebsd-current
mailing list