qcacld-3.0: Cleanup SAP interface if start_bss is aborted

Currently, SAP state machine is moved to INIT state when SAP
start is aborted due to timeout or SSR. SAP is not cleaned up
in such cases as eWNI_SME_STOP_BSS_REQ (which further issues
vdev down and cleanup the peers properly) is not sent to
below layers(firmware).

Replace qdf_wait_for_event_completion to
wait_for_completion_timeout in start_bss which will wait
till the normal operation execute irrespective of firmware
state/SSR.

Change-Id: Ifff2ca9658769cb1145f1c5cb278cd7551cb8c00
CRs-Fixed: 3058550
This commit is contained in:
Jyoti Kumari
2021-11-19 18:29:46 +05:30
committed by Madan Koyyalamudi
vanhempi cb29b921c8
commit 1952ff365e
4 muutettua tiedostoa jossa 11 lisäystä ja 12 poistoa

Näytä tiedosto

@@ -6106,7 +6106,7 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
goto error;
}
qdf_status = qdf_wait_for_event_completion(&hostapd_state->qdf_event,
qdf_status = qdf_wait_single_event(&hostapd_state->qdf_event,
SME_CMD_START_BSS_TIMEOUT);
wlansap_reset_sap_config_add_ie(config, eUPDATE_IE_ALL);
@@ -6123,7 +6123,8 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
hdd_set_connection_in_progress(false);
sme_get_command_q_status(mac_handle);
wlansap_stop_bss(WLAN_HDD_GET_SAP_CTX_PTR(adapter));
QDF_ASSERT(0);
if (!cds_is_driver_recovering())
QDF_ASSERT(0);
ret = -EINVAL;
goto error;
}

Näytä tiedosto

@@ -16556,7 +16556,7 @@ void wlan_hdd_start_sap(struct hdd_adapter *ap_adapter, bool reinit)
goto end;
hdd_debug("Waiting for SAP to start");
qdf_status = qdf_wait_for_event_completion(&hostapd_state->qdf_event,
qdf_status = qdf_wait_single_event(&hostapd_state->qdf_event,
SME_CMD_START_BSS_TIMEOUT);
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
hdd_err("SAP Start failed");
@@ -18946,7 +18946,7 @@ void hdd_restart_sap(struct hdd_adapter *ap_adapter)
hdd_info("Waiting for SAP to start");
qdf_status =
qdf_wait_for_event_completion(&hostapd_state->qdf_event,
qdf_wait_single_event(&hostapd_state->qdf_event,
SME_CMD_START_BSS_TIMEOUT);
wlansap_reset_sap_config_add_ie(sap_config,
eUPDATE_IE_ALL);

Näytä tiedosto

@@ -1637,8 +1637,8 @@ static void hdd_restart_sap_with_new_phymode(struct hdd_context *hdd_ctx,
hdd_err("SAP Start Bss fail");
return;
}
status = qdf_wait_for_event_completion(&hostapd_state->qdf_event,
SME_CMD_START_BSS_TIMEOUT);
status = qdf_wait_single_event(&hostapd_state->qdf_event,
SME_CMD_START_BSS_TIMEOUT);
if (!QDF_IS_STATUS_SUCCESS(status)) {
mutex_unlock(&hdd_ctx->sap_lock);
hdd_err("SAP Start timeout");

Näytä tiedosto

@@ -2872,7 +2872,7 @@ static QDF_STATUS sap_fsm_handle_radar_during_cac(struct sap_context *sap_ctx,
}
/**
* sap_fsm_handle_start_failure() - handle start failure or stop during cac wait
* sap_fsm_handle_start_failure() - handle sap start failure
* @sap_ctx: SAP context
* @msg: event msg
* @mac_handle: Opaque handle to the global MAC context
@@ -2885,13 +2885,11 @@ static QDF_STATUS sap_fsm_handle_start_failure(struct sap_context *sap_ctx,
{
QDF_STATUS qdf_status = QDF_STATUS_E_FAILURE;
if (msg == eSAP_HDD_STOP_INFRA_BSS &&
(QDF_IS_STATUS_SUCCESS(wlan_vdev_is_dfs_cac_wait(sap_ctx->vdev)) ||
QDF_IS_STATUS_SUCCESS(
wlan_vdev_is_restart_progress(sap_ctx->vdev)))) {
if (msg == eSAP_HDD_STOP_INFRA_BSS) {
/* Transition from SAP_STARTING to SAP_STOPPING */
sap_debug("In cac wait state from state %s => %s",
sap_debug("SAP start is in progress, state from state %s => %s",
"SAP_STARTING", "SAP_STOPPING");
/*
* Stop the CAC timer only in following conditions
* single AP: if there is a single AP then stop timer