diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index c2267781e8de..17a3d7f6ab2d 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -5537,7 +5537,6 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc, qdf_spinlock_create(&vdev->peer_list_lock); TAILQ_INIT(&vdev->peer_list); dp_peer_multipass_list_init(vdev); - if ((soc->intr_mode == DP_INTR_POLL) && wlan_cfg_get_num_contexts(soc->wlan_cfg_ctx) != 0) { if ((pdev->vdev_count == 0) || @@ -5574,14 +5573,19 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc, vdev->ap_bridge_enabled = true; else vdev->ap_bridge_enabled = false; + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO, "%s: wlan_cfg_ap_bridge_enabled %d", __func__, vdev->ap_bridge_enabled); dp_tx_vdev_attach(vdev); - if (pdev->vdev_count == 1) - dp_lro_hash_setup(soc, pdev); + if (!pdev->is_lro_hash_configured) { + if (QDF_IS_STATUS_SUCCESS(dp_lro_hash_setup(soc, pdev))) + pdev->is_lro_hash_configured = true; + else + dp_err("LRO hash setup failure!"); + } dp_info("Created vdev %pK ("QDF_MAC_ADDR_FMT")", vdev, QDF_MAC_ADDR_REF(vdev->mac_addr.raw)); @@ -5836,6 +5840,7 @@ static QDF_STATUS dp_vdev_detach_wifi3(struct cdp_soc_t *cdp_soc, if (vdev->opmode != wlan_op_mode_monitor) dp_vdev_pdev_list_remove(soc, pdev, vdev); + pdev->vdev_count--; /* release reference taken above for find */ dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_CDP); diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 7e7fafd8ae3f..cc6fd1aa49e5 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -2323,6 +2323,9 @@ struct dp_pdev { #endif qdf_nbuf_t mcopy_status_nbuf; + /* flag to indicate whether LRO hash command has been sent to FW */ + uint8_t is_lro_hash_configured; + /* Flag to hold on to monitor destination ring */ bool hold_mon_dest_ring;