rt2x00: Limit TX done looping to number of TX ring entries
Similar to rt2800pci, remove the check for duplicate register reading, and instead limit the for-loop to the maximum number of TX entries inside a queue. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
a5ea2f0255
commit
e6474c3c6d
|
@ -2052,29 +2052,24 @@ static void rt61pci_txdone(struct rt2x00_dev *rt2x00dev)
|
|||
struct txdone_entry_desc txdesc;
|
||||
u32 word;
|
||||
u32 reg;
|
||||
u32 old_reg;
|
||||
int type;
|
||||
int index;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* During each loop we will compare the freshly read
|
||||
* STA_CSR4 register value with the value read from
|
||||
* the previous loop. If the 2 values are equal then
|
||||
* we should stop processing because the chance is
|
||||
* quite big that the device has been unplugged and
|
||||
* we risk going into an endless loop.
|
||||
* TX_STA_FIFO is a stack of X entries, hence read TX_STA_FIFO
|
||||
* at most X times and also stop processing once the TX_STA_FIFO_VALID
|
||||
* flag is not set anymore.
|
||||
*
|
||||
* The legacy drivers use X=TX_RING_SIZE but state in a comment
|
||||
* that the TX_STA_FIFO stack has a size of 16. We stick to our
|
||||
* tx ring size for now.
|
||||
*/
|
||||
old_reg = 0;
|
||||
|
||||
while (1) {
|
||||
for (i = 0; i < TX_ENTRIES; i++) {
|
||||
rt2x00pci_register_read(rt2x00dev, STA_CSR4, ®);
|
||||
if (!rt2x00_get_field32(reg, STA_CSR4_VALID))
|
||||
break;
|
||||
|
||||
if (old_reg == reg)
|
||||
break;
|
||||
old_reg = reg;
|
||||
|
||||
/*
|
||||
* Skip this entry when it contains an invalid
|
||||
* queue identication number.
|
||||
|
|
Loading…
Reference in New Issue