iwlwifi: mvm: turn off AMSDU bit in QoS control for de-aggregated AMSDUs
authorSara Sharon <sara.sharon@intel.com>
Sun, 6 Mar 2016 07:51:29 +0000 (09:51 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 9 Mar 2016 18:59:17 +0000 (20:59 +0200)
Our hardware de-aggregates AMSDUs but copies the mac header
as it to the de-aggregated MPDUs. We need to turn off the AMSDU
bit in the QoS control ourselves.

Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c

index cd6ca37..9a54f2d 100644 (file)
@@ -519,6 +519,18 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
                        rcu_read_unlock();
                        return;
                }
+
+               /*
+                * Our hardware de-aggregates AMSDUs but copies the mac header
+                * as it to the de-aggregated MPDUs. We need to turn off the
+                * AMSDU bit in the QoS control ourselves.
+                */
+               if ((desc->mac_flags2 & IWL_RX_MPDU_MFLG2_AMSDU) &&
+                   !WARN_ON(!ieee80211_is_data_qos(hdr->frame_control))) {
+                       u8 *qc = ieee80211_get_qos_ctl(hdr);
+
+                       *qc &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT;
+               }
        }
 
        /*