Browse Source

Force a netdevice poll in net_tx() before attempting to transmit

packet, to work around the problem whereby small TX rings get backed
up because we haven't yet poll()ed for TX completions.
tags/v0.9.3
Michael Brown 16 years ago
parent
commit
2303c45d65
1 changed files with 8 additions and 0 deletions
  1. 8
    0
      src/net/netdevice.c

+ 8
- 0
src/net/netdevice.c View File

424
  */
424
  */
425
 int net_tx ( struct io_buffer *iobuf, struct net_device *netdev,
425
 int net_tx ( struct io_buffer *iobuf, struct net_device *netdev,
426
 	     struct net_protocol *net_protocol, const void *ll_dest ) {
426
 	     struct net_protocol *net_protocol, const void *ll_dest ) {
427
+
428
+	/* Force a poll on the netdevice to (potentially) clear any
429
+	 * backed-up TX completions.  This is needed on some network
430
+	 * devices to avoid excessive losses due to small TX ring
431
+	 * sizes.
432
+	 */
433
+	netdev_poll ( netdev );
434
+
427
 	return netdev->ll_protocol->tx ( iobuf, netdev, net_protocol, ll_dest );
435
 	return netdev->ll_protocol->tx ( iobuf, netdev, net_protocol, ll_dest );
428
 }
436
 }
429
 
437
 

Loading…
Cancel
Save