diff options
author | Kip Macy <kmacy@FreeBSD.org> | 2008-01-10 00:55:42 +0000 |
---|---|---|
committer | Kip Macy <kmacy@FreeBSD.org> | 2008-01-10 00:55:42 +0000 |
commit | f001b63dcbba76344fd666180d3d65cf7bc4c55b (patch) | |
tree | d532d31d5c35d776a4bac083c62fd6e166c7cf07 /sys/dev/cxgb/cxgb_main.c | |
parent | 9b0fce602a2e594b8da30571659532b8c9106159 (diff) | |
download | src-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.c | 15 |
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); |