aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/sta_info.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-09-06 08:13:06 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-09-14 13:56:31 -0400
commitcd0b8d89c75233d8468f3c585e4e022f6779ac84 (patch)
tree485d0b6c338aa07fc40b2dfc0901408e75b64852 /net/mac80211/sta_info.c
parent0eff8fcd290dc7f25d393fb3692e8e673babdeeb (diff)
mac80211: further optimise buffer expiry timer
Juuso optimised the timer to not run all the time in commit 3393a608c4979a94d1887efc05b7. However, after that it will still run once more even if all frames just expired. Fixing that also makes the function return value a little clearer in the process. Also, while at it, change the return value to bool (instead of int). Cc: Juuso Oikarinen <juuso.oikarinen@nokia.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/sta_info.c')
-rw-r--r--net/mac80211/sta_info.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 17caba27040b..42c196e86115 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -691,14 +691,13 @@ void sta_info_clear_tim_bit(struct sta_info *sta)
691 spin_unlock_irqrestore(&sta->local->sta_lock, flags); 691 spin_unlock_irqrestore(&sta->local->sta_lock, flags);
692} 692}
693 693
694static int sta_info_buffer_expired(struct sta_info *sta, 694static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb)
695 struct sk_buff *skb)
696{ 695{
697 struct ieee80211_tx_info *info; 696 struct ieee80211_tx_info *info;
698 int timeout; 697 int timeout;
699 698
700 if (!skb) 699 if (!skb)
701 return 0; 700 return false;
702 701
703 info = IEEE80211_SKB_CB(skb); 702 info = IEEE80211_SKB_CB(skb);
704 703
@@ -718,9 +717,6 @@ static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local,
718 unsigned long flags; 717 unsigned long flags;
719 struct sk_buff *skb; 718 struct sk_buff *skb;
720 719
721 if (skb_queue_empty(&sta->ps_tx_buf))
722 return false;
723
724 for (;;) { 720 for (;;) {
725 spin_lock_irqsave(&sta->ps_tx_buf.lock, flags); 721 spin_lock_irqsave(&sta->ps_tx_buf.lock, flags);
726 skb = skb_peek(&sta->ps_tx_buf); 722 skb = skb_peek(&sta->ps_tx_buf);
@@ -745,7 +741,7 @@ static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local,
745 sta_info_clear_tim_bit(sta); 741 sta_info_clear_tim_bit(sta);
746 } 742 }
747 743
748 return true; 744 return !skb_queue_empty(&sta->ps_tx_buf);
749} 745}
750 746
751static int __must_check __sta_info_destroy(struct sta_info *sta) 747static int __must_check __sta_info_destroy(struct sta_info *sta)