david/ipxe
Archived
1
0

[undi] Apply quota only to number of complete received packets

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2014-05-14 13:50:30 +01:00
parent 779d65222e
commit d31cf2de30

View File

@ -72,8 +72,8 @@ struct undi_nic {
/** Delay between retries of PXENV_UNDI_INITIALIZE */ /** Delay between retries of PXENV_UNDI_INITIALIZE */
#define UNDI_INITIALIZE_RETRY_DELAY_MS 200 #define UNDI_INITIALIZE_RETRY_DELAY_MS 200
/** Maximum number of calls to PXENV_UNDI_ISR per poll */ /** Maximum number of received packets per poll */
#define UNDI_POLL_QUOTA 4 #define UNDI_RX_QUOTA 4
/** Alignment of received frame payload */ /** Alignment of received frame payload */
#define UNDI_RX_ALIGN 16 #define UNDI_RX_ALIGN 16
@ -331,7 +331,7 @@ static void undinet_poll ( struct net_device *netdev ) {
struct undi_nic *undinic = netdev->priv; struct undi_nic *undinic = netdev->priv;
struct s_PXENV_UNDI_ISR undi_isr; struct s_PXENV_UNDI_ISR undi_isr;
struct io_buffer *iobuf = NULL; struct io_buffer *iobuf = NULL;
unsigned int quota = UNDI_POLL_QUOTA; unsigned int quota = UNDI_RX_QUOTA;
size_t len; size_t len;
size_t reserve_len; size_t reserve_len;
size_t frag_len; size_t frag_len;
@ -370,7 +370,7 @@ static void undinet_poll ( struct net_device *netdev ) {
} }
/* Run through the ISR loop */ /* Run through the ISR loop */
while ( quota-- ) { while ( quota ) {
profile_start ( &undinet_isr_call_profiler ); profile_start ( &undinet_isr_call_profiler );
if ( ( rc = pxeparent_call ( undinet_entry, PXENV_UNDI_ISR, if ( ( rc = pxeparent_call ( undinet_entry, PXENV_UNDI_ISR,
&undi_isr, &undi_isr,
@ -424,6 +424,7 @@ static void undinet_poll ( struct net_device *netdev ) {
if ( iob_len ( iobuf ) == len ) { if ( iob_len ( iobuf ) == len ) {
/* Whole packet received; deliver it */ /* Whole packet received; deliver it */
netdev_rx ( netdev, iob_disown ( iobuf ) ); netdev_rx ( netdev, iob_disown ( iobuf ) );
quota--;
/* Etherboot 5.4 fails to return all packets /* Etherboot 5.4 fails to return all packets
* under mild load; pretend it retriggered. * under mild load; pretend it retriggered.
*/ */