Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Jun 2009 01:03:36 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r193791 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb
Message-ID:  <200906090103.n5913ahC050603@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kmacy
Date: Tue Jun  9 01:03:36 2009
New Revision: 193791
URL: http://svn.freebsd.org/changeset/base/193791

Log:
  - don't coalesce if we're in the watchdog or tx timeout
  - don't disable coalescing unless we've drained all buf ring enqueued packets
  - reduce the maximum number of descriptors per call to start
  - remove undefined smp_mb macro reference

Modified:
  user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_osdep.h
  user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c

Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_osdep.h
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_osdep.h	Tue Jun  9 00:54:57 2009	(r193790)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_osdep.h	Tue Jun  9 01:03:36 2009	(r193791)
@@ -170,8 +170,8 @@ struct t3_mbuf_hdr {
 #define TX_MAX_DESC                       4     /* max descriptors per packet    */
 
 
-#define TX_START_MIN_DESC  (TX_MAX_DESC << 2)
-#define TX_START_MAX_DESC (TX_MAX_DESC << 3)    /* maximum number of descriptors
+#define TX_START_MIN_DESC  (TX_MAX_DESC << 1)
+#define TX_START_MAX_DESC (TX_MAX_DESC << 2)    /* maximum number of descriptors
 						 * call to start used per 	 */
 
 #define TX_CLEAN_MAX_DESC (TX_MAX_DESC << 4)    /* maximum tx descriptors

Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c	Tue Jun  9 00:54:57 2009	(r193790)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c	Tue Jun  9 01:03:36 2009	(r193791)
@@ -229,6 +229,8 @@ check_pkt_coalesce(struct sge_qset *qs) 
 
 	if (__predict_false(cxgb_pcpu_tx_coalesce_force))
 		return (1);
+	if (__predict_false(qs->qs_flags & QS_FLUSHING))
+		return (0);
 	txq = &qs->txq[TXQ_ETH]; 
         sc = qs->port->adapter; 
 	fill = &sc->tunq_fill[qs->idx];
@@ -236,10 +238,10 @@ check_pkt_coalesce(struct sge_qset *qs) 
 	/*
 	 * if the hardware transmit queue is more than 1/4 full
 	 * we mark it as coalescing - we drop back from coalescing
-	 * when we go below 1/16 full, this provides us with some
-	 * degree of hysteresis
+	 * when we go below 1/8 full and there are no packets enqueued, 
+	 * this provides us with some degree of hysteresis
 	 */
-        if (*fill != 0 && (txq->in_use < (txq->size>>4)))  
+        if (*fill != 0 && (txq->in_use < (txq->size>>3)) && TXQ_EMPTY(qs))  
                 *fill = 0; 
         else if (*fill == 0 && (txq->in_use >= (txq->size>>2)))
                 *fill = 1; 
@@ -3076,7 +3078,7 @@ process_responses(adapter_t *adap, struc
 	if (sleeping)
 		check_ring_db(adap, qs, sleeping);
 
-	smp_mb();  /* commit Tx queue processed updates */
+	mb();  /* commit Tx queue processed updates */
 	if (__predict_false(qs->txq_stopped > 1)) {
 		printf("restarting tx on %p\n", qs);
 		



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906090103.n5913ahC050603>