ramips: fix ethernet driver tx completion polling

- budget is decremented with completed frames, so don't check if done is
smaller
- ACK the interrupt before processing further frames to fix a small race
condition.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@44234 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
Felix Fietkau
2015-02-01 08:20:37 +00:00
parent 45dce2ab93
commit 9763f432cf

View File

@@ -902,11 +902,11 @@ txpoll_again:
if (!done)
return 0;
if (done < budget) {
if (budget) {
fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS);
hwidx = fe_reg_r32(FE_REG_TX_DTX_IDX0);
if (idx != hwidx)
goto txpoll_again;
fe_reg_w32(tx_intr, FE_REG_FE_INT_STATUS);
}
netdev_completed_queue(netdev, done, bytes_compl);