For drivers setting IEEE80211_HW_PS_NULLFUNC_STACK, a null data frame with PM bit off has to be sent before sending normal data frames. If it is done in ps_disable_work, the actual data frame would be queued first before this work is executed and hence null data frame will be queued later. And also, this null data frame has to be sent only after clearing CONF_PS. Hence, directly clearing CONF_PS and sending null data frame in ieee80211_xmit seems to function properly. Signed-off-by: Vivek Natarajan <vnatarajan@xxxxxxxxxxx> --- net/mac80211/tx.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 943def2..51f537c 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -1433,10 +1433,10 @@ static void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, if (need_dynamic_ps(local)) { if (local->hw.conf.flags & IEEE80211_CONF_PS) { - ieee80211_stop_queues_by_reason(&local->hw, - IEEE80211_QUEUE_STOP_REASON_PS); - ieee80211_queue_work(&local->hw, - &local->dynamic_ps_disable_work); + local->hw.conf.flags &= ~IEEE80211_CONF_PS; + ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS); + if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) + ieee80211_send_nullfunc(local, sdata, 0); } mod_timer(&local->dynamic_ps_timer, jiffies + -- 1.6.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html