qcacld-3.0: Update max_vdev_count to psoc objmgr

Currently max_intf_count which report from target only update to hdd
layer, but there might be a race condition if don't update to objmgr:
There are already max_intf_count vdev created, one of the vdev is
closing by supplicant, vdev is logically deleted and referenced by
other function and waiting for cleaning. The interface count of hdd
layer is already decreased to accept opening new adapter, but the
vdev_id which derived from objmgr vdev is still occupied so the new
vdev have to choose max_intf_count as vdev_id, which makes target
assert.

Update max_vdev_count to psoc objmgr in hdd_update_tgt_cfg()

Change-Id: Ifff0b79cfb4645bb466a22da2d7d07040eee2bd0
CRs-Fixed: 2241098
This commit is contained in:
Will Huang 2018-05-14 14:23:30 +08:00 committed by nshrivas
parent eb92e54035
commit 0724417fbf
3 changed files with 26 additions and 0 deletions

View File

@ -1874,6 +1874,8 @@ void hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
}
}
hdd_objmgr_update_tgt_max_vdev_psoc(hdd_ctx, cfg->max_intf_count);
ret = hdd_green_ap_update_config(hdd_ctx);
ucfg_ipa_set_dp_handle(hdd_ctx->hdd_psoc,

View File

@ -116,6 +116,19 @@ int hdd_objmgr_release_and_destroy_psoc(struct hdd_context *hdd_ctx)
return qdf_status_to_os_return(status);
}
void hdd_objmgr_update_tgt_max_vdev_psoc(struct hdd_context *hdd_ctx,
uint8_t max_vdev)
{
struct wlan_objmgr_psoc *psoc = hdd_ctx->hdd_psoc;
if (!psoc) {
hdd_err("Psoc NULL");
return;
}
wlan_psoc_set_max_vdev_count(psoc, max_vdev);
}
int hdd_objmgr_create_and_store_pdev(struct hdd_context *hdd_ctx)
{
QDF_STATUS status;

View File

@ -78,6 +78,17 @@ int hdd_objmgr_create_and_store_psoc(struct hdd_context *hdd_ctx,
*/
int hdd_objmgr_release_and_destroy_psoc(struct hdd_context *hdd_ctx);
/**
* hdd_objmgr_update_tgt_max_vdev_psoc() - Update target max vdev number
* @hdd_ctx: Hdd context
*
* This API update target max vdev number to psoc object
*
* Return: None
*/
void hdd_objmgr_update_tgt_max_vdev_psoc(struct hdd_context *hdd_ctx,
uint8_t max_vdev);
/**
* hdd_objmgr_create_and_store_pdev() - Create pdev and store in hdd context
* @hdd_ctx: Hdd context