Browse Source

qcacld-3.0: Use vdev_id to get vdev in sap_channel_sel

In SAP on/off stress test, when hostapd call hdd_start_adapter
to create vdev, vdev2 will be created while vdev1 doesn't be
deleted physically even if vdev1 is already destroyed logically,
then hostapd issue acs operation, currently use mac address to
get vdev in sap_channel_sel, because vdev2 is using the same mac
address as vdev1 and vdev1 is still in vdev_list at this point,
so will find vdev1 firstly but will return failure due to vdev1 is
WLAN_OBJ_STATE_LOGICALLY_DELETED status, then will cause acs fail.

Fix is to use vdev_id to get vdev in sap_channel_sel.

Change-Id: I89ae3e847b725c2b64331536bc7c1de3fffce0bd
CRs-Fixed: 2640850
hqu 5 years ago
parent
commit
86ee15fa07
1 changed files with 4 additions and 8 deletions
  1. 4 8
      core/sap/src/sap_fsm.c

+ 4 - 8
core/sap/src/sap_fsm.c

@@ -838,14 +838,12 @@ QDF_STATUS sap_channel_sel(struct sap_context *sap_context)
 	struct scan_start_request *req;
 	struct wlan_objmgr_vdev *vdev = NULL;
 	uint8_t i;
-	uint8_t pdev_id;
 	uint32_t *freq_list = NULL;
 	uint8_t num_of_channels = 0;
 	mac_handle_t mac_handle;
 	uint32_t con_ch_freq;
 	uint8_t vdev_id;
 	uint32_t scan_id;
-	uint8_t *self_mac;
 	uint32_t default_op_freq;
 
 	mac_handle = cds_get_context(QDF_MODULE_ID_SME);
@@ -917,11 +915,10 @@ QDF_STATUS sap_channel_sel(struct sap_context *sap_context)
 			return QDF_STATUS_E_NOMEM;
 		}
 
-		pdev_id = wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev);
-		self_mac = sap_context->self_mac_addr;
-		vdev = wlan_objmgr_get_vdev_by_macaddr_from_psoc(mac_ctx->psoc,
-							pdev_id, self_mac,
-							WLAN_LEGACY_SME_ID);
+		vdev_id = sap_context->sessionId;
+		vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc,
+							    vdev_id,
+							    WLAN_LEGACY_SME_ID);
 		if (!vdev) {
 			QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR,
 				  FL("Invalid vdev objmgr"));
@@ -934,7 +931,6 @@ QDF_STATUS sap_channel_sel(struct sap_context *sap_context)
 		ucfg_scan_init_default_params(vdev, req);
 		scan_id = ucfg_scan_get_scan_id(mac_ctx->psoc);
 		req->scan_req.scan_id = scan_id;
-		vdev_id = wlan_vdev_get_id(vdev);
 		req->scan_req.vdev_id = vdev_id;
 		req->scan_req.scan_f_passive = false;
 		req->scan_req.scan_req_id = sap_context->req_id;