Browse Source

qcacld-3.0: Optimize NAN state machine when driver recovers

Currently, host driver sends NAN enable and disable request to
firmware and wait for its response to change the NAN state in
driver. But, when firmware is down (during SSR), driver is in
recovery state and so, timeout occurs while waiting for response.

To fix this, driver does not need to wait for NAN enable/disable
response from firmware in recovery state. It can directly take the
action and change the NAN state machine. Hence, add flag to check
the driver recovery state. If recovery is in progress, then driver
does not wait for firmware NAN enable/ disable responses.

Change-Id: I0325240cc082d8ef91d48793d3da2eea552d59cd
CRs-Fixed: 3307543
Rahul Gusain 2 years ago
parent
commit
87a052f1f5
1 changed files with 8 additions and 5 deletions
  1. 8 5
      components/nan/dispatcher/src/nan_ucfg_api.c

+ 8 - 5
components/nan/dispatcher/src/nan_ucfg_api.c

@@ -734,7 +734,8 @@ QDF_STATUS ucfg_nan_discovery_req(void *in_req, uint32_t req_type)
 		.priv_size = 0,
 		.timeout_ms = 4000,
 	};
-	int err;
+	int err = 0;
+	bool recovery;
 
 	if (!in_req) {
 		nan_alert("NAN Discovery req is null");
@@ -869,10 +870,12 @@ post_msg:
 	}
 
 	if (req_type != NAN_GENERIC_REQ) {
-		err = osif_request_wait_for_response(request);
-		if (err) {
-			nan_debug("NAN request: %u timed out: %d",
-				  req_type, err);
+		recovery = cds_is_driver_recovering();
+		if (!recovery)
+			err = osif_request_wait_for_response(request);
+		if (recovery || err) {
+			nan_debug("NAN request: %u recovery %d or timed out %d",
+				  req_type, recovery, err);
 
 			if (req_type == NAN_ENABLE_REQ) {
 				nan_set_discovery_state(psoc,