summaryrefslogtreecommitdiffstats
path: root/src/drivers/net/realtek.c
diff options
context:
space:
mode:
authorMichael Brown2013-05-01 15:07:51 +0200
committerMichael Brown2013-05-01 15:07:51 +0200
commitb4ec6a6a687bd6e714e0dddcb8422cfe0d4195a1 (patch)
tree1a954a58ebaae6f6ea102fbb9a94c50edc3c3a2c /src/drivers/net/realtek.c
parent[netdevice] Add netdev_tx_defer() to allow drivers to defer transmissions (diff)
downloadipxe-b4ec6a6a687bd6e714e0dddcb8422cfe0d4195a1.tar.gz
ipxe-b4ec6a6a687bd6e714e0dddcb8422cfe0d4195a1.tar.xz
ipxe-b4ec6a6a687bd6e714e0dddcb8422cfe0d4195a1.zip
[realtek] Defer packets when no transmit descriptors are available
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net/realtek.c')
-rw-r--r--src/drivers/net/realtek.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/drivers/net/realtek.c b/src/drivers/net/realtek.c
index f7b5ec58..1fd3931b 100644
--- a/src/drivers/net/realtek.c
+++ b/src/drivers/net/realtek.c
@@ -724,8 +724,8 @@ static int realtek_transmit ( struct net_device *netdev,
/* Get next transmit descriptor */
if ( ( rtl->tx.prod - rtl->tx.cons ) >= RTL_NUM_TX_DESC ) {
- DBGC ( rtl, "REALTEK %p out of transmit descriptors\n", rtl );
- return -ENOBUFS;
+ netdev_tx_defer ( netdev, iobuf );
+ return 0;
}
tx_idx = ( rtl->tx.prod++ % RTL_NUM_TX_DESC );
@@ -809,8 +809,8 @@ static void realtek_poll_tx ( struct net_device *netdev ) {
DBGC2 ( rtl, "REALTEK %p TX %d complete\n", rtl, tx_idx );
/* Complete TX descriptor */
- netdev_tx_complete_next ( netdev );
rtl->tx.cons++;
+ netdev_tx_complete_next ( netdev );
}
}