summaryrefslogtreecommitdiff
path: root/core/utils
diff options
context:
space:
mode:
authorbings <bings@codeaurora.org>2018-05-30 10:15:47 +0800
committernshrivas <nshrivas@codeaurora.org>2018-06-13 10:50:18 -0700
commit851cb82fe3601b5db70aaa1d623f78d7b58df4c4 (patch)
tree43d6290ae6ba26c414fdc512229c7e4cbb5df13f /core/utils
parent67d2db7443b71f1d7a9571e6da5681dbc3e659f5 (diff)
qcacld-3.0: Fix pl_info->log_stat update
If log state 1, 2, 0, 1 are set serially, log state 2 can't be set successfully, while log state 1 is set to wdi twice, which results in two same pointers in doubly linked list txrx_pdev->wdi_event_list and causes dead loop. Update pl_info->log_stat only when it is subscribed to wdi and sent to firmware successfully. Change-Id: I8d67b9f02a2fb2c958d2553a743cbabcedfb2f42 CRs-Fixed: 2250715
Diffstat (limited to 'core/utils')
-rw-r--r--core/utils/pktlog/pktlog_ac.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/core/utils/pktlog/pktlog_ac.c b/core/utils/pktlog/pktlog_ac.c
index 052b87bea2bf..595f2217dcd9 100644
--- a/core/utils/pktlog/pktlog_ac.c
+++ b/core/utils/pktlog/pktlog_ac.c
@@ -390,21 +390,21 @@ int __pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state,
int error;
if (!scn) {
- printk("%s: Invalid scn context\n", __func__);
+ qdf_print("%s: Invalid scn context\n", __func__);
ASSERT(0);
return -1;
}
txrx_pdev = cds_get_context(QDF_MODULE_ID_TXRX);
if (!txrx_pdev) {
- printk("%s: Invalid txrx_pdev context\n", __func__);
+ qdf_print("%s: Invalid txrx_pdev context\n", __func__);
ASSERT(0);
return -1;
}
pl_dev = txrx_pdev->pl_dev;
if (!pl_dev) {
- printk("%s: Invalid pktlog context\n", __func__);
+ qdf_print("%s: Invalid pktlog context\n", __func__);
ASSERT(0);
return -1;
}
@@ -442,8 +442,8 @@ int __pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state,
if (!pl_info->buf) {
pl_info->curr_pkt_state =
PKTLOG_OPR_NOT_IN_PROGRESS;
- printk("%s: pktlog buf alloc failed\n",
- __func__);
+ qdf_print("%s: pktlog buf alloc failed\n",
+ __func__);
ASSERT(0);
return -1;
}
@@ -469,20 +469,29 @@ int __pktlog_enable(struct hif_opaque_softc *scn, int32_t log_state,
if (log_state != 0) {
/* WDI subscribe */
- if ((!pl_dev->is_pktlog_cb_subscribed) &&
- wdi_pktlog_subscribe(txrx_pdev, log_state)) {
- pl_info->curr_pkt_state = PKTLOG_OPR_NOT_IN_PROGRESS;
- printk("Unable to subscribe to the WDI %s\n", __func__);
- return -1;
+ if (!pl_dev->is_pktlog_cb_subscribed) {
+ error = wdi_pktlog_subscribe(txrx_pdev, log_state);
+ if (error) {
+ pl_info->curr_pkt_state =
+ PKTLOG_OPR_NOT_IN_PROGRESS;
+ qdf_print("Unable to subscribe to the WDI %s\n",
+ __func__);
+ return -EINVAL;
+ }
+ } else {
+ qdf_print("Unable to subscribe %d to the WDI %s\n",
+ log_state, __func__);
+ return -EINVAL;
}
- pl_dev->is_pktlog_cb_subscribed = true;
+
/* WMI command to enable pktlog on the firmware */
if (pktlog_enable_tgt(scn, log_state, ini_triggered,
user_triggered)) {
pl_info->curr_pkt_state = PKTLOG_OPR_NOT_IN_PROGRESS;
- printk("Device cannot be enabled, %s\n", __func__);
+ qdf_print("Device cannot be enabled, %s\n", __func__);
return -1;
}
+ pl_dev->is_pktlog_cb_subscribed = true;
if (is_iwpriv_command == 0)
pl_dev->vendor_cmd_send = true;