Quellcode durchsuchen

qcacld-3.0: Replace cdp peer_find_by_addr by get_ref_by_addr

Change the existing cdp_peer_find_by_addr by calls to
cdp_peer_get_ref_by_addr and cdp_peer_release_ref. The new APIs
make sure that the peer is valid as long as the peer reference is not
released (call to cdp_peer_release_ref)

Change-Id: Ibde9944a9721e5dcf0f7838058c229539efae7e4
CRs-Fixed: 2139801
Mohit Khanna vor 7 Jahren
Ursprung
Commit
c4c222535f

+ 8 - 2
core/mac/src/pe/lim/lim_process_action_frame.c

@@ -1676,7 +1676,8 @@ static void lim_process_addba_req(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info,
 			status, frame_len);
 	}
 
-	peer = cdp_peer_find_by_addr(soc, pdev, mac_hdr->sa, &peer_id);
+	peer = cdp_peer_get_ref_by_addr(soc, pdev, mac_hdr->sa, &peer_id,
+					PEER_DEBUG_ID_WMA_ADDBA_REQ);
 	if (!peer) {
 		pe_err("PEER [%pM] not found", mac_hdr->sa);
 		goto error;
@@ -1689,6 +1690,8 @@ static void lim_process_addba_req(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info,
 			addba_req->addba_param_set.buff_size,
 			addba_req->ba_start_seq_ctrl.ssn);
 
+	cdp_peer_release_ref(soc, peer, PEER_DEBUG_ID_WMA_ADDBA_REQ);
+
 	if (QDF_STATUS_SUCCESS == qdf_status) {
 		lim_send_addba_response_frame(mac_ctx, mac_hdr->sa,
 			addba_req->addba_param_set.tid, session);
@@ -1755,7 +1758,8 @@ static void lim_process_delba_req(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info,
 			status, frame_len);
 	}
 
-	peer = cdp_peer_find_by_addr(soc, pdev, mac_hdr->sa, &peer_id);
+	peer = cdp_peer_get_ref_by_addr(soc, pdev, mac_hdr->sa, &peer_id,
+					PEER_DEBUG_ID_WMA_DELBA_REQ);
 	if (!peer) {
 		pe_err("PEER [%pM] not found", mac_hdr->sa);
 		goto error;
@@ -1764,6 +1768,8 @@ static void lim_process_delba_req(tpAniSirGlobal mac_ctx, uint8_t *rx_pkt_info,
 	qdf_status = cdp_delba_process(soc, peer,
 			delba_req->delba_param_set.tid, delba_req->Reason.code);
 
+	cdp_peer_release_ref(soc, peer, PEER_DEBUG_ID_WMA_DELBA_REQ);
+
 	if (QDF_STATUS_SUCCESS != qdf_status)
 		pe_err("Failed to process delba request");
 

+ 3 - 1
core/mac/src/pe/lim/lim_send_management_frames.c

@@ -4691,7 +4691,8 @@ QDF_STATUS lim_send_addba_response_frame(tpAniSirGlobal mac_ctx,
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	peer = cdp_peer_find_by_addr(soc, pdev, peer_mac, &peer_id);
+	peer = cdp_peer_get_ref_by_addr(soc, pdev, peer_mac, &peer_id,
+					PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP);
 	if (!peer) {
 		pe_err("PEER [%pM] not found", peer_mac);
 		return QDF_STATUS_E_FAILURE;
@@ -4700,6 +4701,7 @@ QDF_STATUS lim_send_addba_response_frame(tpAniSirGlobal mac_ctx,
 	cdp_addba_responsesetup(soc, peer, tid, &dialog_token,
 		&status_code, &buff_size, &batimeout);
 
+	cdp_peer_release_ref(soc, peer, PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP);
 	qdf_mem_set((uint8_t *) &frm, sizeof(frm), 0);
 	frm.Category.category = SIR_MAC_ACTION_BLKACK;
 	frm.Action.action = SIR_MAC_ADDBA_RSP;

+ 6 - 3
core/wma/src/wma_mgmt.c

@@ -3447,7 +3447,7 @@ static bool wma_is_pkt_drop_candidate(tp_wma_handle wma_handle,
 				      uint8_t *peer_addr, uint8_t *bssid,
 				      uint8_t subtype)
 {
-	void *peer;
+	void *peer = NULL;
 	struct cdp_pdev *pdev_ctx;
 	uint8_t peer_id;
 	bool should_drop = false;
@@ -3481,8 +3481,8 @@ static bool wma_is_pkt_drop_candidate(tp_wma_handle wma_handle,
 		goto end;
 	}
 
-	peer = cdp_peer_find_by_addr(soc, pdev_ctx,
-				peer_addr, &peer_id);
+	peer = cdp_peer_get_ref_by_addr(soc, pdev_ctx, peer_addr, &peer_id,
+					PEER_DEBUG_ID_WMA_PKT_DROP);
 	if (!peer) {
 		if (IEEE80211_FC0_SUBTYPE_ASSOC_REQ != subtype) {
 			WMA_LOGI(
@@ -3547,6 +3547,9 @@ static bool wma_is_pkt_drop_candidate(tp_wma_handle wma_handle,
 	}
 
 end:
+	if (peer)
+		cdp_peer_release_ref(soc, peer, PEER_DEBUG_ID_WMA_PKT_DROP);
+
 	return should_drop;
 }