iwlwifi: pcie: fix support for transmitting SKBs with fraglist
commit 4f4925a7b23428d5719af5a2816586b2a0e6fd19 upstream. When the implementation of SKBs with fraglist was sent upstream, a merge-damage occurred and half the patch was not applied. This causes problems in high-throughput situations with AX200 devices, including low throughput and FW crashes. Introduce the part that was missing from the original patch. Fixes: 0044f1716c4d ("iwlwifi: pcie: support transmitting SKBs with fraglist") Cc: stable@vger.kernel.org # 4.20+ Signed-off-by: Johannes Berg <johannes.berg@intel.com> [ This patch was created by me, but the original author of this code is Johannes, so his s-o-b is here and he's marked as the author of the patch. ] Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
cbf3de6656
commit
0f16d13cb8
@ -468,6 +468,7 @@ iwl_tfh_tfd *iwl_pcie_gen2_build_tx(struct iwl_trans *trans,
|
||||
dma_addr_t tb_phys;
|
||||
int len, tb1_len, tb2_len;
|
||||
void *tb1_addr;
|
||||
struct sk_buff *frag;
|
||||
|
||||
tb_phys = iwl_pcie_get_first_tb_dma(txq, idx);
|
||||
|
||||
@ -516,6 +517,19 @@ iwl_tfh_tfd *iwl_pcie_gen2_build_tx(struct iwl_trans *trans,
|
||||
if (iwl_pcie_gen2_tx_add_frags(trans, skb, tfd, out_meta))
|
||||
goto out_err;
|
||||
|
||||
skb_walk_frags(skb, frag) {
|
||||
tb_phys = dma_map_single(trans->dev, frag->data,
|
||||
skb_headlen(frag), DMA_TO_DEVICE);
|
||||
if (unlikely(dma_mapping_error(trans->dev, tb_phys)))
|
||||
goto out_err;
|
||||
iwl_pcie_gen2_set_tb(trans, tfd, tb_phys, skb_headlen(frag));
|
||||
trace_iwlwifi_dev_tx_tb(trans->dev, skb,
|
||||
frag->data,
|
||||
skb_headlen(frag));
|
||||
if (iwl_pcie_gen2_tx_add_frags(trans, frag, tfd, out_meta))
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
return tfd;
|
||||
|
||||
out_err:
|
||||
|
Loading…
x
Reference in New Issue
Block a user