Author: adrian
Date: Sat Oct 11 22:12:24 2014
New Revision: 272968
URL: https://svnweb.freebsd.org/changeset/base/272968

Log:
  MFC r271645 - Set DROP_EN on each RX queue if transmit flow-control is 
disabled.
  
  This allows the NIC to drop frames on the receive queue and not
  cause the MAC to block on receiving to _any_ queue.
  
  Tested:
  
  igb0@pci0:5:0:0:        class=0x020000 card=0x152115d9 chip=0x15218086 
rev=0x01 hdr=0x00
      vendor     = 'Intel Corporation'
      device     = 'I350 Gigabit Network Connection'
      class      = network
      subclass   = ethernet
  
  Discussed with: Eric Joyner <eric.joy...@intel.com>
  MFC after:    1 week
  Sponsored by: Norse Corp, Inc.

Modified:
  stable/10/sys/dev/e1000/if_igb.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/e1000/if_igb.c
==============================================================================
--- stable/10/sys/dev/e1000/if_igb.c    Sat Oct 11 22:10:39 2014        
(r272967)
+++ stable/10/sys/dev/e1000/if_igb.c    Sat Oct 11 22:12:24 2014        
(r272968)
@@ -4517,6 +4517,18 @@ igb_initialize_receive_units(struct adap
                rctl |= E1000_RCTL_SZ_2048;
        }
 
+       /*
+        * If TX flow control is disabled and there's >1 queue defined,
+        * enable DROP.
+        *
+        * This drops frames rather than hanging the RX MAC for all queues.
+        */
+       if ((adapter->num_queues > 1) &&
+           (adapter->fc == e1000_fc_none ||
+            adapter->fc == e1000_fc_rx_pause)) {
+               srrctl |= E1000_SRRCTL_DROP_EN;
+       }
+
        /* Setup the Base and Length of the Rx Descriptor Rings */
        for (int i = 0; i < adapter->num_queues; i++, rxr++) {
                u64 bus_addr = rxr->rxdma.dma_paddr;
@@ -6053,6 +6065,7 @@ igb_set_flowcntl(SYSCTL_HANDLER_ARGS)
 
        adapter->hw.fc.current_mode = adapter->hw.fc.requested_mode;
        e1000_force_mac_fc(&adapter->hw);
+       /* XXX TODO: update DROP_EN on each RX queue if appropriate */
        return (error);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to