Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / net / mac80211 / status.c
index a2a6826..ddf71c6 100644 (file)
@@ -557,6 +557,12 @@ static void ieee80211_report_used_skb(struct ieee80211_local *local,
 static void ieee80211_lost_packet(struct sta_info *sta,
                                  struct ieee80211_tx_info *info)
 {
+       /* If driver relies on its own algorithm for station kickout, skip
+        * mac80211 packet loss mechanism.
+        */
+       if (ieee80211_hw_check(&sta->local->hw, REPORTS_LOW_ACK))
+               return;
+
        /* This packet was aggregated but doesn't carry status info */
        if ((info->flags & IEEE80211_TX_CTL_AMPDU) &&
            !(info->flags & IEEE80211_TX_STAT_AMPDU))
@@ -709,7 +715,7 @@ void ieee80211_tx_monitor(struct ieee80211_local *local, struct sk_buff *skb,
                        if (!ieee80211_sdata_running(sdata))
                                continue;
 
-                       if ((sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) &&
+                       if ((sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES) &&
                            !send_to_cooked)
                                continue;
 
@@ -740,8 +746,8 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
        __le16 fc;
        struct ieee80211_supported_band *sband;
+       struct rhlist_head *tmp;
        struct sta_info *sta;
-       struct rhash_head *tmp;
        int retry_count;
        int rates_idx;
        bool send_to_cooked;
@@ -749,7 +755,6 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
        struct ieee80211_bar *bar;
        int shift = 0;
        int tid = IEEE80211_NUM_TIDS;
-       const struct bucket_table *tbl;
 
        rates_idx = ieee80211_tx_get_rates(hw, info, &retry_count);
 
@@ -758,9 +763,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
        sband = local->hw.wiphy->bands[info->band];
        fc = hdr->frame_control;
 
-       tbl = rht_dereference_rcu(local->sta_hash.tbl, &local->sta_hash);
-
-       for_each_sta_info(local, tbl, hdr->addr1, sta, tmp) {
+       for_each_sta_info(local, hdr->addr1, sta, tmp) {
                /* skip wrong virtual interface */
                if (!ether_addr_equal(hdr->addr2, sta->sdata->vif.addr))
                        continue;