qcacld-3.0: Fix assert for MLO AP channel switch

When MLO AP start, lim_create_peer_idxpool_legacy isn't called, so
gpLimPeerIdxpool in pe session keeps NULL. When AP do channel switch,
MLO concurrency check failed for current AP not ignored, AP MLO flag is
cleared. When Ref sta disconnect, access gpLimPeerIdxpool to free peer
id, assert happens.

To fix it, when AP restart, ignore current AP when check MLO concurrency.

Change-Id: I3625dcd4f8c1a5020588311706faa1eb70ae8e9d
CRs-Fixed: 3548564
This commit is contained in:
Jianmin Zhu
2023-07-19 23:12:54 +08:00
committed by Rahul Choudhary
orang tua cc116d9893
melakukan dbbd250f26
4 mengubah file dengan 13 tambahan dan 5 penghapusan

Melihat File

@@ -4911,6 +4911,7 @@ void policy_mgr_handle_link_removal_on_vdev(struct wlan_objmgr_vdev *vdev);
* concurrency combination
* @psoc: PSOC object information
* @is_new_vdev_mlo: Is new vdev a mlo device or not
* @new_vdev_id: new vdev id which need concurrency check
*
* When a new connection is about to come up check if current
* concurrency combination including the new connection is
@@ -4919,7 +4920,8 @@ void policy_mgr_handle_link_removal_on_vdev(struct wlan_objmgr_vdev *vdev);
* Return: True if concurrency is supported, otherwise false.
*/
bool policy_mgr_is_mlo_sap_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
bool is_new_vdev_mlo);
bool is_new_vdev_mlo,
uint8_t new_vdev_id);
/**
* policy_mgr_get_conc_ext_flags() - get extended flags for concurrency check
@@ -5118,7 +5120,8 @@ QDF_STATUS policy_mgr_update_active_mlo_num_links(struct wlan_objmgr_psoc *psoc,
static inline bool policy_mgr_is_mlo_sap_concurrency_allowed(
struct wlan_objmgr_psoc *psoc,
bool is_new_vdev_mlo)
bool is_new_vdev_mlo,
uint8_t new_vdev_id)
{
return true;
}

Melihat File

@@ -6219,7 +6219,8 @@ next:
bool
policy_mgr_is_mlo_sap_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
bool is_new_vdev_mlo)
bool is_new_vdev_mlo,
uint8_t new_vdev_id)
{
struct policy_mgr_psoc_priv_obj *pm_ctx;
uint32_t conn_index;
@@ -6241,6 +6242,8 @@ policy_mgr_is_mlo_sap_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
continue;
vdev_id = pm_conc_connection_list[conn_index].vdev_id;
if (vdev_id == new_vdev_id)
continue;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_POLICY_MGR_ID);
if (!vdev) {