Bläddra i källkod

qcacmn: Fix DFS kernel panic

Analysis:
dfs_nol_timer_cleanup() calls dfs_nol_update(), which internally
calls a legacy function to update the scan channel list and sends
a WMI command to FW. However, from WIN side dfs_nol_timer_cleanup()
is also called after target stop, which leads to a kernel panic.

Solution:
Call dfs_nol_update() prior to target stop.

Initalize precac channel list during dfs reset.

Change-Id: If856d436ad215efa46cfc166d95bf3ccb4e7bf99
CRs-Fixed: 2096256
Shashikala Prabhu 7 år sedan
förälder
incheckning
c2fc6d09c6

+ 0 - 1
umac/dfs/core/src/misc/dfs.c

@@ -331,7 +331,6 @@ int dfs_attach(struct wlan_dfs *dfs)
 
 void dfs_stop(struct wlan_dfs *dfs)
 {
-	dfs_init_precac_list(dfs);
 	dfs_nol_timer_cleanup(dfs);
 	dfs_clear_nolhistory(dfs);
 }

+ 0 - 1
umac/dfs/core/src/misc/dfs_nol.c

@@ -495,7 +495,6 @@ void dfs_nol_timer_cleanup(struct wlan_dfs *dfs)
 		}
 	}
 	dfs->dfs_nol = NULL;
-	dfs_nol_update(dfs);
 }
 
 int dfs_get_rn_use_nol(struct wlan_dfs *dfs)

+ 3 - 0
umac/dfs/dispatcher/src/wlan_dfs_utils_api.c

@@ -46,6 +46,8 @@ QDF_STATUS utils_dfs_reset(struct wlan_objmgr_pdev *pdev)
 		return  QDF_STATUS_E_FAILURE;
 
 	dfs_reset(dfs);
+	dfs_nol_update(dfs);
+	dfs_init_precac_list(dfs);
 
 	return QDF_STATUS_SUCCESS;
 }
@@ -662,6 +664,7 @@ void dfs_clear_nol_channels(struct wlan_objmgr_pdev *pdev)
 
 	/* clear local cache first */
 	dfs_nol_timer_cleanup(dfs);
+	dfs_nol_update(dfs);
 
 	/*
 	 * update platform driver nol list with local cache which is zero,