mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 16:16:15 -04:00
qcacld-3.0: Do rx inorder replenish for fragmented packets
Currently for fragment packets received legacy rx buffer replenish is done which does not take in to account number of msdu count but depends on fill count. Variable fill count is not protected and the value becomes incorrect if AP sends both the fragmented and normal packets at the same time. This leads to rx buffer replenish failure and eventually data stall. To fix this do rx inorder replenish for fragmented packets similar to normal ones if rx full reorder offload is enabled. Change-Id: I144c10be7b45268300b040e07ecb909a1ca113cc CRs-Fixed: 2289797
This commit is contained in:
parent
d5a5f2e278
commit
a886120770
1 changed files with 14 additions and 1 deletions
|
|
@ -326,7 +326,16 @@ ol_rx_frag_indication_handler(ol_txrx_pdev_handle pdev,
|
|||
* separate from normal frames
|
||||
*/
|
||||
ol_rx_reorder_flush_frag(htt_pdev, peer, tid, seq_num_start);
|
||||
} else {
|
||||
uint32_t *msg_word;
|
||||
uint8_t *rx_ind_data;
|
||||
|
||||
rx_ind_data = qdf_nbuf_data(rx_frag_ind_msg);
|
||||
msg_word = (uint32_t *)rx_ind_data;
|
||||
msdu_count = HTT_RX_IN_ORD_PADDR_IND_MSDU_CNT_GET(*(msg_word +
|
||||
1));
|
||||
}
|
||||
|
||||
pktlog_bit =
|
||||
(htt_rx_amsdu_rx_in_order_get_pktlog(rx_frag_ind_msg) == 0x01);
|
||||
ret = htt_rx_frag_pop(htt_pdev, rx_frag_ind_msg, &head_msdu,
|
||||
|
|
@ -362,7 +371,11 @@ ol_rx_frag_indication_handler(ol_txrx_pdev_handle pdev,
|
|||
htt_rx_desc_frame_free(htt_pdev, head_msdu);
|
||||
}
|
||||
/* request HTT to provide new rx MSDU buffers for the target to fill. */
|
||||
htt_rx_msdu_buff_replenish(htt_pdev);
|
||||
if (ol_cfg_is_full_reorder_offload(pdev->ctrl_pdev) &&
|
||||
!pdev->cfg.is_high_latency)
|
||||
htt_rx_msdu_buff_in_order_replenish(htt_pdev, msdu_count);
|
||||
else
|
||||
htt_rx_msdu_buff_replenish(htt_pdev);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue