qcacld-3.0: Send vdev delete to firmware incase of mlme component failure
Incase of MLME component failure post vdev create the vdev_id is freed up without sending the vdev delete to the firmware, in this specific case of the issue post vdev create to firmware a dp vdev attach failed because of memory allocation failure. Send vdev delete to firmware incase of mlme component failure post vdev create. Change-Id: Ib5bf2a2a7f77a44a80b76bd7a243f2c286a19f8b CRs-Fixed: 3623511
This commit is contained in:

committed by
Rahul Choudhary

parent
90ccb561d3
commit
2ea2d30798
@@ -1598,62 +1598,6 @@ static void mlme_ext_handler_destroy(struct vdev_mlme_obj *vdev_mlme)
|
|||||||
qdf_mem_free(vdev_mlme->ext_vdev_ptr);
|
qdf_mem_free(vdev_mlme->ext_vdev_ptr);
|
||||||
vdev_mlme->ext_vdev_ptr = NULL;
|
vdev_mlme->ext_vdev_ptr = NULL;
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* vdevmgr_mlme_ext_hdl_create () - Create mlme legacy priv object
|
|
||||||
* @vdev_mlme: vdev mlme object
|
|
||||||
*
|
|
||||||
* Return: QDF_STATUS
|
|
||||||
*/
|
|
||||||
static
|
|
||||||
QDF_STATUS vdevmgr_mlme_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
|
|
||||||
{
|
|
||||||
QDF_STATUS status;
|
|
||||||
|
|
||||||
mlme_legacy_debug("vdev id = %d ",
|
|
||||||
vdev_mlme->vdev->vdev_objmgr.vdev_id);
|
|
||||||
vdev_mlme->ext_vdev_ptr =
|
|
||||||
qdf_mem_malloc(sizeof(struct mlme_legacy_priv));
|
|
||||||
if (!vdev_mlme->ext_vdev_ptr)
|
|
||||||
return QDF_STATUS_E_NOMEM;
|
|
||||||
|
|
||||||
mlme_init_rate_config(vdev_mlme);
|
|
||||||
mlme_init_connect_chan_info_config(vdev_mlme);
|
|
||||||
mlme_cm_alloc_roam_stats_info(vdev_mlme);
|
|
||||||
vdev_mlme->ext_vdev_ptr->connect_info.fils_con_info = NULL;
|
|
||||||
mlme_init_wait_for_key_timer(vdev_mlme->vdev,
|
|
||||||
&vdev_mlme->ext_vdev_ptr->wait_key_timer);
|
|
||||||
|
|
||||||
qdf_wake_lock_create(
|
|
||||||
&vdev_mlme->ext_vdev_ptr->bss_color_change_wakelock,
|
|
||||||
"bss_color_change_wakelock");
|
|
||||||
qdf_runtime_lock_init(
|
|
||||||
&vdev_mlme->ext_vdev_ptr->bss_color_change_runtime_lock);
|
|
||||||
qdf_runtime_lock_init(
|
|
||||||
&vdev_mlme->ext_vdev_ptr->disconnect_runtime_lock);
|
|
||||||
|
|
||||||
sme_get_vdev_type_nss(wlan_vdev_mlme_get_opmode(vdev_mlme->vdev),
|
|
||||||
&vdev_mlme->proto.generic.nss_2g,
|
|
||||||
&vdev_mlme->proto.generic.nss_5g);
|
|
||||||
|
|
||||||
status = mlme_get_vdev_types(wlan_vdev_mlme_get_opmode(vdev_mlme->vdev),
|
|
||||||
&vdev_mlme->mgmt.generic.type,
|
|
||||||
&vdev_mlme->mgmt.generic.subtype);
|
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
|
||||||
mlme_err("Get vdev type failed; status:%d", status);
|
|
||||||
mlme_ext_handler_destroy(vdev_mlme);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = vdev_mgr_create_send(vdev_mlme);
|
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
|
||||||
mlme_err("Failed to create vdev for vdev id %d",
|
|
||||||
wlan_vdev_get_id(vdev_mlme->vdev));
|
|
||||||
mlme_ext_handler_destroy(vdev_mlme);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
static QDF_STATUS
|
static QDF_STATUS
|
||||||
mlme_wma_vdev_detach_post_cb(struct scheduler_msg *msg)
|
mlme_wma_vdev_detach_post_cb(struct scheduler_msg *msg)
|
||||||
@@ -1718,6 +1662,63 @@ QDF_STATUS vdevmgr_mlme_ext_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vdevmgr_mlme_ext_hdl_create () - Create mlme legacy priv object
|
||||||
|
* @vdev_mlme: vdev mlme object
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static
|
||||||
|
QDF_STATUS vdevmgr_mlme_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
|
||||||
|
{
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
|
mlme_legacy_debug("vdev id = %d ",
|
||||||
|
vdev_mlme->vdev->vdev_objmgr.vdev_id);
|
||||||
|
vdev_mlme->ext_vdev_ptr =
|
||||||
|
qdf_mem_malloc(sizeof(struct mlme_legacy_priv));
|
||||||
|
if (!vdev_mlme->ext_vdev_ptr)
|
||||||
|
return QDF_STATUS_E_NOMEM;
|
||||||
|
|
||||||
|
mlme_init_rate_config(vdev_mlme);
|
||||||
|
mlme_init_connect_chan_info_config(vdev_mlme);
|
||||||
|
mlme_cm_alloc_roam_stats_info(vdev_mlme);
|
||||||
|
vdev_mlme->ext_vdev_ptr->connect_info.fils_con_info = NULL;
|
||||||
|
mlme_init_wait_for_key_timer(vdev_mlme->vdev,
|
||||||
|
&vdev_mlme->ext_vdev_ptr->wait_key_timer);
|
||||||
|
|
||||||
|
qdf_wake_lock_create(
|
||||||
|
&vdev_mlme->ext_vdev_ptr->bss_color_change_wakelock,
|
||||||
|
"bss_color_change_wakelock");
|
||||||
|
qdf_runtime_lock_init(
|
||||||
|
&vdev_mlme->ext_vdev_ptr->bss_color_change_runtime_lock);
|
||||||
|
qdf_runtime_lock_init(
|
||||||
|
&vdev_mlme->ext_vdev_ptr->disconnect_runtime_lock);
|
||||||
|
|
||||||
|
sme_get_vdev_type_nss(wlan_vdev_mlme_get_opmode(vdev_mlme->vdev),
|
||||||
|
&vdev_mlme->proto.generic.nss_2g,
|
||||||
|
&vdev_mlme->proto.generic.nss_5g);
|
||||||
|
|
||||||
|
status = mlme_get_vdev_types(wlan_vdev_mlme_get_opmode(vdev_mlme->vdev),
|
||||||
|
&vdev_mlme->mgmt.generic.type,
|
||||||
|
&vdev_mlme->mgmt.generic.subtype);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
mlme_err("Get vdev type failed; status:%d", status);
|
||||||
|
mlme_ext_handler_destroy(vdev_mlme);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = vdev_mgr_create_send(vdev_mlme);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
mlme_err("Failed to create vdev for vdev id %d",
|
||||||
|
wlan_vdev_get_id(vdev_mlme->vdev));
|
||||||
|
vdevmgr_mlme_ext_hdl_destroy(vdev_mlme);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
|
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
|
||||||
static
|
static
|
||||||
QDF_STATUS vdevmgr_mlme_vdev_send_set_mac_addr(struct qdf_mac_addr mac_addr,
|
QDF_STATUS vdevmgr_mlme_vdev_send_set_mac_addr(struct qdf_mac_addr mac_addr,
|
||||||
|
Reference in New Issue
Block a user