From owner-svn-src-user@FreeBSD.ORG  Fri Jun  5 05:12:34 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 1A4D3106566C;
	Fri,  5 Jun 2009 05:12:34 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 095BE8FC18;
	Fri,  5 Jun 2009 05:12:34 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n555CXCi015174;
	Fri, 5 Jun 2009 05:12:33 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n555CXpe015173;
	Fri, 5 Jun 2009 05:12:33 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <200906050512.n555CXpe015173@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Fri, 5 Jun 2009 05:12:33 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r193482 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 05 Jun 2009 05:12:34 -0000

Author: kmacy
Date: Fri Jun  5 05:12:33 2009
New Revision: 193482
URL: http://svn.freebsd.org/changeset/base/193482

Log:
  - check that we don't try to produce packets faster than the card
    consume them by checking in_use vs. size
  - check for coalescing in direct transmit path

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

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	Fri Jun  5 04:20:14 2009	(r193481)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c	Fri Jun  5 05:12:33 2009	(r193482)
@@ -1503,8 +1503,8 @@ static void
 cxgb_start_locked(struct sge_qset *qs)
 {
 	struct mbuf *m, *m_tail, *m_head = NULL;
-	int txmax = TX_START_MAX_DESC;
 	struct sge_txq *txq = &qs->txq[TXQ_ETH];
+	int txmax = min(TX_START_MAX_DESC, txq->size - txq->in_use);
 	int in_use_init = txq->in_use;
 	struct port_info *pi = qs->port;
 	struct adapter *sc = pi->adapter;
@@ -1565,19 +1565,21 @@ cxgb_transmit_locked(struct ifnet *ifp, 
 {
 	struct port_info *pi = qs->port;
 	struct adapter	*sc = pi->adapter;
-	struct buf_ring *br = qs->txq[TXQ_ETH].txq_mr;
+	struct sge_txq *txq = &qs->txq[TXQ_ETH];
+	struct buf_ring *br = txq->txq_mr;
 	int error, count = 1;
 
 	TXQ_LOCK_ASSERT(qs);
 	reclaim_completed_tx(qs, (TX_ETH_Q_SIZE>>4), TXQ_ETH);
 
 	if (sc->tunq_coalesce == 0 && pi->link_config.link_ok &&
-	    TXQ_RING_EMPTY(qs)) {
+	    TXQ_RING_EMPTY(qs) && (txq->size - txq->in_use) >= 4) {
 		if (t3_encap(qs, &m, 1)) {
 			if (m != NULL &&
 			    (error = drbr_enqueue(ifp, br, m)) != 0) 
 				return (error);
 		} else {
+			check_pkt_coalesce(qs);
 			/*
 			 * We've bypassed the buf ring so we need to update
 			 * ifp directly