]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[undi] Apply quota only to number of complete received packets
authorMichael Brown <mcb30@ipxe.org>
Wed, 14 May 2014 12:50:30 +0000 (13:50 +0100)
committerMichael Brown <mcb30@ipxe.org>
Wed, 14 May 2014 12:50:30 +0000 (13:50 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/drivers/net/undinet.c

index 82dd8d2f9fafd5f9dd41a8ba16003e4a6d914a6c..6450665ff749d41039b6e465fabb22c1171865cd 100644 (file)
@@ -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.
                                 */