Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Oct 2011 07:29:50 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r226417 - user/adrian/if_ath_tx/sys/dev/ath
Message-ID:  <201110160729.p9G7TooB050805@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Sun Oct 16 07:29:50 2011
New Revision: 226417
URL: http://svn.freebsd.org/changeset/base/226417

Log:
  Move the TX taskqueue enqueue to later in the ath_intr() routine.
  
  I have this sneaking suspicion that preemption is the reason
  behind some of these TX hangs. Ie, the taskqueue enqueue caused
  the taskqueue process (which may be at the same priority as the
  ath_intr swi) to preempt it.
  
  Thus TX could occur before the TXQ status bits were properly set.

Modified:
  user/adrian/if_ath_tx/sys/dev/ath/if_ath.c

Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath.c
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_ath.c	Sun Oct 16 07:05:43 2011	(r226416)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath.c	Sun Oct 16 07:29:50 2011	(r226417)
@@ -1481,7 +1481,6 @@ ath_intr(void *arg)
 		}
 		if (status & HAL_INT_TX) {
 			sc->sc_stats.ast_tx_intr++;
-			taskqueue_enqueue_fast(sc->sc_tq, &sc->sc_txtask);
 
 			/*
 			 * Grab all the currently set bits in the HAL txq bitmap
@@ -1493,6 +1492,7 @@ ath_intr(void *arg)
 			ath_hal_gettxintrtxqs(sc->sc_ah, &txqs);
 			sc->sc_txq_active |= txqs;
 			ATH_UNLOCK(sc);
+			taskqueue_enqueue_fast(sc->sc_tq, &sc->sc_txtask);
 		}
 		if (status & HAL_INT_BMISS) {
 			sc->sc_stats.ast_bmiss++;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201110160729.p9G7TooB050805>