diff options
| author | bings <bings@codeaurora.org> | 2018-05-30 10:15:47 +0800 |
|---|---|---|
| committer | nshrivas <nshrivas@codeaurora.org> | 2018-06-13 10:50:18 -0700 |
| commit | 851cb82fe3601b5db70aaa1d623f78d7b58df4c4 (patch) | |
| tree | 43d6290ae6ba26c414fdc512229c7e4cbb5df13f /core | |
| parent | 67d2db7443b71f1d7a9571e6da5681dbc3e659f5 (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')
| -rw-r--r-- | core/utils/pktlog/pktlog_ac.c | 33 |
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; |
