qcacld-3.0: Don't send peer update after peer delete

During tdls peer delete, wmi command WMI_PEER_DELETE has been
send but later on from driver wmi command for peer update is
send without checking for peer reference before sending to fw.

Fix, to check for peer reference before posting the cmd to fw.

change-ID: I216d1ad726af3369c227ae566e22949cadb8300c
CRs-Fixed: 2667811
This commit is contained in:
Pankaj Singh
2020-04-23 21:05:28 +05:30
committed by nshrivas
parent b59cdd31cd
commit 8e2e7b47a3
6 changed files with 39 additions and 7 deletions

View File

@@ -490,8 +490,11 @@ static QDF_STATUS tdls_activate_add_peer(struct tdls_add_peer_request *req)
TDLS_LINK_CONNECTING, TDLS_LINK_SUCCESS);
status = tdls_pe_add_peer(req);
if (QDF_IS_STATUS_ERROR(status))
if (QDF_IS_STATUS_ERROR(status)) {
tdls_err(QDF_MAC_ADDR_STR " add peer failed with status %d",
QDF_MAC_ADDR_ARRAY(mac), status);
goto setlink;
}
return QDF_STATUS_SUCCESS;
@@ -950,8 +953,11 @@ tdls_activate_update_peer(struct tdls_update_peer_request *req)
tdls_set_peer_caps(vdev_obj, mac, &req->update_peer_req);
status = tdls_pe_update_peer(req);
if (QDF_IS_STATUS_ERROR(status))
if (QDF_IS_STATUS_ERROR(status)) {
tdls_err(QDF_MAC_ADDR_STR " update peer failed with status %d",
QDF_MAC_ADDR_ARRAY(mac), status);
goto setlink;
}
return QDF_STATUS_SUCCESS;
@@ -1182,6 +1188,13 @@ QDF_STATUS tdls_process_del_peer(struct tdls_oper_request *req)
goto error;
}
if (!peer->valid_entry) {
tdls_err("invalid peer:" QDF_MAC_ADDR_STR " link state %d",
QDF_MAC_ADDR_ARRAY(mac), peer->link_status);
status = QDF_STATUS_E_INVAL;
goto error;
}
if (soc_obj->tdls_dp_vdev_update)
soc_obj->tdls_dp_vdev_update(&soc_obj->soc,
wlan_vdev_get_id(vdev),

View File

@@ -522,8 +522,12 @@ void tdls_indicate_teardown(struct tdls_vdev_priv_obj *tdls_vdev,
return;
}
if (TDLS_LINK_CONNECTED != curr_peer->link_status)
if (curr_peer->link_status != TDLS_LINK_CONNECTED) {
tdls_err("link state %d peer:" QDF_MAC_ADDR_STR,
curr_peer->link_status,
QDF_MAC_ADDR_ARRAY(curr_peer->peer_mac.bytes));
return;
}
tdls_set_peer_link_status(curr_peer,
TDLS_LINK_TEARING,

View File

@@ -613,6 +613,9 @@ void tdls_set_peer_link_status(struct tdls_peer *peer,
struct tdls_soc_priv_obj *soc_obj;
struct tdls_vdev_priv_obj *vdev_obj;
tdls_debug("state %d reason %d peer:" QDF_MAC_ADDR_STR,
link_status, link_reason,
QDF_MAC_ADDR_ARRAY(peer->peer_mac.bytes));
peer->link_status = link_status;
if (link_status >= TDLS_LINK_DISCOVERED)