mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 14:13:01 -04:00
qcacmn: Fix double unmap issue in RX defrag path
If a RX packet takes below procedure, there is a double unmap: replenish -> rx_frag -> reo_reinject -> rx_process Fix it by mapping it again before reinjection. CRs-Fixed: 2181134 Change-Id: I69ca74e4aad57c854f301e492fe55012ee7290a3
This commit is contained in:
parent
fb6527630f
commit
ec03bb838b
1 changed files with 27 additions and 0 deletions
|
|
@ -889,6 +889,7 @@ static void dp_rx_defrag_nwifi_to_8023(qdf_nbuf_t nbuf)
|
|||
qdf_dma_addr_t paddr;
|
||||
uint32_t nbuf_len, seq_no, dst_ind;
|
||||
uint32_t *mpdu_wrd;
|
||||
uint32_t ret, cookie;
|
||||
|
||||
void *dst_ring_desc =
|
||||
peer->rx_tid[tid].dst_ring_desc;
|
||||
|
|
@ -936,6 +937,32 @@ static void dp_rx_defrag_nwifi_to_8023(qdf_nbuf_t nbuf)
|
|||
hal_rx_msdu_start_msdu_len_set(
|
||||
qdf_nbuf_data(head), nbuf_len);
|
||||
|
||||
cookie = HAL_RX_BUF_COOKIE_GET(msdu0);
|
||||
|
||||
/* map the nbuf before reinject it into HW */
|
||||
ret = qdf_nbuf_map_single(soc->osdev, head,
|
||||
QDF_DMA_BIDIRECTIONAL);
|
||||
|
||||
if (qdf_unlikely(ret == QDF_STATUS_E_FAILURE)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: nbuf map failed !\n", __func__);
|
||||
qdf_nbuf_free(head);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
paddr = qdf_nbuf_get_frag_paddr(head, 0);
|
||||
|
||||
ret = check_x86_paddr(soc, &head, &paddr, pdev);
|
||||
|
||||
if (ret == QDF_STATUS_E_FAILURE) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: x86 check failed !\n", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
hal_rxdma_buff_addr_info_set(msdu0, paddr, cookie,
|
||||
HAL_RX_BUF_RBM_SW3_BM);
|
||||
|
||||
/* Lets fill entrance ring now !!! */
|
||||
if (qdf_unlikely(hal_srng_access_start(soc->hal_soc, hal_srng))) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
|
|
|
|||
Loading…
Reference in a new issue