PERFORCE change 124928 for review

Kip Macy kmacy at FreeBSD.org
Wed Aug 8 17:54:59 PDT 2007


http://perforce.freebsd.org/chv.cgi?CH=124928

Change 124928 by kmacy at kmacy_home:ethng on 2007/08/09 00:54:45

	get cxgb support for IFNET_MULTIQUEUE performance 
	within 10% of default case

Affected files ...

.. //depot/projects/ethng/src/sys/dev/cxgb/cxgb_adapter.h#6 edit
.. //depot/projects/ethng/src/sys/dev/cxgb/cxgb_main.c#9 edit
.. //depot/projects/ethng/src/sys/dev/cxgb/cxgb_multiq.c#4 edit
.. //depot/projects/ethng/src/sys/dev/cxgb/cxgb_sge.c#7 edit

Differences ...

==== //depot/projects/ethng/src/sys/dev/cxgb/cxgb_adapter.h#6 (text+ko) ====

@@ -51,6 +51,7 @@
 
 #include <machine/bus.h>
 #include <machine/resource.h>
+
 #include <sys/bus_dma.h>
 #include <dev/pci/pcireg.h>
 #include <dev/pci/pcivar.h>
@@ -584,5 +585,6 @@
 int cxgb_tx_common(struct ifnet *ifp, struct sge_qset  *qs, uint32_t txmax);
 struct mbuf *cxgb_dequeue_packet(struct ifnet *ifp, struct sge_txq *unused);
 void cxgb_start(struct ifnet *ifp);
+void refill_fl_service(adapter_t *adap, struct sge_fl *fl);
 
 #endif

==== //depot/projects/ethng/src/sys/dev/cxgb/cxgb_main.c#9 (text+ko) ====

@@ -1961,7 +1961,7 @@
 			break;
 		BPF_MTAP(ifp, m);
 	}
-#ifdef IFNET_MULTIQUEUE	
+#ifndef IFNET_MULTIQUEUE	
 	if (__predict_false(err)) {
 		if (err == ENOMEM) {
 			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
@@ -1970,8 +1970,9 @@
 			IFQ_UNLOCK(&ifp->if_snd);
 		}
 	}
-	if (err == 0 && m == NULL) 
+	if (err == 0 && m == NULL) {
 		err = ENOBUFS;
+	}
 	else if ((err == 0) &&  (txq->size <= txq->in_use + TX_MAX_DESC) &&
 	    (ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0) {
 		ifp->if_drv_flags |= IFF_DRV_OACTIVE;
@@ -1992,9 +1993,9 @@
 	if (!p->link_config.link_ok)
 		return (ENXIO);
 
-	if (IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+	if (IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
 		return (ENOBUFS);
-
+	}
 	qs = &p->adapter->sge.qs[p->first_qset];
 	txq = &qs->txq[TXQ_ETH];
 	err = 0;

==== //depot/projects/ethng/src/sys/dev/cxgb/cxgb_multiq.c#4 (text+ko) ====

@@ -1,5 +1,3 @@
-
-
 /**************************************************************************
 
 Copyright (c) 2007, Chelsio Inc.
@@ -149,6 +147,9 @@
 		}
 		mtx_unlock(&txq->lock);
 
+		if ((qs->txq[TXQ_ETH].flags & TXQ_TRANSMITTING) == 0)
+			wakeup(qs);
+
 		if (dropped) 
 			m_freem(m);
 	}
@@ -566,8 +567,6 @@
 	sched_unpin();
 }
 
-void refill_fl_service(adapter_t *adap, struct sge_fl *fl);
-
 static void
 cxgb_pcpu_start_proc(void *arg)
 {
@@ -589,7 +588,7 @@
 		
 		refill_fl_service(qs->port->adapter, &qs->fl[0]);
 		refill_fl_service(qs->port->adapter, &qs->fl[1]);
-		tsleep(qs, 0, "cxgbidle", sleep_ticks);
+		tsleep(qs, 1, "cxgbidle", sleep_ticks);
 	}
 	thread_lock(td);
 	sched_unbind(td);

==== //depot/projects/ethng/src/sys/dev/cxgb/cxgb_sge.c#7 (text+ko) ====

@@ -188,7 +188,6 @@
 static void sge_timer_cb(void *arg);
 static void sge_timer_reclaim(void *arg, int ncount);
 static void sge_txq_reclaim_handler(void *arg, int ncount);
-static int free_tx_desc(struct sge_txq *q, int n, struct mbuf **m_vec);
 
 /**
  *	reclaim_completed_tx - reclaims completed Tx descriptors
@@ -207,7 +206,7 @@
 
 	mtx_assert(&q->lock, MA_OWNED);
 	if (reclaim > 0) {
-		n = free_tx_desc(q, min(reclaim, nbufs), mvec);
+		n = t3_free_tx_desc(q, min(reclaim, nbufs), mvec);
 		reclaimed = min(reclaim, nbufs);
 		q->cleaned += reclaimed;
 		q->in_use -= reclaimed;
@@ -580,6 +579,13 @@
 	refill_fl(adap, fl, min(16U, fl->size - fl->credits));
 }
 
+void
+refill_fl_service(adapter_t *adap, struct sge_fl *fl)
+{
+	return; /* XXX no-op for now */
+	__refill_fl(adap, fl);
+}
+
 /**
  *	recycle_rx_buf - recycle a receive buffer
  *	@adapter: the adapter
@@ -1654,7 +1660,7 @@
 
 
 /**
- *	free_tx_desc - reclaims Tx descriptors and their buffers
+ *	t3_free_tx_desc - reclaims Tx descriptors and their buffers
  *	@adapter: the adapter
  *	@q: the Tx queue to reclaim descriptors from
  *	@n: the number of descriptors to reclaim
@@ -1663,7 +1669,7 @@
  *	Tx buffers.  Called with the Tx queue lock held.
  */
 int
-free_tx_desc(struct sge_txq *q, int n, struct mbuf **m_vec)
+t3_free_tx_desc(struct sge_txq *q, int n, struct mbuf **m_vec)
 {
 	struct tx_sw_desc *d;
 	unsigned int cidx = q->cidx;
@@ -2226,9 +2232,12 @@
 	struct ifnet *ifp = pi->ifp;
 	
 	DPRINTF("rx_eth m=%p m->m_data=%p p->iff=%d\n", m, mtod(m, uint8_t *), cpl->iff);
-	if (&pi->adapter->port[cpl->iff] != pi)
-		panic("bad port index %d m->m_data=%p\n", cpl->iff, mtod(m, uint8_t *));
-
+	if (&pi->adapter->port[cpl->iff] != pi) {
+		struct sge_qset *qs = rspq_to_qset(rq);
+		
+		panic("bad port index %d m->m_data=%p cidx=%d pidx=%d\n", cpl->iff, mtod(m, uint8_t *),
+		    qs->fl[0].cidx, qs->fl[0].pidx);
+	}
 	if ((ifp->if_capenable & IFCAP_RXCSUM) && !cpl->fragment &&
 	    cpl->csum_valid && cpl->csum == 0xffff) {
 		m->m_pkthdr.csum_flags = (CSUM_IP_CHECKED|CSUM_IP_VALID);


More information about the p4-projects mailing list