adm8211: Use ieee80211_*_queue functions This patch fixes the adm8211 to use the ieee80211_*_queue instead of netif_*_queue functions to stop/wake the queue. Otherwise, the wireless stack happily overflows our tx ring. It also simplifies the some flag setting related to TX queue handling.
Signed-off-by: Michael Wu <[EMAIL PROTECTED]> --- drivers/net/wireless/d80211/adm8211/adm8211.c | 16 ++++++---------- 1 files changed, 6 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/d80211/adm8211/adm8211.c b/drivers/net/wireless/d80211/adm8211/adm8211.c index 748eb26..339b69c 100644 --- a/drivers/net/wireless/d80211/adm8211/adm8211.c +++ b/drivers/net/wireless/d80211/adm8211/adm8211.c @@ -452,7 +452,7 @@ static void adm8211_interrupt_tci(struct } if (priv->cur_tx - dirty_tx < priv->tx_ring_size - 2) - netif_wake_queue(dev); + ieee80211_wake_queue(dev, 0); priv->dirty_tx = dirty_tx; spin_unlock(&priv->lock); @@ -1765,17 +1765,13 @@ static void adm8211_tx_raw(struct net_de spin_lock_irqsave(&priv->lock, flags); - if (priv->cur_tx - priv->dirty_tx < priv->tx_ring_size / 2) + if (priv->cur_tx - priv->dirty_tx == priv->tx_ring_size / 2) flag = TDES1_CONTROL_IC | TDES1_CONTROL_LS | TDES1_CONTROL_FS; - else if (priv->cur_tx - priv->dirty_tx == priv->tx_ring_size / 2) - flag = TDES1_CONTROL_IC | TDES1_CONTROL_LS | TDES1_CONTROL_FS; - else if (priv->cur_tx - priv->dirty_tx < priv->tx_ring_size - 2) + else flag = TDES1_CONTROL_LS | TDES1_CONTROL_FS; - else { - flag = TDES1_CONTROL_IC | TDES1_CONTROL_LS | TDES1_CONTROL_FS; - printk(KERN_DEBUG "%s: Yikes, this shouldn't happen!\n", dev->name); - netif_stop_queue(dev); - } + + if (priv->cur_tx - priv->dirty_tx == priv->tx_ring_size - 2) + ieee80211_stop_queue(dev, 0); entry = priv->cur_tx % priv->tx_ring_size;
pgpOOwNSetEDe.pgp
Description: PGP signature