qcacld-3.0: Decrease tx drain wait time during del bss
wma_delete_bss is stuck for more than 400ms in failure scenario due to pending tx packets to drain. -Decrease the wait time to 20ms(2ms*max_wait_iterations) to avoid the delete bss stuck issue. -Tx drain wait feature added for LFR2.0 feature so moved the code under the LFR2.0 macro. Change-Id: I33b56bb627ac914ca6fe96949de373b015853fc9 CRs-Fixed: 2097269
This commit is contained in:

committed by
snandini

parent
aca7fc9ece
commit
f22263c8e0
@@ -4928,6 +4928,44 @@ fail_del_bss_ho_fail:
|
|||||||
(void *)params, 0);
|
(void *)params, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||||
|
/**
|
||||||
|
* wma_wait_tx_complete() - Wait till tx packets are drained
|
||||||
|
* @wma: wma handle
|
||||||
|
* @session_id: vdev id
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static void wma_wait_tx_complete(tp_wma_handle wma,
|
||||||
|
uint32_t session_id)
|
||||||
|
{
|
||||||
|
struct cdp_pdev *pdev;
|
||||||
|
uint8_t max_wait_iterations = 0;
|
||||||
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
|
|
||||||
|
if (!wma->interfaces[session_id].is_vdev_valid) {
|
||||||
|
WMA_LOGE("%s: Vdev is not valid: %d",
|
||||||
|
__func__, session_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||||
|
max_wait_iterations =
|
||||||
|
wma->interfaces[session_id].delay_before_vdev_stop /
|
||||||
|
WMA_TX_Q_RECHECK_TIMER_WAIT;
|
||||||
|
|
||||||
|
while (cdp_get_tx_pending(soc, pdev) && max_wait_iterations) {
|
||||||
|
WMA_LOGW(FL("Waiting for outstanding packet to drain."));
|
||||||
|
qdf_wait_single_event(&wma->tx_queue_empty_event,
|
||||||
|
WMA_TX_Q_RECHECK_TIMER_WAIT);
|
||||||
|
max_wait_iterations--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static void wma_wait_tx_complete(tp_wma_handle wma)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
* wma_delete_bss() - process delete bss request from upper layer
|
* wma_delete_bss() - process delete bss request from upper layer
|
||||||
* @wma: wma handle
|
* @wma: wma handle
|
||||||
@@ -4942,7 +4980,6 @@ void wma_delete_bss(tp_wma_handle wma, tpDeleteBssParams params)
|
|||||||
struct wma_target_req *msg;
|
struct wma_target_req *msg;
|
||||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
uint8_t peer_id;
|
uint8_t peer_id;
|
||||||
uint8_t max_wait_iterations = 0;
|
|
||||||
struct cdp_vdev *txrx_vdev = NULL;
|
struct cdp_vdev *txrx_vdev = NULL;
|
||||||
bool roam_synch_in_progress = false;
|
bool roam_synch_in_progress = false;
|
||||||
struct wma_txrx_node *iface;
|
struct wma_txrx_node *iface;
|
||||||
@@ -5028,17 +5065,7 @@ void wma_delete_bss(tp_wma_handle wma, tpDeleteBssParams params)
|
|||||||
|
|
||||||
WMA_LOGW(FL("Outstanding msdu packets: %d"),
|
WMA_LOGW(FL("Outstanding msdu packets: %d"),
|
||||||
cdp_get_tx_pending(soc, pdev));
|
cdp_get_tx_pending(soc, pdev));
|
||||||
|
wma_wait_tx_complete(wma, params->smesessionId);
|
||||||
max_wait_iterations =
|
|
||||||
wma->interfaces[params->smesessionId].delay_before_vdev_stop /
|
|
||||||
WMA_TX_Q_RECHECK_TIMER_WAIT;
|
|
||||||
|
|
||||||
while (cdp_get_tx_pending(soc, pdev) && max_wait_iterations) {
|
|
||||||
WMA_LOGW(FL("Waiting for outstanding packet to drain."));
|
|
||||||
qdf_wait_single_event(&wma->tx_queue_empty_event,
|
|
||||||
WMA_TX_Q_RECHECK_TIMER_MAX_WAIT);
|
|
||||||
max_wait_iterations--;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cdp_get_tx_pending(soc, pdev)) {
|
if (cdp_get_tx_pending(soc, pdev)) {
|
||||||
WMA_LOGW(FL("Outstanding msdu packets before VDEV_STOP : %d"),
|
WMA_LOGW(FL("Outstanding msdu packets before VDEV_STOP : %d"),
|
||||||
|
Reference in New Issue
Block a user