]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/mac80211/ht.c
mac80211: make TX aggregation start/stop request async
[mv-sheeva.git] / net / mac80211 / ht.c
index bb677a73b7c9d67a623e962ad9419231bb11e3f4..4dfba7808a24f8003e79e2be12f6ef8723fd9a76 100644 (file)
@@ -105,6 +105,8 @@ void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta)
 {
        int i;
 
+       cancel_work_sync(&sta->ampdu_mlme.work);
+
        for (i = 0; i <  STA_TID_NUM; i++) {
                __ieee80211_stop_tx_ba_session(sta, i, WLAN_BACK_INITIATOR);
                __ieee80211_stop_rx_ba_session(sta, i, WLAN_BACK_RECIPIENT,
@@ -175,15 +177,9 @@ void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata,
 #endif /* CONFIG_MAC80211_HT_DEBUG */
 
        if (initiator == WLAN_BACK_INITIATOR)
-               ieee80211_sta_stop_rx_ba_session(sdata, sta->sta.addr, tid,
-                                                WLAN_BACK_INITIATOR, 0);
-       else { /* WLAN_BACK_RECIPIENT */
-               spin_lock_bh(&sta->lock);
-               if (sta->ampdu_mlme.tid_state_tx[tid] & HT_ADDBA_REQUESTED_MSK)
-                       ___ieee80211_stop_tx_ba_session(sta, tid,
-                                                       WLAN_BACK_RECIPIENT);
-               spin_unlock_bh(&sta->lock);
-       }
+               __ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_INITIATOR, 0);
+       else
+               __ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_RECIPIENT);
 }
 
 int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata,