Browse Source

qcacld-3.0: Flush the delayed acs work during adapter deinit

Flush the delayed acs work during the adapter deinit process.

Change-Id: I9b415a9d1b4f59b4f028e882ad09cf7f782e67b6
CRs-Fixed: 2109432
Kiran Kumar Lokere 7 năm trước cách đây
mục cha
commit
85cb36bf6a
2 tập tin đã thay đổi với 16 bổ sung2 xóa
  1. 9 2
      core/hdd/src/wlan_hdd_cfg80211.c
  2. 7 0
      core/hdd/src/wlan_hdd_main.c

+ 9 - 2
core/hdd/src/wlan_hdd_cfg80211.c

@@ -1718,11 +1718,16 @@ static void wlan_hdd_cfg80211_start_pending_acs(struct work_struct *work);
 int wlan_hdd_cfg80211_start_acs(struct hdd_adapter *adapter)
 {
 
-	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+	struct hdd_context *hdd_ctx;
 	tsap_Config_t *sap_config;
 	tpWLAN_SAPEventCB acs_event_callback;
 	int status;
 
+	if (!adapter) {
+		hdd_err("adapater is NULL");
+		return -EINVAL;
+	}
+	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	sap_config = &adapter->sessionCtx.ap.sapConfig;
 	if (hdd_ctx->acs_policy.acs_channel)
 		sap_config->channel = hdd_ctx->acs_policy.acs_channel;
@@ -2639,6 +2644,9 @@ static void wlan_hdd_cfg80211_start_pending_acs(struct work_struct *work)
 {
 	struct hdd_adapter *adapter = container_of(work, struct hdd_adapter,
 							acs_pending_work.work);
+	if (!adapter)
+		return;
+	clear_bit(ACS_PENDING, &adapter->event_flags);
 	wlan_hdd_cfg80211_start_acs(adapter);
 }
 
@@ -2770,7 +2778,6 @@ void wlan_hdd_cfg80211_acs_ch_select_evt(struct hdd_adapter *adapter)
 		/* Lets give 500ms for OBSS + START_BSS to complete */
 		schedule_delayed_work(&con_sap_adapter->acs_pending_work,
 							msecs_to_jiffies(500));
-		clear_bit(ACS_PENDING, &con_sap_adapter->event_flags);
 	}
 }
 

+ 7 - 0
core/hdd/src/wlan_hdd_main.c

@@ -4382,6 +4382,13 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx, struct hdd_adapter *ada
 		/* Flush IPA exception path packets */
 		hdd_ipa_flush(hdd_ctx);
 	case QDF_P2P_GO_MODE:
+		if (QDF_SAP_MODE == adapter->device_mode) {
+			if (test_bit(ACS_PENDING, &adapter->event_flags)) {
+				cds_flush_delayed_work(
+						&adapter->acs_pending_work);
+				clear_bit(ACS_PENDING, &adapter->event_flags);
+			}
+		}
 		/* Any softap specific cleanup here... */
 		if (adapter->device_mode == QDF_P2P_GO_MODE)
 			wlan_hdd_cleanup_remain_on_channel_ctx(adapter);