svn commit: r234369 - head/sys/dev/ath
Adrian Chadd
adrian at FreeBSD.org
Tue Apr 17 06:02:42 UTC 2012
Author: adrian
Date: Tue Apr 17 06:02:41 2012
New Revision: 234369
URL: http://svn.freebsd.org/changeset/base/234369
Log:
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.
Modified:
head/sys/dev/ath/if_ath.c
head/sys/dev/ath/if_athvar.h
Modified: head/sys/dev/ath/if_ath.c
==============================================================================
--- head/sys/dev/ath/if_ath.c Tue Apr 17 04:52:57 2012 (r234368)
+++ head/sys/dev/ath/if_ath.c Tue Apr 17 06:02:41 2012 (r234369)
@@ -402,6 +402,7 @@ ath_attach(u_int16_t devid, struct ath_s
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) {
/*
Modified: head/sys/dev/ath/if_athvar.h
==============================================================================
--- head/sys/dev/ath/if_athvar.h Tue Apr 17 04:52:57 2012 (r234368)
+++ head/sys/dev/ath/if_athvar.h Tue Apr 17 06:02:41 2012 (r234369)
@@ -508,6 +508,7 @@ struct ath_softc {
struct task sc_bmisstask; /* bmiss int processing */
struct task sc_bstucktask; /* stuck beacon processing */
struct task sc_resettask; /* interface reset task */
+ struct task sc_fataltask; /* fatal task */
enum {
OK, /* no change needed */
UPDATE, /* update pending */
More information about the svn-src-all
mailing list