summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVivek Natarajan2008-12-24 03:17:19 +0100
committerJohn W. Linville2009-01-29 21:58:48 +0100
commitd063ed0f0cd623b45edc6f4781dda6478c56bb4f (patch)
tree04c4eb5918d307b487f0590b4f1b57e8693bbc2a
parentmac80211: Scale down to non-HT association with TKIP/WEP as pairwise cipher (diff)
downloadkernel-qcow2-linux-d063ed0f0cd623b45edc6f4781dda6478c56bb4f.tar.gz
kernel-qcow2-linux-d063ed0f0cd623b45edc6f4781dda6478c56bb4f.tar.xz
kernel-qcow2-linux-d063ed0f0cd623b45edc6f4781dda6478c56bb4f.zip
mac80211: Reset the power save timer from master_start_xmit.
When a null data frame is generated from mac80211, it goes through master_start_xmit and not through subif_start_xmit. Hence for the power save timer to be triggered while sending this null data frame also, the timer has to be reset from master_start_xmit. Signed-off-by: Vivek Natarajan <vnatarajan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--net/mac80211/tx.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 4278e545638f..0bf2272200ad 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1296,6 +1296,19 @@ int ieee80211_master_start_xmit(struct sk_buff *skb, struct net_device *dev)
return 0;
}
+ if (!(local->hw.flags & IEEE80211_HW_NO_STACK_DYNAMIC_PS) &&
+ local->dynamic_ps_timeout > 0) {
+ if (local->hw.conf.flags & IEEE80211_CONF_PS) {
+ ieee80211_stop_queues_by_reason(&local->hw,
+ IEEE80211_QUEUE_STOP_REASON_PS);
+ queue_work(local->hw.workqueue,
+ &local->dynamic_ps_disable_work);
+ }
+
+ mod_timer(&local->dynamic_ps_timer, jiffies +
+ msecs_to_jiffies(local->dynamic_ps_timeout));
+ }
+
memset(info, 0, sizeof(*info));
info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
@@ -1475,19 +1488,6 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
goto fail;
}
- if (!(local->hw.flags & IEEE80211_HW_NO_STACK_DYNAMIC_PS) &&
- local->dynamic_ps_timeout > 0) {
- if (local->hw.conf.flags & IEEE80211_CONF_PS) {
- ieee80211_stop_queues_by_reason(&local->hw,
- IEEE80211_QUEUE_STOP_REASON_PS);
- queue_work(local->hw.workqueue,
- &local->dynamic_ps_disable_work);
- }
-
- mod_timer(&local->dynamic_ps_timer, jiffies +
- msecs_to_jiffies(local->dynamic_ps_timeout));
- }
-
nh_pos = skb_network_header(skb) - skb->data;
h_pos = skb_transport_header(skb) - skb->data;