From 7cca7f52ae4c797e51b3d625ff8b8a800254120b Mon Sep 17 00:00:00 2001 From: Jingxiang Ge Date: Thu, 19 Mar 2020 14:58:14 +0800 Subject: [PATCH] qcacld-3.0: Use workqueue for recovery when suspend/resume timeout When suspend/resume timeout, it will trigger recovery, current as it direcly trigger assert to fw, which will take more time to dump ramdump, so DPM WD timer expired. To avoid DPM WD timer expired, trigger ramdump in a separate workqueue, so it will not block DPM WD timer. Change-Id: I1a9349a05a37544329946270065037cd90172fc7 CRs-Fixed: 2645163 --- core/cds/src/cds_api.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 418b81107aa8..5a49095bd8fd 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -1810,6 +1810,8 @@ static void cds_trigger_recovery_work(void *context) void __cds_trigger_recovery(enum qdf_hang_reason reason, const char *func, const uint32_t line) { + bool is_work_queue_needed = false; + if (!gp_cds_context) { cds_err("gp_cds_context is null"); return; @@ -1817,7 +1819,11 @@ void __cds_trigger_recovery(enum qdf_hang_reason reason, const char *func, gp_cds_context->recovery_reason = reason; - if (in_atomic()) { + if (in_atomic() || + (QDF_RESUME_TIMEOUT == reason || QDF_SUSPEND_TIMEOUT == reason)) + is_work_queue_needed = true; + + if (is_work_queue_needed) { __cds_recovery_caller.func = func; __cds_recovery_caller.line = line; qdf_queue_work(0, gp_cds_context->cds_recovery_wq,