]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[intel] Poll RX queue if hardware reports RX overflow
authorMichael Brown <mcb30@ipxe.org>
Thu, 25 Oct 2012 23:09:09 +0000 (16:09 -0700)
committerMichael Brown <mcb30@ipxe.org>
Sun, 28 Oct 2012 18:53:23 +0000 (18:53 +0000)
The Intel NIC emulation in some versions of VMware seems to suffer
from a flaw whereby the Interrupt Cause Register (ICR) fails to assert
the usual "packet received" bit (ICR.RXT0) if a receive overflow
(ICR.RXO) has also occurred.

Work around this flaw by polling for completed descriptors whenever
either ICR.RXT0 or ICR.RXO is asserted.

Reported-by: Miroslav Halas <miroslav.halas@bankofamerica.com>
Debugged-by: Miroslav Halas <miroslav.halas@bankofamerica.com>
Tested-by: Miroslav Halas <miroslav.halas@bankofamerica.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/intel.c

index 0811ed9106cbd2dbdcfb5fa588d5b5325cb143e9..399b53540cd7d2795b2b3e7a755604a5bfff7156 100644 (file)
@@ -700,7 +700,7 @@ static void intel_poll ( struct net_device *netdev ) {
                intel_poll_tx ( netdev );
 
        /* Poll for RX completions, if applicable */
-       if ( icr & INTEL_IRQ_RXT0 )
+       if ( icr & ( INTEL_IRQ_RXT0 | INTEL_IRQ_RXO ) )
                intel_poll_rx ( netdev );
 
        /* Report receive overruns */