Browse Source

qcacmn: Dont use vdev object in vdev delete response

As part of the new changes, vdev mlme object will be freed before
the vdev delete response is received from the firmware. Hence do
not use the vdev_mlme object in the vdev delete response handler.

Change-Id: I6b2db32ac0ef415bf1b879b2cd222de67d9a69b7
CRs-Fixed: 2563404
Arun Kumar Khandavalli 5 years ago
parent
commit
536903de91

+ 16 - 0
umac/mlme/include/wlan_mlme_cmn.h

@@ -72,6 +72,9 @@ struct mlme_ext_ops {
 	QDF_STATUS (*mlme_vdev_enqueue_exp_cmd)(
 	QDF_STATUS (*mlme_vdev_enqueue_exp_cmd)(
 				struct vdev_mlme_obj *vdev_mlme,
 				struct vdev_mlme_obj *vdev_mlme,
 				uint8_t cmd_type);
 				uint8_t cmd_type);
+	QDF_STATUS (*mlme_vdev_ext_delete_rsp)(
+					   struct wlan_objmgr_psoc *psoc,
+					   struct vdev_delete_response *rsp);
 };
 };
 
 
 /**
 /**
@@ -243,4 +246,17 @@ QDF_STATUS wlan_cmn_mlme_init(void);
  *         FAILURE, if registration fails
  *         FAILURE, if registration fails
  */
  */
 QDF_STATUS wlan_cmn_mlme_deinit(void);
 QDF_STATUS wlan_cmn_mlme_deinit(void);
+
+/**
+ * mlme_vdev_ops_ext_hdl_delete_rsp - Vdev Delete response ext handler
+ * @psoc: PSOC object
+ * @rsp: Vdev delete response received from the firmware
+ *
+ * API to invoke the legacy delete response handler for legacy cleanup
+ *
+ * Return: SUCCESS on successful deletion
+ *         FAILURE, if deletion fails
+ */
+QDF_STATUS mlme_vdev_ops_ext_hdl_delete_rsp(struct wlan_objmgr_psoc *psoc,
+					    struct vdev_delete_response *rsp);
 #endif
 #endif

+ 0 - 3
umac/mlme/include/wlan_vdev_mlme.h

@@ -509,9 +509,6 @@ struct vdev_mlme_ops {
 	QDF_STATUS (*mlme_vdev_notify_down_complete)(
 	QDF_STATUS (*mlme_vdev_notify_down_complete)(
 				struct vdev_mlme_obj *vdev_mlme,
 				struct vdev_mlme_obj *vdev_mlme,
 				uint16_t event_data_len, void *event_data);
 				uint16_t event_data_len, void *event_data);
-	QDF_STATUS (*mlme_vdev_ext_delete_rsp)(
-				struct vdev_mlme_obj *vdev_mlme,
-				struct vdev_delete_response *rsp);
 	QDF_STATUS (*mlme_vdev_ext_stop_rsp)(
 	QDF_STATUS (*mlme_vdev_ext_stop_rsp)(
 				struct vdev_mlme_obj *vdev_mlme,
 				struct vdev_mlme_obj *vdev_mlme,
 				struct vdev_stop_response *rsp);
 				struct vdev_stop_response *rsp);

+ 11 - 0
umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c

@@ -194,6 +194,17 @@ QDF_STATUS mlme_vdev_enqueue_exp_ser_cmd(struct vdev_mlme_obj *vdev_mlme,
 	return ret;
 	return ret;
 }
 }
 
 
+QDF_STATUS mlme_vdev_ops_ext_hdl_delete_rsp(struct wlan_objmgr_psoc *psoc,
+					    struct vdev_delete_response *rsp)
+{
+	QDF_STATUS ret = QDF_STATUS_SUCCESS;
+
+	if ((glbl_ops) && glbl_ops->mlme_vdev_ext_delete_rsp)
+		ret = glbl_ops->mlme_vdev_ext_delete_rsp(psoc, rsp);
+
+	return ret;
+}
+
 void mlme_set_ops_register_cb(mlme_get_global_ops_cb ops_cb)
 void mlme_set_ops_register_cb(mlme_get_global_ops_cb ops_cb)
 {
 {
 	glbl_ops_cb = ops_cb;
 	glbl_ops_cb = ops_cb;

+ 2 - 30
umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_rx_api.c

@@ -30,6 +30,7 @@
 #include <target_if_vdev_mgr_tx_ops.h>
 #include <target_if_vdev_mgr_tx_ops.h>
 #include <wlan_psoc_mlme_main.h>
 #include <wlan_psoc_mlme_main.h>
 #include <include/wlan_psoc_mlme.h>
 #include <include/wlan_psoc_mlme.h>
+#include <include/wlan_mlme_cmn.h>
 
 
 static struct vdev_response_timer *
 static struct vdev_response_timer *
 tgt_vdev_mgr_get_response_timer_info(struct wlan_objmgr_psoc *psoc,
 tgt_vdev_mgr_get_response_timer_info(struct wlan_objmgr_psoc *psoc,
@@ -126,37 +127,8 @@ static QDF_STATUS tgt_vdev_mgr_delete_response_handler(
 					struct vdev_delete_response *rsp)
 					struct vdev_delete_response *rsp)
 {
 {
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
-	struct vdev_mlme_obj *vdev_mlme;
-	struct wlan_objmgr_vdev *vdev;
-
-	if (!rsp || !psoc) {
-		mlme_err("Invalid input");
-		return QDF_STATUS_E_INVAL;
-	}
-
-	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc,
-						    rsp->vdev_id,
-						    WLAN_VDEV_TARGET_IF_ID);
-	if (!vdev) {
-		mlme_err("VDEV is NULL");
-		return QDF_STATUS_E_FAILURE;
-	}
 
 
-	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
-	if (!vdev_mlme) {
-		mlme_err("VDEV_%d: PSOC_%d VDEV_MLME is NULL", rsp->vdev_id,
-			 wlan_psoc_get_id(psoc));
-		goto tgt_vdev_mgr_delete_response_handler_end;
-	}
-
-	if ((vdev_mlme->ops) &&
-	    vdev_mlme->ops->mlme_vdev_ext_delete_rsp)
-		status = vdev_mlme->ops->mlme_vdev_ext_delete_rsp(
-								vdev_mlme,
-								rsp);
-
-tgt_vdev_mgr_delete_response_handler_end:
-	wlan_objmgr_vdev_release_ref(vdev, WLAN_VDEV_TARGET_IF_ID);
+	status = mlme_vdev_ops_ext_hdl_delete_rsp(psoc, rsp);
 	return status;
 	return status;
 }
 }