Procházet zdrojové kódy

qcacmn: Donot deinit timer if it expired

Do not deinit timer if it has expired since expired timers are
automatically removed from timer list. Only deiniit and delete timer
if it is still running and FW response has been received

Change-Id: I0eb839ba152a20d9da37e1249aa0e4c0543eb494
Nandha Kishore Easwaran před 5 roky
rodič
revize
f5bf6a10e8

+ 12 - 7
target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c

@@ -70,13 +70,18 @@ target_if_vdev_mgr_rsp_timer_stop(struct wlan_objmgr_psoc *psoc,
 		 * This is triggered from timer expiry case only for
 		 * which timer stop is not required
 		 */
-		if (vdev_rsp->timer_status != QDF_STATUS_E_TIMEOUT)
-			qdf_timer_stop(&vdev_rsp->rsp_timer);
-
-		vdev_rsp->timer_status = QDF_STATUS_SUCCESS;
-		if (clear_bit == DELETE_RESPONSE_BIT)
-			txops->psoc_vdev_rsp_timer_deinit(psoc,
-							  vdev_rsp->vdev_id);
+		if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT) {
+			qdf_atomic_set(&vdev_rsp->rsp_timer_inuse, 0);
+			vdev_rsp->psoc = NULL;
+		} else {
+			vdev_rsp->timer_status = QDF_STATUS_SUCCESS;
+			if (clear_bit == DELETE_RESPONSE_BIT) {
+				txops->psoc_vdev_rsp_timer_deinit(psoc,
+								  vdev_rsp->vdev_id);
+			} else {
+				qdf_timer_stop(&vdev_rsp->rsp_timer);
+			}
+		}
 
 		/*
 		 * Releasing reference taken at the time of