svn commit: r298836 - stable/10/sys/dev/sfxge
Andrew Rybchenko
arybchik at FreeBSD.org
Sat Apr 30 06:35:21 UTC 2016
Author: arybchik
Date: Sat Apr 30 06:35:20 2016
New Revision: 298836
URL: https://svnweb.freebsd.org/changeset/base/298836
Log:
MFC r298735
sfxge(4): do not use RxQ index as label
Labels are limitted by 32 on EF10. It is not sufficient on powerful hosts.
Since only one RxQ is running over each EvQ, zero label may be used.
Reviewed by: gnn
Sponsored by: Solarflare Communications, Inc.
PR: 208267
Differential Revision: https://reviews.freebsd.org/D6121
Modified:
stable/10/sys/dev/sfxge/sfxge_ev.c
stable/10/sys/dev/sfxge/sfxge_rx.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/dev/sfxge/sfxge_ev.c
==============================================================================
--- stable/10/sys/dev/sfxge/sfxge_ev.c Sat Apr 30 04:02:32 2016 (r298835)
+++ stable/10/sys/dev/sfxge/sfxge_ev.c Sat Apr 30 06:35:20 2016 (r298836)
@@ -79,6 +79,21 @@ sfxge_ev_qcomplete(struct sfxge_evq *evq
sfxge_rx_qcomplete(rxq, eop);
}
+static struct sfxge_rxq *
+sfxge_get_rxq_by_label(struct sfxge_evq *evq, uint32_t label)
+{
+ struct sfxge_rxq *rxq;
+
+ KASSERT(label == 0, ("unexpected rxq label != 0"));
+
+ rxq = evq->sc->rxq[evq->index];
+
+ KASSERT(rxq != NULL, ("rxq == NULL"));
+ KASSERT(evq->index == rxq->index, ("evq->index != rxq->index"));
+
+ return (rxq);
+}
+
static boolean_t
sfxge_ev_rx(void *arg, uint32_t label, uint32_t id, uint32_t size,
uint16_t flags)
@@ -98,11 +113,7 @@ sfxge_ev_rx(void *arg, uint32_t label, u
if (evq->exception)
goto done;
- rxq = sc->rxq[label];
- KASSERT(rxq != NULL, ("rxq == NULL"));
- KASSERT(evq->index == rxq->index,
- ("evq->index != rxq->index"));
-
+ rxq = sfxge_get_rxq_by_label(evq, label);
if (__predict_false(rxq->init_state != SFXGE_RXQ_STARTED))
goto done;
@@ -211,7 +222,7 @@ sfxge_ev_rxq_flush_done(void *arg, uint3
evq = sc->evq[index];
- label = rxq_index;
+ label = 0;
KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != level"));
magic = SFXGE_MAGIC_RX_QFLUSH_DONE | label;
@@ -245,7 +256,7 @@ sfxge_ev_rxq_flush_failed(void *arg, uin
index = rxq->index;
evq = sc->evq[index];
- label = rxq_index;
+ label = 0;
KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != label"));
magic = SFXGE_MAGIC_RX_QFLUSH_FAILED | label;
@@ -364,36 +375,18 @@ sfxge_ev_software(void *arg, uint16_t ma
magic &= ~SFXGE_MAGIC_DMAQ_LABEL_MASK;
switch (magic) {
- case SFXGE_MAGIC_RX_QFLUSH_DONE: {
- struct sfxge_rxq *rxq = sc->rxq[label];
-
- KASSERT(rxq != NULL, ("rxq == NULL"));
- KASSERT(evq->index == rxq->index,
- ("evq->index != rxq->index"));
-
- sfxge_rx_qflush_done(rxq);
+ case SFXGE_MAGIC_RX_QFLUSH_DONE:
+ sfxge_rx_qflush_done(sfxge_get_rxq_by_label(evq, label));
break;
- }
- case SFXGE_MAGIC_RX_QFLUSH_FAILED: {
- struct sfxge_rxq *rxq = sc->rxq[label];
- KASSERT(rxq != NULL, ("rxq == NULL"));
- KASSERT(evq->index == rxq->index,
- ("evq->index != rxq->index"));
-
- sfxge_rx_qflush_failed(rxq);
+ case SFXGE_MAGIC_RX_QFLUSH_FAILED:
+ sfxge_rx_qflush_failed(sfxge_get_rxq_by_label(evq, label));
break;
- }
- case SFXGE_MAGIC_RX_QREFILL: {
- struct sfxge_rxq *rxq = sc->rxq[label];
-
- KASSERT(rxq != NULL, ("rxq == NULL"));
- KASSERT(evq->index == rxq->index,
- ("evq->index != rxq->index"));
- sfxge_rx_qrefill(rxq);
+ case SFXGE_MAGIC_RX_QREFILL:
+ sfxge_rx_qrefill(sfxge_get_rxq_by_label(evq, label));
break;
- }
+
case SFXGE_MAGIC_TX_QFLUSH_DONE: {
struct sfxge_txq *txq = sfxge_get_txq_by_label(evq, label);
Modified: stable/10/sys/dev/sfxge/sfxge_rx.c
==============================================================================
--- stable/10/sys/dev/sfxge/sfxge_rx.c Sat Apr 30 04:02:32 2016 (r298835)
+++ stable/10/sys/dev/sfxge/sfxge_rx.c Sat Apr 30 06:35:20 2016 (r298836)
@@ -1034,7 +1034,7 @@ sfxge_rx_qstart(struct sfxge_softc *sc,
return (rc);
/* Create the common code receive queue. */
- if ((rc = efx_rx_qcreate(sc->enp, index, index, EFX_RXQ_TYPE_DEFAULT,
+ if ((rc = efx_rx_qcreate(sc->enp, index, 0, EFX_RXQ_TYPE_DEFAULT,
esmp, sc->rxq_entries, rxq->buf_base_id, evq->common,
&rxq->common)) != 0)
goto fail;
More information about the svn-src-stable
mailing list