diff options
author | wpaul <wpaul@FreeBSD.org> | 2001-08-15 17:46:57 +0000 |
---|---|---|
committer | wpaul <wpaul@FreeBSD.org> | 2001-08-15 17:46:57 +0000 |
commit | 4b66d00120f16e89bf52444ec8d337e6462650c7 (patch) | |
tree | 9980987414c5e6a08360f568dcf8e7295523449f /sys | |
parent | 3420b9251b1fde96009222c3335489d8f34edcee (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/dev/sf/if_sf.c | 7 | ||||
-rw-r--r-- | sys/pci/if_sf.c | 7 |
2 files changed, 10 insertions, 4 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; } diff --git a/sys/pci/if_sf.c b/sys/pci/if_sf.c index ac7717e..69f5bc1 100644 --- a/sys/pci/if_sf.c +++ b/sys/pci/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; } |