aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincenzo Maffione <vmaffione@FreeBSD.org>2020-06-25 19:44:24 +0000
committerVincenzo Maffione <vmaffione@FreeBSD.org>2020-06-25 19:44:24 +0000
commitd8b2d26b158aa51a641a5f8eacb306314a416c50 (patch)
tree7a4eb58f7532286cf1d7337f9776e1f3b79528c6
parent88a688663a5992f47e96062cb25f2fb1fc3b9437 (diff)
Notes
-rw-r--r--sys/net/iflib.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index 755b3d283170..69a7b14a5b21 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -1189,7 +1189,7 @@ iflib_netmap_attach(if_ctx_t ctx)
return (netmap_attach(&na));
}
-static void
+static int
iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq)
{
struct netmap_adapter *na = NA(ctx->ifc_ifp);
@@ -1197,7 +1197,7 @@ iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq)
slot = netmap_reset(na, NR_TX, txq->ift_id, 0);
if (slot == NULL)
- return;
+ return (0);
for (int i = 0; i < ctx->ifc_softc_ctx.isc_ntxd[0]; i++) {
/*
@@ -1211,21 +1211,24 @@ iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq)
netmap_load_map(na, txq->ift_buf_tag, txq->ift_sds.ifsd_map[i],
NMB(na, slot + si));
}
+ return (1);
}
-static void
+static int
iflib_netmap_rxq_init(if_ctx_t ctx, iflib_rxq_t rxq)
{
struct netmap_adapter *na = NA(ctx->ifc_ifp);
- struct netmap_kring *kring = na->rx_rings[rxq->ifr_id];
+ struct netmap_kring *kring;
struct netmap_slot *slot;
uint32_t nm_i;
slot = netmap_reset(na, NR_RX, rxq->ifr_id, 0);
if (slot == NULL)
- return;
+ return (0);
+ kring = na->rx_rings[rxq->ifr_id];
nm_i = netmap_idx_n2k(kring, 0);
netmap_fl_refill(rxq, kring, nm_i, true);
+ return (1);
}
static void
@@ -1256,8 +1259,8 @@ iflib_netmap_timer_adjust(if_ctx_t ctx, iflib_txq_t txq, uint32_t *reset_on)
#define iflib_netmap_detach(ifp) netmap_detach(ifp)
#else
-#define iflib_netmap_txq_init(ctx, txq)
-#define iflib_netmap_rxq_init(ctx, rxq)
+#define iflib_netmap_txq_init(ctx, txq) (0)
+#define iflib_netmap_rxq_init(ctx, rxq) (0)
#define iflib_netmap_detach(ifp)
#define iflib_netmap_attach(ctx) (0)
@@ -2368,10 +2371,8 @@ iflib_init_locked(if_ctx_t ctx)
IFDI_INIT(ctx);
MPASS(if_getdrvflags(ifp) == i);
for (i = 0, rxq = ctx->ifc_rxqs; i < sctx->isc_nrxqsets; i++, rxq++) {
- /* XXX this should really be done on a per-queue basis */
- if (if_getcapenable(ifp) & IFCAP_NETMAP) {
- MPASS(rxq->ifr_id == i);
- iflib_netmap_rxq_init(ctx, rxq);
+ if (iflib_netmap_rxq_init(ctx, rxq) > 0) {
+ /* This rxq is in netmap mode. Skip normal init. */
continue;
}
for (j = 0, fl = rxq->ifr_fl; j < rxq->ifr_nfl; j++, fl++) {