diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index dcc5471e60..1acfa7810e 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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); diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c index 56a1b4c436..c18bf6c60b 100644 --- a/dp/wifi3.0/dp_peer.c +++ b/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; - 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 */ 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_MAC_ADDR_SIZE);