Forráskód Böngészése

qcacld-3.0: Post wma_vdev_detach_callback() to driver scheduler

To avoid wma_vdev_detach_callback() is run under interrupt
context, post wma_vdev_detach_callback() to driver scheduler
when vdev delete is failed to send to FW.

Change-Id: I87a603de326789ac43dac34de31eb564f13d11f5
CRs-Fixed: 3308547
Qun Zhang 2 éve
szülő
commit
d0790fd3ac
1 módosított fájl, 33 hozzáadás és 3 törlés
  1. 33 3
      components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c

+ 33 - 3
components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c

@@ -1425,6 +1425,38 @@ QDF_STATUS vdevmgr_mlme_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
 	return status;
 }
 
+static void
+mlme_wma_vdev_detach_post_cb(struct scheduler_msg *msg)
+{
+	struct vdev_delete_response rsp = {0};
+
+	if (!msg) {
+		mlme_err("Msg is NULL");
+		return;
+	}
+
+	rsp.vdev_id = msg->bodyval;
+	wma_vdev_detach_callback(&rsp);
+}
+
+static void mlme_wma_vdev_detach_handler(uint8_t vdev_id)
+{
+	struct scheduler_msg msg = {0};
+
+	msg.bodyptr = NULL;
+	msg.bodyval = vdev_id;
+	msg.callback = (scheduler_msg_process_fn_t)
+			mlme_wma_vdev_detach_post_cb;
+
+	if (scheduler_post_message(QDF_MODULE_ID_MLME,
+				   QDF_MODULE_ID_TARGET_IF,
+				   QDF_MODULE_ID_TARGET_IF, &msg) ==
+				   QDF_STATUS_SUCCESS)
+		return;
+
+	mlme_err("Failed to post wma vdev detach");
+}
+
 /**
  * vdevmgr_mlme_ext_hdl_destroy () - Destroy mlme legacy priv object
  * @vdev_mlme: vdev mlme object
@@ -1435,7 +1467,6 @@ static
 QDF_STATUS vdevmgr_mlme_ext_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
 {
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
-	struct vdev_delete_response rsp;
 	uint8_t vdev_id;
 
 	vdev_id = vdev_mlme->vdev->vdev_objmgr.vdev_id;
@@ -1448,8 +1479,7 @@ QDF_STATUS vdevmgr_mlme_ext_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
 	status = vdev_mgr_delete_send(vdev_mlme);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		mlme_err("Failed to send vdev delete to firmware");
-			 rsp.vdev_id = vdev_id;
-		wma_vdev_detach_callback(&rsp);
+		mlme_wma_vdev_detach_handler(vdev_id);
 	}
 
 	mlme_ext_handler_destroy(vdev_mlme);