svn commit: r280116 - head/sys/dev/wpi
Adrian Chadd
adrian at FreeBSD.org
Sun Mar 15 21:29:20 UTC 2015
Author: adrian
Date: Sun Mar 15 21:29:18 2015
New Revision: 280116
URL: https://svnweb.freebsd.org/changeset/base/280116
Log:
Don't unlock mutex in interrupt thread (except for wpi_rx_done() - for now) -
fixes various races between wpi_notif_intr() and wpi_stop_locked().
(attachment 154381)
Committers note: yes, unlock/if_input/lock has to go away, but that'll
have to be done later.
PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios at gmail.com>
Modified:
head/sys/dev/wpi/if_wpi.c
Modified: head/sys/dev/wpi/if_wpi.c
==============================================================================
--- head/sys/dev/wpi/if_wpi.c Sun Mar 15 21:27:50 2015 (r280115)
+++ head/sys/dev/wpi/if_wpi.c Sun Mar 15 21:29:18 2015 (r280116)
@@ -1960,7 +1960,6 @@ wpi_tx_done(struct wpi_softc *sc, struct
/*
* Update rate control statistics for the node.
*/
- WPI_UNLOCK(sc);
if ((status & 0xff) != 1) {
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
ieee80211_ratectl_tx_complete(vap, ni,
@@ -1972,7 +1971,6 @@ wpi_tx_done(struct wpi_softc *sc, struct
}
ieee80211_tx_complete(ni, m, (status & 0xff) != 1);
- WPI_LOCK(sc);
WPI_TXQ_STATE_LOCK(sc);
ring->queued -= 1;
@@ -2103,13 +2101,10 @@ wpi_notif_intr(struct wpi_softc *sc)
le32toh(miss->total));
if (vap->iv_state == IEEE80211_S_RUN &&
- (ic->ic_flags & IEEE80211_F_SCAN) == 0) {
- if (misses >= vap->iv_bmissthreshold) {
- WPI_UNLOCK(sc);
- ieee80211_beacon_miss(ic);
- WPI_LOCK(sc);
- }
- }
+ (ic->ic_flags & IEEE80211_F_SCAN) == 0 &&
+ misses >= vap->iv_bmissthreshold)
+ ieee80211_beacon_miss(ic);
+
break;
}
case WPI_UC_READY:
@@ -2180,9 +2175,7 @@ wpi_notif_intr(struct wpi_softc *sc)
WPI_RXON_LOCK(sc);
callout_stop(&sc->scan_timeout);
WPI_RXON_UNLOCK(sc);
- WPI_UNLOCK(sc);
ieee80211_scan_next(vap);
- WPI_LOCK(sc);
break;
}
}
More information about the svn-src-all
mailing list