summaryrefslogtreecommitdiff
path: root/package/mac80211/patches/300-pending_work.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-02-26 21:52:59 +0000
committerFelix Fietkau <nbd@openwrt.org>2013-02-26 21:52:59 +0000
commit43d6e5c5858cff8a5cb124bba0a3188604a59d0d (patch)
tree39fa647cef15325327d9a510223610dbeeb1358e /package/mac80211/patches/300-pending_work.patch
parentdbe806ec61d8086c0f1430268ea2abd5c13bebd1 (diff)
downloadmtk-20170518-43d6e5c5858cff8a5cb124bba0a3188604a59d0d.zip
mtk-20170518-43d6e5c5858cff8a5cb124bba0a3188604a59d0d.tar.gz
mtk-20170518-43d6e5c5858cff8a5cb124bba0a3188604a59d0d.tar.bz2
mac80211: fix sending probe requests in client mode, fixes connecting to hidden networks (#13056)
SVN-Revision: 35819
Diffstat (limited to 'package/mac80211/patches/300-pending_work.patch')
-rw-r--r--package/mac80211/patches/300-pending_work.patch68
1 files changed, 67 insertions, 1 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index 1bc32a0..508a674 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -357,7 +357,73 @@
WLAN_STA_BLOCK_BA,
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
-@@ -1848,9 +1848,24 @@ netdev_tx_t ieee80211_subif_start_xmit(s
+@@ -1231,34 +1231,40 @@ static bool ieee80211_tx_frags(struct ie
+ if (local->queue_stop_reasons[q] ||
+ (!txpending && !skb_queue_empty(&local->pending[q]))) {
+ if (unlikely(info->flags &
+- IEEE80211_TX_INTFL_OFFCHAN_TX_OK &&
+- local->queue_stop_reasons[q] &
+- ~BIT(IEEE80211_QUEUE_STOP_REASON_OFFCHANNEL))) {
++ IEEE80211_TX_INTFL_OFFCHAN_TX_OK)) {
++ if (local->queue_stop_reasons[q] &
++ ~BIT(IEEE80211_QUEUE_STOP_REASON_OFFCHANNEL)) {
++ /*
++ * Drop off-channel frames if queues
++ * are stopped for any reason other
++ * than off-channel operation. Never
++ * queue them.
++ */
++ spin_unlock_irqrestore(
++ &local->queue_stop_reason_lock,
++ flags);
++ ieee80211_purge_tx_queue(&local->hw,
++ skbs);
++ return true;
++ }
++ } else {
++
+ /*
+- * Drop off-channel frames if queues are stopped
+- * for any reason other than off-channel
+- * operation. Never queue them.
++ * Since queue is stopped, queue up frames for
++ * later transmission from the tx-pending
++ * tasklet when the queue is woken again.
+ */
+- spin_unlock_irqrestore(
+- &local->queue_stop_reason_lock, flags);
+- ieee80211_purge_tx_queue(&local->hw, skbs);
+- return true;
++ if (txpending)
++ skb_queue_splice_init(skbs,
++ &local->pending[q]);
++ else
++ skb_queue_splice_tail_init(skbs,
++ &local->pending[q]);
++
++ spin_unlock_irqrestore(&local->queue_stop_reason_lock,
++ flags);
++ return false;
+ }
+-
+- /*
+- * Since queue is stopped, queue up frames for later
+- * transmission from the tx-pending tasklet when the
+- * queue is woken again.
+- */
+- if (txpending)
+- skb_queue_splice_init(skbs, &local->pending[q]);
+- else
+- skb_queue_splice_tail_init(skbs,
+- &local->pending[q]);
+-
+- spin_unlock_irqrestore(&local->queue_stop_reason_lock,
+- flags);
+- return false;
+ }
+ spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
+
+@@ -1848,9 +1854,24 @@ netdev_tx_t ieee80211_subif_start_xmit(s
}
if (!is_multicast_ether_addr(skb->data)) {