瀏覽代碼

qcacld-3.0: Do not wait for peer deletion for SSR

When SSR is in progress, WMI commands for peer and vdev deletion
will not be sent to FW. Do not wait for peer deletion for it will
always lead to timeout since peer delete command will not be sent.
And the check is not needed since vdev delete command will not be
sent, either.

Change-Id: Ib6f921a7c7ff09bf30ed19b443a30542db2b51a3
CRs-Fixed: 2217366
Min Liu 7 年之前
父節點
當前提交
46ef0bf334
共有 1 個文件被更改,包括 14 次插入2 次删除
  1. 14 2
      core/wma/src/wma_dev_if.c

+ 14 - 2
core/wma/src/wma_dev_if.c

@@ -710,6 +710,9 @@ static void wma_force_vdev_cleanup(tp_wma_handle wma_handle, uint8_t vdev_id)
 					 wma_peer_remove_for_vdev_callback,
 					 wma_handle);
 
+	qdf_atomic_init(&iface->fw_peer_count);
+	qdf_event_destroy(&iface->fw_peer_delete_completion);
+
 VDEV_DETACH:
 	wma_cdp_vdev_detach(soc, wma_handle, vdev_id);
 }
@@ -729,8 +732,17 @@ void wma_vdev_wait_for_peer_delete_completion(tp_wma_handle wma_handle,
 {
 	struct wma_txrx_node *iface = &wma_handle->interfaces[vdev_id];
 
-	if (!iface) {
-		WMA_LOGE("%s: iface of vdev-%d is NULL", __func__, vdev_id);
+	/* Do NOT wait when SSR is in progress
+	 * since all WMI commands will be ignored and not sent to FW
+	 */
+	if (cds_is_driver_recovering()) {
+		WMA_LOGD("%s: SSR is in progress", __func__);
+		return;
+	}
+
+	if (!iface || !iface->vdev_active) {
+		WMA_LOGE("%s: iface of vdev-%d is not available",
+			 __func__, vdev_id);
 		return;
 	}