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;
|
vdev_rsp->psoc = NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
vdev_rsp->timer_status = QDF_STATUS_SUCCESS;
|
|
||||||
if (clear_bit == DELETE_RESPONSE_BIT) {
|
if (clear_bit == DELETE_RESPONSE_BIT) {
|
||||||
txops->psoc_vdev_rsp_timer_deinit(psoc,
|
txops->psoc_vdev_rsp_timer_deinit(psoc,
|
||||||
vdev_rsp->vdev_id);
|
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
|
* Releasing reference taken at the time of
|
||||||
* starting response timer
|
* starting response timer
|
||||||
|
Reference in New Issue
Block a user