Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Jun 2009 23:59:21 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r193551 - in user/kmacy/releng_7_2_fcs/sys/dev/cxgb: . sys
Message-ID:  <200906052359.n55NxLCq042151@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kmacy
Date: Fri Jun  5 23:59:21 2009
New Revision: 193551
URL: http://svn.freebsd.org/changeset/base/193551

Log:
  - remove count from t3_encap interface
  - simplify busdma_map_sg_vec

Modified:
  user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_adapter.h
  user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c
  user/kmacy/releng_7_2_fcs/sys/dev/cxgb/sys/mvec.h
  user/kmacy/releng_7_2_fcs/sys/dev/cxgb/sys/uipc_mvec.c

Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_adapter.h
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_adapter.h	Fri Jun  5 23:53:17 2009	(r193550)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_adapter.h	Fri Jun  5 23:59:21 2009	(r193551)
@@ -504,7 +504,6 @@ void t3_sge_stop(adapter_t *);
 void t3b_intr(void *data);
 void t3_intr_msi(void *data);
 void t3_intr_msix(void *data);
-int t3_encap(struct sge_qset *, struct mbuf **, int);
 
 int t3_sge_init_adapter(adapter_t *);
 int t3_sge_reset_adapter(adapter_t *);

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 23:53:17 2009	(r193550)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c	Fri Jun  5 23:59:21 2009	(r193551)
@@ -1276,8 +1276,8 @@ do { \
 #define GET_VTAG(cntrl, m)
 #endif
 
-int
-t3_encap(struct sge_qset *qs, struct mbuf **m, int count)
+static int
+t3_encap(struct sge_qset *qs, struct mbuf **m)
 {
 	adapter_t *sc;
 	struct mbuf *m0;
@@ -1311,32 +1311,34 @@ t3_encap(struct sge_qset *qs, struct mbu
 	KASSERT(m0->m_flags & M_PKTHDR, ("not packet header\n"));
 	
 #ifdef VLAN_SUPPORTED
-	if  (count == 1 && m0->m_next != NULL &&
+	if  (m0->m_nextpkt == NULL && m0->m_next != NULL &&
 	    m0->m_pkthdr.csum_flags & (CSUM_TSO))
 		tso_info = V_LSO_MSS(m0->m_pkthdr.tso_segsz);
 #endif
-	if (count > 1) {
-		busdma_map_sg_vec(m, segs, count);
-		nsegs = count;
+	if (m0->m_nextpkt != NULL) {
+		busdma_map_sg_vec(m0, segs, &nsegs);
 	} else if ((err = busdma_map_sg_collapse(&m0, segs, &nsegs))) {
 		if (cxgb_debug)
 			printf("failed ... err=%d\n", err);
 		return (err);
 	} 
-	KASSERT(m0->m_pkthdr.len, ("empty packet nsegs=%d count=%d", nsegs, count));
+	KASSERT(m0->m_pkthdr.len, ("empty packet nsegs=%d", nsegs));
 
-	if ((m0->m_pkthdr.len > PIO_LEN) || (count > 1))
+	if ((m0->m_pkthdr.len > PIO_LEN) || (nsegs > 1))
 		txsd->m = m0;
 
-	if (count > 1) {
+	if (m0->m_nextpkt != NULL) {
 		struct cpl_tx_pkt_batch *cpl_batch = (struct cpl_tx_pkt_batch *)txd;
 		int i, fidx;
 
+		if (nsegs > 7)
+			panic("trying to coalesce %d packets in to one WR", nsegs);
+		
 		wrp = (struct work_request_hdr *)txd;
-		flits = count*2 + 1;
+		flits = nsegs*2 + 1;
 		txq_prod(txq, 1, &txqs);
 
-		for (fidx = 1, i = 0; i < count; i++, fidx += 2) {
+		for (fidx = 1, i = 0; i < nsegs; i++, fidx += 2) {
 			struct cpl_tx_pkt_batch_entry *cbe = &cpl_batch->pkt_entry[i];
 
 			cntrl = V_TXPKT_INTF(pi->txpkt_intf);
@@ -1537,12 +1539,11 @@ cxgb_start_locked(struct sge_qset *qs)
 {
 	struct mbuf *m_head = NULL;
 	struct sge_txq *txq = &qs->txq[TXQ_ETH];
-	int txmax;
+	int avail, txmax;
 	int in_use_init = txq->in_use;
 	struct port_info *pi = qs->port;
 	struct adapter *sc = pi->adapter;
 	struct ifnet *ifp = pi->ifp;
-	int count, avail;
 	struct coalesce_info ci;
 
 	avail = txq->size - txq->in_use - 4;
@@ -1553,11 +1554,9 @@ cxgb_start_locked(struct sge_qset *qs)
 	    (!TXQ_RING_EMPTY(qs)) && (ifp->if_drv_flags & IFF_DRV_RUNNING)) {
 		reclaim_completed_tx(qs, (TX_ETH_Q_SIZE>>4), TXQ_ETH);
 		check_pkt_coalesce(qs);
-		count = 1;
 
 		if (sc->tunq_coalesce) {
 			m_head = cxgb_dequeue_chain(qs, &ci);
-			count = ci.count;
 		} else 
 			m_head = TXQ_RING_DEQUEUE(qs); 
 
@@ -1567,7 +1566,7 @@ cxgb_start_locked(struct sge_qset *qs)
 		 *  Encapsulation can modify our pointer, and or make it
 		 *  NULL on failure.  In that event, we can't requeue.
 		 */
-		if (t3_encap(qs, &m_head, count))
+		if (t3_encap(qs, &m_head))
 			break;
 		
 		/* Send a copy of the frame to the BPF listener */
@@ -1576,7 +1575,7 @@ cxgb_start_locked(struct sge_qset *qs)
 		/*
 		 * We sent via PIO, no longer need a copy
 		 */
-		if (count == 1 && m_head->m_pkthdr.len <= PIO_LEN)
+		if (m_head->m_pkthdr.len <= PIO_LEN)
 			m_freem(m_head);
 
 		m_head = NULL;
@@ -1610,7 +1609,7 @@ cxgb_transmit_locked(struct ifnet *ifp, 
 	 */
 	if (sc->tunq_coalesce == 0 && pi->link_config.link_ok &&
 	    TXQ_RING_EMPTY(qs) && avail > 4) {
-		if (t3_encap(qs, &m, 1)) {
+		if (t3_encap(qs, &m)) {
 			if (m != NULL &&
 			    (error = drbr_enqueue(ifp, br, m)) != 0) 
 				return (error);

Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/sys/mvec.h
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/cxgb/sys/mvec.h	Fri Jun  5 23:53:17 2009	(r193550)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/sys/mvec.h	Fri Jun  5 23:59:21 2009	(r193551)
@@ -50,7 +50,7 @@ busdma_map_mbuf_fast(struct mbuf *m, bus
 }
 
 int busdma_map_sg_collapse(struct mbuf **m, bus_dma_segment_t *segs, int *nsegs);
-void busdma_map_sg_vec(struct mbuf **m, bus_dma_segment_t *segs, int count);
+void busdma_map_sg_vec(struct mbuf *m, bus_dma_segment_t *segs, int *nsegs);
 static __inline int
 busdma_map_sgl(bus_dma_segment_t *vsegs, bus_dma_segment_t *segs, int count) 
 {

Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/sys/uipc_mvec.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/cxgb/sys/uipc_mvec.c	Fri Jun  5 23:53:17 2009	(r193550)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/sys/uipc_mvec.c	Fri Jun  5 23:59:21 2009	(r193551)
@@ -117,13 +117,10 @@ err_out:	
 }
 
 void
-busdma_map_sg_vec(struct mbuf **m, bus_dma_segment_t *segs, int pkt_count)
+busdma_map_sg_vec(struct mbuf *m, bus_dma_segment_t *segs, int *nsegs)
 {
-	struct mbuf *m0;
-	int i;
-
-	for (m0 = *m, i = 0; i < pkt_count; segs++, i++, m0 = m0->m_nextpkt)
-		busdma_map_mbuf_fast(m0, segs);
 
+	for (; m != NULL ; segs++, *nsegs += 1, m = m->m_nextpkt)
+		busdma_map_mbuf_fast(m, segs);
 }
 



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