diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c index 357c0941aaad..37d7a183bb9f 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c @@ -398,6 +398,8 @@ static void rt2x00lib_fill_tx_status(struct rt2x00_dev *rt2x00dev, static void rt2x00lib_clear_entry(struct rt2x00_dev *rt2x00dev, struct queue_entry *entry) { + struct data_queue *queue = entry->queue; + /* * Make this entry available for reuse. */ @@ -415,10 +417,10 @@ static void rt2x00lib_clear_entry(struct rt2x00_dev *rt2x00dev, * serialized with rt2x00mac_tx(), otherwise we can wake up queue * before it was stopped. */ - spin_lock_bh(&entry->queue->tx_lock); - if (!rt2x00queue_threshold(entry->queue)) - rt2x00queue_unpause_queue(entry->queue); - spin_unlock_bh(&entry->queue->tx_lock); + spin_lock_bh(&queue->tx_lock); + if (rt2x00queue_available(queue) > 2*queue->threshold) + rt2x00queue_unpause_queue(queue); + spin_unlock_bh(&queue->tx_lock); } void rt2x00lib_txdone_nomatch(struct queue_entry *entry, diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c index fa2fd64084ac..7cb43ca0f03f 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00mac.c @@ -148,7 +148,7 @@ void rt2x00mac_tx(struct ieee80211_hw *hw, * conditions with rt2x00lib_txdone(). */ spin_lock(&queue->tx_lock); - if (rt2x00queue_threshold(queue)) + if (rt2x00queue_available(queue) < queue->threshold) rt2x00queue_pause_queue(queue); spin_unlock(&queue->tx_lock); diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c index 710e9641552e..53dbf1b72932 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c @@ -558,7 +558,7 @@ static void rt2x00queue_kick_tx_queue(struct data_queue *queue, * 2) Rule 1 can be broken when the available entries * in the queue are less then a certain threshold. */ - if (rt2x00queue_threshold(queue) || + if ((rt2x00queue_available(queue) < 2*queue->threshold) || !test_bit(ENTRY_TXD_BURST, &txdesc->flags)) queue->rt2x00dev->ops->lib->kick_queue(queue); } @@ -719,7 +719,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb, * do this under queue->tx_lock. Bottom halve was already disabled * before ieee80211_xmit() call. */ - if (rt2x00queue_threshold(queue)) + if (rt2x00queue_available(queue) < queue->threshold) rt2x00queue_pause_queue(queue); spin_unlock(&queue->tx_lock); @@ -1233,7 +1233,7 @@ static void rt2x00queue_init(struct rt2x00_dev *rt2x00dev, rt2x00dev->ops->queue_init(queue); - queue->threshold = DIV_ROUND_UP(queue->limit, 10); + queue->threshold = DIV_ROUND_UP(queue->limit, 8); } int rt2x00queue_allocate(struct rt2x00_dev *rt2x00dev) diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h index a15bae29917b..8a64afb54269 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h @@ -620,14 +620,6 @@ static inline int rt2x00queue_available(struct data_queue *queue) } /** - * rt2x00queue_threshold - Check if the queue is below threshold - * @queue: Queue to check. - */ -static inline int rt2x00queue_threshold(struct data_queue *queue) -{ - return rt2x00queue_available(queue) < queue->threshold; -} -/** * rt2x00queue_dma_timeout - Check if a timeout occurred for DMA transfers * @entry: Queue entry to check. */