aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/cxgb/cxgb_main.c
diff options
context:
space:
mode:
authorKip Macy <kmacy@FreeBSD.org>2008-01-10 00:55:42 +0000
committerKip Macy <kmacy@FreeBSD.org>2008-01-10 00:55:42 +0000
commitf001b63dcbba76344fd666180d3d65cf7bc4c55b (patch)
treed532d31d5c35d776a4bac083c62fd6e166c7cf07 /sys/dev/cxgb/cxgb_main.c
parent9b0fce602a2e594b8da30571659532b8c9106159 (diff)
downloadsrc-f001b63dcbba76344fd666180d3d65cf7bc4c55b.tar.gz
src-f001b63dcbba76344fd666180d3d65cf7bc4c55b.zip
- make 9k clusters the default unless a tunable is set
- return the error from cxgb_tx_common so that when an error is hit we dont spin forever in the taskq thread - remove unused rxsd_ref - simplify header_offset calculation for embedded mbuf headers - fix memory leak by making sure that mbuf header initialization took place - disable printf's for stalled queue, don't do offload/ctrl queue restart when tunnel queue is restarted - add more diagnostic information about the txq state - add facility to dump the actual contents of the hardware queue using sysctl
Notes
Notes: svn path=/head/; revision=175200
Diffstat (limited to 'sys/dev/cxgb/cxgb_main.c')
-rw-r--r--sys/dev/cxgb/cxgb_main.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/dev/cxgb/cxgb_main.c b/sys/dev/cxgb/cxgb_main.c
index 810d8432c764..f1a1dd7c0d3f 100644
--- a/sys/dev/cxgb/cxgb_main.c
+++ b/sys/dev/cxgb/cxgb_main.c
@@ -218,6 +218,13 @@ TUNABLE_INT("hw.cxgb.singleq", &singleq);
SYSCTL_UINT(_hw_cxgb, OID_AUTO, singleq, CTLFLAG_RDTUN, &singleq, 0,
"use a single queue-set per port");
+
+
+int cxgb_use_16k_clusters = 0;
+TUNABLE_INT("hw.cxgb.use_16k_clusters", &cxgb_use_16k_clusters);
+SYSCTL_UINT(_hw_cxgb, OID_AUTO, use_16k_clusters, CTLFLAG_RDTUN,
+ &cxgb_use_16k_clusters, 0, "use 16kB clusters for the jumbo queue ");
+
#ifndef IFNET_MULTIQUEUE
int cxgb_txq_buf_ring_size = 0;
#endif
@@ -1921,6 +1928,7 @@ cxgb_tx_common(struct ifnet *ifp, struct sge_qset *qs, uint32_t txmax)
}
else if ((err == 0) && (txq->size <= txq->in_use + TX_MAX_DESC) &&
(ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0) {
+ setbit(&qs->txq_stopped, TXQ_ETH);
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
err = ENOSPC;
}
@@ -1953,20 +1961,17 @@ cxgb_start_tx(struct ifnet *ifp, uint32_t txmax)
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;
-
if (txq->flags & TXQ_TRANSMITTING)
return (EINPROGRESS);
mtx_lock(&txq->lock);
txq->flags |= TXQ_TRANSMITTING;
- cxgb_tx_common(ifp, qs, txmax);
+ err = cxgb_tx_common(ifp, qs, txmax);
txq->flags &= ~TXQ_TRANSMITTING;
mtx_unlock(&txq->lock);