diff options
author | Michael Brown <mcb30@ipxe.org> | 2014-10-16 14:09:27 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2014-10-16 14:12:42 +0100 |
commit | b71e93bb71ae83754e5d6b40b7b24bb31b5238de (patch) | |
tree | db7f04c2e462c194a36eb45decbe2296481a4626 /src/drivers/net | |
parent | 86285d1d540dff726ba50e7f41f06a20207885ea (diff) | |
download | ipxe-b71e93bb71ae83754e5d6b40b7b24bb31b5238de.tar.gz |
[efi] Free transmit ring entry before calling netdev_tx_complete()
The snpnet driver uses netdev_tx_defer() and so must ensure that space
in the (single-entry) transmit descriptor ring is freed up before
calling netdev_tx_complete().
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net')
-rw-r--r-- | src/drivers/net/efi/snpnet.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/drivers/net/efi/snpnet.c b/src/drivers/net/efi/snpnet.c index e54b5299..2c3b552e 100644 --- a/src/drivers/net/efi/snpnet.c +++ b/src/drivers/net/efi/snpnet.c @@ -185,6 +185,7 @@ static int snpnet_transmit ( struct net_device *netdev, */ static void snpnet_poll_tx ( struct net_device *netdev ) { struct snp_nic *snp = netdev->priv; + struct io_buffer *iobuf; UINT32 irq; VOID *txbuf; EFI_STATUS efirc; @@ -212,8 +213,9 @@ static void snpnet_poll_tx ( struct net_device *netdev ) { } /* Complete transmission */ - netdev_tx_complete ( netdev, snp->txbuf ); + iobuf = snp->txbuf; snp->txbuf = NULL; + netdev_tx_complete ( netdev, iobuf ); } /** |