From: Michael Brown Date: Wed, 14 May 2014 12:50:30 +0000 (+0100) Subject: [undi] Apply quota only to number of complete received packets X-Git-Tag: v1.20.1~1181 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d31cf2de3072c270b0c8eaa5ad3f790e5377be86;p=thirdparty%2Fipxe.git [undi] Apply quota only to number of complete received packets Signed-off-by: Michael Brown --- diff --git a/src/arch/i386/drivers/net/undinet.c b/src/arch/i386/drivers/net/undinet.c index 82dd8d2f9..6450665ff 100644 --- a/src/arch/i386/drivers/net/undinet.c +++ b/src/arch/i386/drivers/net/undinet.c @@ -72,8 +72,8 @@ struct undi_nic { /** Delay between retries of PXENV_UNDI_INITIALIZE */ #define UNDI_INITIALIZE_RETRY_DELAY_MS 200 -/** Maximum number of calls to PXENV_UNDI_ISR per poll */ -#define UNDI_POLL_QUOTA 4 +/** Maximum number of received packets per poll */ +#define UNDI_RX_QUOTA 4 /** Alignment of received frame payload */ #define UNDI_RX_ALIGN 16 @@ -331,7 +331,7 @@ static void undinet_poll ( struct net_device *netdev ) { struct undi_nic *undinic = netdev->priv; struct s_PXENV_UNDI_ISR undi_isr; struct io_buffer *iobuf = NULL; - unsigned int quota = UNDI_POLL_QUOTA; + unsigned int quota = UNDI_RX_QUOTA; size_t len; size_t reserve_len; size_t frag_len; @@ -370,7 +370,7 @@ static void undinet_poll ( struct net_device *netdev ) { } /* Run through the ISR loop */ - while ( quota-- ) { + while ( quota ) { profile_start ( &undinet_isr_call_profiler ); if ( ( rc = pxeparent_call ( undinet_entry, PXENV_UNDI_ISR, &undi_isr, @@ -424,6 +424,7 @@ static void undinet_poll ( struct net_device *netdev ) { if ( iob_len ( iobuf ) == len ) { /* Whole packet received; deliver it */ netdev_rx ( netdev, iob_disown ( iobuf ) ); + quota--; /* Etherboot 5.4 fails to return all packets * under mild load; pretend it retriggered. */