Remove the one-packet-per-poll-cycle limit; it seems to no longer be
authorMichael Brown <mcb30@etherboot.org>
Thu, 18 Jan 2007 16:50:35 +0000 (16:50 +0000)
committerMichael Brown <mcb30@etherboot.org>
Thu, 18 Jan 2007 16:50:35 +0000 (16:50 +0000)
needed now that performance is up.

src/net/netdevice.c

index 7ed678a..2733d23 100644 (file)
@@ -387,7 +387,6 @@ int net_rx ( struct pk_buff *pkb, struct net_device *netdev,
  *
  * This polls all interfaces for received packets, and processes
  * packets from the RX queue.
- *
  */
 static void net_step ( struct process *process ) {
        struct net_device *netdev;
@@ -396,29 +395,11 @@ static void net_step ( struct process *process ) {
        /* Poll and process each network device */
        list_for_each_entry ( netdev, &net_devices, list ) {
 
-               /* Poll for new packets.  Limit RX queue size to a
-                * single packet, because otherwise most drivers are
-                * in serious danger of running out of memory and
-                * having to drop packets.
-                *
-                * This limitation isn't relevant to devices that
-                * preallocate packet buffers (i.e. devices with
-                * descriptor-based RX datapaths).  We might at some
-                * point want to relax the quota for such devices.
-                */
-               netdev_poll ( netdev,
-                             ( list_empty ( &netdev->rx_queue ) ? 1 : 0 ) );
-
-               /* Handle at most one received packet per poll.  We
-                * avoid processing more than one packet per call to
-                * netdev_poll(), because processing the received
-                * packet can trigger transmission of a new packet
-                * (e.g. an ARP response).  Since TX completions will
-                * be processed as part of the poll operation, it is
-                * easy to overflow small TX queues if multiple
-                * packets are processed per poll.
-                */
-               if ( ( pkb = netdev_rx_dequeue ( netdev ) ) ) {
+               /* Poll for new packets */
+               netdev_poll ( netdev, -1U );
+
+               /* Process received packets */
+               while ( ( pkb = netdev_rx_dequeue ( netdev ) ) ) {
                        DBGC ( netdev, "NETDEV %p processing %p\n",
                               netdev, pkb );
                        netdev->ll_protocol->rx ( pkb, netdev );