From 269b020a618c451d1060eeb978db67c990f95cb4 Mon Sep 17 00:00:00 2001 From: Shashikala Prabhu Date: Mon, 21 Aug 2017 13:35:19 +0530 Subject: [PATCH] qcacmn: Cancel ZERO CAC NOL timer during wifi down Analysis: When AP detects the RADAR, it marks the channels as RADAR found and adds it to both NOL and precac NOL list and starts NOL and precac_nol timer. If the user brings down the radio while the channel is present in NOL list, only NOL timer gets cancelled. Precac NOL timer expires after wifi down and leads to a kernel panic. Solution: Cancel the zero cac NOL timer during wifi down Change-Id: Icf932e739910a51d9dc74cf5822133258c0ba3f0 CRs-Fixed: 2096256 --- umac/dfs/core/src/misc/dfs_zero_cac.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/umac/dfs/core/src/misc/dfs_zero_cac.c b/umac/dfs/core/src/misc/dfs_zero_cac.c index 4d371dae393b..7d0b08f777f8 100644 --- a/umac/dfs/core/src/misc/dfs_zero_cac.c +++ b/umac/dfs/core/src/misc/dfs_zero_cac.c @@ -96,11 +96,26 @@ void dfs_zero_cac_reset(struct wlan_dfs *dfs) { + struct dfs_precac_entry *tmp_precac_entry, *precac_entry; + dfs_get_override_precac_timeout(dfs, &(dfs->dfs_precac_timeout_override)); qdf_timer_stop(&dfs->dfs_precac_timer); dfs->dfs_precac_primary_freq = 0; dfs->dfs_precac_secondary_freq = 0; + + PRECAC_LIST_LOCK(dfs); + if (!TAILQ_EMPTY(&dfs->dfs_precac_nol_list)) + TAILQ_FOREACH_SAFE(precac_entry, + &dfs->dfs_precac_nol_list, + pe_list, + tmp_precac_entry) { + qdf_timer_stop(&precac_entry->precac_nol_timer); + TAILQ_REMOVE(&dfs->dfs_precac_required_list, + precac_entry, pe_list); + qdf_mem_free(precac_entry); + } + PRECAC_LIST_UNLOCK(dfs); } int dfs_override_precac_timeout(struct wlan_dfs *dfs, int precac_timeout)