Prechádzať zdrojové kódy

qcacmn: Skip setting rx tids for monitor mode self peer

Currently the rx tids are getting setup for the
self peer in monitor mode. This leads to sending
commands to the reorder-hw and the hardware generates
its responses.
In Monitor mode, none of these rings are reaped, since
the reorder-hw is not used. This opens up a possibility
of backpressure on the reorder-hw rings.

Skip setting up the rx tids for monitor mode
self peer, since they are not used.

Change-Id: I37bade9ef5c8bd536a01371cc059ebbcfb85ee5a
CRs-Fixed: 2815866
Rakesh Pillai 4 rokov pred
rodič
commit
904ad769a0
2 zmenil súbory, kde vykonal 10 pridanie a 4 odobranie
  1. 5 1
      dp/wifi3.0/dp_main.c
  2. 5 3
      dp/wifi3.0/dp_peer.c

+ 5 - 1
dp/wifi3.0/dp_main.c

@@ -6197,6 +6197,7 @@ dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 	struct dp_peer *peer =
 			dp_peer_find_hash_find(soc, peer_mac, 0, vdev_id,
 					       DP_MOD_ID_CDP);
+	enum wlan_op_mode vdev_opmode;
 
 	if (!peer)
 		return QDF_STATUS_E_FAILURE;
@@ -6207,6 +6208,8 @@ dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 		goto fail;
 	}
 
+	/* save vdev related member in case vdev freed */
+	vdev_opmode = vdev->opmode;
 	pdev = vdev->pdev;
 	dp_peer_setup_get_reo_hash(vdev, &reo_dest, &hash_based);
 
@@ -6238,7 +6241,8 @@ dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 
 	qdf_atomic_set(&peer->is_default_route_set, 1);
 
-	dp_peer_rx_init(pdev, peer);
+	if (vdev_opmode != wlan_op_mode_monitor)
+		dp_peer_rx_init(pdev, peer);
 
 	dp_peer_ppdu_delayed_ba_init(peer);
 

+ 5 - 3
dp/wifi3.0/dp_peer.c

@@ -2997,13 +2997,15 @@ void dp_peer_cleanup(struct dp_vdev *vdev, struct dp_peer *peer)
 	struct dp_pdev *pdev = vdev->pdev;
 	struct dp_soc *soc = pdev->soc;
 
+	/* save vdev related member in case vdev freed */
+	vdev_opmode = vdev->opmode;
+
 	dp_peer_tx_cleanup(vdev, peer);
 
+	if (vdev_opmode != wlan_op_mode_monitor)
 	/* cleanup the Rx reorder queues for this peer */
-	dp_peer_rx_cleanup(vdev, peer);
+		dp_peer_rx_cleanup(vdev, peer);
 
-	/* save vdev related member in case vdev freed */
-	vdev_opmode = vdev->opmode;
 	qdf_mem_copy(vdev_mac_addr, vdev->mac_addr.raw,
 		     QDF_MAC_ADDR_SIZE);