From 5dde173012f691993410da061b883ee762897453 Mon Sep 17 00:00:00 2001 From: Vevek Venkatesan Date: Wed, 11 Aug 2021 22:27:43 +0530 Subject: [PATCH] qcacmn: add CDP interface support for pkt_log_exit Add CDP interface API support for pkt_log_exit, to cleanup pkt_log_init on failure. Change-Id: Ib50efaed5997d341d3e76c2e1dbe42856df40191 CRs-Fixed: 3012201 --- dp/inc/cdp_txrx_misc.h | 21 +++++++++++++++++++++ dp/inc/cdp_txrx_ops.h | 1 + dp/wifi3.0/dp_main.c | 27 +++++++++++++++++++++++++++ utils/pktlog/linux_ac.c | 13 +++++++++++-- 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/dp/inc/cdp_txrx_misc.h b/dp/inc/cdp_txrx_misc.h index edc24f44b0aa..4063d6129563 100644 --- a/dp/inc/cdp_txrx_misc.h +++ b/dp/inc/cdp_txrx_misc.h @@ -566,6 +566,27 @@ static inline void cdp_pkt_log_con_service(ol_txrx_soc_handle soc, return; } +/** + * cdp_pkt_log_exit() - API to cleanup packet log info + * @soc: data path soc handle + * @pdev_id: id of data path pdev handle + * + * Return: void + */ +static inline void cdp_pkt_log_exit(ol_txrx_soc_handle soc, uint8_t pdev_id) +{ + if (!soc || !soc->ops || !soc->ops->misc_ops) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL, + "%s invalid instance", __func__); + return; + } + + if (soc->ops->misc_ops->pkt_log_exit) + return soc->ops->misc_ops->pkt_log_exit(soc, pdev_id); + + return; +} + /** * cdp_get_num_rx_contexts() - API to get the number of RX contexts * @soc: soc handle diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 74100231370c..93789956bb51 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -1265,6 +1265,7 @@ struct cdp_misc_ops { void *scn); void (*pkt_log_con_service)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, void *scn); + void (*pkt_log_exit)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id); int (*get_num_rx_contexts)(struct cdp_soc_t *soc_hdl); void (*register_pktdump_cb)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, ol_txrx_pktdump_cb tx_cb, diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 3da2c9367381..4f907821a850 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -543,6 +543,28 @@ static void dp_pktlogmod_exit(struct dp_pdev *pdev) pktlogmod_exit(scn); pdev->pkt_log_init = false; } + +/** + * dp_pkt_log_exit() - Wrapper API to cleanup pktlog info + * @soc_hdl: Datapath soc handle + * @pdev_id: id of data path pdev handle + * + * Return: none + */ +static void dp_pkt_log_exit(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) +{ + struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl); + struct dp_pdev *pdev = + dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id); + + if (!pdev) { + dp_err("pdev handle is NULL"); + return; + } + + dp_pktlogmod_exit(pdev); +} + #else static void dp_pkt_log_con_service(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, void *scn) @@ -550,6 +572,10 @@ static void dp_pkt_log_con_service(struct cdp_soc_t *soc_hdl, } static void dp_pktlogmod_exit(struct dp_pdev *handle) { } + +static void dp_pkt_log_exit(struct cdp_soc_t *soc_hdl, uint8_t pdev_id) +{ +} #endif /** * dp_get_num_rx_contexts() - get number of RX contexts @@ -11945,6 +11971,7 @@ static struct cdp_misc_ops dp_ops_misc = { #endif /* FEATURE_RUNTIME_PM */ .pkt_log_init = dp_pkt_log_init, .pkt_log_con_service = dp_pkt_log_con_service, + .pkt_log_exit = dp_pkt_log_exit, .get_num_rx_contexts = dp_get_num_rx_contexts, .get_tx_ack_stats = dp_tx_get_success_ack_stats, #ifdef WLAN_SUPPORT_DATA_STALL diff --git a/utils/pktlog/linux_ac.c b/utils/pktlog/linux_ac.c index 2cecda9b1e55..cea9c655b9a6 100644 --- a/utils/pktlog/linux_ac.c +++ b/utils/pktlog/linux_ac.c @@ -417,6 +417,7 @@ static int pktlog_attach(struct hif_opaque_softc *scn) char *proc_name; struct proc_dir_entry *proc_entry; + qdf_info("attach pktlog resources"); /* Allocate pktlog dev for later use */ pl_dev = get_pktlog_handle(); @@ -441,6 +442,7 @@ static int pktlog_attach(struct hif_opaque_softc *scn) */ pl_dev->pl_funcs->pktlog_init(scn); } else { + qdf_err("pl_dev is NULL"); return -EINVAL; } @@ -505,6 +507,7 @@ static void pktlog_detach(struct hif_opaque_softc *scn) struct ath_pktlog_info *pl_info; struct pktlog_dev_t *pl_dev = get_pktlog_handle(); + qdf_info("detach pktlog resources"); if (!pl_dev) { qdf_info("Invalid pktlog context"); ASSERT(0); @@ -1038,6 +1041,7 @@ int pktlogmod_init(void *context) { int ret; + qdf_info("Initialize pkt_log module"); /* create the proc directory entry */ g_pktlog_pde = proc_mkdir(PKTLOG_PROC_DIR, NULL); @@ -1050,8 +1054,10 @@ int pktlogmod_init(void *context) ret = pktlog_attach((struct hif_opaque_softc *)context); /* If packet log init failed */ - if (ret) + if (ret) { + qdf_err("pktlog_attach failed"); goto attach_fail; + } return ret; @@ -1064,8 +1070,11 @@ attach_fail: void pktlogmod_exit(void *context) { - if (!g_pktlog_pde) + qdf_info("pkt_log module cleanup"); + if (!g_pktlog_pde) { + qdf_err("g_pktlog_pde is NULL"); return; + } pktlog_detach((struct hif_opaque_softc *)context);