Skip to content

Commit

Permalink
[netdevice] Do not force a poll on net_tx()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mcb30 committed Oct 24, 2012
1 parent dace457 commit 947976d
Showing 1 changed file with 0 additions and 7 deletions.
7 changes: 0 additions & 7 deletions src/net/netdevice.c
Expand Up @@ -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 ) {
Expand Down

0 comments on commit 947976d

Please sign in to comment.