qcacmn: Reset vdev_resp->timer_status to properly handle timers
The vdev_resp timer status is a persistent variable that is not reset after a cycle of send/timeout is completed. This causes the old value to induce faulty behavior for the next cycle. For example in the case when vdev_start response is dropped, the timer status is set to TIMEDOUT and this status remains as such for the next time vdev_start response is received successfully. In this case, instead of deleting the timer, as the status is a faulty TIMEOUT - no action is taken. This causes the kernel to assert. To resolve the above issue, reset the vdev_resp->timer_status after stopping the timer. Change-Id: I8632c117753a7bb1f041d00c4d9395163732f5d9 CRs-Fixed: 2654040
This commit is contained in:

committed by
nshrivas

parent
8abdbcc616
commit
1929eefb7f
@@ -76,7 +76,6 @@ target_if_vdev_mgr_rsp_timer_stop(struct wlan_objmgr_psoc *psoc,
|
||||
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);
|
||||
@@ -85,6 +84,12 @@ target_if_vdev_mgr_rsp_timer_stop(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset the timer_status to clear any error state. As this
|
||||
* variable is persistent, any leftover error status can cause
|
||||
* undesirable effects.
|
||||
*/
|
||||
vdev_rsp->timer_status = QDF_STATUS_SUCCESS;
|
||||
/*
|
||||
* Releasing reference taken at the time of
|
||||
* starting response timer
|
||||
|
Reference in New Issue
Block a user