mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 07:37:31 -04:00
qcacld-3.0: Do recovery/assert on vdev delete/start if bss started
In wma_vdev_detach(), ignore vdev delete request at present if it is received before VDEV_STOP and VDEV_DOWN which results in fw assert on VDEV_START as no VDEV_DELETE is present before VDEV_START on the same vdev. Do cds recovery or assert on vdev deletion or on vdev start if BSS is already in started state and no VDEV_STOP is queued in the queue. Change-Id: I273e6240840e7a0a54c2d7ad3de12c8a30d42a18 CRs-Fixed: 2164701
This commit is contained in:
parent
a79c676daf
commit
fc4dab9c75
1 changed files with 34 additions and 3 deletions
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||
*
|
||||
|
|
@ -708,8 +708,18 @@ QDF_STATUS wma_vdev_detach(tp_wma_handle wma_handle,
|
|||
return status;
|
||||
|
||||
send_fail_rsp:
|
||||
WMA_LOGE("rcvd del_self_sta without del_bss, send fail rsp, vdev_id %d",
|
||||
vdev_id);
|
||||
if (!cds_is_driver_recovering()) {
|
||||
if (cds_is_self_recovery_enabled()) {
|
||||
WMA_LOGE("rcvd del_self_sta without del_bss, trigger recovery, vdev_id %d",
|
||||
vdev_id);
|
||||
cds_trigger_recovery(QDF_REASON_UNSPECIFIED);
|
||||
} else {
|
||||
WMA_LOGE("rcvd del_self_sta without del_bss, BUG_ON(), vdev_id %d",
|
||||
vdev_id);
|
||||
QDF_BUG(0);
|
||||
}
|
||||
}
|
||||
|
||||
pdel_sta_self_req_param->status = QDF_STATUS_E_FAILURE;
|
||||
wma_send_del_sta_self_resp(pdel_sta_self_req_param);
|
||||
return status;
|
||||
|
|
@ -2349,6 +2359,8 @@ QDF_STATUS wma_vdev_start(tp_wma_handle wma,
|
|||
uint32_t temp_reg_info_1 = 0;
|
||||
uint32_t temp_reg_info_2 = 0;
|
||||
uint16_t bw_val;
|
||||
struct wma_txrx_node *iface = &wma->interfaces[req->vdev_id];
|
||||
struct wma_target_req *req_msg;
|
||||
|
||||
mac_ctx = cds_get_context(QDF_MODULE_ID_PE);
|
||||
if (mac_ctx == NULL) {
|
||||
|
|
@ -2356,6 +2368,25 @@ QDF_STATUS wma_vdev_start(tp_wma_handle wma,
|
|||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (!isRestart &&
|
||||
qdf_atomic_read(&iface->bss_status) == WMA_BSS_STATUS_STARTED) {
|
||||
req_msg = wma_find_vdev_req(wma, req->vdev_id,
|
||||
WMA_TARGET_REQ_TYPE_VDEV_STOP,
|
||||
false);
|
||||
if (!req_msg || req_msg->msg_type != WMA_DELETE_BSS_REQ) {
|
||||
if (!cds_is_driver_recovering()) {
|
||||
if (cds_is_self_recovery_enabled()) {
|
||||
WMA_LOGE("BSS is in started state before vdev start, trigger recovery");
|
||||
cds_trigger_recovery(
|
||||
QDF_REASON_UNSPECIFIED);
|
||||
} else {
|
||||
WMA_LOGE("BSS is in started state before vdev start, BUG_ON()");
|
||||
QDF_BUG(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WMA_LOGD("%s: Enter isRestart=%d vdev=%d", __func__, isRestart,
|
||||
req->vdev_id);
|
||||
params.vdev_id = req->vdev_id;
|
||||
|
|
|
|||
Loading…
Reference in a new issue