PERFORCE change 134822 for review
Kip Macy
kmacy at FreeBSD.org
Mon Feb 4 22:52:29 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=134822
Change 134822 by kmacy at kmacy:storage:toehead on 2008/02/05 06:52:13
add sysctl to dump control queue
fix context fetching for tunnel queue
remove redundant taskqueue shutdown
Affected files ...
.. //depot/projects/toehead/sys/dev/cxgb/cxgb_sge.c#7 edit
Differences ...
==== //depot/projects/toehead/sys/dev/cxgb/cxgb_sge.c#7 (text+ko) ====
@@ -81,7 +81,8 @@
extern int cxgb_txq_buf_ring_size;
int cxgb_cached_allocations;
int cxgb_cached;
-int cxgb_ext_freed;
+int cxgb_ext_freed = 0;
+int cxgb_ext_inited = 0;
extern int cxgb_use_16k_clusters;
extern int cxgb_pcpu_cache_enable;
@@ -780,14 +781,6 @@
void
t3_sge_deinit_sw(adapter_t *sc)
{
- int i;
-
- callout_drain(&sc->sge_timer_ch);
- if (sc->tq)
- taskqueue_drain(sc->tq, &sc->slow_intr_task);
- for (i = 0; i < sc->params.nports; i++)
- if (sc->port[i].tq != NULL)
- taskqueue_drain(sc->port[i].tq, &sc->port[i].timer_reclaim_task);
mi_deinit();
}
@@ -2447,7 +2440,8 @@
bzero(cl, header_size);
m = (struct mbuf *)cl;
-
+
+ cxgb_ext_inited++;
SLIST_INIT(&m->m_pkthdr.tags);
m->m_type = MT_DATA;
m->m_flags = flags | M_NOFREE | M_EXT;
@@ -2991,12 +2985,8 @@
return (err);
}
-
-/*
- * broken by recent mbuf changes
- */
static int
-t3_dump_txq(SYSCTL_HANDLER_ARGS)
+t3_dump_txq_eth(SYSCTL_HANDLER_ARGS)
{
struct sge_txq *txq;
struct sge_qset *qs;
@@ -3025,7 +3015,7 @@
txq->txq_dump_start = 0;
return (EINVAL);
}
- err = t3_sge_read_ecntxt(qs->port->adapter, txq->cntxt_id, data);
+ err = t3_sge_read_ecntxt(qs->port->adapter, qs->rspq.cntxt_id, data);
if (err)
return (err);
@@ -3069,7 +3059,68 @@
return (err);
}
+static int
+t3_dump_txq_ctrl(SYSCTL_HANDLER_ARGS)
+{
+ struct sge_txq *txq;
+ struct sge_qset *qs;
+ int i, j, err, dump_end;
+ static int multiplier = 1;
+ struct sbuf *sb;
+ struct tx_desc *txd;
+ uint32_t *WR, wr_hi, wr_lo, gen;
+
+ txq = arg1;
+ qs = txq_to_qset(txq, TXQ_CTRL);
+ if (txq->txq_dump_count == 0) {
+ return (0);
+ }
+ if (txq->txq_dump_count > 256) {
+ log(LOG_WARNING,
+ "dump count is too large %d\n", txq->txq_dump_count);
+ txq->txq_dump_count = 1;
+ return (EINVAL);
+ }
+ if (txq->txq_dump_start > 255) {
+ log(LOG_WARNING,
+ "dump start of %d is greater than queue size\n",
+ txq->txq_dump_start);
+ txq->txq_dump_start = 0;
+ return (EINVAL);
+ }
+
+retry_sbufops:
+ sb = sbuf_new(NULL, NULL, QDUMP_SBUF_SIZE*multiplier, SBUF_FIXEDLEN);
+ sbuf_printf(sb, " qid=%d start=%d -> end=%d\n", qs->idx,
+ txq->txq_dump_start,
+ (txq->txq_dump_start + txq->txq_dump_count) & 255);
+ dump_end = txq->txq_dump_start + txq->txq_dump_count;
+ for (i = txq->txq_dump_start; i < dump_end; i++) {
+ txd = &txq->desc[i & (255)];
+ WR = (uint32_t *)txd->flit;
+ wr_hi = ntohl(WR[0]);
+ wr_lo = ntohl(WR[1]);
+ gen = G_WR_GEN(wr_lo);
+
+ sbuf_printf(sb," wr_hi %08x wr_lo %08x gen %d\n",
+ wr_hi, wr_lo, gen);
+ for (j = 2; j < 30; j += 4)
+ sbuf_printf(sb, "\t%08x %08x %08x %08x \n",
+ WR[j], WR[j + 1], WR[j + 2], WR[j + 3]);
+
+ }
+ if (sbuf_overflowed(sb)) {
+ sbuf_delete(sb);
+ multiplier++;
+ goto retry_sbufops;
+ }
+ sbuf_finish(sb);
+ err = SYSCTL_OUT(req, sbuf_data(sb), sbuf_len(sb) + 1);
+ sbuf_delete(sb);
+ return (err);
+}
+
static int
t3_lro_enable(SYSCTL_HANDLER_ARGS)
{
@@ -3194,6 +3245,10 @@
CTLFLAG_RD, &cxgb_ext_freed,
0, "#times a cluster was freed through ext_free");
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
+ "ext_inited",
+ CTLFLAG_RD, &cxgb_ext_inited,
+ 0, "#times a cluster was initialized for ext_free");
+ SYSCTL_ADD_INT(ctx, children, OID_AUTO,
"mbufs_outstanding",
CTLFLAG_RD, &cxgb_mbufs_outstanding,
0, "#mbufs in flight in the driver");
@@ -3243,8 +3298,8 @@
for (j = 0; j < pi->nqsets; j++) {
struct sge_qset *qs = &sc->sge.qs[pi->first_qset + j];
- struct sysctl_oid *qspoid, *rspqpoid, *txqpoid;
- struct sysctl_oid_list *qspoidlist, *rspqpoidlist, *txqpoidlist;
+ struct sysctl_oid *qspoid, *rspqpoid, *txqpoid, *ctrlqpoid;
+ struct sysctl_oid_list *qspoidlist, *rspqpoidlist, *txqpoidlist, *ctrlqpoidlist;
struct sge_txq *txq = &qs->txq[TXQ_ETH];
snprintf(qs->namebuf, QS_NAME_LEN, "qs%d", j);
@@ -3261,8 +3316,10 @@
txq_names[0], CTLFLAG_RD, NULL, "txq statistics");
txqpoidlist = SYSCTL_CHILDREN(txqpoid);
-
-
+ ctrlqpoid = SYSCTL_ADD_NODE(ctx, qspoidlist, OID_AUTO,
+ txq_names[2], CTLFLAG_RD, NULL, "ctrlq statistics");
+ ctrlqpoidlist = SYSCTL_CHILDREN(ctrlqpoid);
+
SYSCTL_ADD_UINT(ctx, rspqpoidlist, OID_AUTO, "size",
CTLFLAG_RD, &qs->rspq.size,
0, "#entries in response queue");
@@ -3285,8 +3342,7 @@
CTLTYPE_STRING | CTLFLAG_RD, &qs->rspq,
0, t3_dump_rspq, "A", "dump of the response queue");
-
-
+
SYSCTL_ADD_INT(ctx, txqpoidlist, OID_AUTO, "dropped",
CTLFLAG_RD, &qs->txq[TXQ_ETH].txq_drops,
0, "#tunneled packets dropped");
@@ -3343,7 +3399,22 @@
0, "txq #entries to dump");
SYSCTL_ADD_PROC(ctx, txqpoidlist, OID_AUTO, "qdump",
CTLTYPE_STRING | CTLFLAG_RD, &qs->txq[TXQ_ETH],
- 0, t3_dump_txq, "A", "dump of the transmit queue");
+ 0, t3_dump_txq_eth, "A", "dump of the transmit queue");
+
+ SYSCTL_ADD_UINT(ctx, ctrlqpoidlist, OID_AUTO, "dump_start",
+ CTLFLAG_RW, &qs->txq[TXQ_CTRL].txq_dump_start,
+ 0, "ctrlq start idx for dump");
+ SYSCTL_ADD_UINT(ctx, ctrlqpoidlist, OID_AUTO, "dump_count",
+ CTLFLAG_RW, &qs->txq[TXQ_CTRL].txq_dump_count,
+ 0, "ctrl #entries to dump");
+ SYSCTL_ADD_PROC(ctx, ctrlqpoidlist, OID_AUTO, "qdump",
+ CTLTYPE_STRING | CTLFLAG_RD, &qs->txq[TXQ_CTRL],
+ 0, t3_dump_txq_ctrl, "A", "dump of the transmit queue");
+
+
+
+
+
}
}
}
More information about the p4-projects
mailing list