diff options
| author | Dustin Brown <dustinb@codeaurora.org> | 2018-05-25 11:44:56 -0700 |
|---|---|---|
| committer | Dustin Brown <dustinb@codeaurora.org> | 2018-05-25 11:44:56 -0700 |
| commit | 02b27f85ea511d03cc3f10ec2c7f02b9a57d5755 (patch) | |
| tree | da22217a76f0b8455048ce3f9148c9c859be3109 | |
| parent | 7a35eb211dacd0e629fe6472d5b392990faed9b4 (diff) | |
qcacld-3.0: Add error handling for pktlog_init
In cds_pre_enable(), pktlog is never deinitialized in the event of an
error. Add error handling to cds_pre_enable() to cleanup the pktlog in
the event of an error.
Change-Id: Ia18a19acc6e5c35be827c07a89571b6206233e08
CRs-Fixed: 2249159
| -rw-r--r-- | core/cds/src/cds_api.c | 64 | ||||
| -rw-r--r-- | core/dp/txrx/ol_txrx.c | 4 | ||||
| -rw-r--r-- | core/dp/txrx/ol_txrx.h | 1 |
3 files changed, 56 insertions, 13 deletions
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index a74a43464cda..991a88a3bd21 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -583,6 +583,45 @@ err_probe_event: return status; } /* cds_open() */ +static QDF_STATUS cds_pktlog_enable(void *pdev_txrx_ctx, void *scn) +{ + int errno; + + switch (cds_get_conparam()) { + case QDF_GLOBAL_FTM_MODE: + case QDF_GLOBAL_EPPING_MODE: + return QDF_STATUS_SUCCESS; + default: + break; + } + + htt_pkt_log_init(pdev_txrx_ctx, scn); + + errno = pktlog_htc_attach(); + if (errno) + goto pktlog_deinit; + + return QDF_STATUS_SUCCESS; + +pktlog_deinit: + htt_pktlogmod_exit(pdev_txrx_ctx, scn); + + return QDF_STATUS_E_FAILURE; +} + +static void cds_pktlog_disable(void *pdev_txrx_ctx, void *scn) +{ + switch (cds_get_conparam()) { + case QDF_GLOBAL_FTM_MODE: + case QDF_GLOBAL_EPPING_MODE: + return; + default: + break; + } + + htt_pktlogmod_exit(pdev_txrx_ctx, scn); +} + /** * cds_pre_enable() - pre enable cds * @cds_context: CDS context @@ -626,12 +665,9 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) } /* call Packetlog connect service */ - if (QDF_GLOBAL_FTM_MODE != cds_get_conparam() && - QDF_GLOBAL_EPPING_MODE != cds_get_conparam()) { - htt_pkt_log_init(gp_cds_context->pdev_txrx_ctx, scn); - if (pktlog_htc_attach()) - return QDF_STATUS_E_FAILURE; - } + qdf_status = cds_pktlog_enable(gp_cds_context->pdev_txrx_ctx, scn); + if (QDF_IS_STATUS_ERROR(qdf_status)) + return qdf_status; /* Reset wma wait event */ qdf_event_reset(&gp_cds_context->wmaCompleteEvent); @@ -642,7 +678,7 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) QDF_TRACE(QDF_MODULE_ID_SYS, QDF_TRACE_LEVEL_FATAL, "Failed to WMA prestart"); QDF_ASSERT(0); - return QDF_STATUS_E_FAILURE; + goto pktlog_disable; } /* Need to update time out of complete */ @@ -665,7 +701,7 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) wlan_sys_probe(); QDF_ASSERT(0); - return QDF_STATUS_E_FAILURE; + goto pktlog_disable; } qdf_status = htc_start(gp_cds_context->htc_ctx); @@ -673,7 +709,7 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) QDF_TRACE(QDF_MODULE_ID_SYS, QDF_TRACE_LEVEL_FATAL, "Failed to Start HTC"); QDF_ASSERT(0); - return QDF_STATUS_E_FAILURE; + goto pktlog_disable; } qdf_status = wma_wait_for_ready_event(gp_cds_context->pWMAContext); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { @@ -690,7 +726,7 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) wma_wmi_stop(); htc_stop(gp_cds_context->htc_ctx); - return QDF_STATUS_E_FAILURE; + goto pktlog_disable; } if (ol_txrx_pdev_post_attach(gp_cds_context->pdev_txrx_ctx)) { @@ -699,10 +735,16 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) wma_wmi_stop(); htc_stop(gp_cds_context->htc_ctx); QDF_ASSERT(0); - return QDF_STATUS_E_FAILURE; + qdf_status = QDF_STATUS_E_FAILURE; + goto pktlog_disable; } return QDF_STATUS_SUCCESS; + +pktlog_disable: + cds_pktlog_disable(gp_cds_context->pdev_txrx_ctx, scn); + + return qdf_status; } /** diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index 7a1ec3fd93d9..a76c23828753 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -1560,7 +1560,7 @@ void htt_pkt_log_init(struct ol_txrx_pdev_t *handle, void *scn) * * Return: void */ -static void htt_pktlogmod_exit(struct ol_txrx_pdev_t *handle, void *scn) +void htt_pktlogmod_exit(struct ol_txrx_pdev_t *handle, void *scn) { if (scn && cds_get_conparam() != QDF_GLOBAL_FTM_MODE && !QDF_IS_EPPING_ENABLED(cds_get_conparam()) && @@ -1571,7 +1571,7 @@ static void htt_pktlogmod_exit(struct ol_txrx_pdev_t *handle, void *scn) } #else void htt_pkt_log_init(ol_txrx_pdev_handle handle, void *ol_sc) { } -static void htt_pktlogmod_exit(ol_txrx_pdev_handle handle, void *sc) { } +void htt_pktlogmod_exit(ol_txrx_pdev_handle handle, void *sc) { } #endif /** diff --git a/core/dp/txrx/ol_txrx.h b/core/dp/txrx/ol_txrx.h index 2aeef22137f3..f1f5be4ffe76 100644 --- a/core/dp/txrx/ol_txrx.h +++ b/core/dp/txrx/ol_txrx.h @@ -188,6 +188,7 @@ bool ol_txrx_fwd_desc_thresh_check(struct ol_txrx_vdev_t *vdev); ol_txrx_vdev_handle ol_txrx_get_vdev_from_vdev_id(uint8_t vdev_id); void htt_pkt_log_init(struct ol_txrx_pdev_t *handle, void *scn); +void htt_pktlogmod_exit(struct ol_txrx_pdev_t *handle, void *scn); QDF_STATUS ol_txrx_set_wisa_mode(ol_txrx_vdev_handle vdev, bool enable); void ol_txrx_update_mac_id(uint8_t vdev_id, uint8_t mac_id); |
