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
2017-08-19 12:20:17 +05:30
committed by snandini
コミット c2fc6d09c6
3個のファイルの変更3行の追加2行の削除

ファイルの表示

@@ -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);
}

ファイルの表示

@@ -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)

ファイルの表示

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