Prechádzať zdrojové kódy

qcacld-3.0: Initialize tdls global context variables after SSR

After SSR is done all the tdls global context variables are
not initialized in wlan_hdd_tdls_init() that can create
problem in TDLS.

Fix is to initialize tdls global context variables after SSR.

Change-Id: I6e777d4d61876ea85300e587c5d720e89bad3431
CRs-Fixed: 1116756
Nitesh Shah 8 rokov pred
rodič
commit
d1266d7e62

+ 2 - 2
core/hdd/inc/wlan_hdd_tdls.h

@@ -720,7 +720,7 @@ void wlan_hdd_tdls_update_tx_pkt_cnt(hdd_adapter_t *adapter,
 void wlan_hdd_tdls_update_rx_pkt_cnt(hdd_adapter_t *adapter,
 				     struct sk_buff *skb);
 int hdd_set_tdls_scan_type(hdd_context_t *hdd_ctx, int val);
-void hdd_tdls_context_init(hdd_context_t *hdd_ctx);
+void hdd_tdls_context_init(hdd_context_t *hdd_ctx, bool ssr);
 void hdd_tdls_context_destroy(hdd_context_t *hdd_ctx);
 int wlan_hdd_tdls_antenna_switch(hdd_context_t *hdd_ctx,
 				 hdd_adapter_t *adapter,
@@ -791,7 +791,7 @@ static inline void wlan_hdd_tdls_update_rx_pkt_cnt(hdd_adapter_t *adapter,
 						   struct sk_buff *skb)
 {
 }
-static inline void hdd_tdls_context_init(hdd_context_t *hdd_ctx) { }
+static inline void hdd_tdls_context_init(hdd_context_t *hdd_ctx, bool ssr) { }
 static inline void hdd_tdls_context_destroy(hdd_context_t *hdd_ctx) { }
 
 static inline int wlan_hdd_tdls_antenna_switch(hdd_context_t *hdd_ctx,

+ 1 - 1
core/hdd/src/wlan_hdd_main.c

@@ -6571,7 +6571,7 @@ static int hdd_context_init(hdd_context_t *hdd_ctx)
 	if (ret)
 		goto list_destroy;
 
-	hdd_tdls_context_init(hdd_ctx);
+	hdd_tdls_context_init(hdd_ctx, false);
 
 	hdd_rx_wake_lock_create(hdd_ctx);
 

+ 7 - 3
core/hdd/src/wlan_hdd_tdls.c

@@ -618,12 +618,13 @@ static void wlan_hdd_tdls_del_non_forced_peers(tdlsCtx_t *hdd_tdls_ctx)
 /**
  * hdd_tdls_context_init() - Init TDLS context
  * @hdd_ctx:	HDD context
+ * @ssr:	SSR case
  *
  * Initialize TDLS global context.
  *
  * Return: None
  */
-void hdd_tdls_context_init(hdd_context_t *hdd_ctx)
+void hdd_tdls_context_init(hdd_context_t *hdd_ctx, bool ssr)
 {
 	uint8_t sta_idx;
 
@@ -639,7 +640,6 @@ void hdd_tdls_context_init(hdd_context_t *hdd_ctx)
 	hdd_ctx->tdls_scan_ctxt.reject = 0;
 	hdd_ctx->tdls_scan_ctxt.source = 0;
 	hdd_ctx->tdls_scan_ctxt.scan_request = NULL;
-	hdd_ctx->tdls_external_peer_count = 0;
 	hdd_ctx->set_state_info.set_state_cnt = 0;
 	hdd_ctx->set_state_info.vdev_id = 0;
 	hdd_ctx->tdls_nss_teardown_complete = false;
@@ -661,6 +661,10 @@ void hdd_tdls_context_init(hdd_context_t *hdd_ctx)
 			     QDF_MAC_ADDR_SIZE);
 	}
 
+	/* Don't reset TDLS external peer count for SSR case */
+	if (!ssr)
+		hdd_ctx->tdls_external_peer_count = 0;
+
 	/* This flag will set  be true, only when device operates in
 	 * standalone STA mode
 	 */
@@ -762,7 +766,7 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter)
 
 		wlan_hdd_tdls_del_non_forced_peers(pHddTdlsCtx);
 
-		pHddCtx->connected_peer_count = 0;
+		hdd_tdls_context_init(pHddCtx, true);
 	}
 
 	sme_set_tdls_power_save_prohibited(WLAN_HDD_GET_HAL_CTX(pAdapter),