diff options
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/utils.c')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/utils.c | 13 | 
1 files changed, 12 insertions, 1 deletions
| diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c index d46115e2d69e..03ffd84786ca 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c @@ -1134,9 +1134,18 @@ unsigned int iwl_mvm_get_wd_timeout(struct iwl_mvm *mvm,  	unsigned int default_timeout =  		cmd_q ? IWL_DEF_WD_TIMEOUT : mvm->cfg->base_params->wd_timeout; -	if (!iwl_fw_dbg_trigger_enabled(mvm->fw, FW_DBG_TRIGGER_TXQ_TIMERS)) +	if (!iwl_fw_dbg_trigger_enabled(mvm->fw, FW_DBG_TRIGGER_TXQ_TIMERS)) { +		/* +		 * We can't know when the station is asleep or awake, so we +		 * must disable the queue hang detection. +		 */ +		if (fw_has_capa(&mvm->fw->ucode_capa, +				IWL_UCODE_TLV_CAPA_STA_PM_NOTIF) && +		    vif && vif->type == NL80211_IFTYPE_AP) +			return IWL_WATCHDOG_DISABLED;  		return iwlmvm_mod_params.tfd_q_hang_detect ?  			default_timeout : IWL_WATCHDOG_DISABLED; +	}  	trigger = iwl_fw_dbg_get_trigger(mvm->fw, FW_DBG_TRIGGER_TXQ_TIMERS);  	txq_timer = (void *)trigger->data; @@ -1163,6 +1172,8 @@ unsigned int iwl_mvm_get_wd_timeout(struct iwl_mvm *mvm,  		return le32_to_cpu(txq_timer->p2p_go);  	case NL80211_IFTYPE_P2P_DEVICE:  		return le32_to_cpu(txq_timer->p2p_device); +	case NL80211_IFTYPE_MONITOR: +		return default_timeout;  	default:  		WARN_ON(1);  		return mvm->cfg->base_params->wd_timeout; |