PERFORCE change 76436 for review
Sam Leffler
sam at FreeBSD.org
Tue May 3 09:20:53 PDT 2005
http://perforce.freebsd.org/chv.cgi?CH=76436
Change 76436 by sam at sam_ebb on 2005/05/03 16:20:33
use a private taskqueue
Affected files ...
.. //depot/projects/wifi/sys/dev/ath/if_ath.c#84 edit
.. //depot/projects/wifi/sys/dev/ath/if_athvar.h#34 edit
Differences ...
==== //depot/projects/wifi/sys/dev/ath/if_ath.c#84 (text+ko) ====
@@ -60,6 +60,8 @@
#include <sys/callout.h>
#include <sys/bus.h>
#include <sys/endian.h>
+#include <sys/kthread.h>
+#include <sys/taskqueue.h>
#include <machine/bus.h>
@@ -367,6 +369,10 @@
ATH_TXBUF_LOCK_INIT(sc);
+ sc->sc_tq = taskqueue_create("ath_taskq", M_NOWAIT,
+ taskqueue_thread_enqueue, &sc->sc_tq, &sc->sc_tqproc);
+ kthread_create(taskqueue_thread_loop, &sc->sc_tq, &sc->sc_tqproc,
+ 0, 0, "%s taskq", ifp->if_xname);
TASK_INIT(&sc->sc_rxtask, 0, ath_rx_proc, sc);
TASK_INIT(&sc->sc_rxorntask, 0, ath_rxorn_proc, sc);
TASK_INIT(&sc->sc_fataltask, 0, ath_fatal_proc, sc);
@@ -624,6 +630,7 @@
* Other than that, it's straightforward...
*/
ieee80211_ifdetach(&sc->sc_ic);
+ taskqueue_free(sc->sc_tq);
ath_rate_detach(sc->sc_rc);
ath_desc_free(sc);
ath_tx_cleanup(sc);
@@ -715,11 +722,11 @@
*/
sc->sc_stats.ast_hardware++;
ath_hal_intrset(ah, 0); /* disable intr's until reset */
- taskqueue_enqueue(taskqueue_swi, &sc->sc_fataltask);
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_fataltask);
} else if (status & HAL_INT_RXORN) {
sc->sc_stats.ast_rxorn++;
ath_hal_intrset(ah, 0); /* disable intr's until reset */
- taskqueue_enqueue(taskqueue_swi, &sc->sc_rxorntask);
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_rxorntask);
} else {
if (status & HAL_INT_SWBA) {
/*
@@ -745,12 +752,12 @@
ath_hal_updatetxtriglevel(ah, AH_TRUE);
}
if (status & HAL_INT_RX)
- taskqueue_enqueue(taskqueue_swi, &sc->sc_rxtask);
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_rxtask);
if (status & HAL_INT_TX)
- taskqueue_enqueue(taskqueue_swi, &sc->sc_txtask);
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_txtask);
if (status & HAL_INT_BMISS) {
sc->sc_stats.ast_bmiss++;
- taskqueue_enqueue(taskqueue_swi, &sc->sc_bmisstask);
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_bmisstask);
}
if (status & HAL_INT_MIB) {
sc->sc_stats.ast_mib++;
@@ -2225,7 +2232,7 @@
"%s: missed %u consecutive beacons\n",
__func__, sc->sc_bmisscount);
if (sc->sc_bmisscount > 3) /* NB: 3 is a guess */
- taskqueue_enqueue(taskqueue_swi, &sc->sc_bstucktask);
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_bstucktask);
return;
}
if (sc->sc_bmisscount != 0) {
==== //depot/projects/wifi/sys/dev/ath/if_athvar.h#34 (text+ko) ====
@@ -42,8 +42,6 @@
#ifndef _DEV_ATH_ATHVAR_H
#define _DEV_ATH_ATHVAR_H
-#include <sys/taskqueue.h>
-
#include <contrib/dev/ath/ah.h>
#include <net80211/ieee80211_radiotap.h>
#include <dev/ath/if_athioctl.h>
@@ -61,6 +59,8 @@
#define ATH_FF_TXQMAX 50 /* maximum # of queued frames allowed */
#define ATH_FF_STAGEMAX 5 /* max waiting period for staged frame*/
+struct taskqueue;
+struct kthread;
struct ath_buf;
/* driver-specific node state */
@@ -193,6 +193,8 @@
bus_space_handle_t sc_sh; /* bus space handle */
bus_dma_tag_t sc_dmat; /* bus DMA tag */
struct mtx sc_mtx; /* master lock (recursive) */
+ struct taskqueue *sc_tq; /* private task queue */
+ struct proc *sc_tqproc; /* thread handling sc_tq */
struct ath_hal *sc_ah; /* Atheros HAL */
struct ath_ratectrl *sc_rc; /* tx rate control support */
void (*sc_setdefantenna)(struct ath_softc *, u_int);
More information about the p4-projects
mailing list