summaryrefslogtreecommitdiffstats
path: root/src/drivers/net/efi/snpnet.c
diff options
context:
space:
mode:
authorMichael Brown2014-10-16 15:09:27 +0200
committerMichael Brown2014-10-16 15:12:42 +0200
commitb71e93bb71ae83754e5d6b40b7b24bb31b5238de (patch)
treedb7f04c2e462c194a36eb45decbe2296481a4626 /src/drivers/net/efi/snpnet.c
parent[intel] Add 8086:1557 card (Intel 82599 10G ethernet mezz) (diff)
downloadipxe-b71e93bb71ae83754e5d6b40b7b24bb31b5238de.tar.gz
ipxe-b71e93bb71ae83754e5d6b40b7b24bb31b5238de.tar.xz
ipxe-b71e93bb71ae83754e5d6b40b7b24bb31b5238de.zip
[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/snpnet.c')
-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 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 );
}
/**