Author: sbruno
Date: Thu Jan 14 18:57:17 2016
New Revision: 294030
URL: https://svnweb.freebsd.org/changeset/base/294030

Log:
  MFC r292670
  
  Add support for sysctl knobs to live tune the tx packet processing limits
  in igb and fix a wrap-around bug.
  
  Submitted by: Jason (j...@nitrology.com)
  Sponsored by: Limelight Networks

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

Modified: stable/10/sys/dev/e1000/if_igb.c
==============================================================================
--- stable/10/sys/dev/e1000/if_igb.c    Thu Jan 14 18:53:54 2016        
(r294029)
+++ stable/10/sys/dev/e1000/if_igb.c    Thu Jan 14 18:57:17 2016        
(r294030)
@@ -408,6 +408,13 @@ SYSCTL_INT(_hw_igb, OID_AUTO, rx_process
     &igb_rx_process_limit, 0,
     "Maximum number of received packets to process at a time, -1 means 
unlimited");
 
+/* How many packets txeof tries to clean at a time */
+static int igb_tx_process_limit = -1;
+TUNABLE_INT("hw.igb.tx_process_limit", &igb_tx_process_limit);
+SYSCTL_INT(_hw_igb, OID_AUTO, tx_process_limit, CTLFLAG_RDTUN,
+    &igb_tx_process_limit, 0,
+    "Maximum number of sent packets to process at a time, -1 means unlimited");
+
 #ifdef DEV_NETMAP      /* see ixgbe.c for details */
 #include <dev/netmap/if_igb_netmap.h>
 #endif /* DEV_NETMAP */
@@ -526,11 +533,15 @@ igb_attach(device_t dev)
 
        e1000_get_bus_info(&adapter->hw);
 
-       /* Sysctl for limiting the amount of work done in the taskqueue */
+       /* Sysctls for limiting the amount of work done in the taskqueues */
        igb_set_sysctl_value(adapter, "rx_processing_limit",
            "max number of rx packets to process",
            &adapter->rx_process_limit, igb_rx_process_limit);
 
+       igb_set_sysctl_value(adapter, "tx_processing_limit",
+           "max number of tx packets to process",
+           &adapter->tx_process_limit, igb_tx_process_limit);
+
        /*
         * Validate number of transmit and receive descriptors. It
         * must not exceed hardware maximum, and must be multiple
@@ -3956,7 +3967,7 @@ igb_txeof(struct tx_ring *txr)
        struct adapter          *adapter = txr->adapter;
        struct ifnet            *ifp = adapter->ifp;
        u32                     work, processed = 0;
-       u16                     limit = txr->process_limit;
+       int                     limit = adapter->tx_process_limit;
        struct igb_tx_buf       *buf;
        union e1000_adv_tx_desc *txd;
 

Modified: stable/10/sys/dev/e1000/if_igb.h
==============================================================================
--- stable/10/sys/dev/e1000/if_igb.h    Thu Jan 14 18:53:54 2016        
(r294029)
+++ stable/10/sys/dev/e1000/if_igb.h    Thu Jan 14 18:57:17 2016        
(r294030)
@@ -300,7 +300,6 @@ struct tx_ring {
        volatile u16            tx_avail;
        u16                     next_avail_desc;
        u16                     next_to_clean;
-       u16                     process_limit;
        u16                     num_desc;
        enum {
            IGB_QUEUE_IDLE = 1,
@@ -479,6 +478,7 @@ struct adapter {
        int                     has_manage;
        int                     wol;
        int                     rx_process_limit;
+       int                     tx_process_limit;
        u16                     vf_ifp;  /* a VF interface */
        bool                    in_detach; /* Used only in igb_ioctl */
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to