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
This commit is contained in:

committed by
qcabuildsw

parent
818e16f225
commit
3d95b90726
@@ -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
|
||||
|
Reference in New Issue
Block a user