瀏覽代碼

qcacmn: Fix peer ref count issue in p2p_mgmt_tx

In p2p_mgmt_tx ref count of peer is increased and then frame is
passed to wlan_mgmt_txrx_mgmt_frame_tx which again increase the peer
ref count. But the ref count is decreased only once when frame tx
complete is received. Thus peer is not deleted while vdev destroy
and as peer contain the ref count of vdev, vdev is also not
deleted.

To fix this Release peer ref count in p2p_mgmt_tx after
wlan_mgmt_txrx_mgmt_frame_tx.

Change-Id: I8e42b22559f3baf43fefd6183a079f9629efae3c
CRs-Fixed: 2028550
Abhishek Singh 8 年之前
父節點
當前提交
8c2ce41254
共有 1 個文件被更改,包括 4 次插入2 次删除
  1. 4 2
      umac/p2p/core/src/wlan_p2p_off_chan_tx.c

+ 4 - 2
umac/p2p/core/src/wlan_p2p_off_chan_tx.c

@@ -784,11 +784,11 @@ static QDF_STATUS p2p_mgmt_tx(struct tx_action_context *tx_ctx,
 
 	wh = (struct wlan_frame_hdr *)frame;
 	mac_addr = wh->i_addr1;
-	peer = wlan_objmgr_get_peer(psoc, mac_addr, WLAN_MGMT_NB_ID);
+	peer = wlan_objmgr_get_peer(psoc, mac_addr, WLAN_P2P_ID);
 	if (!peer) {
 		mac_addr = wh->i_addr2;
 		peer = wlan_objmgr_get_peer(psoc, mac_addr,
-					WLAN_MGMT_NB_ID);
+					WLAN_P2P_ID);
 	}
 
 	if (!peer) {
@@ -813,6 +813,8 @@ static QDF_STATUS p2p_mgmt_tx(struct tx_action_context *tx_ctx,
 			tx_comp_cb, tx_ota_comp_cb,
 			WLAN_UMAC_COMP_P2P, &mgmt_param);
 
+	wlan_objmgr_peer_release_ref(peer, WLAN_P2P_ID);
+
 	return status;
 }