svn commit: r193551 - in user/kmacy/releng_7_2_fcs/sys/dev/cxgb: .
sys
Kip Macy
kmacy at FreeBSD.org
Fri Jun 5 23:59:22 UTC 2009
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);
}
More information about the svn-src-user
mailing list