1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2025-04-21 12:27:27 +03:00

madwifi: fix locking issues in state machine changes

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@12670 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
nbd
2008-09-23 17:28:19 +00:00
parent 1e232a2ad2
commit a0d42d3cda
4 changed files with 8 additions and 43 deletions

View File

@@ -486,25 +486,6 @@
/* Locking */
/* NB: beware, spin_is_locked() is not usefully defined for !(DEBUG || SMP)
* because spinlocks do not exist in this configuration. Instead IRQs
@@ -167,6 +196,18 @@
IEEE80211_VAPS_LOCK_ASSERT(_ic); \
spin_unlock_bh(&(_ic)->ic_vapslock); \
} while (0)
+#define IEEE80211_VAPS_LOCK_IRQ(_ic) do { \
+ unsigned long __vlockflags; \
+ IEEE80211_VAPS_LOCK_CHECK(_ic); \
+ spin_lock_irqsave(&(_ic)->ic_vapslock, __vlockflags);
+#define IEEE80211_VAPS_UNLOCK_IRQ(_ic) \
+ IEEE80211_VAPS_LOCK_ASSERT(_ic); \
+ spin_unlock_irqrestore(&(_ic)->ic_vapslock, __vlockflags); \
+} while (0)
+#define IEEE80211_VAPS_UNLOCK_IRQ_EARLY(_ic) \
+ IEEE80211_VAPS_LOCK_ASSERT(_ic); \
+ spin_unlock_irqrestore(&(_ic)->ic_vapslock, __vlockflags);
+
#if (defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)) && defined(spin_is_locked)
#define IEEE80211_VAPS_LOCK_ASSERT(_ic) \
--- a/net80211/ieee80211_proto.c
+++ b/net80211/ieee80211_proto.c
@@ -1081,6 +1081,8 @@
@@ -550,18 +531,6 @@
ieee80211_new_state(vap, IEEE80211_S_INIT, -1);
if (dev->flags & IFF_RUNNING) {
dev->flags &= ~IFF_RUNNING; /* mark us stopped */
@@ -1342,9 +1366,9 @@
struct ieee80211com *ic = vap->iv_ic;
int rc;
- IEEE80211_VAPS_LOCK_BH(ic);
+ IEEE80211_VAPS_LOCK_IRQ(ic);
rc = vap->iv_newstate(vap, nstate, arg);
- IEEE80211_VAPS_UNLOCK_BH(ic);
+ IEEE80211_VAPS_UNLOCK_IRQ(ic);
return rc;
}
@@ -1630,6 +1654,7 @@
*/
if (ni->ni_authmode != IEEE80211_AUTH_8021X)