From eb5dc5bd68806f9fd5b547ccb99f05df3b4ba8bb Mon Sep 17 00:00:00 2001 From: Zhang Qian Date: Wed, 9 May 2018 11:04:43 +0800 Subject: [PATCH] qcacmn: Add timeout for BMI message exchange qcacld-2.0 to qcacmn propagation Currently there is no timeout for BMI message exchange. If HW interface is stuck, kernel thread for driver loading will be blocked. Change-Id: Ia7039f2939cf39af605a8ebec3278c5e1685bfbe CRs-Fixed: 2228298 --- hif/src/ce/ce_bmi.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/hif/src/ce/ce_bmi.c b/hif/src/ce/ce_bmi.c index 368ba747a9dc..49004bd2503d 100644 --- a/hif/src/ce/ce_bmi.c +++ b/hif/src/ce/ce_bmi.c @@ -115,6 +115,9 @@ void hif_bmi_recv_data(struct CE_handle *copyeng, void *ce_context, } #endif +/* Timeout for BMI message exchange */ +#define HIF_EXCHANGE_BMI_MSG_TIMEOUT 6000 + QDF_STATUS hif_exchange_bmi_msg(struct hif_opaque_softc *hif_ctx, qdf_dma_addr_t bmi_cmd_da, qdf_dma_addr_t bmi_rsp_da, @@ -216,9 +219,13 @@ QDF_STATUS hif_exchange_bmi_msg(struct hif_opaque_softc *hif_ctx, /* Always just wait for BMI request here if * BMI_RSP_POLLING is defined */ - while (qdf_semaphore_acquire - (&transaction->bmi_transaction_sem)) { - /*need some break out condition(time out?) */ + if (qdf_semaphore_acquire_timeout + (&transaction->bmi_transaction_sem, + HIF_EXCHANGE_BMI_MSG_TIMEOUT)) { + HIF_ERROR("%s: Fatal error, BMI transaction timeout. Please check the HW interface!!", + __func__); + qdf_mem_free(transaction); + return QDF_STATUS_E_TIMEOUT; } if (bmi_response) {