Call sbmac_start() at the end of the interrupt service function to try

to send more packets.  Fixes problems with high UDP Tx rates.
Thanks to Matt Thomas for applying clue.
This commit is contained in:
simonb 2004-03-14 10:55:45 +00:00
parent ae6d7048fe
commit 15ae71a28c
1 changed files with 6 additions and 2 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: sbmac.c,v 1.13 2004/03/08 11:28:48 simonb Exp $ */ /* $NetBSD: sbmac.c,v 1.14 2004/03/14 10:55:45 simonb Exp $ */
/* /*
* Copyright 2000, 2001 * Copyright 2000, 2001
@ -33,7 +33,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: sbmac.c,v 1.13 2004/03/08 11:28:48 simonb Exp $"); __KERNEL_RCSID(0, "$NetBSD: sbmac.c,v 1.14 2004/03/14 10:55:45 simonb Exp $");
#include "bpfilter.h" #include "bpfilter.h"
#include "opt_inet.h" #include "opt_inet.h"
@ -1688,6 +1688,7 @@ static void
sbmac_intr(void *xsc, uint32_t status, uint32_t pc) sbmac_intr(void *xsc, uint32_t status, uint32_t pc)
{ {
struct sbmac_softc *sc = (struct sbmac_softc *) xsc; struct sbmac_softc *sc = (struct sbmac_softc *) xsc;
struct ifnet *ifp = &sc->sc_ethercom.ec_if;
uint64_t isr; uint64_t isr;
for (;;) { for (;;) {
@ -1715,6 +1716,9 @@ sbmac_intr(void *xsc, uint32_t status, uint32_t pc)
if (isr & (M_MAC_INT_CHANNEL << S_MAC_RX_CH0)) if (isr & (M_MAC_INT_CHANNEL << S_MAC_RX_CH0))
sbdma_rx_process(sc, &(sc->sbm_rxdma)); sbdma_rx_process(sc, &(sc->sbm_rxdma));
} }
/* try to get more packets going */
sbmac_start(ifp);
} }