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:
Sravan Kumar Kairam 2018-08-03 14:47:34 +05:30 • committed by nshrivas
commit a886120770

View file

@ -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);
}
/*