PERFORCE change 129528 for review
Kip Macy
kmacy at FreeBSD.org
Sun Nov 25 16:00:26 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=129528
Change 129528 by kmacy at kmacy:storage:toestack on 2007/11/25 23:59:32
use 16k clusters for jumbo frames
fix case where we were skipping over returning credits
turn off IMM DATA printfs
add debugging for q stop / restart
Affected files ...
.. //depot/projects/toestack/sys/dev/cxgb/cxgb_sge.c#13 edit
.. //depot/projects/toestack/sys/dev/cxgb/sys/cxgb_support.c#3 edit
Differences ...
==== //depot/projects/toestack/sys/dev/cxgb/cxgb_sge.c#13 (text+ko) ====
@@ -1513,6 +1513,8 @@
struct sge_qset *qs = txq_to_qset(q, qid);
+ printf("stopping q\n");
+
setbit(&qs->txq_stopped, qid);
smp_mb();
@@ -1585,7 +1587,7 @@
mtx_unlock(&q->lock);
printf("no desc available\n");
- return (-1);
+ return (ENOSPC);
}
goto again;
}
@@ -1618,6 +1620,8 @@
struct sge_txq *q = &qs->txq[TXQ_CTRL];
adapter_t *adap = qs->port->adapter;
+ printf("Restart_ctrlq\n");
+
mtx_lock(&q->lock);
again: reclaim_completed_tx_imm(q);
@@ -1997,6 +2001,8 @@
ret = check_desc_avail(adap, q, m, ndesc, TXQ_OFLD);
if (__predict_false(ret)) {
if (ret == 1) {
+ printf("no ofld desc avail\n");
+
m_set_priority(m, ndesc); /* save for restart */
mtx_unlock(&q->lock);
return (EINTR);
@@ -2181,16 +2187,24 @@
{
struct adapter *sc = qs->port->adapter;
+
if (isset(&qs->txq_stopped, TXQ_OFLD) &&
should_restart_tx(&qs->txq[TXQ_OFLD]) &&
test_and_clear_bit(TXQ_OFLD, &qs->txq_stopped)) {
qs->txq[TXQ_OFLD].restarts++;
+ printf("restarting TXQ_OFLD\n");
taskqueue_enqueue(sc->tq, &qs->txq[TXQ_OFLD].qresume_task);
}
+ printf("stopped=0x%x restart=%d processed=%d cleaned=%d in_use=%d\n",
+ qs->txq_stopped, should_restart_tx(&qs->txq[TXQ_CTRL]),
+ qs->txq[TXQ_CTRL].processed, qs->txq[TXQ_CTRL].cleaned,
+ qs->txq[TXQ_CTRL].in_use);
+
if (isset(&qs->txq_stopped, TXQ_CTRL) &&
should_restart_tx(&qs->txq[TXQ_CTRL]) &&
test_and_clear_bit(TXQ_CTRL, &qs->txq_stopped)) {
qs->txq[TXQ_CTRL].restarts++;
+ printf("restarting TXQ_CTRL\n");
taskqueue_enqueue(sc->tq, &qs->txq[TXQ_CTRL].qresume_task);
}
}
@@ -2303,9 +2317,9 @@
q->fl[0].zone = zone_clust;
q->fl[0].type = EXT_CLUSTER;
if (jumbo_phys_contig) {
- q->fl[1].buf_size = MJUM9BYTES - sizeof(uint32_t) - sizeof(struct m_hdr) - sizeof(struct pkthdr) - sizeof(struct m_ext_);
- q->fl[1].zone = zone_jumbo9;
- q->fl[1].type = EXT_JUMBO9;
+ q->fl[1].buf_size = MJUM16BYTES - sizeof(uint32_t) - sizeof(struct m_hdr) - sizeof(struct pkthdr) - sizeof(struct m_ext_);
+ q->fl[1].zone = zone_jumbo16;
+ q->fl[1].type = EXT_JUMBO16;
} else {
q->fl[1].buf_size = MJUMPAGESIZE - sizeof(uint32_t) - sizeof(struct m_hdr) - sizeof(struct pkthdr) - sizeof(struct m_ext_);
q->fl[1].zone = zone_jumbop;
@@ -2736,7 +2750,7 @@
} else if (flags & F_RSPD_IMM_DATA_VALID) {
#ifdef DISABLE_MBUF_IOVEC
- printf("IMM DATA VALID opcode=0x%x rspq->cidx=%d\n", r->rss_hdr.opcode, rspq->cidx);
+ DPRINTF("IMM DATA VALID opcode=0x%x rspq->cidx=%d\n", r->rss_hdr.opcode, rspq->cidx);
if(get_imm_packet(adap, r, &rspq->rspq_mh) == 0) {
rspq->next_holdoff = NOMEM_INTR_DELAY;
@@ -2748,7 +2762,7 @@
#else
struct mbuf *m = NULL;
- printf("IMM DATA VALID opcode=0x%x rspq->cidx=%d\n", r->rss_hdr.opcode, rspq->cidx);
+ DPRINTF("IMM DATA VALID opcode=0x%x rspq->cidx=%d\n", r->rss_hdr.opcode, rspq->cidx);
if (rspq->rspq_mbuf == NULL)
rspq->rspq_mbuf = m_gethdr(M_DONTWAIT, MT_DATA);
else
@@ -2794,13 +2808,14 @@
DPRINTF("pure response\n");
rspq->pure_rsps++;
}
+#ifndef DISABLE_MBUF_IOVEC
+ skip:
+#endif
if (flags & RSPD_CTRL_MASK) {
sleeping |= flags & RSPD_GTS_MASK;
handle_rsp_cntrl_info(qs, flags);
}
-#ifndef DISABLE_MBUF_IOVEC
- skip:
-#endif
+
r++;
if (__predict_false(++rspq->cidx == rspq->size)) {
rspq->cidx = 0;
@@ -2824,13 +2839,15 @@
ngathered = rx_offload(&adap->tdev, rspq,
rspq->rspq_mh.mh_head, offload_mbufs, ngathered);
rspq->rspq_mh.mh_head = NULL;
+ DPRINTF("received offload packet\n");
+
} else if (eth && eop) {
prefetch(mtod(rspq->rspq_mh.mh_head, uint8_t *));
prefetch(mtod(rspq->rspq_mh.mh_head, uint8_t *) + L1_CACHE_BYTES);
t3_rx_eth_lro(adap, rspq, rspq->rspq_mh.mh_head, ethpad,
rss_hash, rss_csum, lro);
-
+ DPRINTF("received tunnel packet\n");
rspq->rspq_mh.mh_head = NULL;
}
@@ -2846,9 +2863,12 @@
check_ring_db(adap, qs, sleeping);
smp_mb(); /* commit Tx queue processed updates */
- if (__predict_false(qs->txq_stopped != 0))
+ if (__predict_false(qs->txq_stopped != 0)) {
+ printf("restarting tx on %p\n", qs);
+
restart_tx(qs);
-
+ }
+
__refill_fl_lt(adap, &qs->fl[0], 512);
__refill_fl_lt(adap, &qs->fl[1], 512);
budget -= budget_left;
==== //depot/projects/toestack/sys/dev/cxgb/sys/cxgb_support.c#3 (text+ko) ====
@@ -127,7 +127,7 @@
return (err);
if (jumbo_phys_contig)
- ccp->ccp_jumbo_zone = zone_jumbo9;
+ ccp->ccp_jumbo_zone = zone_jumbo16;
else
ccp->ccp_jumbo_zone = zone_jumbop;
More information about the p4-projects
mailing list