mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-18 21:42:49 +02:00
6dfc34bf7f
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10270 3c298f89-4303-0410-b956-a3cf2f4a3e73
119 lines
4.2 KiB
Diff
119 lines
4.2 KiB
Diff
Index: madwifi-dfs-r3252/ath/if_ath.c
|
|
===================================================================
|
|
--- madwifi-dfs-r3252.orig/ath/if_ath.c 2008-01-26 06:36:36.889082972 +0100
|
|
+++ madwifi-dfs-r3252/ath/if_ath.c 2008-01-26 06:41:35.670109540 +0100
|
|
@@ -3082,46 +3082,44 @@
|
|
{
|
|
struct ath_buf* bf = NULL;
|
|
ATH_TXBUF_LOCK_ASSERT(sc);
|
|
+
|
|
/* Reserve at least ATH_TXBUF_MGT_RESERVED buffers for management frames */
|
|
- if (ath_get_buffers_available() <= ATH_TXBUF_MGT_RESERVED) {
|
|
+ if (!for_management && (ath_get_buffers_available() <= ATH_TXBUF_MGT_RESERVED)) {
|
|
/* Stop the queue, we are full */
|
|
DPRINTF(sc, ATH_DEBUG_XMIT, "%s: stopping queuing of additional "
|
|
"frames. Insufficient free "
|
|
"buffers.\n", __func__);
|
|
sc->sc_stats.ast_tx_qstop++;
|
|
- netif_stop_queue(sc->sc_dev);
|
|
- sc->sc_devstopped = 1;
|
|
ATH_SCHEDULE_TQUEUE(&sc->sc_txtq, NULL);
|
|
+ return NULL;
|
|
}
|
|
|
|
/* Only let us go further if management frame, or there are enough */
|
|
- if (for_management || (ath_get_buffers_available() > ATH_TXBUF_MGT_RESERVED)) {
|
|
- bf = STAILQ_FIRST(&sc->sc_txbuf);
|
|
- if (bf) {
|
|
- STAILQ_REMOVE_HEAD(&sc->sc_txbuf, bf_list);
|
|
- /* This should be redundant, unless someone illegally
|
|
- * accessed the buffer after returning it. */
|
|
+ bf = STAILQ_FIRST(&sc->sc_txbuf);
|
|
+ if (bf) {
|
|
+ STAILQ_REMOVE_HEAD(&sc->sc_txbuf, bf_list);
|
|
+ /* This should be redundant, unless someone illegally
|
|
+ * accessed the buffer after returning it. */
|
|
#ifdef IEEE80211_DEBUG_REFCNT
|
|
- cleanup_ath_buf_debug(sc, bf, BUS_DMA_TODEVICE, func, line);
|
|
+ cleanup_ath_buf_debug(sc, bf, BUS_DMA_TODEVICE, func, line);
|
|
#else
|
|
- cleanup_ath_buf(sc, bf, BUS_DMA_TODEVICE);
|
|
+ cleanup_ath_buf(sc, bf, BUS_DMA_TODEVICE);
|
|
#endif
|
|
- atomic_inc(&ath_buf_counter);
|
|
+ atomic_inc(&ath_buf_counter);
|
|
#ifdef IEEE80211_DEBUG_REFCNT
|
|
- DPRINTF(sc, ATH_DEBUG_TXBUF,
|
|
- "[TXBUF=%03d/%03d] %s:%d -> %s:%d took txbuf %p.\n",
|
|
- ath_get_buffer_count(), ATH_TXBUF,
|
|
- func, line, __func__, __LINE__,
|
|
- bf);
|
|
+ DPRINTF(sc, ATH_DEBUG_TXBUF,
|
|
+ "[TXBUF=%03d/%03d] %s:%d -> %s:%d took txbuf %p.\n",
|
|
+ ath_get_buffer_count(), ATH_TXBUF,
|
|
+ func, line, __func__, __LINE__,
|
|
+ bf);
|
|
#endif
|
|
- }
|
|
- else {
|
|
- DPRINTF(sc, ATH_DEBUG_ANY,
|
|
- "%s: discard %s, no xmit buffers available.\n",
|
|
- __func__,
|
|
- for_management ? "management frame" : "frame");
|
|
- sc->sc_stats.ast_tx_nobuf++;
|
|
- }
|
|
+ }
|
|
+ else {
|
|
+ DPRINTF(sc, ATH_DEBUG_ANY,
|
|
+ "%s: discard %s, no xmit buffers available.\n",
|
|
+ __func__,
|
|
+ for_management ? "management frame" : "frame");
|
|
+ sc->sc_stats.ast_tx_nobuf++;
|
|
}
|
|
|
|
return bf;
|
|
@@ -3503,9 +3501,6 @@
|
|
/* Pass control of the skb to the caller (i.e., resources are their
|
|
* problem). */
|
|
if (requeue) {
|
|
- /* queue is full, let the kernel backlog the skb */
|
|
- netif_stop_queue(dev);
|
|
- sc->sc_devstopped = 1;
|
|
/* Stop tracking again we are giving it back*/
|
|
ieee80211_skb_untrack(skb);
|
|
return NETDEV_TX_BUSY;
|
|
@@ -12871,21 +12866,6 @@
|
|
ath_get_buffer_count(), ATH_TXBUF,
|
|
func, line, __func__, __LINE__, bfaddr);
|
|
#endif /* #ifdef IEEE80211_DEBUG_REFCNT */
|
|
- if (sc->sc_devstopped) {
|
|
- ++sc->sc_reapcount;
|
|
- if (sc->sc_reapcount > ATH_TXBUF_FREE_THRESHOLD) {
|
|
- if (!ath_radio_silence_required_for_dfs(sc)) {
|
|
- netif_start_queue(sc->sc_dev);
|
|
- DPRINTF(sc, ATH_DEBUG_ANY,
|
|
- "%s: restarting queue.\n",
|
|
- __func__);
|
|
- }
|
|
- sc->sc_reapcount = 0;
|
|
- sc->sc_devstopped = 0;
|
|
- }
|
|
- else if (!ath_radio_silence_required_for_dfs(sc))
|
|
- ATH_SCHEDULE_TQUEUE(&sc->sc_txtq, NULL);
|
|
- }
|
|
|
|
*bf = NULL;
|
|
}
|
|
Index: madwifi-dfs-r3252/ath/if_athvar.h
|
|
===================================================================
|
|
--- madwifi-dfs-r3252.orig/ath/if_athvar.h 2008-01-26 06:41:42.206482027 +0100
|
|
+++ madwifi-dfs-r3252/ath/if_athvar.h 2008-01-26 06:41:46.646735062 +0100
|
|
@@ -667,7 +667,6 @@
|
|
unsigned int sc_xrgrppoll:1; /* xr group polls are active */
|
|
unsigned int sc_syncbeacon:1; /* sync/resync beacon timers */
|
|
unsigned int sc_hasclrkey:1; /* CLR key supported */
|
|
- unsigned int sc_devstopped:1; /* stopped due to of no tx bufs */
|
|
unsigned int sc_stagbeacons:1; /* use staggered beacons */
|
|
unsigned int sc_dfswait:1; /* waiting on channel for radar detect */
|
|
unsigned int sc_ackrate:1; /* send acks at high bitrate */
|