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 */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to