1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-11-02 04:18:25 +02:00
openwrt-xburst/package/madwifi/patches/343-txqueue_races.patch
nbd 93f00c0eb5 madwifi patch cleanup and stability fixes
- fix a semi-random heisenbug by replacing the previous noderef fix with a simple hack that is not 100% correct, but safe.
- add ad-hoc atim fixes by bruno
- add napi polling fixes by sven-ola
- fix compile breakage with debug enabled

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@12838 3c298f89-4303-0410-b956-a3cf2f4a3e73
2008-10-03 15:17:34 +00:00

35 lines
903 B
Diff

Merged from madwifi trunk r3551, r3552
--- a/ath/if_ath.c
+++ b/ath/if_ath.c
@@ -8251,6 +8251,17 @@
goto bf_fail;
}
+ /* We make sure we don't remove the TX descriptor on
+ * which the HW is pointing since it contains the
+ * ds_link field, except if this is the last TX
+ * descriptor in the queue */
+
+ if ((txq->axq_depth > 1) &&
+ (bf->bf_daddr == ath_hal_gettxbuf(ah, txq->axq_qnum))) {
+ ATH_TXQ_UNLOCK_IRQ_EARLY(txq);
+ goto bf_fail;
+ }
+
ATH_TXQ_REMOVE_HEAD(txq, bf_list);
ATH_TXQ_UNLOCK_IRQ(txq);
--- a/ath/if_athvar.h
+++ b/ath/if_athvar.h
@@ -586,7 +586,8 @@
} while (0)
#define ATH_TXQ_REMOVE_HEAD(_tq, _field) do { \
STAILQ_REMOVE_HEAD(&(_tq)->axq_q, _field); \
- (_tq)->axq_depth--; \
+ if (--(_tq)->axq_depth <= 0) \
+ (_tq)->axq_link = NULL; \
} while (0)
/* move buffers from MCASTQ to CABQ */
#define ATH_TXQ_MOVE_MCASTQ(_tqs,_tqd) do { \