فهرست منبع

qcacmn: Reset delayline even for zero bin5 radars

It is valid for dfs->dfs_rinfo.rn_numbin5radars to be 0. If it is zero
then the malloc returns NULL and we skip dfs_reset_alldelaylines.

Skip dfs_reset_alldelaylines in case of non-zero malloc failures. Also
move the dfs->dfs_b5radars NULL check just before accessing
dfs->dfs_b5radars memory.

Change-Id: I0aba9d2357672e2c5bc6c5c3857cb06194381e2f
CRs-Fixed: 2215846
Abhijit Pradhan 7 سال پیش
والد
کامیت
2ed63d0e1a
1فایلهای تغییر یافته به همراه22 افزوده شده و 13 حذف شده
  1. 22 13
      umac/dfs/core/src/filtering/dfs_init.c

+ 22 - 13
umac/dfs/core/src/filtering/dfs_init.c

@@ -61,12 +61,6 @@ void dfs_reset_alldelaylines(struct wlan_dfs *dfs)
 		return;
 	}
 
-	if (!(dfs->dfs_b5radars)) {
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,  "pl==NULL, b5radars=%pK",
-				dfs->dfs_b5radars);
-		return;
-	}
-
 	/* Reset the pulse log. */
 	pl->pl_firstelem = pl->pl_numelems = 0;
 	pl->pl_lastelem = DFS_MAX_PULSE_BUFFER_MASK;
@@ -78,6 +72,12 @@ void dfs_reset_alldelaylines(struct wlan_dfs *dfs)
 		}
 	}
 
+	if (!(dfs->dfs_b5radars)) {
+		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,  "b5radars=%pK",
+				dfs->dfs_b5radars);
+		return;
+	}
+
 	for (i = 0; i < dfs->dfs_rinfo.rn_numbin5radars; i++) {
 		qdf_mem_zero(&(dfs->dfs_b5radars[i].br_elems[0]),
 				sizeof(struct dfs_bin5elem) * DFS_MAX_B5_SIZE);
@@ -337,16 +337,25 @@ int dfs_init_radar_filters(struct wlan_dfs *dfs,
 	dfs_print_filters(dfs);
 
 	dfs->dfs_rinfo.rn_numbin5radars  = numb5radars;
-	if (dfs->dfs_b5radars)
+	if (dfs->dfs_b5radars) {
 		qdf_mem_free(dfs->dfs_b5radars);
+		dfs->dfs_b5radars = NULL;
+	}
 
-	dfs->dfs_b5radars = (struct dfs_bin5radars *)qdf_mem_malloc(
-			numb5radars * sizeof(struct dfs_bin5radars));
-	if (!(dfs->dfs_b5radars)) {
-		dfs_alert(dfs, WLAN_DEBUG_DFS_ALWAYS,
-				"cannot allocate memory for bin5 radars");
-		goto bad4;
+	if (numb5radars) {
+		dfs->dfs_b5radars = (struct dfs_bin5radars *)qdf_mem_malloc(
+				numb5radars * sizeof(struct dfs_bin5radars));
+		/*
+		 * Malloc can return NULL if numb5radars is zero. But we still
+		 * want to reset the delay lines.
+		 */
+		if (!(dfs->dfs_b5radars)) {
+			dfs_alert(dfs, WLAN_DEBUG_DFS_ALWAYS,
+					"cannot allocate memory for bin5 radars");
+			goto bad4;
+		}
 	}
+
 	for (n = 0; n < numb5radars; n++) {
 		dfs->dfs_b5radars[n].br_pulse = b5pulses[n];
 		dfs->dfs_b5radars[n].br_pulse.b5_timewindow *= 1000000;