From f6d3035ec6f3cd838b969ac6d3dce6d3059f0005 Mon Sep 17 00:00:00 2001 From: Balamurugan Mahalingam Date: Wed, 31 Jan 2018 16:17:24 +0530 Subject: [PATCH] qcacmn: Fix race while stopping the ce poll timer Set the timer_inited flag to false bit earlier to stop ce_poll_timeout function from processing CRs-Fixed: 2182979 Change-Id: I91dd257c6beb21e379a4c51e651d835a35ca76ed --- hif/src/ce/ce_main.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c index 483ddf19b9cb..713bb8c748af 100644 --- a/hif/src/ce/ce_main.c +++ b/hif/src/ce/ce_main.c @@ -1461,9 +1461,11 @@ void ce_fini(struct CE_handle *copyeng) struct hif_softc *scn = CE_state->scn; uint32_t desc_size; + bool inited = CE_state->timer_inited; CE_state->state = CE_UNUSED; scn->ce_id_to_state[CE_id] = NULL; - + /* Set the flag to false first to stop processing in ce_poll_timeout */ + CE_state->timer_inited = false; qdf_lro_deinit(CE_state->lro_data); if (CE_state->src_ring) { @@ -1503,8 +1505,7 @@ void ce_fini(struct CE_handle *copyeng) qdf_mem_free(CE_state->dest_ring); /* epping */ - if (CE_state->timer_inited) { - CE_state->timer_inited = false; + if (inited) { qdf_timer_free(&CE_state->poll_timer); } }