浏览代码

qcacmn: Fix peer ref_cnt usage and add logs for the same

Enable logs to print peer ref_cnt and decrement ref_cnt
in helper functions.

Change-Id: I6e6a275fba35003011095d93c79d7a052d5ec56e
CRs-Fixed: 1116647
Krishna Kumaar Natarajan 8 年之前
父节点
当前提交
71e5b83377
共有 2 个文件被更改,包括 27 次插入6 次删除
  1. 6 2
      dp/wifi3.0/dp_main.c
  2. 21 4
      dp/wifi3.0/dp_peer.c

+ 6 - 2
dp/wifi3.0/dp_main.c

@@ -1383,8 +1383,9 @@ static void *dp_peer_create_wifi3(void *vdev_handle, uint8_t *peer_mac_addr)
 	dp_peer_find_hash_add(soc, peer);
 
 	QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO_HIGH,
-		"vdev %p created peer %p (%pM)",
-		vdev, peer, peer->mac_addr.raw);
+		"vdev %p created peer %p (%pM) ref_cnt: %d",
+		vdev, peer, peer->mac_addr.raw,
+		qdf_atomic_read(&peer->ref_cnt));
 	/*
 	 * For every peer MAp message search and set if bss_peer
 	 */
@@ -1481,6 +1482,9 @@ void dp_peer_unref_delete(void *peer_handle)
 	 * concurrently with the empty check.
 	 */
 	qdf_spin_lock_bh(&soc->peer_ref_mutex);
+	QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
+		  "%s: peer %p ref_cnt(before decrement): %d\n", __func__,
+		  peer, qdf_atomic_read(&peer->ref_cnt));
 	if (qdf_atomic_dec_and_test(&peer->ref_cnt)) {
 		peer_id = peer->peer_ids[0];
 

+ 21 - 4
dp/wifi3.0/dp_peer.c

@@ -336,6 +336,9 @@ static inline void dp_peer_find_add_id(struct dp_soc *soc,
 		/* peer's ref count was already incremented by
 		 * peer_find_hash_find
 		 */
+		QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
+			  "%s: ref_cnt: %d", __func__,
+			   qdf_atomic_read(&peer->ref_cnt));
 		soc->peer_id_to_obj_map[peer_id] = peer;
 
 		if (dp_peer_find_add_id_to_obj(peer, peer_id)) {
@@ -445,6 +448,12 @@ void *dp_find_peer_by_addr(void *dev, uint8_t *peer_mac_addr,
 	/* Multiple peer ids? How can know peer id? */
 	*local_id = peer->local_id;
 	DP_TRACE(INFO, "%s: peer %p id %d", __func__, peer, *local_id);
+
+	/* ref_cnt is incremented inside dp_peer_find_hash_find().
+	 * Decrement it here.
+	 */
+	qdf_atomic_dec(&peer->ref_cnt);
+
 	return peer;
 }
 
@@ -1007,9 +1016,12 @@ void *dp_find_peer_by_addr_and_vdev(void *pdev_handle, void *vdev,
 		return NULL;
 
 	*local_id = peer->local_id;
+	DP_TRACE(INFO, "peer %p vdev %p lcoal id %d", peer, vdev, *local_id);
 
-	DP_TRACE(INFO, "peer %p vdev %p lcoal id %d",
-			peer, vdev, *local_id);
+	/* ref_cnt is incremented inside dp_peer_find_hash_find().
+	 * Decrement it here.
+	 */
+	qdf_atomic_dec(&peer->ref_cnt);
 
 	return peer;
 }
@@ -1073,8 +1085,13 @@ QDF_STATUS dp_peer_state_update(void *pdev_handle, uint8_t *peer_mac,
 		return QDF_STATUS_E_FAILURE;
 	}
 	peer->state = state;
-	DP_TRACE(INFO, "peer %p state %d",
-			peer, peer->state);
+
+	DP_TRACE(INFO, "peer %p state %d", peer, peer->state);
+	/* ref_cnt is incremented inside dp_peer_find_hash_find().
+	 * Decrement it here.
+	 */
+	qdf_atomic_dec(&peer->ref_cnt);
+
 	return QDF_STATUS_SUCCESS;
 }