diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 846d86c20e44..25bf6465f3db 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -97,7 +97,6 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id, * if desc_list is NULL, allocate the descs from freelist */ if (!(*desc_list)) { - num_alloc_desc = dp_rx_get_free_desc_list(dp_soc, mac_id, rx_desc_pool, num_req_buffers, @@ -123,8 +122,8 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id, sync_hw_ptr); QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG, - "no of availble entries in rxdma ring: %d", - num_entries_avail); + "no of availble entries in rxdma ring: %d", + num_entries_avail); if (num_entries_avail < num_req_buffers) { num_desc_to_free = num_req_buffers - num_entries_avail; @@ -201,7 +200,6 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id, /* * add any available free desc back to the free list */ - if (*desc_list) dp_rx_add_desc_list_to_free_list(dp_soc, desc_list, tail, mac_id, rx_desc_pool); diff --git a/dp/wifi3.0/dp_rx_mon_dest.c b/dp/wifi3.0/dp_rx_mon_dest.c index 4a1226d7e0e9..b7a4bc40a616 100644 --- a/dp/wifi3.0/dp_rx_mon_dest.c +++ b/dp/wifi3.0/dp_rx_mon_dest.c @@ -760,6 +760,7 @@ dp_rx_pdev_mon_buf_attach(struct dp_pdev *pdev) { struct dp_srng *rxdma_srng; uint32_t rxdma_entries; struct rx_desc_pool *rx_desc_pool; + QDF_STATUS status; rxdma_srng = &pdev->rxdma_mon_buf_ring; @@ -773,14 +774,26 @@ dp_rx_pdev_mon_buf_attach(struct dp_pdev *pdev) { "%s: Mon RX Desc Pool[%d] allocation size=%d\n" , __func__, pdev_id, rxdma_entries*3); - dp_rx_desc_pool_alloc(soc, pdev_id, rxdma_entries*3, rx_desc_pool); + status = dp_rx_desc_pool_alloc(soc, pdev_id, + rxdma_entries*3, rx_desc_pool); + if (!QDF_IS_STATUS_SUCCESS(status)) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "%s: dp_rx_desc_pool_alloc() failed \n", __func__); + return status; + } QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_WARN, "%s: Mon RX Buffers Replenish pdev_id=%d\n", __func__, pdev_id); - dp_rx_buffers_replenish(soc, pdev_id, rxdma_srng, rx_desc_pool, - rxdma_entries, &desc_list, &tail, HAL_RX_BUF_RBM_SW3_BM); + status = dp_rx_buffers_replenish(soc, pdev_id, rxdma_srng, rx_desc_pool, + rxdma_entries, &desc_list, &tail, + HAL_RX_BUF_RBM_SW3_BM); + if (!QDF_IS_STATUS_SUCCESS(status)) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "%s: dp_rx_buffers_replenish() failed \n", __func__); + return status; + } return QDF_STATUS_SUCCESS; } @@ -846,14 +859,22 @@ static int dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id) QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_WARN, "%s: total_mem_size: %d, num_link_desc_banks: %u, \ - max_alloc_size: %d\n", - __func__, total_mem_size, num_link_desc_banks, max_alloc_size); + max_alloc_size: %d last_bank_size: %d\n", + __func__, total_mem_size, num_link_desc_banks, max_alloc_size, + last_bank_size); for (i = 0; i < num_link_desc_banks; i++) { dp_pdev->link_desc_banks[i].base_vaddr_unaligned = - qdf_mem_alloc_consistent(soc->osdev, NULL, + qdf_mem_alloc_consistent(soc->osdev, soc->osdev->dev, max_alloc_size, &(dp_pdev->link_desc_banks[i].base_paddr_unaligned)); + + if (!dp_pdev->link_desc_banks[i].base_vaddr_unaligned) { + QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, + "%s: Link desc memory allocation failed\n", + __func__); + goto fail; + } dp_pdev->link_desc_banks[i].size = max_alloc_size; dp_pdev->link_desc_banks[i].base_vaddr = @@ -870,13 +891,6 @@ static int dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id) (dp_pdev->link_desc_banks[i].base_vaddr) - (unsigned long) (dp_pdev->link_desc_banks[i].base_vaddr_unaligned)); - - if (!dp_pdev->link_desc_banks[i].base_vaddr_unaligned) { - QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, - "%s: Link desc memory allocation failed\n", - __func__); - goto fail; - } } if (last_bank_size) { @@ -885,8 +899,15 @@ static int dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id) */ dp_pdev->link_desc_banks[i].base_vaddr_unaligned = qdf_mem_alloc_consistent(soc->osdev, - NULL, last_bank_size, + soc->osdev->dev, last_bank_size, &(dp_pdev->link_desc_banks[i].base_paddr_unaligned)); + + if (dp_pdev->link_desc_banks[i].base_vaddr_unaligned == NULL) { + QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, + "%s: allocation failed for mon link desc pool\n", + __func__); + goto fail; + } dp_pdev->link_desc_banks[i].size = last_bank_size; dp_pdev->link_desc_banks[i].base_vaddr = @@ -1002,13 +1023,33 @@ QDF_STATUS dp_rx_pdev_mon_attach(struct dp_pdev *pdev) { uint8_t pdev_id = pdev->pdev_id; struct dp_soc *soc = pdev->soc; + QDF_STATUS status; QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_WARN, "%s: pdev attach id=%d\n", __func__, pdev_id); - dp_rx_pdev_mon_buf_attach(pdev); - dp_rx_pdev_mon_status_attach(pdev); - dp_mon_link_desc_pool_setup(soc, pdev_id); + status = dp_rx_pdev_mon_buf_attach(pdev); + if (!QDF_IS_STATUS_SUCCESS(status)) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "%s: dp_rx_pdev_mon_buf_attach() failed \n", __func__); + return status; + } + + status = dp_rx_pdev_mon_status_attach(pdev); + if (!QDF_IS_STATUS_SUCCESS(status)) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "%s: dp_rx_pdev_mon_status_attach() failed \n", + __func__); + return status; + } + + status = dp_mon_link_desc_pool_setup(soc, pdev_id); + if (!QDF_IS_STATUS_SUCCESS(status)) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "%s: dp_mon_link_desc_pool_setup() failed \n", + __func__); + return status; + } return QDF_STATUS_SUCCESS; } diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c index df4fba1245ae..d11fb22b24ad 100644 --- a/dp/wifi3.0/dp_rx_mon_status.c +++ b/dp/wifi3.0/dp_rx_mon_status.c @@ -454,6 +454,7 @@ dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev) { struct dp_srng *rxdma_srng; uint32_t rxdma_entries; struct rx_desc_pool *rx_desc_pool; + QDF_STATUS status; rxdma_srng = &pdev->rxdma_mon_status_ring; @@ -466,15 +467,26 @@ dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev) { "%s: Mon RX Status Pool[%d] allocation size=%d\n", __func__, pdev_id, rxdma_entries); - dp_rx_desc_pool_alloc(soc, pdev_id, rxdma_entries+1, rx_desc_pool); + status = dp_rx_desc_pool_alloc(soc, pdev_id, rxdma_entries+1, + rx_desc_pool); + if (QDF_IS_STATUS_SUCCESS(status)) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "%s: dp_rx_desc_pool_alloc() failed \n", __func__); + return status; + } QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_WARN, "%s: Mon RX Status Buffers Replenish pdev_id=%d\n", __func__, pdev_id); - dp_rx_mon_status_buffers_replenish(soc, pdev_id, rxdma_srng, - rx_desc_pool, rxdma_entries, &desc_list, &tail, - HAL_RX_BUF_RBM_SW3_BM); + status = dp_rx_mon_status_buffers_replenish(soc, pdev_id, rxdma_srng, + rx_desc_pool, rxdma_entries, &desc_list, &tail, + HAL_RX_BUF_RBM_SW3_BM); + if (QDF_IS_STATUS_SUCCESS(status)) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR, + "%s: dp_rx_buffers_replenish() failed \n", __func__); + return status; + } qdf_nbuf_queue_init(&pdev->rx_status_q);