summaryrefslogtreecommitdiffstats
path: root/src/net/netdevice.c
diff options
context:
space:
mode:
authorMichael Brown2012-10-24 22:26:51 +0200
committerMichael Brown2012-10-24 23:04:41 +0200
commit947976da0caa929434775d978f2dcc7c9aee69f9 (patch)
treebe360b32ae826ed37e02dbcfd198eac5444f4853 /src/net/netdevice.c
parent[intel] Report receive overruns via network device errors (diff)
downloadipxe-947976da0caa929434775d978f2dcc7c9aee69f9.tar.gz
ipxe-947976da0caa929434775d978f2dcc7c9aee69f9.tar.xz
ipxe-947976da0caa929434775d978f2dcc7c9aee69f9.zip
[netdevice] Do not force a poll on net_tx()
Including a netdev_poll() within net_tx() can cause the net_step() loop to end up processing hundreds or thousands of packets within a single step, since each received packet being processed may trigger a response which, in turn causes a poll for further received packets. Network devices must now ensure that the TX ring is at least as large as the RX ring, in order to avoid running out of TX descriptors. This should not cause any problems; unlike the RX ring, there is no substantial memory cost incurred by increasing the TX ring size. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net/netdevice.c')
-rw-r--r--src/net/netdevice.c7
1 files changed, 0 insertions, 7 deletions
diff --git a/src/net/netdevice.c b/src/net/netdevice.c
index 5a4d8635..bea06752 100644
--- a/src/net/netdevice.c
+++ b/src/net/netdevice.c
@@ -672,13 +672,6 @@ int net_tx ( struct io_buffer *iobuf, struct net_device *netdev,
struct ll_protocol *ll_protocol = netdev->ll_protocol;
int rc;
- /* Force a poll on the netdevice to (potentially) clear any
- * backed-up TX completions. This is needed on some network
- * devices to avoid excessive losses due to small TX ring
- * sizes.
- */
- netdev_poll ( netdev );
-
/* Add link-layer header */
if ( ( rc = ll_protocol->push ( netdev, iobuf, ll_dest, ll_source,
net_protocol->net_proto ) ) != 0 ) {