summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/intel
diff options
context:
space:
mode:
authorEliad Peller2018-02-13 17:41:46 +0100
committerLuca Coelho2018-04-26 14:18:07 +0200
commitbf1ad8978bbfd8579dfd10d2e7742d0f554e449a (patch)
treead263c2cc270d48133326c0e4482815f43156004 /drivers/net/wireless/intel
parentiwlwifi: cfg: remove unnecessary cfg data in non-dvm devices (diff)
downloadkernel-qcow2-linux-bf1ad8978bbfd8579dfd10d2e7742d0f554e449a.tar.gz
kernel-qcow2-linux-bf1ad8978bbfd8579dfd10d2e7742d0f554e449a.tar.xz
kernel-qcow2-linux-bf1ad8978bbfd8579dfd10d2e7742d0f554e449a.zip
iwlwifi: pcie: allow sending pre-built A-MSDUs
In case of A-MSDUs, the trans layer is taking care of building the subframes (out of the given skb), according to the given gso_size. However, in some testing flows, we want to build the whole A-MSDU frame in a different place (e.g. userspace), and ask the driver to send it as-is. In case of gso_size==0, simply treat the frame as normal-frame, although the A-MSDU flag is set. Signed-off-by: Eliad Peller <eliadx.peller@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Diffstat (limited to 'drivers/net/wireless/intel')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/pcie/tx.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
index 1cbb8f470afd..473fe7ccb07c 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
@@ -2397,7 +2397,13 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
goto out_err;
iwl_pcie_txq_build_tfd(trans, txq, tb1_phys, tb1_len, false);
- if (amsdu) {
+ /*
+ * If gso_size wasn't set, don't give the frame "amsdu treatment"
+ * (adding subframes, etc.).
+ * This can happen in some testing flows when the amsdu was already
+ * pre-built, and we just need to send the resulting skb.
+ */
+ if (amsdu && skb_shinfo(skb)->gso_size) {
if (unlikely(iwl_fill_data_tbs_amsdu(trans, skb, txq, hdr_len,
out_meta, dev_cmd,
tb1_len)))