瀏覽代碼

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
Shashikala Prabhu 7 年之前
父節點
當前提交
269b020a61
共有 1 個文件被更改,包括 15 次插入0 次删除
  1. 15 0
      umac/dfs/core/src/misc/dfs_zero_cac.c

+ 15 - 0
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)