Merge remote-tracking branches 'spi/fix/atmel', 'spi/fix/doc', 'spi/fix/dw', 'spi...
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / iwlwifi / mvm / tx.c
index c59d07567d9041688401c0345376e9dc52de3157..07304e1fd64aa70b41d4c9a18762b48924a6f250 100644 (file)
@@ -220,7 +220,7 @@ void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, struct iwl_tx_cmd *tx_cmd,
        rate_plcp = iwl_mvm_mac80211_idx_to_hwrate(rate_idx);
 
        mvm->mgmt_last_antenna_idx =
-               iwl_mvm_next_antenna(mvm, mvm->fw->valid_tx_ant,
+               iwl_mvm_next_antenna(mvm, iwl_mvm_get_valid_tx_ant(mvm),
                                     mvm->mgmt_last_antenna_idx);
 
        if (info->band == IEEE80211_BAND_2GHZ &&
@@ -507,7 +507,7 @@ static void iwl_mvm_check_ratid_empty(struct iwl_mvm *mvm,
                IWL_DEBUG_TX_QUEUES(mvm,
                                    "Can continue DELBA flow ssn = next_recl = %d\n",
                                    tid_data->next_reclaimed);
-               iwl_mvm_disable_txq(mvm, tid_data->txq_id);
+               iwl_mvm_disable_txq(mvm, tid_data->txq_id, CMD_ASYNC);
                tid_data->state = IWL_AGG_OFF;
                /*
                 * we can't hold the mutex - but since we are after a sequence
@@ -667,7 +667,8 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
 
                /* Single frame failure in an AMPDU queue => send BAR */
                if (txq_id >= mvm->first_agg_queue &&
-                   !(info->flags & IEEE80211_TX_STAT_ACK))
+                   !(info->flags & IEEE80211_TX_STAT_ACK) &&
+                   !(info->flags & IEEE80211_TX_STAT_TX_FILTERED))
                        info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
 
                /* W/A FW bug: seq_ctl is wrong when the status isn't success */
@@ -930,6 +931,11 @@ int iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
        sta_id = ba_notif->sta_id;
        tid = ba_notif->tid;
 
+       if (WARN_ONCE(sta_id >= IWL_MVM_STATION_COUNT ||
+                     tid >= IWL_MAX_TID_COUNT,
+                     "sta_id %d tid %d", sta_id, tid))
+               return 0;
+
        rcu_read_lock();
 
        sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);