iwlwifi: mvm: allow a debug knob for Tx A-MSDU even if rate control forbids it
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 3 Apr 2016 07:15:59 +0000 (10:15 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Tue, 10 May 2016 19:14:47 +0000 (22:14 +0300)
There is a debugfs knob to configure the maximal length
of the A-MSDU. If this value is not 0 (which is the
default), allow Tx A-MSDU even if the rate control
disallows it.
While at it, add "unlikely" to the if that limits the
length of the A-MSDU based on the debugfs hook.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/tx.c

index a8e5a67..3b64568 100644 (file)
@@ -609,9 +609,11 @@ static int iwl_mvm_tx_tso(struct iwl_mvm *mvm, struct sk_buff *skb,
        if (WARN_ON_ONCE(tid >= IWL_MAX_TID_COUNT))
                return -EINVAL;
 
+       dbg_max_amsdu_len = ACCESS_ONCE(mvm->max_amsdu_len);
+
        if (!sta->max_amsdu_len ||
            !ieee80211_is_data_qos(hdr->frame_control) ||
-           !mvmsta->tlc_amsdu) {
+           (!mvmsta->tlc_amsdu && !dbg_max_amsdu_len)) {
                num_subframes = 1;
                pad = 0;
                goto segment;
@@ -642,7 +644,6 @@ static int iwl_mvm_tx_tso(struct iwl_mvm *mvm, struct sk_buff *skb,
        }
 
        max_amsdu_len = sta->max_amsdu_len;
-       dbg_max_amsdu_len = ACCESS_ONCE(mvm->max_amsdu_len);
 
        /* the Tx FIFO to which this A-MSDU will be routed */
        txf = iwl_mvm_ac_to_tx_fifo[tid_to_mac80211_ac[tid]];
@@ -656,7 +657,7 @@ static int iwl_mvm_tx_tso(struct iwl_mvm *mvm, struct sk_buff *skb,
        max_amsdu_len = min_t(unsigned int, max_amsdu_len,
                              mvm->shared_mem_cfg.txfifo_size[txf] - 256);
 
-       if (dbg_max_amsdu_len)
+       if (unlikely(dbg_max_amsdu_len))
                max_amsdu_len = min_t(unsigned int, max_amsdu_len,
                                      dbg_max_amsdu_len);