summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJingxiang Ge <jge@codeaurora.org>2017-12-20 18:47:53 +0800
committersnandini <snandini@codeaurora.org>2017-12-22 00:44:44 -0800
commit203a0ac1b9946da437ed98da3d1f7727fbb4b9fb (patch)
treeabd5dae135417b6b880ae12fcff21a4faa3ca76d
parentd17a621afa905d2ff58fdcc8858cf21ca18cf994 (diff)
qcacld-3.0: Reduce excessive logging in ol_txrx_offld_flush
In some case, cds messages to be allocated for cds_ol_rx_thread is exhausted, excessive logging in dmesg will cause watchdog. Reduce logging and try to wakeup rx thread. Change-Id: I9f185298a2aced1618312f5ce0fb93eb33ff6130 CRs-Fixed: 2161574
-rw-r--r--core/cds/inc/cds_sched.h23
-rw-r--r--core/cds/src/cds_sched.c15
-rw-r--r--core/dp/txrx/ol_txrx.c6
3 files changed, 42 insertions, 2 deletions
diff --git a/core/cds/inc/cds_sched.h b/core/cds/inc/cds_sched.h
index 743db60492a1..e84d0c9bbc27 100644
--- a/core/cds/inc/cds_sched.h
+++ b/core/cds/inc/cds_sched.h
@@ -376,6 +376,16 @@ void cds_drop_rxpkt_by_staid(p_cds_sched_context pSchedContext, uint16_t staId);
void cds_indicate_rxpkt(p_cds_sched_context pSchedContext,
struct cds_ol_rx_pkt *pkt);
+/**
+ * cds_wakeup_rx_thread() - wakeup rx thread
+ * @Arg: Pointer to the global CDS Sched Context
+ *
+ * This api wake up cds_ol_rx_thread() to process pkt
+ *
+ * Return: none
+ */
+void cds_wakeup_rx_thread(p_cds_sched_context pSchedContext);
+
/*---------------------------------------------------------------------------
\brief cds_alloc_ol_rx_pkt() - API to return next available cds message
The \a cds_alloc_ol_rx_pkt() returns next available cds message buffer
@@ -440,6 +450,19 @@ void cds_indicate_rxpkt(p_cds_sched_context pSchedContext,
}
/**
+ * cds_wakeup_rx_thread() - wakeup rx thread
+ * @Arg: Pointer to the global CDS Sched Context
+ *
+ * This api wake up cds_ol_rx_thread() to process pkt
+ *
+ * Return: none
+ */
+static inline
+void cds_wakeup_rx_thread(p_cds_sched_context pSchedContext)
+{
+}
+
+/**
* cds_alloc_ol_rx_pkt() - API to return next available cds message
* @pSchedContext: pointer to CDS Sched Context
*
diff --git a/core/cds/src/cds_sched.c b/core/cds/src/cds_sched.c
index 57de9809cb9e..65c74d4522b4 100644
--- a/core/cds/src/cds_sched.c
+++ b/core/cds/src/cds_sched.c
@@ -1054,6 +1054,21 @@ cds_indicate_rxpkt(p_cds_sched_context pSchedContext,
}
/**
+ * cds_wakeup_rx_thread() - wakeup rx thread
+ * @Arg: Pointer to the global CDS Sched Context
+ *
+ * This api wake up cds_ol_rx_thread() to process pkt
+ *
+ * Return: none
+ */
+void
+cds_wakeup_rx_thread(p_cds_sched_context pSchedContext)
+{
+ set_bit(RX_POST_EVENT, &pSchedContext->ol_rx_event_flag);
+ wake_up_interruptible(&pSchedContext->ol_rx_wait_queue);
+}
+
+/**
* cds_drop_rxpkt_by_staid() - api to drop pending rx packets for a sta
* @pSchedContext: Pointer to the global CDS Sched Context
* @staId: Station Id
diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c
index 72d54b0c1d0d..7593d6e22ceb 100644
--- a/core/dp/txrx/ol_txrx.c
+++ b/core/dp/txrx/ol_txrx.c
@@ -5380,8 +5380,10 @@ static void ol_txrx_offld_flush(void *data)
} else {
pkt = cds_alloc_ol_rx_pkt(sched_ctx);
if (qdf_unlikely(!pkt)) {
- QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
- "%s: Not able to allocate context", __func__);
+ QDF_TRACE_RATE_LIMITED(128, QDF_MODULE_ID_TXRX,
+ QDF_TRACE_LEVEL_ERROR,
+ "%s: Not able to allocate context", __func__);
+ cds_wakeup_rx_thread(sched_ctx);
return;
}