Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Feb 2008 06:52:28 GMT
From:      Kip Macy <kmacy@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 134822 for review
Message-ID:  <200802050652.m156qSgL003880@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=134822

Change 134822 by kmacy@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");
+
+
+			
+
+			
 		}
 	}
 }



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