Просмотр исходного кода

iwlwifi: mvm: move skb padding reservation earlier

Future changes will require moving the HE radiotap data into
the SKB head, but this means we need to have the alignment
reservation done before that. To prepare, move the alignment
reservation earlier here.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Johannes Berg 7 лет назад
Родитель
Сommit
1e5b775031
1 измененных файлов с 11 добавлено и 9 удалено
  1. 11 9
      drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c

+ 11 - 9
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c

@@ -151,17 +151,9 @@ static void iwl_mvm_create_skb(struct sk_buff *skb, struct ieee80211_hdr *hdr,
 	unsigned int hdrlen = ieee80211_hdrlen(hdr->frame_control);
 	unsigned int hdrlen = ieee80211_hdrlen(hdr->frame_control);
 
 
 	if (desc->mac_flags2 & IWL_RX_MPDU_MFLG2_PAD) {
 	if (desc->mac_flags2 & IWL_RX_MPDU_MFLG2_PAD) {
+		len -= 2;
 		pad_len = 2;
 		pad_len = 2;
-
-		/*
-		 * If the device inserted padding it means that (it thought)
-		 * the 802.11 header wasn't a multiple of 4 bytes long. In
-		 * this case, reserve two bytes at the start of the SKB to
-		 * align the payload properly in case we end up copying it.
-		 */
-		skb_reserve(skb, pad_len);
 	}
 	}
-	len -= pad_len;
 
 
 	/* If frame is small enough to fit in skb->head, pull it completely.
 	/* If frame is small enough to fit in skb->head, pull it completely.
 	 * If not, only pull ieee80211_hdr (including crypto if present, and
 	 * If not, only pull ieee80211_hdr (including crypto if present, and
@@ -866,6 +858,16 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
 		return;
 		return;
 	}
 	}
 
 
+	if (desc->mac_flags2 & IWL_RX_MPDU_MFLG2_PAD) {
+		/*
+		 * If the device inserted padding it means that (it thought)
+		 * the 802.11 header wasn't a multiple of 4 bytes long. In
+		 * this case, reserve two bytes at the start of the SKB to
+		 * align the payload properly in case we end up copying it.
+		 */
+		skb_reserve(skb, 2);
+	}
+
 	rx_status = IEEE80211_SKB_RXCB(skb);
 	rx_status = IEEE80211_SKB_RXCB(skb);
 
 
 	if (iwl_mvm_rx_crypto(mvm, hdr, rx_status, desc,
 	if (iwl_mvm_rx_crypto(mvm, hdr, rx_status, desc,