diff --git a/umac/dfs/core/src/filtering/dfs_init.c b/umac/dfs/core/src/filtering/dfs_init.c index f9302b27dc84..5cf2dca690c1 100644 --- a/umac/dfs/core/src/filtering/dfs_init.c +++ b/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 = (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; + dfs->dfs_b5radars = NULL; } + + 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;