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
This commit is contained in:
@@ -6197,6 +6197,7 @@ dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
|||||||
struct dp_peer *peer =
|
struct dp_peer *peer =
|
||||||
dp_peer_find_hash_find(soc, peer_mac, 0, vdev_id,
|
dp_peer_find_hash_find(soc, peer_mac, 0, vdev_id,
|
||||||
DP_MOD_ID_CDP);
|
DP_MOD_ID_CDP);
|
||||||
|
enum wlan_op_mode vdev_opmode;
|
||||||
|
|
||||||
if (!peer)
|
if (!peer)
|
||||||
return QDF_STATUS_E_FAILURE;
|
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;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* save vdev related member in case vdev freed */
|
||||||
|
vdev_opmode = vdev->opmode;
|
||||||
pdev = vdev->pdev;
|
pdev = vdev->pdev;
|
||||||
dp_peer_setup_get_reo_hash(vdev, &reo_dest, &hash_based);
|
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);
|
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);
|
dp_peer_ppdu_delayed_ba_init(peer);
|
||||||
|
|
||||||
|
@@ -2997,13 +2997,15 @@ void dp_peer_cleanup(struct dp_vdev *vdev, struct dp_peer *peer)
|
|||||||
struct dp_pdev *pdev = vdev->pdev;
|
struct dp_pdev *pdev = vdev->pdev;
|
||||||
struct dp_soc *soc = pdev->soc;
|
struct dp_soc *soc = pdev->soc;
|
||||||
|
|
||||||
dp_peer_tx_cleanup(vdev, peer);
|
|
||||||
|
|
||||||
/* cleanup the Rx reorder queues for this peer */
|
|
||||||
dp_peer_rx_cleanup(vdev, peer);
|
|
||||||
|
|
||||||
/* save vdev related member in case vdev freed */
|
/* save vdev related member in case vdev freed */
|
||||||
vdev_opmode = vdev->opmode;
|
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);
|
||||||
|
|
||||||
qdf_mem_copy(vdev_mac_addr, vdev->mac_addr.raw,
|
qdf_mem_copy(vdev_mac_addr, vdev->mac_addr.raw,
|
||||||
QDF_MAC_ADDR_SIZE);
|
QDF_MAC_ADDR_SIZE);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user