Commit 9c0ab712 authored by Ivo van Doorn's avatar Ivo van Doorn Committed by John W. Linville

rt2x00: Clear queue entry flags during initialization

When the queues are being initialized the entry flags fields must be
reset to 0. When this does not happen some entries might still be
marked as "occupied" after an ifdown & ifup cycle which would trigger
errors when the entry is being accessed:

	phy0 -> rt2x00queue_write_tx_frame: Error - Arrived at non-free entry in the non-full queue 0.
	Please file bug report to http://rt2x00.serialmonkey.com.

This also fixes the mac80211 warning:

	------------[ cut here ]------------
	WARNING: at net/mac80211/tx.c:1238 ieee80211_master_start_xmit+0x30a/0x350 [mac80211]()

which was triggered by the queue error.
Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 74c0ee9b
...@@ -492,9 +492,12 @@ void rt2x00queue_init_rx(struct rt2x00_dev *rt2x00dev) ...@@ -492,9 +492,12 @@ void rt2x00queue_init_rx(struct rt2x00_dev *rt2x00dev)
if (!rt2x00dev->ops->lib->init_rxentry) if (!rt2x00dev->ops->lib->init_rxentry)
return; return;
for (i = 0; i < queue->limit; i++) for (i = 0; i < queue->limit; i++) {
queue->entries[i].flags = 0;
rt2x00dev->ops->lib->init_rxentry(rt2x00dev, rt2x00dev->ops->lib->init_rxentry(rt2x00dev,
&queue->entries[i]); &queue->entries[i]);
}
} }
void rt2x00queue_init_tx(struct rt2x00_dev *rt2x00dev) void rt2x00queue_init_tx(struct rt2x00_dev *rt2x00dev)
...@@ -508,10 +511,13 @@ void rt2x00queue_init_tx(struct rt2x00_dev *rt2x00dev) ...@@ -508,10 +511,13 @@ void rt2x00queue_init_tx(struct rt2x00_dev *rt2x00dev)
if (!rt2x00dev->ops->lib->init_txentry) if (!rt2x00dev->ops->lib->init_txentry)
continue; continue;
for (i = 0; i < queue->limit; i++) for (i = 0; i < queue->limit; i++) {
queue->entries[i].flags = 0;
rt2x00dev->ops->lib->init_txentry(rt2x00dev, rt2x00dev->ops->lib->init_txentry(rt2x00dev,
&queue->entries[i]); &queue->entries[i]);
} }
}
} }
static int rt2x00queue_alloc_entries(struct data_queue *queue, static int rt2x00queue_alloc_entries(struct data_queue *queue,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment