diff --git a/scheduler/src/scheduler_core.c b/scheduler/src/scheduler_core.c index fca63056470f..a9412c74385a 100644 --- a/scheduler/src/scheduler_core.c +++ b/scheduler/src/scheduler_core.c @@ -116,6 +116,7 @@ static void scheduler_mq_deinit(struct scheduler_mq_type *msg_q) } static qdf_atomic_t __sched_queue_depth; +static qdf_atomic_t __sched_dup_fail_count; static QDF_STATUS scheduler_all_queues_init(struct scheduler_ctx *sched_ctx) { @@ -247,10 +248,15 @@ struct scheduler_msg *scheduler_core_msg_dup(struct scheduler_msg *msg) qdf_mem_copy(dup, msg, sizeof(*dup)); + qdf_atomic_set(&__sched_dup_fail_count, 0); + return dup; buffer_full: - QDF_DEBUG_PANIC("Scheduler buffer is full"); + if (qdf_atomic_inc_return(&__sched_dup_fail_count) > + SCHEDULER_WRAPPER_MAX_FAIL_COUNT) + QDF_DEBUG_PANIC("Scheduler buffer is full"); + dec_queue_count: qdf_atomic_dec(&__sched_queue_depth);