diff --git a/dp/wifi3.0/dp_rx_defrag.c b/dp/wifi3.0/dp_rx_defrag.c index da7d3bf3155d..0b9552554ef8 100644 --- a/dp/wifi3.0/dp_rx_defrag.c +++ b/dp/wifi3.0/dp_rx_defrag.c @@ -1332,6 +1332,10 @@ static QDF_STATUS dp_rx_defrag_reo_reinject(struct dp_peer *peer, return QDF_STATUS_E_FAILURE; } + dp_ipa_handle_rx_buf_smmu_mapping(soc, head, + rx_desc_pool->buf_size, + true); + /* * As part of rx frag handler bufffer was unmapped and rx desc * unmapped is set to 1. So again for defrag reinject frame reset @@ -1339,10 +1343,6 @@ static QDF_STATUS dp_rx_defrag_reo_reinject(struct dp_peer *peer, */ rx_desc->unmapped = 0; - dp_ipa_handle_rx_buf_smmu_mapping(soc, head, - rx_desc_pool->buf_size, - true); - paddr = qdf_nbuf_get_frag_paddr(head, 0); ret = check_x86_paddr(soc, &head, &paddr, rx_desc_pool); diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index 0f95f6a27060..421a30a94346 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -2652,6 +2652,7 @@ dp_wbm_int_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id, struct hal_buf_info buf_info; uint32_t rx_bufs_used = 0, msdu_cnt, i; uint32_t rx_link_buf_info[HAL_RX_BUFFINFO_NUM_DWORDS]; + struct rx_desc_pool *rx_desc_pool; msdu = 0; @@ -2679,10 +2680,23 @@ dp_wbm_int_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id, soc, msdu_list.sw_cookie[i]); qdf_assert_always(rx_desc); + rx_desc_pool = + &soc->rx_desc_buf[rx_desc->pool_id]; msdu = rx_desc->nbuf; - qdf_nbuf_unmap_single(soc->osdev, msdu, - QDF_DMA_FROM_DEVICE); + dp_ipa_rx_buf_smmu_mapping_lock(soc); + dp_ipa_handle_rx_buf_smmu_mapping( + soc, msdu, + rx_desc_pool->buf_size, + false); + + qdf_nbuf_unmap_nbytes_single( + soc->osdev, + msdu, + QDF_DMA_FROM_DEVICE, + rx_desc_pool->buf_size); + rx_desc->unmapped = 1; + dp_ipa_rx_buf_smmu_mapping_unlock(soc); dp_rx_buffer_pool_nbuf_free(soc, msdu, rx_desc->pool_id);