Explorar o código

qcacmn: Define pointer p_dcs_im_stats instead of dcs_im_stats

Both im_intfr_cnt and im_samp_cnt need to store for following
dcs event process, dcs_im_stats is a local variable, so both
im_intfr_cnt and im_samp_cnt value will be missing when function
wlan_dcs_wlan_interference_process return.

Fix is to define pointer p_dcs_im_stats for use.

Change-Id: I39622fbf0153271f27a03387ace4a270a912b6ff
CRs-Fixed: 2638316
hqu %!s(int64=5) %!d(string=hai) anos
pai
achega
a3dc09cce3
Modificáronse 1 ficheiros con 14 adicións e 13 borrados
  1. 14 13
      umac/dcs/core/src/wlan_dcs.c

+ 14 - 13
umac/dcs/core/src/wlan_dcs.c

@@ -274,7 +274,7 @@ wlan_dcs_wlan_interference_process(
 {
 	struct wlan_host_dcs_im_tgt_stats *prev_stats;
 	struct pdev_dcs_params dcs_host_params;
-	struct pdev_dcs_im_stats dcs_im_stats;
+	struct pdev_dcs_im_stats *p_dcs_im_stats;
 	bool start_dcs_cbk_handler = false;
 
 	uint32_t reg_tsf_delta = 0;
@@ -311,7 +311,7 @@ wlan_dcs_wlan_interference_process(
 	}
 
 	dcs_host_params = dcs_pdev_priv->dcs_host_params;
-	dcs_im_stats = dcs_pdev_priv->dcs_im_stats;
+	p_dcs_im_stats = &dcs_pdev_priv->dcs_im_stats;
 	prev_stats =  &dcs_pdev_priv->dcs_im_stats.prev_dcs_im_stats;
 
 	if (unlikely(dcs_host_params.dcs_debug >= DCS_DEBUG_VERBOSE))
@@ -512,16 +512,16 @@ wlan_dcs_wlan_interference_process(
 
 	if (reg_unused_cu >= dcs_host_params.coch_intfr_threshold)
 		/* Quickly reach to decision */
-		dcs_im_stats.im_intfr_cnt += 2;
+		p_dcs_im_stats->im_intfr_cnt += 2;
 	else if (too_many_phy_errors &&
 		 (((total_wasted_cu >
 			(dcs_host_params.coch_intfr_threshold + 10)) &&
 		((reg_tx_cu + reg_rx_cu) > dcs_host_params.user_max_cu)) ||
 		((reg_tx_cu > DCS_TX_MAX_CU) &&
 			(tx_err >= dcs_host_params.tx_err_threshold))))
-		dcs_im_stats.im_intfr_cnt++;
+		p_dcs_im_stats->im_intfr_cnt++;
 
-	if (dcs_im_stats.im_intfr_cnt >=
+	if (p_dcs_im_stats->im_intfr_cnt >=
 		dcs_host_params.intfr_detection_threshold) {
 		if (unlikely(dcs_host_params.dcs_debug >= DCS_DEBUG_CRITICAL)) {
 			dcs_debug("interference threshold exceeded");
@@ -530,8 +530,8 @@ wlan_dcs_wlan_interference_process(
 				  total_wasted_cu, reg_tx_cu, reg_rx_cu);
 		}
 
-		dcs_im_stats.im_intfr_cnt = 0;
-		dcs_im_stats.im_samp_cnt = 0;
+		p_dcs_im_stats->im_intfr_cnt = 0;
+		p_dcs_im_stats->im_samp_cnt = 0;
 		/*
 		 * Once the interference is detected, change the channel, as on
 		 * today this is common routine for wirelesslan and
@@ -539,22 +539,23 @@ wlan_dcs_wlan_interference_process(
 		 * because of the DA code, which is using the same function.
 		 */
 		start_dcs_cbk_handler = true;
-	} else if (!dcs_im_stats.im_intfr_cnt ||
-			dcs_im_stats.im_samp_cnt >=
+	} else if (0 == p_dcs_im_stats->im_intfr_cnt ||
+			p_dcs_im_stats->im_samp_cnt >=
 				dcs_host_params.intfr_detection_window) {
-		dcs_im_stats.im_intfr_cnt = 0;
-		dcs_im_stats.im_samp_cnt = 0;
+		p_dcs_im_stats->im_intfr_cnt = 0;
+		p_dcs_im_stats->im_samp_cnt = 0;
 	}
 
 	/* Count the current run too */
-	dcs_im_stats.im_samp_cnt++;
+	p_dcs_im_stats->im_samp_cnt++;
 
 	/* Copy the stats for next cycle */
 	wlan_dcs_im_copy_stats(prev_stats, curr_stats);
 
 	if (unlikely(dcs_host_params.dcs_debug >= DCS_DEBUG_VERBOSE))
 		dcs_debug("intfr_count: %u, sample_count: %u",
-			  dcs_im_stats.im_intfr_cnt, dcs_im_stats.im_samp_cnt);
+			  p_dcs_im_stats->im_intfr_cnt,
+			  p_dcs_im_stats->im_samp_cnt);
 
 end:
 	return start_dcs_cbk_handler;