Browse Source

qcacld-3.0: Remove usage of datapath handles in outer layers

Currently many layers store the datapath handles i.e.
pdev and vdev handles and use them for passing as an
argument to the CDP APIs. This gives way to possible
race conditions, where the datapath handle provided by
the outer layer might be a stale pointer, which in turn
leads to unexpected results.

Remove the storage and usage of all the datapath handles
from the layers currently using them.
- cds_context
- vdev objmgr
- pdev objmgr

Change-Id: Icf24bd3792af203d1a06e153f0badd6e7405559f
CRs-Fixed: 2602199
Rakesh Pillai 5 years ago
parent
commit
ed73605fe2

+ 0 - 1
components/ipa/core/inc/wlan_ipa_priv.h

@@ -585,7 +585,6 @@ struct wlan_ipa_priv {
 	struct wlan_ipa_iface_context iface_context[WLAN_IPA_MAX_IFACE];
 	uint8_t num_iface;
 	void *dp_soc;
-	void *dp_pdev;
 	uint8_t dp_pdev_id;
 	struct wlan_ipa_config *config;
 	enum wlan_ipa_rm_state rm_state;

+ 0 - 1
core/cds/inc/cds_sched.h

@@ -276,7 +276,6 @@ struct cds_context {
 	 */
 	qdf_device_t qdf_ctx;
 
-	struct cdp_pdev *pdev_txrx_ctx;
 	void *dp_soc;
 
 	/* Configuration handle used to get system configuration */

+ 4 - 22
core/cds/src/cds_api.c

@@ -780,11 +780,10 @@ QDF_STATUS cds_dp_open(struct wlan_objmgr_psoc *psoc)
 	QDF_STATUS qdf_status;
 	struct dp_txrx_config dp_config;
 
-	cds_set_context(QDF_MODULE_ID_TXRX,
-		cdp_pdev_attach(cds_get_context(QDF_MODULE_ID_SOC),
-				gp_cds_context->htc_ctx,
-				gp_cds_context->qdf_ctx, 0));
-	if (!gp_cds_context->pdev_txrx_ctx) {
+	qdf_status = cdp_pdev_attach(cds_get_context(QDF_MODULE_ID_SOC),
+				     gp_cds_context->htc_ctx,
+				     gp_cds_context->qdf_ctx, 0);
+	if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
 		/* Critical Error ...  Cannot proceed further */
 		cds_alert("Failed to open TXRX");
 		QDF_ASSERT(0);
@@ -1241,16 +1240,12 @@ QDF_STATUS cds_close(struct wlan_objmgr_psoc *psoc)
 
 QDF_STATUS cds_dp_close(struct wlan_objmgr_psoc *psoc)
 {
-	void *ctx;
-
 	cdp_txrx_intr_detach(gp_cds_context->dp_soc);
-	ctx = cds_get_context(QDF_MODULE_ID_TXRX);
 
 	dp_txrx_deinit(cds_get_context(QDF_MODULE_ID_SOC));
 
 	cdp_pdev_detach(cds_get_context(QDF_MODULE_ID_SOC), OL_TXRX_PDEV_ID, 1);
 
-	cds_set_context(QDF_MODULE_ID_TXRX, NULL);
 	ucfg_pmo_psoc_set_txrx_pdev_id(psoc, OL_TXRX_INVALID_PDEV_ID);
 
 	return QDF_STATUS_SUCCESS;
@@ -1331,12 +1326,6 @@ void *cds_get_context(QDF_MODULE_ID module_id)
 		break;
 	}
 
-	case QDF_MODULE_ID_TXRX:
-	{
-		context = (void *)gp_cds_context->pdev_txrx_ctx;
-		break;
-	}
-
 	case QDF_MODULE_ID_CFG:
 	{
 		context = gp_cds_context->cfg_ctx;
@@ -1540,9 +1529,6 @@ QDF_STATUS cds_set_context(QDF_MODULE_ID module_id, void *context)
 	case QDF_MODULE_ID_HDD:
 		p_cds_context->hdd_context = context;
 		break;
-	case QDF_MODULE_ID_TXRX:
-		p_cds_context->pdev_txrx_ctx = context;
-		break;
 	case QDF_MODULE_ID_HIF:
 		p_cds_context->hif_context = context;
 		break;
@@ -1590,10 +1576,6 @@ QDF_STATUS cds_free_context(QDF_MODULE_ID module_id, void *module_context)
 		cds_mod_context = &gp_cds_context->hif_context;
 		break;
 
-	case QDF_MODULE_ID_TXRX:
-		cds_mod_context = (void **)&gp_cds_context->pdev_txrx_ctx;
-		break;
-
 	case QDF_MODULE_ID_BMI:
 		cds_mod_context = &gp_cds_context->g_ol_context;
 		break;

+ 3 - 3
core/dp/ol/inc/ol_txrx_ctrl_api.h

@@ -497,7 +497,7 @@ static inline void ol_tx_flow_pool_resize_handler(uint8_t flow_pool_id,
 void ol_tx_register_flow_control(struct ol_txrx_pdev_t *pdev);
 void ol_tx_deregister_flow_control(struct ol_txrx_pdev_t *pdev);
 void ol_tx_dump_flow_pool_info(struct cdp_soc_t *soc_hdl);
-void ol_tx_dump_flow_pool_info_compact(void *pdev);
+void ol_tx_dump_flow_pool_info_compact(struct ol_txrx_pdev_t *pdev);
 void ol_tx_clear_flow_pool_stats(void);
 void ol_tx_flow_pool_map_handler(uint8_t flow_id, uint8_t flow_type,
 				 uint8_t flow_pool_id, uint16_t flow_pool_size);
@@ -544,14 +544,14 @@ static inline void ol_tx_deregister_flow_control(struct ol_txrx_pdev_t *pdev)
 
 #if defined(CONFIG_HL_SUPPORT) && defined(QCA_HL_NETDEV_FLOW_CONTROL)
 void ol_tx_dump_flow_pool_info(struct cdp_soc_t *soc_hdl);
-void ol_tx_dump_flow_pool_info_compact(void *pdev);
+void ol_tx_dump_flow_pool_info_compact(struct ol_txrx_pdev_t *pdev);
 #else
 static inline void ol_tx_dump_flow_pool_info(struct cdp_soc_t *soc_hdl)
 {
 }
 
 static inline
-void ol_tx_dump_flow_pool_info_compact(void *ctx)
+void ol_tx_dump_flow_pool_info_compact(struct ol_txrx_pdev_t *pdev)
 {
 }
 #endif

+ 1 - 2
core/dp/txrx/ol_tx_hl.c

@@ -2277,9 +2277,8 @@ int ol_txrx_set_vdev_tx_desc_limit(struct cdp_soc_t *soc_hdl, u8 vdev_id,
 	return 0;
 }
 
-void ol_tx_dump_flow_pool_info_compact(void *ctx)
+void ol_tx_dump_flow_pool_info_compact(struct ol_txrx_pdev_t *pdev)
 {
-	struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
 	char *comb_log_str;
 	int bytes_written = 0;
 	uint32_t free_size;

+ 34 - 23
core/dp/txrx/ol_txrx.c

@@ -780,24 +780,27 @@ static inline void ol_txrx_debugfs_exit(ol_txrx_pdev_handle pdev)
  * @osdev: os dev
  * @pdev_id: pdev identifier for pdev attach
  *
- * Return: txrx pdev handle
- *		  NULL for failure
+ * Return: QDF_STATUS_SUCCESS on success
+ *		QDF error code for failure
  */
-static struct cdp_pdev *
+static QDF_STATUS
 ol_txrx_pdev_attach(ol_txrx_soc_handle soc,
 		    HTC_HANDLE htc_pdev, qdf_device_t osdev, uint8_t pdev_id)
 {
 	struct ol_txrx_soc_t *ol_soc = cdp_soc_t_to_ol_txrx_soc_t(soc);
 	struct ol_txrx_pdev_t *pdev;
 	struct cdp_cfg *cfg_pdev = cds_get_context(QDF_MODULE_ID_CFG);
+	QDF_STATUS status;
 	int i, tid;
 
 	if (pdev_id == OL_TXRX_INVALID_PDEV_ID)
-		return NULL;
+		return QDF_STATUS_E_INVAL;
 
 	pdev = qdf_mem_malloc(sizeof(*pdev));
-	if (!pdev)
+	if (!pdev) {
+		status = QDF_STATUS_E_NOMEM;
 		goto fail0;
+	}
 
 	/* init LL/HL cfg here */
 	pdev->cfg.is_high_latency = ol_cfg_is_high_latency(cfg_pdev);
@@ -836,8 +839,10 @@ ol_txrx_pdev_attach(ol_txrx_soc_handle soc,
 	qdf_spinlock_create(&pdev->tx_mutex);
 
 	/* do initial set up of the peer ID -> peer object lookup map */
-	if (ol_txrx_peer_find_attach(pdev))
+	if (ol_txrx_peer_find_attach(pdev)) {
+		status = QDF_STATUS_E_FAILURE;
 		goto fail1;
+	}
 
 	/* initialize the counter of the target's tx buffer availability */
 	qdf_atomic_init(&pdev->target_tx_credit);
@@ -848,16 +853,20 @@ ol_txrx_pdev_attach(ol_txrx_soc_handle soc,
 	if (ol_cfg_is_high_latency(cfg_pdev)) {
 		qdf_spinlock_create(&pdev->tx_queue_spinlock);
 		pdev->tx_sched.scheduler = ol_tx_sched_attach(pdev);
-		if (!pdev->tx_sched.scheduler)
+		if (!pdev->tx_sched.scheduler) {
+			status = QDF_STATUS_E_FAILURE;
 			goto fail2;
+		}
 	}
 	ol_txrx_pdev_txq_log_init(pdev);
 	ol_txrx_pdev_grp_stats_init(pdev);
 
 	pdev->htt_pdev =
 		htt_pdev_alloc(pdev, cfg_pdev, htc_pdev, osdev);
-	if (!pdev->htt_pdev)
+	if (!pdev->htt_pdev) {
+		status = QDF_STATUS_E_FAILURE;
 		goto fail3;
+	}
 
 	htt_register_rx_pkt_dump_callback(pdev->htt_pdev,
 			ol_rx_pkt_dump_call);
@@ -893,7 +902,7 @@ ol_txrx_pdev_attach(ol_txrx_soc_handle soc,
 
 	ol_txrx_debugfs_init(pdev);
 
-	return (struct cdp_pdev *)pdev;
+	return QDF_STATUS_SUCCESS;
 
 fail3:
 	ol_txrx_peer_find_detach(pdev);
@@ -903,13 +912,14 @@ fail2:
 		qdf_spinlock_destroy(&pdev->tx_queue_spinlock);
 
 fail1:
+	qdf_spinlock_destroy(&pdev->req_list_spinlock);
 	qdf_spinlock_destroy(&pdev->tx_mutex);
 	ol_txrx_tso_stats_deinit(pdev);
 	ol_txrx_fw_stats_desc_pool_deinit(pdev);
 	qdf_mem_free(pdev);
 
 fail0:
-	return NULL;
+	return status;
 }
 
 #if !defined(REMOVE_PKT_LOG) && !defined(QVIT)
@@ -1787,9 +1797,10 @@ ol_txrx_vdev_per_vdev_tx_desc_init(struct ol_txrx_vdev_t *vdev)
  * an IBSS, or a STA
  * @subtype:  Subtype of the operating vdev
  *
- * Return: success: handle to new data vdev object, failure: NULL
+ * Return: QDF_STATUS_SUCCESS on success,
+	   QDF error code on failure
  */
-static struct cdp_vdev *
+static QDF_STATUS
 ol_txrx_vdev_attach(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 		    uint8_t *vdev_mac_addr,
 		    uint8_t vdev_id, enum wlan_op_mode op_mode,
@@ -1808,12 +1819,12 @@ ol_txrx_vdev_attach(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 
 	if (qdf_unlikely(!soc)) {
 		ol_txrx_err("soc is NULL");
-		return NULL;
+		return QDF_STATUS_E_INVAL;
 	}
 
 	vdev = qdf_mem_malloc(sizeof(*vdev));
 	if (!vdev)
-		return NULL;    /* failure */
+		return QDF_STATUS_E_NOMEM;    /* failure */
 
 	/* store provided params */
 	vdev->pdev = pdev;
@@ -1904,7 +1915,7 @@ ol_txrx_vdev_attach(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 	 */
 	htt_vdev_attach(pdev->htt_pdev, vdev_id, op_mode);
 
-	return (struct cdp_vdev *)vdev;
+	return QDF_STATUS_SUCCESS;
 }
 
 /**
@@ -2272,9 +2283,9 @@ static void ol_txrx_dump_peer_access_list(ol_txrx_peer_handle peer)
  * so a reference within the control peer object can be set to the
  * data peer object.
  *
- * Return: 0 on success, -1 on failure
+ * Return: QDF status code
  */
-static void *
+static QDF_STATUS
 ol_txrx_peer_attach(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 		    uint8_t *peer_mac_addr)
 {
@@ -2322,7 +2333,7 @@ ol_txrx_peer_attach(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 				break;
 			} else {
 				qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
-				return NULL;
+				return QDF_STATUS_E_FAILURE;
 			}
 		}
 		if (cmp_wait_mac && !ol_txrx_peer_find_mac_addr_cmp(
@@ -2342,7 +2353,7 @@ ol_txrx_peer_attach(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 			} else {
 				qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
 				ol_txrx_err("peer not found");
-				return NULL;
+				return QDF_STATUS_E_FAILURE;
 			}
 		}
 	}
@@ -2362,13 +2373,13 @@ ol_txrx_peer_attach(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 			wlan_roam_debug_dump_table();
 			vdev->wait_on_peer_id = OL_TXRX_INVALID_LOCAL_PEER_ID;
 
-			return NULL;
+			return QDF_STATUS_E_FAILURE;
 		}
 	}
 
 	peer = qdf_mem_malloc(sizeof(*peer));
 	if (!peer)
-		return NULL;
+		return QDF_STATUS_E_NOMEM;
 
 	/* store provided params */
 	peer->vdev = vdev;
@@ -2459,7 +2470,7 @@ ol_txrx_peer_attach(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 
 	ol_txrx_local_peer_id_alloc(pdev, peer);
 
-	return (void *)peer;
+	return QDF_STATUS_SUCCESS;
 }
 
 #undef PEER_DEL_TIMEOUT
@@ -4650,7 +4661,7 @@ ol_txrx_display_stats(struct cdp_soc_t *soc_hdl, uint16_t value,
 		break;
 	case CDP_DUMP_TX_FLOW_POOL_INFO:
 		if (verb_level == QDF_STATS_VERBOSITY_LEVEL_LOW)
-			ol_tx_dump_flow_pool_info_compact((void *)pdev);
+			ol_tx_dump_flow_pool_info_compact(pdev);
 		else
 			ol_tx_dump_flow_pool_info(soc_hdl);
 		break;

+ 2 - 3
core/dp/txrx/ol_txrx_flow_control.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -373,9 +373,8 @@ static const char *ol_tx_flow_pool_status_to_str
 	}
 }
 
-void ol_tx_dump_flow_pool_info_compact(void *ctx)
+void ol_tx_dump_flow_pool_info_compact(struct ol_txrx_pdev_t *pdev)
 {
-	struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
 	char *comb_log_str;
 	int bytes_written = 0;
 	uint32_t free_size;

+ 0 - 3
core/hdd/src/wlan_hdd_main.c

@@ -2132,9 +2132,6 @@ int hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
 	 */
 	hdd_component_cfg_chan_to_freq(hdd_ctx->pdev);
 
-	wlan_pdev_set_dp_handle(hdd_ctx->pdev,
-				cds_get_context(QDF_MODULE_ID_TXRX));
-
 	hdd_objmgr_update_tgt_max_vdev_psoc(hdd_ctx, cfg->max_intf_count);
 
 	ucfg_ipa_set_dp_handle(hdd_ctx->psoc,

+ 12 - 37
core/wma/inc/wma.h

@@ -1899,13 +1899,8 @@ void wma_vdev_update_pause_bitmap(uint8_t vdev_id, uint16_t value)
 
 	iface = &wma->interfaces[vdev_id];
 
-	if (!iface || !iface->vdev) {
-		WMA_LOGE("%s: Vdev is NULL", __func__);
-		return;
-	}
-
-	if (!wlan_vdev_get_dp_handle(iface->vdev)) {
-		WMA_LOGE("%s: Failed to get dp handle", __func__);
+	if (!iface) {
+		WMA_LOGE("%s: Interface is NULL", __func__);
 		return;
 	}
 
@@ -1931,13 +1926,8 @@ uint16_t wma_vdev_get_pause_bitmap(uint8_t vdev_id)
 
 	iface = &wma->interfaces[vdev_id];
 
-	if (!iface || !iface->vdev) {
-		WMA_LOGE("%s: Vdev is NULL", __func__);
-		return 0;
-	}
-
-	if (!wlan_vdev_get_dp_handle(iface->vdev)) {
-		WMA_LOGE("%s: Failed to get dp handle", __func__);
+	if (!iface) {
+		WMA_LOGE("%s: Interface is NULL", __func__);
 		return 0;
 	}
 
@@ -1962,13 +1952,8 @@ static inline bool wma_vdev_is_device_in_low_pwr_mode(uint8_t vdev_id)
 
 	iface = &wma->interfaces[vdev_id];
 
-	if (!iface || !iface->vdev) {
-		WMA_LOGE("%s: Vdev is NULL", __func__);
-		return 0;
-	}
-
-	if (!wlan_vdev_get_dp_handle(iface->vdev)) {
-		WMA_LOGE("%s: Failed to get dp handle", __func__);
+	if (!iface) {
+		WMA_LOGE("%s: Interface is NULL", __func__);
 		return 0;
 	}
 
@@ -1998,7 +1983,7 @@ QDF_STATUS wma_vdev_get_dtim_period(uint8_t vdev_id, uint8_t *value)
 
 	iface = &wma->interfaces[vdev_id];
 
-	if (!iface || !iface->vdev || !wlan_vdev_get_dp_handle(iface->vdev))
+	if (!iface)
 		return QDF_STATUS_E_FAILURE;
 
 	*value = iface->dtimPeriod;
@@ -2028,7 +2013,7 @@ QDF_STATUS wma_vdev_get_beacon_interval(uint8_t  vdev_id, uint16_t *value)
 
 	iface = &wma->interfaces[vdev_id];
 
-	if (!iface || !iface->vdev || !wlan_vdev_get_dp_handle(iface->vdev))
+	if (!iface)
 		return QDF_STATUS_E_FAILURE;
 
 	*value = iface->beaconInterval;
@@ -2085,13 +2070,8 @@ void wma_vdev_set_pause_bit(uint8_t vdev_id, wmi_tx_pause_type bit_pos)
 
 	iface = &wma->interfaces[vdev_id];
 
-	if (!iface || !iface->vdev) {
-		WMA_LOGE("%s: Vdev is NULL", __func__);
-		return;
-	}
-
-	if (!wlan_vdev_get_dp_handle(iface->vdev)) {
-		WMA_LOGE("%s: Failed to get dp handle", __func__);
+	if (!iface) {
+		WMA_LOGE("%s: Interface is NULL", __func__);
 		return;
 	}
 
@@ -2118,13 +2098,8 @@ void wma_vdev_clear_pause_bit(uint8_t vdev_id, wmi_tx_pause_type bit_pos)
 
 	iface = &wma->interfaces[vdev_id];
 
-	if (!iface || !iface->vdev) {
-		WMA_LOGE("%s: Vdev is NULL", __func__);
-		return;
-	}
-
-	if (!wlan_vdev_get_dp_handle(iface->vdev)) {
-		WMA_LOGE("%s: Failed to get dp handle", __func__);
+	if (!iface) {
+		WMA_LOGE("%s: Interface is NULL", __func__);
 		return;
 	}
 

+ 0 - 20
core/wma/inc/wma_internal.h

@@ -578,26 +578,6 @@ static inline bool wma_is_roam_synch_in_progress(tp_wma_handle wma,
 QDF_STATUS wma_find_vdev_id_by_addr(tp_wma_handle wma, uint8_t *addr,
 				    uint8_t *vdev_id);
 
-/**
- * wma_find_vdev_by_id() - Returns vdev handle for given vdev id.
- * @wma - wma handle
- * @vdev_id - vdev ID
- *
- * Return: Returns vdev handle if given vdev id is valid.
- *         Otherwise returns NULL.
- */
-static inline
-struct cdp_vdev *wma_find_vdev_by_id(tp_wma_handle wma, uint8_t vdev_id)
-{
-	if (vdev_id >= wma->max_bssid)
-		return NULL;
-
-	if (!wma->interfaces[vdev_id].vdev)
-		return NULL;
-
-	return wlan_vdev_get_dp_handle(wma->interfaces[vdev_id].vdev);
-}
-
 bool wma_is_vdev_in_ap_mode(tp_wma_handle wma, uint8_t vdev_id);
 
 #ifdef QCA_IBSS_SUPPORT

+ 0 - 10
core/wma/src/wma_data.c

@@ -1508,7 +1508,6 @@ int wma_mcc_vdev_tx_pause_evt_handler(void *handle, uint8_t *event,
 	wmi_tx_pause_event_fixed_param *wmi_event;
 	uint8_t vdev_id;
 	A_UINT32 vdev_map;
-	struct cdp_vdev *dp_handle;
 	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
 
 	param_buf = (WMI_TX_PAUSE_EVENTID_param_tlvs *) event;
@@ -1545,15 +1544,6 @@ int wma_mcc_vdev_tx_pause_evt_handler(void *handle, uint8_t *event,
 				vdev_map >>= 1;
 				continue;
 			}
-			dp_handle = wlan_vdev_get_dp_handle
-					(wma->interfaces[vdev_id].vdev);
-			if (!dp_handle) {
-				WMA_LOGE("%s: invalid vdev ID %d", __func__,
-					 vdev_id);
-				/* Test Next VDEV */
-				vdev_map >>= 1;
-				continue;
-			}
 
 			wma_process_vdev_tx_pause_evt(soc, wma,
 						      wmi_event,

+ 8 - 28
core/wma/src/wma_dev_if.c

@@ -505,10 +505,8 @@ wma_cdp_vdev_detach(ol_txrx_soc_handle soc, tp_wma_handle wma_handle,
 		return;
 	}
 
-	if (soc && wlan_vdev_get_id(vdev) != WLAN_INVALID_VDEV_ID) {
-		wlan_vdev_set_dp_handle(vdev, NULL);
+	if (soc && wlan_vdev_get_id(vdev) != WLAN_INVALID_VDEV_ID)
 		cdp_vdev_detach(soc, vdev_id, NULL, NULL);
-	}
 }
 
 /**
@@ -796,12 +794,6 @@ QDF_STATUS wma_vdev_detach(tp_wma_handle wma_handle,
 		goto send_rsp;
 	}
 
-	if (!wlan_vdev_get_dp_handle(iface->vdev)) {
-		WMA_LOGE("%s: Failed to get dp handle for vdev id %d",
-			 __func__, vdev_id);
-		goto send_rsp;
-	}
-
 	status = wma_check_for_deffered_peer_delete(wma_handle,
 						    pdel_vdev_req_param);
 	if (QDF_IS_STATUS_ERROR(status))
@@ -1694,6 +1686,7 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma,
 	struct wlan_objmgr_psoc *psoc = wma->psoc;
 	target_resource_config *wlan_res_cfg;
 	struct wlan_objmgr_peer *obj_peer = NULL;
+	QDF_STATUS status;
 
 	if (!psoc) {
 		WMA_LOGE("%s: psoc is NULL", __func__);
@@ -1741,11 +1734,13 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma,
 	 * where the HTT peer map event is received before the peer object
 	 * is created in the data path
 	 */
-	if (!cdp_peer_create(dp_soc, vdev_id, peer_addr)) {
+	status = cdp_peer_create(dp_soc, vdev_id, peer_addr);
+	if (QDF_IS_STATUS_ERROR(status)) {
 		WMA_LOGE("%s : Unable to attach peer %pM", __func__, peer_addr);
 		wlan_objmgr_peer_obj_delete(obj_peer);
 		goto err;
 	}
+
 	WMA_LOGD("%s: attaching peer_addr %pM to vdev_id %d, peer_count %d",
 		 __func__, peer_addr, vdev_id,
 		 wma->interfaces[vdev_id].peer_count);
@@ -2260,13 +2255,6 @@ __wma_handle_vdev_stop_rsp(struct vdev_stop_response *resp_event)
 	    vdev_stop_type == WMA_SET_LINK_STATE) {
 		uint8_t type;
 
-		if (!wlan_vdev_get_dp_handle(iface->vdev)) {
-			WMA_LOGE("%s: Failed to get dp handle for vdev id %d",
-				 __func__, resp_event->vdev_id);
-			status = -EINVAL;
-			goto free_params;
-		}
-
 		/* CCA is required only for sta interface */
 		if (iface->type == WMI_VDEV_TYPE_STA)
 			wma_get_cca_stats(wma, resp_event->vdev_id);
@@ -3838,7 +3826,6 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta)
 {
 	enum ol_txrx_peer_state state = OL_TXRX_PEER_STATE_CONN;
 	uint8_t pdev_id = OL_TXRX_PDEV_ID;
-	struct cdp_vdev *vdev;
 	QDF_STATUS status;
 	int32_t ret;
 	struct wma_txrx_node *iface = NULL;
@@ -3863,13 +3850,6 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta)
 		goto send_rsp;
 	}
 
-	vdev = wma_find_vdev_by_id(wma, add_sta->smesessionId);
-	if (!vdev) {
-		WMA_LOGE("%s: Failed to find vdev", __func__);
-		add_sta->status = QDF_STATUS_E_FAILURE;
-		goto send_rsp;
-	}
-
 	iface = &wma->interfaces[add_sta->smesessionId];
 
 	if (cdp_find_peer_exist_on_vdev(soc, add_sta->smesessionId,
@@ -3886,8 +3866,8 @@ static void wma_add_sta_req_ap_mode(tp_wma_handle wma, tpAddStaParams add_sta)
 	 * here.
 	 */
 	if (cdp_find_peer_exist(soc, pdev_id, add_sta->staMac)) {
-		WMA_LOGE("%s: My vdev:%pK, but Peer exists on other vdev with peer_addr %pM",
-			 __func__, vdev, add_sta->staMac);
+		WMA_LOGE("%s: My vdev id %d, but Peer exists on other vdev with peer_addr %pM",
+			 __func__, add_sta->smesessionId, add_sta->staMac);
 		add_sta->status = QDF_STATUS_E_FAILURE;
 		goto send_rsp;
 	}
@@ -4874,7 +4854,7 @@ void wma_delete_bss(tp_wma_handle wma, uint8_t vdev_id)
 	uint8_t *addr, *bssid_addr;
 
 	iface = &wma->interfaces[vdev_id];
-	if (!iface || !iface->vdev || !wlan_vdev_get_dp_handle(iface->vdev)) {
+	if (!iface || !iface->vdev) {
 		WMA_LOGE("%s vdev id %d is already deleted",
 			 __func__, vdev_id);
 		goto out;

+ 2 - 5
core/wma/src/wma_main.c

@@ -1791,9 +1791,6 @@ static void wma_state_info_dump(char **buf_ptr, uint16_t *size)
 		if (!vdev)
 			continue;
 
-		if (!wlan_vdev_get_dp_handle(iface->vdev))
-			continue;
-
 		status = wma_get_vdev_rate_flag(iface->vdev, &rate_flag);
 		if (QDF_IS_STATUS_ERROR(status))
 			continue;
@@ -4273,10 +4270,10 @@ QDF_STATUS wma_stop(void)
 		vdev = wma_handle->interfaces[i].vdev;
 		if (!vdev)
 			continue;
-		if (wlan_vdev_get_dp_handle(vdev) && wma_is_vdev_up(i)) {
+
+		if (wma_is_vdev_up(i))
 			cdp_fc_vdev_flush(cds_get_context(QDF_MODULE_ID_SOC),
 					  i);
-		}
 	}
 
 	if (!mac->mlme_cfg->gen.enable_remove_time_stamp_sync_cmd &&

+ 14 - 32
core/wma/src/wma_mgmt.c

@@ -497,7 +497,6 @@ int wma_unified_bcntx_status_event_handler(void *handle,
 	WMI_OFFLOAD_BCN_TX_STATUS_EVENTID_param_tlvs *param_buf;
 	wmi_offload_bcn_tx_status_event_fixed_param *resp_event;
 	tSirFirstBeaconTxCompleteInd *beacon_tx_complete_ind;
-	struct cdp_vdev *dp_handle;
 
 	param_buf =
 		(WMI_OFFLOAD_BCN_TX_STATUS_EVENTID_param_tlvs *) cmd_param_info;
@@ -524,13 +523,6 @@ int wma_unified_bcntx_status_event_handler(void *handle,
 			 __func__, resp_event->vdev_id);
 		return -EINVAL;
 	}
-	dp_handle = wlan_vdev_get_dp_handle
-			(wma->interfaces[resp_event->vdev_id].vdev);
-	if (!dp_handle) {
-		WMA_LOGE("%s: Failed to get dp handle for vdev id %d",
-			 __func__, resp_event->vdev_id);
-		return -EINVAL;
-	}
 
 	/* Beacon Tx Indication supports only AP mode. Ignore in other modes */
 	if (wma_is_vdev_in_ap_mode(wma, resp_event->vdev_id) == false) {
@@ -1826,23 +1818,19 @@ void wma_update_rts_params(tp_wma_handle wma, uint32_t value)
 {
 	uint8_t vdev_id;
 	QDF_STATUS ret;
-	struct cdp_vdev *handle;
 	struct wlan_objmgr_vdev *vdev;
 
 	for (vdev_id = 0; vdev_id < wma->max_bssid; vdev_id++) {
 		vdev = wma->interfaces[vdev_id].vdev;
 		if (!vdev)
 			continue;
-		handle = wlan_vdev_get_dp_handle(vdev);
-		if (handle) {
-			ret = wma_vdev_set_param(wma->wmi_handle,
-						 vdev_id,
-						 WMI_VDEV_PARAM_RTS_THRESHOLD,
-						 value);
-			if (QDF_IS_STATUS_ERROR(ret))
-				WMA_LOGE("Update cfg param fail for vdevId %d",
-					 vdev_id);
-		}
+		ret = wma_vdev_set_param(wma->wmi_handle,
+					 vdev_id,
+					 WMI_VDEV_PARAM_RTS_THRESHOLD,
+					 value);
+		if (QDF_IS_STATUS_ERROR(ret))
+			WMA_LOGE("Update cfg param fail for vdevId %d",
+				 vdev_id);
 	}
 }
 
@@ -1850,23 +1838,18 @@ void wma_update_frag_params(tp_wma_handle wma, uint32_t value)
 {
 	uint8_t vdev_id;
 	QDF_STATUS ret;
-	struct cdp_vdev *handle;
 	struct wlan_objmgr_vdev *vdev;
 
 	for (vdev_id = 0; vdev_id < wma->max_bssid; vdev_id++) {
 		vdev = wma->interfaces[vdev_id].vdev;
 		if (!vdev)
 			continue;
-		handle = wlan_vdev_get_dp_handle(vdev);
-		if (handle) {
-			ret = wma_vdev_set_param(wma->wmi_handle,
-					vdev_id,
-					WMI_VDEV_PARAM_FRAGMENTATION_THRESHOLD,
-					value);
-			if (QDF_IS_STATUS_ERROR(ret))
-				WMA_LOGE("Update cfg params failed for vdevId %d",
-					vdev_id);
-		}
+		ret = wma_vdev_set_param(wma->wmi_handle, vdev_id,
+					 WMI_VDEV_PARAM_FRAGMENTATION_THRESHOLD,
+					 value);
+		if (QDF_IS_STATUS_ERROR(ret))
+			WMA_LOGE("Update cfg params failed for vdevId %d",
+				 vdev_id);
 	}
 }
 
@@ -2342,8 +2325,7 @@ int wma_tbttoffset_update_event_handler(void *handle, uint8_t *event,
 		if (!intf[if_id].vdev)
 			continue;
 
-		if (!(vdev_map & 0x1) ||
-		    (!wlan_vdev_get_dp_handle(intf[if_id].vdev)))
+		if (!(vdev_map & 0x1))
 			continue;
 
 		bcn = intf[if_id].beacon;

+ 0 - 8
core/wma/src/wma_power.c

@@ -731,10 +731,6 @@ void wma_enable_sta_ps_mode(tp_wma_handle wma, tpEnablePsParams ps_req)
 		return;
 	}
 
-	if (!wlan_vdev_get_dp_handle(iface->vdev)) {
-		WMA_LOGE("vdev id %d is not active", vdev_id);
-		return;
-	}
 	if (eSIR_ADDON_NOTHING == ps_req->psSetting) {
 		if (qpower_config && iface->uapsd_cached_val) {
 			qpower_config = 0;
@@ -878,10 +874,6 @@ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req)
 		WMA_LOGE("%s: vdev is NULL for vdev_%d", __func__, vdev_id);
 		return;
 	}
-	if (!wlan_vdev_get_dp_handle(iface->vdev)) {
-		WMA_LOGE("vdev id %d is not active", vdev_id);
-		return;
-	}
 
 	/* Disable Sta Mode Power save */
 	ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, false);

+ 0 - 6
core/wma/src/wma_utils.c

@@ -2301,12 +2301,6 @@ QDF_STATUS wma_process_ll_stats_clear_req(tp_wma_handle wma,
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	if (!wlan_vdev_get_dp_handle(vdev)) {
-		WMA_LOGE("%s: vdev_id %d dp handle is NULL",
-			 __func__, clearReq->staId);
-		return QDF_STATUS_E_FAILURE;
-	}
-
 	cmd.stop_req = clearReq->stopReq;
 	cmd.vdev_id = clearReq->staId;
 	cmd.stats_clear_mask = clearReq->statsClearReqMask;