Sfoglia il codice sorgente

qcacld-3.0: Get/Release ref_cnt for objects store and release

Add get and release reference counts for PSOC/PDEV/VDEV/PEER
objects reference storing and releasing as per the latest reference
count implementation.

Change-Id: I1715be7f8e47b52fa36bb070443051dd99703eb0
CRs-Fixed: 2001058
Selvaraj, Sridhar 8 anni fa
parent
commit
3a1823f12d

+ 7 - 13
core/hdd/src/wlan_hdd_object_manager.c

@@ -53,6 +53,8 @@ int hdd_release_and_destroy_psoc(hdd_context_t *hdd_ctx)
 	if (!psoc)
 		return -EINVAL;
 
+	wlan_objmgr_print_ref_all_objects_per_psoc(psoc);
+
 	return qdf_status_to_os_return(wlan_objmgr_psoc_obj_delete(psoc));
 }
 
@@ -123,9 +125,8 @@ int hdd_create_and_store_vdev(struct wlan_objmgr_pdev *pdev,
 		wlan_objmgr_vdev_obj_delete(vdev);
 		return -ENOMEM;
 	}
-	adapter->hdd_vdev = vdev;
 
-	wlan_objmgr_peer_ref_peer(peer);
+	adapter->hdd_vdev = vdev;
 
 	return 0;
 }
@@ -177,7 +178,6 @@ int hdd_add_peer_object(struct wlan_objmgr_vdev *vdev,
 	if (!peer)
 		return -ENOMEM;
 
-	wlan_objmgr_peer_ref_peer(peer);
 	hdd_info("Peer object "MAC_ADDRESS_STR" add success!",
 					MAC_ADDR_ARRAY(mac_addr));
 
@@ -203,18 +203,12 @@ int hdd_remove_peer_object(struct wlan_objmgr_vdev *vdev,
 		return -EINVAL;
 	}
 
-	peer = wlan_objmgr_find_peer(psoc, mac_addr);
+	peer = wlan_objmgr_get_peer(psoc, mac_addr, WLAN_HDD_ID_OBJ_MGR);
 	if (peer) {
 		/* Unref to decrement ref happened in find_peer */
-		wlan_objmgr_peer_unref_peer(peer);
-
-		/*
-		 * Unref to decrement ref of create_peer. This
-		 * is needed until new ref count implementation
-		 * is done. Object manager will delete peer once
-		 * ref count is 0.
-		 */
-		wlan_objmgr_peer_unref_peer(peer);
+		wlan_objmgr_peer_release_ref(peer, WLAN_HDD_ID_OBJ_MGR);
+
+		wlan_objmgr_peer_obj_delete(peer);
 
 		hdd_info("Peer obj "MAC_ADDRESS_STR" deleted",
 				MAC_ADDR_ARRAY(mac_addr));

+ 8 - 2
core/mac/src/sys/legacy/src/system/src/mac_init_api.c

@@ -108,6 +108,7 @@ tSirRetStatus mac_open(struct wlan_objmgr_psoc *psoc, tHalHandle *pHalHandle,
 {
 	tpAniSirGlobal p_mac = NULL;
 	tSirRetStatus status = eSIR_SUCCESS;
+	QDF_STATUS qdf_status;
 
 	if (pHalHandle == NULL)
 		return eSIR_FAILURE;
@@ -131,7 +132,12 @@ tSirRetStatus mac_open(struct wlan_objmgr_psoc *psoc, tHalHandle *pHalHandle,
 	 */
 	p_mac->hHdd = hHdd;
 
-	/* Increase psoc ref count once APIs are available in object manager */
+	qdf_status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_LEGACY_MAC_ID);
+	if (QDF_IS_STATUS_ERROR(qdf_status)) {
+		sys_log(p_mac, LOGE, FL("PSOC get ref failure\n"));
+		return eSIR_FAILURE;
+	}
+
 	p_mac->psoc = psoc;
 	*pHalHandle = (tHalHandle) p_mac;
 
@@ -187,7 +193,7 @@ tSirRetStatus mac_close(tHalHandle hHal)
 
 	log_deinit(pMac);
 
-	/* Decrease psoc ref count once APIs are available in object manager */
+	wlan_objmgr_psoc_release_ref(pMac->psoc, WLAN_LEGACY_MAC_ID);
 	pMac->psoc = NULL;
 	/* Finally, de-allocate the global MAC datastructure: */
 	qdf_mem_free(pMac);

+ 3 - 2
core/wma/src/wma_data.c

@@ -2866,10 +2866,11 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen,
 
 		wh = (struct ieee80211_frame *)(qdf_nbuf_data(tx_frame));
 		mac_addr = wh->i_addr1;
-		peer = wlan_objmgr_find_peer(psoc, mac_addr);
+		peer = wlan_objmgr_get_peer(psoc, mac_addr, WLAN_MGMT_NB_ID);
 		if (!peer) {
 			mac_addr = wh->i_addr2;
-			peer = wlan_objmgr_find_peer(psoc, mac_addr);
+			peer = wlan_objmgr_get_peer(psoc, mac_addr,
+						WLAN_MGMT_NB_ID);
 		}
 
 		status = wlan_mgmt_txrx_mgmt_frame_tx(peer,

+ 6 - 2
core/wma/src/wma_main.c

@@ -1939,7 +1939,11 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc, void *cds_context,
 		qdf_wake_lock_create(&wma_handle->wow_wake_lock, "wlan_wow_wl");
 	}
 
-	/* Increase psoc ref count once APIs are available in object manager */
+	qdf_status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_LEGACY_WMA_ID);
+	if (QDF_IS_STATUS_ERROR(qdf_status)) {
+		WMA_LOGE("%s: PSOC get_ref fails", __func__);
+		return qdf_status;
+	}
 	wma_handle->psoc = psoc;
 
 	/* Attach mc_thread context processing function */
@@ -3560,7 +3564,7 @@ QDF_STATUS wma_close(void *cds_ctx)
 		wmi_desc_pool_deinit(wma_handle);
 	}
 
-	/* Decrease psoc ref count once APIs are available in object manager */
+	wlan_objmgr_psoc_release_ref(wma_handle->psoc, WLAN_LEGACY_WMA_ID);
 	wma_handle->psoc = NULL;
 	target_if_close();
 	wma_target_if_close(wma_handle);