mac80211: use multi-queue master netdevice

This patch updates mac80211 and drivers to be multi-queue aware and
use that instead of the internal queue mapping. Also does a number
of cleanups in various pieces of the code that fall out and reduces
internal mac80211 state size.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Johannes Berg
2008-05-17 00:57:14 +02:00
committed by John W. Linville
parent eefce91a38
commit e253008360
21 changed files with 158 additions and 132 deletions

View File

@@ -331,17 +331,15 @@ void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue)
{
struct ieee80211_local *local = hw_to_local(hw);
if (test_and_clear_bit(IEEE80211_LINK_STATE_XOFF,
&local->state[queue])) {
if (test_bit(IEEE80211_LINK_STATE_PENDING,
&local->state[queue]))
tasklet_schedule(&local->tx_pending_tasklet);
else
if (!ieee80211_qdisc_installed(local->mdev)) {
if (queue == 0)
netif_wake_queue(local->mdev);
} else
__netif_schedule(local->mdev);
if (test_bit(queue, local->queues_pending)) {
tasklet_schedule(&local->tx_pending_tasklet);
} else {
if (ieee80211_is_multiqueue(local)) {
netif_wake_subqueue(local->mdev, queue);
} else {
WARN_ON(queue != 0);
netif_wake_queue(local->mdev);
}
}
}
EXPORT_SYMBOL(ieee80211_wake_queue);
@@ -350,9 +348,12 @@ void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue)
{
struct ieee80211_local *local = hw_to_local(hw);
if (!ieee80211_qdisc_installed(local->mdev) && queue == 0)
if (ieee80211_is_multiqueue(local)) {
netif_stop_subqueue(local->mdev, queue);
} else {
WARN_ON(queue != 0);
netif_stop_queue(local->mdev);
set_bit(IEEE80211_LINK_STATE_XOFF, &local->state[queue]);
}
}
EXPORT_SYMBOL(ieee80211_stop_queue);
@@ -360,7 +361,7 @@ void ieee80211_stop_queues(struct ieee80211_hw *hw)
{
int i;
for (i = 0; i < hw->queues + hw->ampdu_queues; i++)
for (i = 0; i < ieee80211_num_queues(hw); i++)
ieee80211_stop_queue(hw, i);
}
EXPORT_SYMBOL(ieee80211_stop_queues);