]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Guard against GetStatus() failing to return a NULL TX buffer
authorMichael Brown <mcb30@ipxe.org>
Wed, 11 May 2016 21:02:26 +0000 (22:02 +0100)
committerMichael Brown <mcb30@ipxe.org>
Wed, 11 May 2016 22:02:10 +0000 (23:02 +0100)
The UEFI specification requires the EFI_SIMPLE_NETWORK_PROTOCOL
GetStatus() method to set TxBuf to NULL if there are no transmit
buffers to recycle.

Some implementations (observed with Lan9118Dxe in EDK2) fill in TxBuf
only when there is a transmit buffer to recycle, which leads to large
numbers of "spurious TX completion" errors.

Work around this problem by initialising TxBuf to NULL before calling
the GetStatus() method.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/efi/snpnet.c

index 0d876b636544248cedd4d19b90267515e0d3ab3d..88474b0be984c6c0fbfa6894e6f5858bfa8b9564 100644 (file)
@@ -191,6 +191,7 @@ static void snpnet_poll_tx ( struct net_device *netdev ) {
        int rc;
 
        /* Get status */
+       txbuf = NULL;
        if ( ( efirc = snp->snp->GetStatus ( snp->snp, &irq, &txbuf ) ) != 0 ) {
                rc = -EEFI ( efirc );
                DBGC ( snp, "SNP %s could not get status: %s\n",