소스 검색

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 년 전
부모
커밋
c2fc6d09c6
3개의 변경된 파일3개의 추가작업 그리고 2개의 파일을 삭제
  1. 0 1
      umac/dfs/core/src/misc/dfs.c
  2. 0 1
      umac/dfs/core/src/misc/dfs_nol.c
  3. 3 0
      umac/dfs/dispatcher/src/wlan_dfs_utils_api.c

+ 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,