rt2x00: merge fix for queue stopping
authorFelix Fietkau <nbd@openwrt.org>
Mon, 29 Jul 2013 12:49:01 +0000 (12:49 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 29 Jul 2013 12:49:01 +0000 (12:49 +0000)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 37603

package/kernel/mac80211/patches/300-pending_work.patch

index c5a61bb7d52cf74947fe7d9c441a8a674601d542..c5f1e43c788d09886ef944ed32b83fe0a2266e85 100644 (file)
        mi->prev_sample = false;
        if (delta < 0 || (!mrr_capable && prev_sample))
                return;
+--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
++++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
+@@ -936,13 +936,8 @@ void rt2x00queue_index_inc(struct queue_
+       spin_unlock_irqrestore(&queue->index_lock, irqflags);
+ }
+-void rt2x00queue_pause_queue(struct data_queue *queue)
++void rt2x00queue_pause_queue_nocheck(struct data_queue *queue)
+ {
+-      if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) ||
+-          !test_bit(QUEUE_STARTED, &queue->flags) ||
+-          test_and_set_bit(QUEUE_PAUSED, &queue->flags))
+-              return;
+-
+       switch (queue->qid) {
+       case QID_AC_VO:
+       case QID_AC_VI:
+@@ -958,6 +953,15 @@ void rt2x00queue_pause_queue(struct data
+               break;
+       }
+ }
++void rt2x00queue_pause_queue(struct data_queue *queue)
++{
++      if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) ||
++          !test_bit(QUEUE_STARTED, &queue->flags) ||
++          test_and_set_bit(QUEUE_PAUSED, &queue->flags))
++              return;
++
++      rt2x00queue_pause_queue_nocheck(queue);
++}
+ EXPORT_SYMBOL_GPL(rt2x00queue_pause_queue);
+ void rt2x00queue_unpause_queue(struct data_queue *queue)
+@@ -1019,7 +1023,7 @@ void rt2x00queue_stop_queue(struct data_
+               return;
+       }
+-      rt2x00queue_pause_queue(queue);
++      rt2x00queue_pause_queue_nocheck(queue);
+       queue->rt2x00dev->ops->lib->stop_queue(queue);