forked from Minki/linux
p54: tx refused but queue active
In the mainline kernel, p54usb will fail because the TX queue length can become < 0. This problem has been reported as Bugzilla #13725. The failure is expressed by the following message in the logs: WARNING: at net/mac80211/tx.c:1325 ieee80211_tx+0x23c/0x298 [mac80211]() Hardware name: HP Pavilion dv2700 Notebook PC tx refused but queue active This problem has been recently observed in the wireless-testing tree, where a full solution is being tested. That fix is too invasive for 2.6.31-rcX, but the simple change supplied here will prevent the failure. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
804ef71ee1
commit
47ab3840a3
@ -912,13 +912,14 @@ static void p54_rx_frame_sent(struct ieee80211_hw *dev, struct sk_buff *skb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
__skb_unlink(entry, &priv->tx_queue);
|
__skb_unlink(entry, &priv->tx_queue);
|
||||||
spin_unlock_irqrestore(&priv->tx_queue.lock, flags);
|
|
||||||
|
|
||||||
frame_len = entry->len;
|
frame_len = entry->len;
|
||||||
entry_hdr = (struct p54_hdr *) entry->data;
|
entry_hdr = (struct p54_hdr *) entry->data;
|
||||||
entry_data = (struct p54_tx_data *) entry_hdr->data;
|
entry_data = (struct p54_tx_data *) entry_hdr->data;
|
||||||
priv->tx_stats[entry_data->hw_queue].len--;
|
if (priv->tx_stats[entry_data->hw_queue].len)
|
||||||
|
priv->tx_stats[entry_data->hw_queue].len--;
|
||||||
priv->stats.dot11ACKFailureCount += payload->tries - 1;
|
priv->stats.dot11ACKFailureCount += payload->tries - 1;
|
||||||
|
spin_unlock_irqrestore(&priv->tx_queue.lock, flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Frames in P54_QUEUE_FWSCAN and P54_QUEUE_BEACON are
|
* Frames in P54_QUEUE_FWSCAN and P54_QUEUE_BEACON are
|
||||||
|
Loading…
Reference in New Issue
Block a user