diff options
Diffstat (limited to 'net/mac80211/mlme.c')
| -rw-r--r-- | net/mac80211/mlme.c | 26 | 
1 files changed, 9 insertions, 17 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 64d92d5a7f4..a41f234bd48 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -90,20 +90,11 @@ enum rx_mgmt_action {  	/* no action required */  	RX_MGMT_NONE, -	/* caller must call cfg80211_send_rx_auth() */ -	RX_MGMT_CFG80211_AUTH, - -	/* caller must call cfg80211_send_rx_assoc() */ -	RX_MGMT_CFG80211_ASSOC, -  	/* caller must call cfg80211_send_deauth() */  	RX_MGMT_CFG80211_DEAUTH,  	/* caller must call cfg80211_send_disassoc() */  	RX_MGMT_CFG80211_DISASSOC, - -	/* caller must tell cfg80211 about internal error */ -	RX_MGMT_CFG80211_ASSOC_ERROR,  };  /* utils */ @@ -770,15 +761,16 @@ void ieee80211_dynamic_ps_enable_work(struct work_struct *work)  	if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) &&  	    (!(ifmgd->flags & IEEE80211_STA_NULLFUNC_ACKED))) {  		netif_tx_stop_all_queues(sdata->dev); -		/* -		 * Flush all the frames queued in the driver before -		 * going to power save -		 */ -		drv_flush(local, false); -		ieee80211_send_nullfunc(local, sdata, 1); -		/* Flush once again to get the tx status of nullfunc frame */ -		drv_flush(local, false); +		if (drv_tx_frames_pending(local)) +			mod_timer(&local->dynamic_ps_timer, jiffies + +				  msecs_to_jiffies( +				  local->hw.conf.dynamic_ps_timeout)); +		else { +			ieee80211_send_nullfunc(local, sdata, 1); +			/* Flush to get the tx status of nullfunc frame */ +			drv_flush(local, false); +		}  	}  	if (!((local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) &&  |