aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/net/efi
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2014-10-16 14:09:27 +0100
committerMichael Brown <mcb30@ipxe.org>2014-10-16 14:12:42 +0100
commitb71e93bb71ae83754e5d6b40b7b24bb31b5238de (patch)
treedb7f04c2e462c194a36eb45decbe2296481a4626 /src/drivers/net/efi
parent86285d1d540dff726ba50e7f41f06a20207885ea (diff)
downloadipxe-b71e93bb71ae83754e5d6b40b7b24bb31b5238de.zip
ipxe-b71e93bb71ae83754e5d6b40b7b24bb31b5238de.tar.gz
ipxe-b71e93bb71ae83754e5d6b40b7b24bb31b5238de.tar.bz2
[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/efi')
-rw-r--r--src/drivers/net/efi/snpnet.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/drivers/net/efi/snpnet.c b/src/drivers/net/efi/snpnet.c
index e54b529..2c3b552 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 );
}
/**