summaryrefslogtreecommitdiffstats
path: root/sys/dev/sf
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>2001-08-15 17:46:57 +0000
committerwpaul <wpaul@FreeBSD.org>2001-08-15 17:46:57 +0000
commit4b66d00120f16e89bf52444ec8d337e6462650c7 (patch)
tree9980987414c5e6a08360f568dcf8e7295523449f /sys/dev/sf
parent3420b9251b1fde96009222c3335489d8f34edcee (diff)
downloadFreeBSD-src-4b66d00120f16e89bf52444ec8d337e6462650c7.zip
FreeBSD-src-4b66d00120f16e89bf52444ec8d337e6462650c7.tar.gz
Tweak the interrupt handler so that we call the txeof handler more often,
to hopefully prevent the TX DMA queue from filling up and never getting flushed.
Diffstat (limited to 'sys/dev/sf')
-rw-r--r--sys/dev/sf/if_sf.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/dev/sf/if_sf.c b/sys/dev/sf/if_sf.c
index ac7717e..69f5bc1 100644
--- a/sys/dev/sf/if_sf.c
+++ b/sys/dev/sf/if_sf.c
@@ -1094,7 +1094,10 @@ static void sf_intr(arg)
if (status & SF_ISR_RXDQ1_DMADONE)
sf_rxeof(sc);
- if (status & SF_ISR_TX_TXDONE)
+ if (status & SF_ISR_TX_TXDONE ||
+ status & SF_ISR_TX_DMADONE ||
+ status & SF_ISR_TX_QUEUEDONE ||
+ status & SF_ISR_TX_LOFIFO)
sf_txeof(sc);
if (status & SF_ISR_ABNORMALINTR) {
@@ -1305,7 +1308,7 @@ static void sf_start(ifp)
sc = ifp->if_softc;
SF_LOCK(sc);
- if (!sc->sf_link) {
+ if (!sc->sf_link && ifp->if_snd.ifq_len < 10) {
SF_UNLOCK(sc);
return;
}
OpenPOWER on IntegriCloud