Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
This commit is contained in:
commit
750084b51b
|
@ -2475,7 +2475,7 @@ il3945_bg_alive_start(struct work_struct *data)
|
||||||
container_of(data, struct il_priv, alive_start.work);
|
container_of(data, struct il_priv, alive_start.work);
|
||||||
|
|
||||||
mutex_lock(&il->mutex);
|
mutex_lock(&il->mutex);
|
||||||
if (test_bit(S_EXIT_PENDING, &il->status))
|
if (test_bit(S_EXIT_PENDING, &il->status) || il->txq == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
il3945_alive_start(il);
|
il3945_alive_start(il);
|
||||||
|
|
|
@ -1870,11 +1870,12 @@ il3945_bg_reg_txpower_periodic(struct work_struct *work)
|
||||||
struct il_priv *il = container_of(work, struct il_priv,
|
struct il_priv *il = container_of(work, struct il_priv,
|
||||||
_3945.thermal_periodic.work);
|
_3945.thermal_periodic.work);
|
||||||
|
|
||||||
if (test_bit(S_EXIT_PENDING, &il->status))
|
|
||||||
return;
|
|
||||||
|
|
||||||
mutex_lock(&il->mutex);
|
mutex_lock(&il->mutex);
|
||||||
|
if (test_bit(S_EXIT_PENDING, &il->status) || il->txq == NULL)
|
||||||
|
goto out;
|
||||||
|
|
||||||
il3945_reg_txpower_periodic(il);
|
il3945_reg_txpower_periodic(il);
|
||||||
|
out:
|
||||||
mutex_unlock(&il->mutex);
|
mutex_unlock(&il->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -426,10 +426,14 @@ void rt2x00lib_txdone(struct queue_entry *entry,
|
||||||
/*
|
/*
|
||||||
* If the data queue was below the threshold before the txdone
|
* If the data queue was below the threshold before the txdone
|
||||||
* handler we must make sure the packet queue in the mac80211 stack
|
* handler we must make sure the packet queue in the mac80211 stack
|
||||||
* is reenabled when the txdone handler has finished.
|
* is reenabled when the txdone handler has finished. This has to be
|
||||||
|
* 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))
|
if (!rt2x00queue_threshold(entry->queue))
|
||||||
rt2x00queue_unpause_queue(entry->queue);
|
rt2x00queue_unpause_queue(entry->queue);
|
||||||
|
spin_unlock_bh(&entry->queue->tx_lock);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
|
EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
|
||||||
|
|
||||||
|
|
|
@ -152,13 +152,22 @@ void rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||||
if (unlikely(rt2x00queue_write_tx_frame(queue, skb, false)))
|
if (unlikely(rt2x00queue_write_tx_frame(queue, skb, false)))
|
||||||
goto exit_fail;
|
goto exit_fail;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pausing queue has to be serialized with rt2x00lib_txdone(). Note
|
||||||
|
* we should not use spin_lock_bh variant as bottom halve was already
|
||||||
|
* disabled before ieee80211_xmit() call.
|
||||||
|
*/
|
||||||
|
spin_lock(&queue->tx_lock);
|
||||||
if (rt2x00queue_threshold(queue))
|
if (rt2x00queue_threshold(queue))
|
||||||
rt2x00queue_pause_queue(queue);
|
rt2x00queue_pause_queue(queue);
|
||||||
|
spin_unlock(&queue->tx_lock);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
exit_fail:
|
exit_fail:
|
||||||
|
spin_lock(&queue->tx_lock);
|
||||||
rt2x00queue_pause_queue(queue);
|
rt2x00queue_pause_queue(queue);
|
||||||
|
spin_unlock(&queue->tx_lock);
|
||||||
exit_free_skb:
|
exit_free_skb:
|
||||||
ieee80211_free_txskb(hw, skb);
|
ieee80211_free_txskb(hw, skb);
|
||||||
}
|
}
|
||||||
|
|
|
@ -619,6 +619,9 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,
|
||||||
else if (test_bit(REQUIRE_DMA, &queue->rt2x00dev->cap_flags))
|
else if (test_bit(REQUIRE_DMA, &queue->rt2x00dev->cap_flags))
|
||||||
rt2x00queue_align_frame(skb);
|
rt2x00queue_align_frame(skb);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* That function must be called with bh disabled.
|
||||||
|
*/
|
||||||
spin_lock(&queue->tx_lock);
|
spin_lock(&queue->tx_lock);
|
||||||
|
|
||||||
if (unlikely(rt2x00queue_full(queue))) {
|
if (unlikely(rt2x00queue_full(queue))) {
|
||||||
|
|
Loading…
Reference in New Issue