diff options
author | adrian <adrian@FreeBSD.org> | 2012-04-17 06:02:41 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2012-04-17 06:02:41 +0000 |
commit | 1bc364bf7eebf6139e4f968987974484d35c5cb4 (patch) | |
tree | d85e9cfeec214ee5bd25400a9d32f43fe51f8452 /sys/dev/ath/if_ath.c | |
parent | ab4c20c69dcd70561b35fcc954291a80344aaa79 (diff) | |
download | FreeBSD-src-1bc364bf7eebf6139e4f968987974484d35c5cb4.zip FreeBSD-src-1bc364bf7eebf6139e4f968987974484d35c5cb4.tar.gz |
Run the fatal proc as a proc, rather than where it currently is.
Otherwise the reset path will sleep, which it can't do in this context.
Diffstat (limited to 'sys/dev/ath/if_ath.c')
-rw-r--r-- | sys/dev/ath/if_ath.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c index c6b1d65..5f322ab 100644 --- a/sys/dev/ath/if_ath.c +++ b/sys/dev/ath/if_ath.c @@ -402,6 +402,7 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) TASK_INIT(&sc->sc_bstucktask,0, ath_bstuck_proc, sc); TASK_INIT(&sc->sc_resettask,0, ath_reset_proc, sc); TASK_INIT(&sc->sc_txqtask,0, ath_txq_sched_tasklet, sc); + TASK_INIT(&sc->sc_fataltask,0, ath_fatal_proc, sc); /* * Allocate hardware transmit queues: one queue for @@ -1527,7 +1528,7 @@ ath_intr(void *arg) if (status & HAL_INT_FATAL) { sc->sc_stats.ast_hardware++; ath_hal_intrset(ah, 0); /* disable intr's until reset */ - ath_fatal_proc(sc, 0); + taskqueue_enqueue(sc->sc_tq, &sc->sc_fataltask); } else { if (status & HAL_INT_SWBA) { /* |