Browse Source

qcacmn: Start Host wait timer and then send radar_params to FW

When radar is detected on a channel and the radar parameters are sent to
FW, the Host Wait Timer expires even though the action status is
received from FW. At this point, the VAP state machine sends a
multivdev restart on the target channel, and is in restart progress
substate.

Since the Host Timer expires due to some reason, radar detect event is
posted to vdev state machine, that is currently in restart progress
state and, this causes a target assert and leads to kernel panic.

This issue is solved by the following 2 ways:
1) Start the host wait timer first, and then send the radar found
   params to the target.
2) Check if dfs_is_host_wait_running is true, in the Host Wait Timer's
   timeout, and only then call the radar_found_action_generic API.

Change-Id: I9b93c7c1822966f7d6bc00c00229849fdb5627d9
CRs-Fixed: 2604173
Hariharan Basuthkar 5 years ago
parent
commit
a6d77e7dbd
1 changed files with 2 additions and 2 deletions
  1. 2 2
      umac/dfs/core/src/filtering/dfs_partial_offload_radar.c

+ 2 - 2
umac/dfs/core/src/filtering/dfs_partial_offload_radar.c

@@ -646,13 +646,13 @@ void dfs_radarfound_action_fcc(struct wlan_dfs *dfs, uint8_t seg_id)
 	qdf_mem_copy(&dfs->dfs_radar_found_chan, dfs->dfs_curchan,
 		     sizeof(dfs->dfs_radar_found_chan));
 	dfs_extract_radar_found_params(dfs, &params);
-	dfs_send_avg_params_to_fw(dfs, &params);
 	dfs->dfs_is_host_wait_running = 1;
-	dfs->dfs_seg_id = seg_id;
 	qdf_timer_mod(&dfs->dfs_host_wait_timer,
 		      (dfs->dfs_status_timeout_override ==
 		       -1) ? HOST_DFS_STATUS_WAIT_TIMER_MS :
 		      dfs->dfs_status_timeout_override);
+	dfs->dfs_seg_id = seg_id;
+	dfs_send_avg_params_to_fw(dfs, &params);
 }
 
 void dfs_host_wait_timer_reset(struct wlan_dfs *dfs)