qcacmn: Cancel reap timer during driver unload
In case of driver unload, there can be a race condition since the timer for processing monitor status ring can run in parallel to the unload time wow ack response handler, which is also flushing all the monitor status ring entries. To avoid this race condition, stop the monitor reap timer as a part of target suspend, and process all the outstanding entries in the montior status ring. This will make sure that the monitor status ring is processed from only one context at any given time. Change-Id: If61327c73fdddc414b3957b69ae986f2a26bb803 CRs-Fixed: 2677812
This commit is contained in:
@@ -92,4 +92,26 @@ static inline void cdp_process_wow_ack_rsp(ol_txrx_soc_handle soc,
|
||||
return soc->ops->bus_ops->process_wow_ack_rsp(soc, pdev_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* cdp_process_target_suspend_req() - Process target suspend request
|
||||
* @soc: data path soc handle
|
||||
* @pdev_id: id of dp pdev handle
|
||||
*
|
||||
* Complete the datapath specific work before target suspend
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static inline void cdp_process_target_suspend_req(ol_txrx_soc_handle soc,
|
||||
uint8_t pdev_id)
|
||||
{
|
||||
if (!soc || !soc->ops || !soc->ops->bus_ops) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s invalid instance", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (soc->ops->bus_ops->process_target_suspend_req)
|
||||
return soc->ops->bus_ops->process_target_suspend_req(soc,
|
||||
pdev_id);
|
||||
}
|
||||
#endif /* _CDP_TXRX_BUS_H_ */
|
||||
|
Reference in New Issue
Block a user