diff options
author | arybchik <arybchik@FreeBSD.org> | 2015-01-29 19:01:09 +0000 |
---|---|---|
committer | arybchik <arybchik@FreeBSD.org> | 2015-01-29 19:01:09 +0000 |
commit | ca8d3fdee681b07f7bd1a266dc801d9dd2d356b0 (patch) | |
tree | f4c27d73bde0699903ccf54ba6bf498841fbb010 | |
parent | 71efe21ca1b7c29266e18857a35a116f76162303 (diff) | |
download | FreeBSD-src-ca8d3fdee681b07f7bd1a266dc801d9dd2d356b0.zip FreeBSD-src-ca8d3fdee681b07f7bd1a266dc801d9dd2d356b0.tar.gz |
sfxge: Add evq argument to sfxge_tx_qcomplete()
It removes necessity to get evq pointer by its index in soft context.
Sponsored by: Solarflare Communications, Inc.
Approved by: gnn (mentor)
-rw-r--r-- | sys/dev/sfxge/sfxge_ev.c | 4 | ||||
-rw-r--r-- | sys/dev/sfxge/sfxge_tx.c | 9 | ||||
-rw-r--r-- | sys/dev/sfxge/sfxge_tx.h | 4 |
3 files changed, 7 insertions, 10 deletions
diff --git a/sys/dev/sfxge/sfxge_ev.c b/sys/dev/sfxge/sfxge_ev.c index f93a67c..4fc116c 100644 --- a/sys/dev/sfxge/sfxge_ev.c +++ b/sys/dev/sfxge/sfxge_ev.c @@ -68,7 +68,7 @@ sfxge_ev_qcomplete(struct sfxge_evq *evq, boolean_t eop) ("txq->evq_index != index")); if (txq->pending != txq->completed) - sfxge_tx_qcomplete(txq); + sfxge_tx_qcomplete(txq, evq); txq = next; } while (txq != NULL); @@ -262,7 +262,7 @@ sfxge_ev_tx(void *arg, uint32_t label, uint32_t id) } if (txq->pending - txq->completed >= SFXGE_TX_BATCH) - sfxge_tx_qcomplete(txq); + sfxge_tx_qcomplete(txq, evq); done: return (evq->tx_done >= SFXGE_EV_BATCH); diff --git a/sys/dev/sfxge/sfxge_tx.c b/sys/dev/sfxge/sfxge_tx.c index 90fd21f..b69e922 100644 --- a/sys/dev/sfxge/sfxge_tx.c +++ b/sys/dev/sfxge/sfxge_tx.c @@ -105,15 +105,10 @@ static int sfxge_tx_queue_tso(struct sfxge_txq *txq, struct mbuf *mbuf, const bus_dma_segment_t *dma_seg, int n_dma_seg); void -sfxge_tx_qcomplete(struct sfxge_txq *txq) +sfxge_tx_qcomplete(struct sfxge_txq *txq, struct sfxge_evq *evq) { - struct sfxge_softc *sc; - struct sfxge_evq *evq; unsigned int completed; - sc = txq->sc; - evq = sc->evq[txq->evq_index]; - mtx_assert(&evq->lock, MA_OWNED); completed = txq->completed; @@ -1147,7 +1142,7 @@ sfxge_tx_qstop(struct sfxge_softc *sc, unsigned int index) txq->blocked = 0; txq->pending = txq->added; - sfxge_tx_qcomplete(txq); + sfxge_tx_qcomplete(txq, evq); KASSERT(txq->completed == txq->added, ("txq->completed != txq->added")); diff --git a/sys/dev/sfxge/sfxge_tx.h b/sys/dev/sfxge/sfxge_tx.h index 457eae9..2227ae2 100644 --- a/sys/dev/sfxge/sfxge_tx.h +++ b/sys/dev/sfxge/sfxge_tx.h @@ -175,13 +175,15 @@ struct sfxge_txq { struct sfxge_txq *next; }; +struct sfxge_evq; + extern int sfxge_tx_packet_add(struct sfxge_txq *, struct mbuf *); extern int sfxge_tx_init(struct sfxge_softc *sc); extern void sfxge_tx_fini(struct sfxge_softc *sc); extern int sfxge_tx_start(struct sfxge_softc *sc); extern void sfxge_tx_stop(struct sfxge_softc *sc); -extern void sfxge_tx_qcomplete(struct sfxge_txq *txq); +extern void sfxge_tx_qcomplete(struct sfxge_txq *txq, struct sfxge_evq *evq); extern void sfxge_tx_qflush_done(struct sfxge_txq *txq); #ifdef SFXGE_HAVE_MQ extern void sfxge_if_qflush(struct ifnet *ifp); |