Author: np
Date: Thu Aug 29 06:26:22 2013
New Revision: 255015
URL: http://svnweb.freebsd.org/changeset/base/255015

Log:
  Merge r254386 from user/np/cxl_tuning.  Add an INET|INET6 check missing
  in said revision.
  
  r254386:
  Flush inactive LRO entries periodically.

Modified:
  head/sys/dev/cxgbe/adapter.h
  head/sys/dev/cxgbe/t4_main.c
  head/sys/dev/cxgbe/t4_sge.c
Directory Properties:
  head/sys/   (props changed)

Modified: head/sys/dev/cxgbe/adapter.h
==============================================================================
--- head/sys/dev/cxgbe/adapter.h        Thu Aug 29 00:38:24 2013        
(r255014)
+++ head/sys/dev/cxgbe/adapter.h        Thu Aug 29 06:26:22 2013        
(r255015)
@@ -559,6 +559,7 @@ struct adapter {
        bus_dma_tag_t dmat;     /* Parent DMA tag */
 
        struct sge sge;
+       int lro_timeout;
 
        struct taskqueue *tq[NCHAN];    /* taskqueues that flush data out */
        struct port_info *port[MAX_NPORTS];

Modified: head/sys/dev/cxgbe/t4_main.c
==============================================================================
--- head/sys/dev/cxgbe/t4_main.c        Thu Aug 29 00:38:24 2013        
(r255014)
+++ head/sys/dev/cxgbe/t4_main.c        Thu Aug 29 06:26:22 2013        
(r255015)
@@ -4229,6 +4229,10 @@ t4_sysctls(struct adapter *sc)
 
        t4_sge_sysctls(sc, ctx, children);
 
+       sc->lro_timeout = 100;
+       SYSCTL_ADD_INT(ctx, children, OID_AUTO, "lro_timeout", CTLFLAG_RW,
+           &sc->lro_timeout, 0, "lro inactive-flush timeout (in us)");
+
 #ifdef SBUF_DRAIN
        /*
         * dev.t4nex.X.misc.  Marked CTLFLAG_SKIP to avoid information overload.

Modified: head/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- head/sys/dev/cxgbe/t4_sge.c Thu Aug 29 00:38:24 2013        (r255014)
+++ head/sys/dev/cxgbe/t4_sge.c Thu Aug 29 06:26:22 2013        (r255015)
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/malloc.h>
 #include <sys/queue.h>
 #include <sys/taskqueue.h>
+#include <sys/time.h>
 #include <sys/sysctl.h>
 #include <sys/smp.h>
 #include <net/bpf.h>
@@ -1006,6 +1007,9 @@ service_iq(struct sge_iq *iq, int budget
        uint32_t lq;
        struct mbuf *m0;
        STAILQ_HEAD(, sge_iq) iql = STAILQ_HEAD_INITIALIZER(iql);
+#if defined(INET) || defined(INET6)
+       const struct timeval lro_timeout = {0, sc->lro_timeout};
+#endif
 
        limit = budget ? budget : iq->qsize / 8;
 
@@ -1111,6 +1115,14 @@ service_iq(struct sge_iq *iq, int budget
                                    
V_SEINTARM(V_QINTR_TIMER_IDX(X_TIMERREG_UPDATE_CIDX)));
                                ndescs = 0;
 
+#if defined(INET) || defined(INET6)
+                               if (iq->flags & IQ_LRO_ENABLED &&
+                                   sc->lro_timeout != 0) {
+                                       tcp_lro_flush_inactive(&rxq->lro,
+                                           &lro_timeout);
+                               }
+#endif
+
                                if (fl_bufs_used > 0) {
                                        FL_LOCK(fl);
                                        fl->needed += fl_bufs_used;
_______________________________________________
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