summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDustin Brown <dustinb@codeaurora.org>2018-05-25 11:44:56 -0700
committerDustin Brown <dustinb@codeaurora.org>2018-05-25 11:44:56 -0700
commit02b27f85ea511d03cc3f10ec2c7f02b9a57d5755 (patch)
treeda22217a76f0b8455048ce3f9148c9c859be3109
parent7a35eb211dacd0e629fe6472d5b392990faed9b4 (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.c64
-rw-r--r--core/dp/txrx/ol_txrx.c4
-rw-r--r--core/dp/txrx/ol_txrx.h1
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);