Bläddra i källkod

qcacld-3.0: wait tx complete before vdev stop

Before VDEV_STOP is initiated by host, sometimes there are
outstanding mgmt tx pkts left in FW.  need wait all tx
complete,  or peer vdev ref count keep held. In P2P GO/SAP mode,
no wait since wma->interfaces[session_id].delay_before_vdev_stop
is 0, ini relative cfg isn't passed to wma at all.

Change-Id: I1c3d137bb08624e30cc220e0fa0e31e6d6fc8a9d
CRs-Fixed: 2184096
Zhu Jianmin 7 år sedan
förälder
incheckning
a2f8e8dbe1
4 ändrade filer med 9 tillägg och 10 borttagningar
  1. 3 1
      core/cds/inc/cds_config.h
  2. 2 0
      core/hdd/src/wlan_hdd_main.c
  3. 0 7
      core/wma/src/wma_dev_if.c
  4. 4 2
      core/wma/src/wma_main.c

+ 3 - 1
core/cds/inc/cds_config.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018 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
@@ -110,6 +110,7 @@ enum active_bpf_mode {
  * @force_target_assert_enabled: Indicate whether target assert enabled or not
  * @bandcapability: Configured band by user
  * @rps_enabled: RPS enabled in SAP mode
+ * @delay_before_vdev_stop: wait time for tx complete before vdev stop
  * Structure for holding cds ini parameters.
  */
 
@@ -171,6 +172,7 @@ struct cds_config_info {
 	bool force_target_assert_enabled;
 	uint8_t bandcapability;
 	bool rps_enabled;
+	uint8_t delay_before_vdev_stop;
 };
 
 #ifdef WLAN_FEATURE_FILS_SK

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

@@ -8874,6 +8874,8 @@ static int hdd_update_cds_config(struct hdd_context *hdd_ctx)
 
 	cds_cfg->ito_repeat_count = hdd_ctx->config->ito_repeat_count;
 	cds_cfg->bandcapability = hdd_ctx->config->nBandCapability;
+	cds_cfg->delay_before_vdev_stop =
+		hdd_ctx->config->delay_before_vdev_stop;
 
 	hdd_ra_populate_cds_config(cds_cfg, hdd_ctx);
 	hdd_txrx_populate_cds_config(cds_cfg, hdd_ctx);

+ 0 - 7
core/wma/src/wma_dev_if.c

@@ -5327,7 +5327,6 @@ fail_del_bss_ho_fail:
 				   (void *)params, 0);
 }
 
-#ifdef WLAN_FEATURE_HOST_ROAM
 /**
  * wma_wait_tx_complete() - Wait till tx packets are drained
  * @wma: wma handle
@@ -5365,12 +5364,6 @@ static void wma_wait_tx_complete(tp_wma_handle wma,
 		max_wait_iterations--;
 	}
 }
-#else
-static void wma_wait_tx_complete(tp_wma_handle wma,
-				 uint32_t session_id)
-{
-}
-#endif
 /**
  * wma_delete_bss() - process delete bss request from upper layer
  * @wma: wma handle

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

@@ -2982,9 +2982,11 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
 		goto err_scn_context;
 	}
 
-	for (i = 0; i < wma_handle->max_bssid; ++i)
+	for (i = 0; i < wma_handle->max_bssid; ++i) {
 		wma_vdev_init(&wma_handle->interfaces[i]);
-
+		wma_handle->interfaces[i].delay_before_vdev_stop =
+			cds_cfg->delay_before_vdev_stop;
+	}
 	/* Register the debug print event handler */
 	wmi_unified_register_event_handler(wma_handle->wmi_handle,
 					wmi_debug_print_event_id,