qcacld-3.0: cleanup tx-queue during SSR
qcacld-2.0 to qcacld-3.0 propagation During SSR, Host is sending packets to firmware before WMI_READY_EVENT. Fix is to avoid sending tx when logp_in_progress & clean ll-queue packets in shutdown. Change-Id: Ib6b9f4d51f2aa7f85d384831818b45763c702c88 CRs-Fixed: 834887
This commit is contained in:

committed by
Satish Singh

parent
90ff56fb05
commit
869169a4a2
@@ -338,6 +338,14 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
++pAdapter->hdd_stats.hddTxRxStats.txXmitCalled;
|
++pAdapter->hdd_stats.hddTxRxStats.txXmitCalled;
|
||||||
|
if (cds_is_logp_in_progress()) {
|
||||||
|
CDF_TRACE(CDF_MODULE_ID_HDD_DATA, CDF_TRACE_LEVEL_WARN,
|
||||||
|
"LOPG in progress, dropping the packet");
|
||||||
|
++pAdapter->stats.tx_dropped;
|
||||||
|
++pAdapter->hdd_stats.hddTxRxStats.txXmitDropped;
|
||||||
|
kfree_skb(skb);
|
||||||
|
return NETDEV_TX_OK;
|
||||||
|
}
|
||||||
|
|
||||||
if (WLAN_HDD_IBSS == pAdapter->device_mode) {
|
if (WLAN_HDD_IBSS == pAdapter->device_mode) {
|
||||||
struct cdf_mac_addr *pDestMacAddress =
|
struct cdf_mac_addr *pDestMacAddress =
|
||||||
|
@@ -2769,7 +2769,7 @@ CDF_STATUS wma_stop(void *cds_ctx, uint8_t reason)
|
|||||||
{
|
{
|
||||||
tp_wma_handle wma_handle;
|
tp_wma_handle wma_handle;
|
||||||
CDF_STATUS cdf_status = CDF_STATUS_SUCCESS;
|
CDF_STATUS cdf_status = CDF_STATUS_SUCCESS;
|
||||||
|
int i;
|
||||||
wma_handle = cds_get_context(CDF_MODULE_ID_WMA);
|
wma_handle = cds_get_context(CDF_MODULE_ID_WMA);
|
||||||
|
|
||||||
WMA_LOGD("%s: Enter", __func__);
|
WMA_LOGD("%s: Enter", __func__);
|
||||||
@@ -2816,6 +2816,13 @@ CDF_STATUS wma_stop(void *cds_ctx, uint8_t reason)
|
|||||||
#endif /* HIF_USB */
|
#endif /* HIF_USB */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* clean up ll-queue for all vdev */
|
||||||
|
for (i = 0; i < wma_handle->max_bssid; i++) {
|
||||||
|
if (wma_handle->interfaces[i].handle &&
|
||||||
|
wma_handle->interfaces[i].vdev_up) {
|
||||||
|
ol_txrx_vdev_flush(wma_handle->interfaces[i].handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
cdf_status = wma_tx_detach(wma_handle);
|
cdf_status = wma_tx_detach(wma_handle);
|
||||||
if (cdf_status != CDF_STATUS_SUCCESS) {
|
if (cdf_status != CDF_STATUS_SUCCESS) {
|
||||||
WMA_LOGP("%s: Failed to deregister tx management", __func__);
|
WMA_LOGP("%s: Failed to deregister tx management", __func__);
|
||||||
|
Reference in New Issue
Block a user