aboutsummaryrefslogtreecommitdiff
path: root/sys/net/iflib.c
diff options
context:
space:
mode:
authorStephen Hurd <shurd@FreeBSD.org>2017-09-20 20:40:49 +0000
committerStephen Hurd <shurd@FreeBSD.org>2017-09-20 20:40:49 +0000
commitd0d0ad0ae2840d26bb0b1d70f5a0184106dd1e97 (patch)
tree02a537a865614f53ce19e54c4eba9857d4cbaec0 /sys/net/iflib.c
parent203f9d1828f96abaf3b47d17329d7755bc6c4d4b (diff)
downloadsrc-d0d0ad0ae2840d26bb0b1d70f5a0184106dd1e97.tar.gz
src-d0d0ad0ae2840d26bb0b1d70f5a0184106dd1e97.zip
Notes
Diffstat (limited to 'sys/net/iflib.c')
-rw-r--r--sys/net/iflib.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index 41772d250f4a..b5f06b1dc20d 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -2173,10 +2173,6 @@ iflib_init_locked(if_ctx_t ctx)
CALLOUT_UNLOCK(txq);
iflib_netmap_txq_init(ctx, txq);
}
- for (i = 0, rxq = ctx->ifc_rxqs; i < sctx->isc_nrxqsets; i++, rxq++) {
- MPASS(rxq->ifr_id == i);
- iflib_netmap_rxq_init(ctx, rxq);
- }
#ifdef INVARIANTS
i = if_getdrvflags(ifp);
#endif
@@ -2184,8 +2180,11 @@ iflib_init_locked(if_ctx_t 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)
+ if (if_getcapenable(ifp) & IFCAP_NETMAP) {
+ MPASS(rxq->ifr_id == i);
+ iflib_netmap_rxq_init(ctx, rxq);
continue;
+ }
for (j = 0, fl = rxq->ifr_fl; j < rxq->ifr_nfl; j++, fl++) {
if (iflib_fl_setup(fl)) {
device_printf(ctx->ifc_dev, "freelist setup failed - check cluster settings\n");
@@ -2474,14 +2473,6 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget)
struct mbuf *m, *mh, *mt;
ifp = ctx->ifc_ifp;
-#ifdef DEV_NETMAP
- if (ifp->if_capenable & IFCAP_NETMAP) {
- u_int work = 0;
- if (netmap_rx_irq(ifp, rxq->ifr_id, &work))
- return (FALSE);
- }
-#endif
-
mh = mt = NULL;
MPASS(budget > 0);
rx_pkts = rx_bytes = 0;
@@ -3500,7 +3491,7 @@ _task_fn_tx(void *context)
#endif
if (!(if_getdrvflags(ctx->ifc_ifp) & IFF_DRV_RUNNING))
return;
- if ((ifp->if_capenable & IFCAP_NETMAP)) {
+ if (if_getcapenable(ifp) & IFCAP_NETMAP) {
if (ctx->isc_txd_credits_update(ctx->ifc_softc, txq->ift_id, false))
netmap_tx_irq(ifp, txq->ift_id);
IFDI_TX_QUEUE_INTR_ENABLE(ctx, txq->ift_id);
@@ -3532,7 +3523,16 @@ _task_fn_rx(void *context)
DBG_COUNTER_INC(task_fn_rxs);
if (__predict_false(!(if_getdrvflags(ctx->ifc_ifp) & IFF_DRV_RUNNING)))
return;
- if ((more = iflib_rxeof(rxq, 16 /* XXX */)) == false) {
+ more = true;
+#ifdef DEV_NETMAP
+ if (if_getcapenable(ctx->ifc_ifp) & IFCAP_NETMAP) {
+ u_int work = 0;
+ if (netmap_rx_irq(ctx->ifc_ifp, rxq->ifr_id, &work)) {
+ more = false;
+ }
+ }
+#endif
+ if (more == false || (more = iflib_rxeof(rxq, 16 /* XXX */)) == false) {
if (ctx->ifc_flags & IFC_LEGACY)
IFDI_INTR_ENABLE(ctx);
else {
@@ -5106,7 +5106,7 @@ iflib_admin_intr_deferred(if_ctx_t ctx)
struct grouptask *gtask;
gtask = &ctx->ifc_admin_task;
- MPASS(gtask->gt_taskqueue != NULL);
+ MPASS(gtask != NULL && gtask->gt_taskqueue != NULL);
#endif
GROUPTASK_ENQUEUE(&ctx->ifc_admin_task);