qcacld-3.0: Remove purge_sme_cmd_list API & reset scan ops in SSR case

wlan_serialization_remove_all_cmd_from_queue() is getting called
two times which causes reference count to be decreased two times.
1) 1st time from sme_stop() -> purge_sme_cmd_list()
   -> wlan_serialization_remove_all_cmd_from_queue()
2) 2nd time from wlan_serialization_vdev_obj_destroy_notification()
   -> serialization_purge_cmd_list()
   -> wlan_serialization_remove_all_cmd_from_queue()

1st path has been there for quite a long time as per the old serialization
design but with new serialization design, it won't be required.

Change-Id: Ia8bd91c665340e7f7628ad73af64fa0044b45dde
CRs-Fixed: 2134851
This commit is contained in:
Paul Zhang 2017-11-10 21:18:21 +08:00 • committed by snandini
commit 84fa938931
2 changed files with 27 additions and 10 deletions

View file

@ -4562,6 +4562,32 @@ QDF_STATUS hdd_stop_all_adapters(struct hdd_context *hdd_ctx,
return QDF_STATUS_SUCCESS;
}
static void hdd_reset_scan_operation(struct hdd_context *hdd_ctx,
struct hdd_adapter *adapter)
{
switch (adapter->device_mode) {
case QDF_STA_MODE:
case QDF_P2P_CLIENT_MODE:
case QDF_IBSS_MODE:
case QDF_P2P_DEVICE_MODE:
case QDF_NDI_MODE:
wlan_hdd_scan_abort(adapter);
wlan_hdd_cleanup_remain_on_channel_ctx(adapter);
if (adapter->device_mode == QDF_STA_MODE)
wlan_cfg80211_sched_scan_stop(hdd_ctx->hdd_pdev,
adapter->dev);
break;
case QDF_P2P_GO_MODE:
wlan_hdd_cleanup_remain_on_channel_ctx(adapter);
break;
case QDF_SAP_MODE:
wlan_hdd_undo_acs(adapter);
break;
default:
break;
}
}
QDF_STATUS hdd_reset_all_adapters(struct hdd_context *hdd_ctx)
{
hdd_adapter_list_node_t *adapterNode = NULL, *pNext = NULL;
@ -4603,6 +4629,7 @@ QDF_STATUS hdd_reset_all_adapters(struct hdd_context *hdd_ctx)
WLAN_CONTROL_PATH);
}
hdd_reset_scan_operation(hdd_ctx, adapter);
adapter->session.station.hdd_reassoc_scenario = false;
hdd_deinit_tx_rx(adapter);

View file

@ -346,19 +346,10 @@ void sme_release_command(tpAniSirGlobal mac_ctx, tSmeCmd *sme_cmd)
LL_ACCESS_LOCK);
}
static void purge_sme_cmd_list(tpAniSirGlobal pMac)
{
/* purge all command lists */
sme_debug("Purging all queues");
wlan_serialization_purge_cmd_list(pMac->psoc, NULL,
false, false, false, false, true);
}
static QDF_STATUS free_sme_cmd_list(tpAniSirGlobal pMac)
{
QDF_STATUS status = QDF_STATUS_SUCCESS;
purge_sme_cmd_list(pMac);
csr_ll_close(&pMac->sme.smeCmdFreeList);
status = qdf_mutex_acquire(&pMac->sme.lkSmeGlobalLock);
@ -2570,7 +2561,6 @@ QDF_STATUS sme_stop(tHalHandle hHal, tHalStopType stopType)
sme_err("csr_stop failed with status: %d", status);
fail_status = status;
}
purge_sme_cmd_list(pMac);
if (!QDF_IS_STATUS_SUCCESS(fail_status))
status = fail_status;