summaryrefslogtreecommitdiff
path: root/scheduler
diff options
context:
space:
mode:
authorKrunal Soni <ksoni@codeaurora.org>2017-04-18 15:12:57 -0700
committersnandini <snandini@codeaurora.org>2017-05-03 03:06:33 -0700
commit1880b6f8a675c590edffcb45336d9c900c223ec3 (patch)
tree17b4198eeef74d0274d8d03efd78d05d71b493d1 /scheduler
parent5899b0a3da3d265fff928e8193ea9b403ed49c82 (diff)
downloadqca-wfi-host-cmn-1880b6f8a675c590edffcb45336d9c900c223ec3.tar.gz
qcacmn: Change init-deinit sequence of scheduler & call flush callback
Provide fix such a way that scheduler's initialization happens at the end after all components' initialization gets done. Same-way scheduler's deinitiazation happens very first before other component's deinit gets started. scheduler also need to call component's provided callback to notify that component while flushing component's message queue. CRs-Fixed: 2034772 Change-Id: I2c46bf9e68b93ecbc2ce9659d56de2887573411e
Diffstat (limited to 'scheduler')
-rw-r--r--scheduler/src/scheduler_core.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/scheduler/src/scheduler_core.c b/scheduler/src/scheduler_core.c
index e789b2ac4..ce0966931 100644
--- a/scheduler/src/scheduler_core.c
+++ b/scheduler/src/scheduler_core.c
@@ -423,6 +423,7 @@ int scheduler_thread(void *arg)
void scheduler_cleanup_queues(struct scheduler_ctx *sch_ctx, int idx)
{
struct scheduler_msg_wrapper *msg_wrapper = NULL;
+ QDF_STATUS (*scheduler_flush_callback) (struct scheduler_msg *);
if (!sch_ctx) {
QDF_ASSERT(0);
@@ -437,9 +438,22 @@ void scheduler_cleanup_queues(struct scheduler_ctx *sch_ctx, int idx)
QDF_TRACE(QDF_MODULE_ID_SCHEDULER, QDF_TRACE_LEVEL_INFO,
"%s: Freeing MC WMA MSG message type %d",
__func__, msg_wrapper->msg_buf->type);
- if (msg_wrapper->msg_buf->bodyptr)
+ if (msg_wrapper->msg_buf->flush_callback) {
+ QDF_TRACE(QDF_MODULE_ID_SCHEDULER,
+ QDF_TRACE_LEVEL_DEBUG,
+ "%s: Flush callback called for type-%x",
+ __func__, msg_wrapper->msg_buf->type);
+ scheduler_flush_callback =
+ msg_wrapper->msg_buf->flush_callback;
+ scheduler_flush_callback(msg_wrapper->msg_buf);
+ } else if (msg_wrapper->msg_buf->bodyptr) {
+ QDF_TRACE(QDF_MODULE_ID_SCHEDULER,
+ QDF_TRACE_LEVEL_DEBUG,
+ "%s: noflush cb given for type-%x",
+ __func__, msg_wrapper->msg_buf->type);
qdf_mem_free(
(void *)msg_wrapper->msg_buf->bodyptr);
+ }
msg_wrapper->msg_buf->bodyptr = NULL;
msg_wrapper->msg_buf->bodyval = 0;
msg_wrapper->msg_buf->type = 0;