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>