From e1a802fec6a9f10c3bcff768ea8e96649f3efcee Mon Sep 17 00:00:00 2001 From: Kabilan Kannan Date: Wed, 3 Jan 2018 10:28:50 -0800 Subject: qcacld-3.0: Do not BUG_ON, when recovery is started by FW assert Host driver should avoid BUG_ON, when recovery is in progress due to firmware assert. Change the sequence in cds trigger recovery function to avoid BUG_ON Change-Id: Ibcce592caf4c4099a9cf3e124c5d2b70134116a3 CRs-Fixed: 2165972 --- core/cds/src/cds_api.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 3a56b7f19fc7..a0b173bd57cd 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -1874,14 +1874,24 @@ static void cds_trigger_recovery_work(void *param) struct qdf_runtime_lock recovery_lock; qdf_device_t qdf_ctx; - if (!cds_is_self_recovery_enabled()) { - cds_err("Recovery is not enabled"); - QDF_BUG(0); + if (cds_is_driver_recovering()) { + cds_err("Recovery in progress; ignoring recovery trigger"); return; } - if (cds_is_driver_recovering() || cds_is_driver_in_bad_state()) { - cds_err("Recovery in progress; ignoring recovery trigger"); + if (cds_is_driver_in_bad_state()) { + cds_err("Driver is in bad state; ignoring recovery trigger"); + return; + } + + if (cds_is_fw_down()) { + cds_err("firmware is down; ignoring recovery trigger"); + return; + } + + if (!cds_is_self_recovery_enabled()) { + cds_err("Recovery is not enabled"); + QDF_BUG(0); return; } -- cgit v1.2.3