Преглед на файлове

qcacld-3.0: Do LRO enable and disable on iface up and down

In case of dynamic mode driver load/unload, a timer is started
whenever driver is loaded. If some iface don't come up in certain
amount of time, this timer expires resulting in cleanup of hif_softc
structure. This structure has LRO flush callback stored in it which
also gets removed as part of cleanup. As this callback is stored only
at the time of driver load, this cause a break in LRO functionality
and also an assert in HOST driver as driver is trying to remove the
callback at the time of driver unload which has already been removed
at the time of timer expiration.

Do LRO enable and disable at the time of ifconfig up and ifconfig
down. This ensures that even after the modules are cleaned when
timer expires, the callback is registered again at the time of
ifconfig up.

Change-Id: I91116d4ff4fe8f24671f63b2c73759fe9e088172
CRs-Fixed: 1059720
Himanshu Agarwal преди 8 години
родител
ревизия
3d95b90726
променени са 1 файла, в които са добавени 7 реда и са изтрити 5 реда
  1. 7 5
      core/hdd/src/wlan_hdd_main.c

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

@@ -2629,13 +2629,17 @@ QDF_STATUS hdd_init_station_mode(hdd_adapter_t *adapter)
 	if (status != QDF_STATUS_SUCCESS)
 		goto error_tdls_init;
 
+	status = hdd_lro_enable(hdd_ctx, adapter);
+	if (status != QDF_STATUS_SUCCESS)
+		goto error_lro_enable;
+
 	return QDF_STATUS_SUCCESS;
 
-#ifdef FEATURE_WLAN_TDLS
+error_lro_enable:
+	wlan_hdd_tdls_exit(adapter);
 error_tdls_init:
 	clear_bit(WMM_INIT_DONE, &adapter->event_flags);
 	hdd_wmm_adapter_close(adapter);
-#endif
 error_wmm_init:
 	clear_bit(INIT_TX_RX_SUCCESS, &adapter->event_flags);
 	hdd_deinit_tx_rx(adapter);
@@ -2787,7 +2791,6 @@ void hdd_cleanup_adapter(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter,
 		return;
 	}
 
-	hdd_lro_disable(hdd_ctx, adapter);
 	hdd_debugfs_exit(adapter);
 	/*
 	 * The adapter is marked as closed. When hdd_wlan_exit() call returns,
@@ -3098,8 +3101,6 @@ hdd_adapter_t *hdd_open_adapter(hdd_context_t *hdd_ctx, uint8_t session_type,
 				goto err_free_netdev;
 		}
 
-		hdd_lro_enable(hdd_ctx, adapter);
-
 		/*
 		 * Workqueue which gets scheduled in IPv4 notification
 		 * callback
@@ -3440,6 +3441,7 @@ QDF_STATUS hdd_stop_adapter(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter,
 			hdd_abort_mac_scan(hdd_ctx, adapter->sessionId,
 					   eCSR_SCAN_ABORT_DEFAULT);
 		}
+		hdd_lro_disable(hdd_ctx, adapter);
 		wlan_hdd_cleanup_remain_on_channel_ctx(adapter);
 
 #ifdef WLAN_OPEN_SOURCE