qcacmn: AID manager fixes for MBSSID vaps
1) Do not free Tx VAP's AID manager, if AID manager of non-Tx vap and Tx vap doesn't match 2) Do not allocate AID manager for MLD vaps, if AID manager is already allocated Change-Id: I08b19397540f364503eaa1c269c6d0679a9a9fc0 CRs-Fixed: 3212368
This commit is contained in:

committed by
Madan Koyyalamudi

parent
ddad8e0543
commit
34c16f4118
@@ -857,6 +857,12 @@ QDF_STATUS wlan_mlo_vdev_deinit_mbss_aid_mgr(struct wlan_mlo_dev_context *mldev,
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (aid_mgr != txvdev_aid_mgr) {
|
||||||
|
mlo_err("AID mgr of VDEV%d and tx vdev(%d) aid mgr doesn't match",
|
||||||
|
wlan_vdev_get_id(vdev), wlan_vdev_get_id(tx_vdev));
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
|
for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
|
||||||
vdev_iter = mldev->wlan_vdev_list[i];
|
vdev_iter = mldev->wlan_vdev_list[i];
|
||||||
if (!vdev_iter)
|
if (!vdev_iter)
|
||||||
@@ -936,6 +942,12 @@ QDF_STATUS wlan_mlme_vdev_deinit_mbss_aid_mgr(struct wlan_objmgr_vdev *vdev,
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (aid_mgr != txvdev_aid_mgr) {
|
||||||
|
mlo_err("AID mgr of VDEV%d and tx vdev(%d) aid mgr doesn't match",
|
||||||
|
wlan_vdev_get_id(vdev), wlan_vdev_get_id(tx_vdev));
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
aid_mgr = wlan_vdev_aid_mgr_init(txvdev_aid_mgr->max_aid);
|
aid_mgr = wlan_vdev_aid_mgr_init(txvdev_aid_mgr->max_aid);
|
||||||
if (!aid_mgr) {
|
if (!aid_mgr) {
|
||||||
mlo_err("AID bitmap allocation failed for VDEV%d",
|
mlo_err("AID bitmap allocation failed for VDEV%d",
|
||||||
@@ -960,6 +972,7 @@ QDF_STATUS wlan_mlo_vdev_alloc_aid_mgr(struct wlan_mlo_dev_context *ml_dev,
|
|||||||
uint8_t i;
|
uint8_t i;
|
||||||
struct wlan_objmgr_vdev *vdev_iter;
|
struct wlan_objmgr_vdev *vdev_iter;
|
||||||
struct wlan_ml_vdev_aid_mgr *ml_aidmgr;
|
struct wlan_ml_vdev_aid_mgr *ml_aidmgr;
|
||||||
|
struct wlan_vdev_aid_mgr *aid_mgr = NULL;
|
||||||
uint16_t max_aid = WLAN_UMAC_MAX_AID;
|
uint16_t max_aid = WLAN_UMAC_MAX_AID;
|
||||||
|
|
||||||
if (!ml_dev->ap_ctx) {
|
if (!ml_dev->ap_ctx) {
|
||||||
@@ -981,13 +994,20 @@ QDF_STATUS wlan_mlo_vdev_alloc_aid_mgr(struct wlan_mlo_dev_context *ml_dev,
|
|||||||
if (vdev != vdev_iter)
|
if (vdev != vdev_iter)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ml_aidmgr->aid_mgr[i] = wlan_vdev_aid_mgr_init(max_aid);
|
/* if it is already allocated, assign it to ML AID mgr */
|
||||||
if (!ml_aidmgr->aid_mgr[i]) {
|
aid_mgr = wlan_vdev_mlme_get_aid_mgr(vdev);
|
||||||
mlo_err("AID bitmap allocation failed for VDEV%d",
|
if (!aid_mgr) {
|
||||||
wlan_vdev_get_id(vdev));
|
aid_mgr = wlan_vdev_aid_mgr_init(max_aid);
|
||||||
return QDF_STATUS_E_NOMEM;
|
if (aid_mgr) {
|
||||||
|
wlan_vdev_mlme_set_aid_mgr(vdev, aid_mgr);
|
||||||
|
} else {
|
||||||
|
mlo_err("AID bitmap allocation failed for VDEV%d",
|
||||||
|
wlan_vdev_get_id(vdev));
|
||||||
|
return QDF_STATUS_E_NOMEM;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
wlan_vdev_mlme_set_aid_mgr(vdev, ml_aidmgr->aid_mgr[i]);
|
|
||||||
|
ml_aidmgr->aid_mgr[i] = aid_mgr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1022,6 +1042,7 @@ QDF_STATUS wlan_mlo_vdev_free_aid_mgr(struct wlan_mlo_dev_context *ml_dev,
|
|||||||
|
|
||||||
wlan_vdev_aid_mgr_free(ml_aidmgr->aid_mgr[i]);
|
wlan_vdev_aid_mgr_free(ml_aidmgr->aid_mgr[i]);
|
||||||
ml_aidmgr->aid_mgr[i] = NULL;
|
ml_aidmgr->aid_mgr[i] = NULL;
|
||||||
|
wlan_vdev_mlme_set_aid_mgr(vdev, NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user