Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Jun 2009 05:12:33 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r193482 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb
Message-ID:  <200906050512.n555CXpe015173@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



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