| From 2c227d8a11f28c42944ea5c6b0c7066b82d7798e Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 1 Jun 2018 09:45:55 +0200 |
| Subject: iwlwifi: pcie: gen2: build A-MSDU only for GSO |
| |
| From: Johannes Berg <johannes.berg@intel.com> |
| |
| [ Upstream commit 53f474e6a8d74d5dc0c3a015d889471f9a157685 ] |
| |
| If the incoming frame should be an A-MSDU, it may already be one, |
| for example in the case of NAN multicast being encapsulated in an |
| A-MSDU. Thus, use the GSO algorithm to build A-MSDU only if the |
| skb actually contains GSO data. |
| |
| Fixes: 6ffe5de35b05 ("iwlwifi: pcie: add AMSDU to gen2") |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Luca Coelho <luciano.coelho@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c |
| index b99f33ff91230..61ffa1d1a00d7 100644 |
| --- a/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c |
| +++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c |
| @@ -526,7 +526,12 @@ struct iwl_tfh_tfd *iwl_pcie_gen2_build_tfd(struct iwl_trans *trans, |
| |
| hdr_len = ieee80211_hdrlen(hdr->frame_control); |
| |
| - if (amsdu) |
| + /* |
| + * Only build A-MSDUs here if doing so by GSO, otherwise it may be |
| + * an A-MSDU for other reasons, e.g. NAN or an A-MSDU having been |
| + * built in the higher layers already. |
| + */ |
| + if (amsdu && skb_shinfo(skb)->gso_size) |
| return iwl_pcie_gen2_build_tx_amsdu(trans, txq, dev_cmd, skb, |
| out_meta, hdr_len, len); |
| |
| -- |
| 2.20.1 |
| |