aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/util.c
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2015-01-07 08:42:39 -0500
committerJohannes Berg <johannes.berg@intel.com>2015-01-14 03:31:18 -0500
commit3b24f4c65386dc0f2efb41027bc6e410ea2c0049 (patch)
treeb1015543f700d19b63f3674f214e20e14e67459d /net/mac80211/util.c
parent0efbb786f1a3e13d28861ff41aae8dc4be314608 (diff)
mac80211: let flush() drop packets when possible
When roaming / suspending, it makes no sense to wait until the transmit queues of the device are empty. In extreme condition they can be starved (VO saturating the air), but even in regular cases, it is pointless to delay the roaming because the low level driver is trying to send packets to an AP which is far away. We'd rather drop these packets and let TCP retransmit if needed. This will allow to speed up the roaming. For suspend, the explanation is even more trivial. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r--net/mac80211/util.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index ad8cb4fb441e..83ba6cd9cf8d 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -578,7 +578,7 @@ ieee80211_get_vif_queues(struct ieee80211_local *local,
578 578
579void __ieee80211_flush_queues(struct ieee80211_local *local, 579void __ieee80211_flush_queues(struct ieee80211_local *local,
580 struct ieee80211_sub_if_data *sdata, 580 struct ieee80211_sub_if_data *sdata,
581 unsigned int queues) 581 unsigned int queues, bool drop)
582{ 582{
583 if (!local->ops->flush) 583 if (!local->ops->flush)
584 return; 584 return;
@@ -594,7 +594,7 @@ void __ieee80211_flush_queues(struct ieee80211_local *local,
594 IEEE80211_QUEUE_STOP_REASON_FLUSH, 594 IEEE80211_QUEUE_STOP_REASON_FLUSH,
595 false); 595 false);
596 596
597 drv_flush(local, sdata, queues, false); 597 drv_flush(local, sdata, queues, drop);
598 598
599 ieee80211_wake_queues_by_reason(&local->hw, queues, 599 ieee80211_wake_queues_by_reason(&local->hw, queues,
600 IEEE80211_QUEUE_STOP_REASON_FLUSH, 600 IEEE80211_QUEUE_STOP_REASON_FLUSH,
@@ -602,9 +602,9 @@ void __ieee80211_flush_queues(struct ieee80211_local *local,
602} 602}
603 603
604void ieee80211_flush_queues(struct ieee80211_local *local, 604void ieee80211_flush_queues(struct ieee80211_local *local,
605 struct ieee80211_sub_if_data *sdata) 605 struct ieee80211_sub_if_data *sdata, bool drop)
606{ 606{
607 __ieee80211_flush_queues(local, sdata, 0); 607 __ieee80211_flush_queues(local, sdata, 0, drop);
608} 608}
609 609
610void ieee80211_stop_vif_queues(struct ieee80211_local *local, 610void ieee80211_stop_vif_queues(struct ieee80211_local *local,