qcacld-3.0: Avoid timer leak when psoc idle timeout happens in HL
In HL when psoc idle timeout is triggered, timer leak is detected and host triggers panic. When driver is loaded, upon device probe tx flow control timer is initialized. When there is no activity on interface psoc idle timeout is triggered and later during hdd_wlan_stop_modules host triggers panic since tx flow control timer still exists. tx flow control timer is deregistered in hdd_stop_adapter function which is not executed during hdd_wlan_stop_modules. Move tx flow control timer registration from hdd_open_adapter to hdd_start_adapter function to avoid timer leak and panic Change-Id: Id3677d09441e23f1e9e36cdf77e956d6871c46ec CRs-Fixed: 2415146
This commit is contained in:
parent
dae1dbd570
commit
b5a6124fde
@ -14227,8 +14227,10 @@ static int __wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy,
|
||||
|
||||
if (hdd_is_client_mode(adapter->device_mode)) {
|
||||
if (hdd_is_client_mode(new_mode)) {
|
||||
if (new_mode == QDF_IBSS_MODE)
|
||||
if (new_mode == QDF_IBSS_MODE) {
|
||||
hdd_deregister_hl_netdev_fc_timer(adapter);
|
||||
hdd_deregister_tx_flow_control(adapter);
|
||||
}
|
||||
|
||||
errno = hdd_change_adapter_mode(adapter, new_mode);
|
||||
if (errno) {
|
||||
|
@ -1869,6 +1869,10 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
|
||||
hdd_softap_tx_resume_cb,
|
||||
hdd_tx_flow_control_is_pause);
|
||||
|
||||
hdd_register_hl_netdev_fc_timer(
|
||||
adapter,
|
||||
hdd_tx_resume_timer_expired_handler);
|
||||
|
||||
/* @@@ need wep logic here to set privacy bit */
|
||||
qdf_status =
|
||||
hdd_softap_register_bc_sta(adapter,
|
||||
|
@ -5229,9 +5229,6 @@ struct hdd_adapter *hdd_open_adapter(struct hdd_context *hdd_ctx, uint8_t sessio
|
||||
hdd_err("Interface %s wow debug_fs init failed",
|
||||
netdev_name(adapter->dev));
|
||||
|
||||
hdd_register_hl_netdev_fc_timer(adapter,
|
||||
hdd_tx_resume_timer_expired_handler);
|
||||
|
||||
hdd_info("%s interface created. iftype: %d", netdev_name(adapter->dev),
|
||||
session_type);
|
||||
|
||||
@ -5447,6 +5444,8 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx,
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
hdd_err("Cannot flush PMKIDCache");
|
||||
|
||||
hdd_deregister_hl_netdev_fc_timer(adapter);
|
||||
|
||||
hdd_deregister_tx_flow_control(adapter);
|
||||
|
||||
#ifdef WLAN_OPEN_SOURCE
|
||||
@ -5488,6 +5487,7 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx,
|
||||
|
||||
case QDF_MONITOR_MODE:
|
||||
wlan_hdd_scan_abort(adapter);
|
||||
hdd_deregister_hl_netdev_fc_timer(adapter);
|
||||
hdd_deregister_tx_flow_control(adapter);
|
||||
hdd_vdev_destroy(adapter);
|
||||
break;
|
||||
@ -5522,6 +5522,7 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx,
|
||||
if (adapter->device_mode == QDF_P2P_GO_MODE)
|
||||
wlan_hdd_cleanup_remain_on_channel_ctx(adapter);
|
||||
|
||||
hdd_deregister_hl_netdev_fc_timer(adapter);
|
||||
hdd_deregister_tx_flow_control(adapter);
|
||||
hdd_destroy_acs_timer(adapter);
|
||||
|
||||
@ -5623,6 +5624,7 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx,
|
||||
cdp_clear_peer(cds_get_context(QDF_MODULE_ID_SOC),
|
||||
cds_get_context(QDF_MODULE_ID_TXRX),
|
||||
sta_ctx->conn_info.sta_id[0]);
|
||||
hdd_deregister_hl_netdev_fc_timer(adapter);
|
||||
hdd_deregister_tx_flow_control(adapter);
|
||||
hdd_vdev_destroy(adapter);
|
||||
break;
|
||||
@ -5630,8 +5632,6 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx,
|
||||
break;
|
||||
}
|
||||
|
||||
hdd_deregister_hl_netdev_fc_timer(adapter);
|
||||
|
||||
if (adapter->scan_info.default_scan_ies) {
|
||||
qdf_mem_free(adapter->scan_info.default_scan_ies);
|
||||
adapter->scan_info.default_scan_ies = NULL;
|
||||
@ -5863,6 +5863,7 @@ QDF_STATUS hdd_reset_all_adapters(struct hdd_context *hdd_ctx)
|
||||
hdd_stop_tsf_sync(adapter);
|
||||
|
||||
hdd_softap_deinit_tx_rx(adapter);
|
||||
hdd_deregister_hl_netdev_fc_timer(adapter);
|
||||
hdd_deregister_tx_flow_control(adapter);
|
||||
|
||||
/* Destroy vdev which will be recreated during reinit. */
|
||||
@ -6616,6 +6617,10 @@ QDF_STATUS hdd_start_all_adapters(struct hdd_context *hdd_ctx)
|
||||
hdd_tx_resume_cb,
|
||||
hdd_tx_flow_control_is_pause);
|
||||
|
||||
hdd_register_hl_netdev_fc_timer(
|
||||
adapter,
|
||||
hdd_tx_resume_timer_expired_handler);
|
||||
|
||||
hdd_lpass_notify_start(hdd_ctx, adapter);
|
||||
hdd_nud_ignore_tracking(adapter, false);
|
||||
break;
|
||||
@ -9623,6 +9628,9 @@ int hdd_start_station_adapter(struct hdd_adapter *adapter)
|
||||
hdd_tx_resume_cb,
|
||||
hdd_tx_flow_control_is_pause);
|
||||
|
||||
hdd_register_hl_netdev_fc_timer(adapter,
|
||||
hdd_tx_resume_timer_expired_handler);
|
||||
|
||||
hdd_exit();
|
||||
|
||||
return 0;
|
||||
@ -9693,6 +9701,9 @@ int hdd_start_ap_adapter(struct hdd_adapter *adapter)
|
||||
hdd_softap_tx_resume_cb,
|
||||
hdd_tx_flow_control_is_pause);
|
||||
|
||||
hdd_register_hl_netdev_fc_timer(adapter,
|
||||
hdd_tx_resume_timer_expired_handler);
|
||||
|
||||
hdd_exit();
|
||||
return 0;
|
||||
}
|
||||
|
@ -90,6 +90,7 @@ static int hdd_close_ndi(struct hdd_adapter *adapter)
|
||||
#ifdef WLAN_OPEN_SOURCE
|
||||
cancel_work_sync(&adapter->ipv4_notifier_work);
|
||||
#endif
|
||||
hdd_deregister_hl_netdev_fc_timer(adapter);
|
||||
hdd_deregister_tx_flow_control(adapter);
|
||||
|
||||
#ifdef WLAN_NS_OFFLOAD
|
||||
|
Loading…
Reference in New Issue
Block a user