svn commit: r193791 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb
Kip Macy
kmacy at FreeBSD.org
Tue Jun 9 01:03:37 UTC 2009
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);
More information about the svn-src-user
mailing list