PERFORCE change 121328 for review
Andrew Thompson
thompsa at FreeBSD.org
Sun Jun 10 06:08:39 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=121328
Change 121328 by thompsa at thompsa_heff on 2007/06/10 06:08:03
Use a seperate taskqueue+thread for reset tasks since iwi_ops will
block. This could be tuned at a later date.
Discussed with: sam
Affected files ...
.. //depot/projects/wifi/sys/dev/iwi/if_iwi.c#49 edit
.. //depot/projects/wifi/sys/dev/iwi/if_iwivar.h#22 edit
Differences ...
==== //depot/projects/wifi/sys/dev/iwi/if_iwi.c#49 (text+ko) ====
@@ -271,11 +271,19 @@
taskqueue_thread_enqueue, &sc->sc_tq);
taskqueue_start_threads(&sc->sc_tq, 1, PI_NET, "%s taskq",
device_get_nameunit(dev));
+ sc->sc_tq2 = taskqueue_create("iwi_taskq2", M_NOWAIT | M_ZERO,
+ taskqueue_thread_enqueue, &sc->sc_tq2);
+ taskqueue_start_threads(&sc->sc_tq2, 1, PI_NET, "%s taskq2",
+ device_get_nameunit(dev));
#else
sc->sc_tq = taskqueue_create("iwi_taskq", M_NOWAIT | M_ZERO,
taskqueue_thread_enqueue, &sc->sc_tq, &sc->sc_tqproc);
kthread_create(taskqueue_thread_loop, &sc->sc_tq, &sc->sc_tqproc,
0, 0, "%s taskq", device_get_nameunit(dev));
+ sc->sc_tq2 = taskqueue_create("iwi_taskq2", M_NOWAIT | M_ZERO,
+ taskqueue_thread_enqueue, &sc->sc_tq2, &sc->sc_tqproc);
+ kthread_create(taskqueue_thread_loop, &sc->sc_tq2, &sc->sc_tqproc,
+ 0, 0, "%s taskq2", device_get_nameunit(dev));
#endif
TASK_INIT(&sc->sc_radiontask, 0, iwi_radio_on, sc);
TASK_INIT(&sc->sc_radiofftask, 0, iwi_radio_off, sc);
@@ -485,6 +493,7 @@
if_free(ifp);
taskqueue_free(sc->sc_tq);
+ taskqueue_free(sc->sc_tq2);
if (sc->sc_unr != NULL)
delete_unrhdr(sc->sc_unr);
@@ -1624,7 +1633,7 @@
device_printf(sc->sc_dev, "firmware error\n");
/* don't restart if the interface isn't up */
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
- taskqueue_enqueue(sc->sc_tq, &sc->sc_restarttask);
+ taskqueue_enqueue(sc->sc_tq2, &sc->sc_restarttask);
sc->flags &= ~IWI_FLAG_BUSY;
sc->sc_busy_timer = 0;
@@ -1986,7 +1995,7 @@
if (--sc->sc_tx_timer == 0) {
if_printf(ifp, "device timeout\n");
ifp->if_oerrors++;
- taskqueue_enqueue(sc->sc_tq, &sc->sc_restarttask);
+ taskqueue_enqueue(sc->sc_tq2, &sc->sc_restarttask);
}
}
if (sc->sc_rfkill_timer > 0) {
@@ -2006,7 +2015,7 @@
if (--sc->sc_state_timer == 0) {
if_printf(ifp, "firmware stuck in state %d, resetting\n",
sc->fw_state);
- taskqueue_enqueue(sc->sc_tq, &sc->sc_restarttask);
+ taskqueue_enqueue(sc->sc_tq2, &sc->sc_restarttask);
if (sc->fw_state == IWI_FW_SCANNING)
ieee80211_cancel_scan(&sc->sc_ic);
sc->sc_state_timer = 3;
@@ -2015,7 +2024,7 @@
if (sc->sc_busy_timer > 0) {
if (--sc->sc_busy_timer == 0) {
if_printf(ifp, "firmware command timeout, resetting\n");
- taskqueue_enqueue(sc->sc_tq, &sc->sc_restarttask);
+ taskqueue_enqueue(sc->sc_tq2, &sc->sc_restarttask);
}
}
@@ -3676,7 +3685,7 @@
struct ifnet *ifp = ic->ic_ifp;
struct iwi_softc *sc = ifp->if_softc;
- taskqueue_enqueue(sc->sc_tq, &sc->sc_scanaborttask);
+ taskqueue_enqueue(sc->sc_tq2, &sc->sc_scanaborttask);
}
static void
==== //depot/projects/wifi/sys/dev/iwi/if_iwivar.h#22 (text+ko) ====
@@ -128,6 +128,7 @@
uint8_t sc_mcast[IEEE80211_ADDR_LEN];
struct unrhdr *sc_unr;
struct taskqueue *sc_tq; /* private task queue */
+ struct taskqueue *sc_tq2; /* reset task queue */
#if __FreeBSD_version < 700000
struct proc *sc_tqproc;
#endif
More information about the p4-projects
mailing list