summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorarybchik <arybchik@FreeBSD.org>2015-01-29 19:01:09 +0000
committerarybchik <arybchik@FreeBSD.org>2015-01-29 19:01:09 +0000
commitca8d3fdee681b07f7bd1a266dc801d9dd2d356b0 (patch)
treef4c27d73bde0699903ccf54ba6bf498841fbb010
parent71efe21ca1b7c29266e18857a35a116f76162303 (diff)
downloadFreeBSD-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.c4
-rw-r--r--sys/dev/sfxge/sfxge_tx.c9
-rw-r--r--sys/dev/sfxge/sfxge_tx.h4
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);
OpenPOWER on IntegriCloud