Browse Source

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
Balamurugan Mahalingam 7 years ago
parent
commit
f6d3035ec6
1 changed files with 4 additions and 3 deletions
  1. 4 3
      hif/src/ce/ce_main.c

+ 4 - 3
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);
 		}
 	}