Author: vmaffione
Date: Thu Jun 25 19:35:43 2020
New Revision: 362621
URL: https://svnweb.freebsd.org/changeset/base/362621

Log:
  iflib: netmap: add per-tx-queue netmap support
  
  Reviewed by:  gallatin
  MFC after:    2 weeks
  Differential Revision:        https://reviews.freebsd.org/D25253

Modified:
  head/sys/net/iflib.c

Modified: head/sys/net/iflib.c
==============================================================================
--- head/sys/net/iflib.c        Thu Jun 25 19:35:37 2020        (r362620)
+++ head/sys/net/iflib.c        Thu Jun 25 19:35:43 2020        (r362621)
@@ -1235,7 +1235,9 @@ iflib_netmap_timer_adjust(if_ctx_t ctx, iflib_txq_t tx
        uint16_t txqid;
 
        txqid = txq->ift_id;
-       kring = NA(ctx->ifc_ifp)->tx_rings[txqid];
+       kring = netmap_kring_on(NA(ctx->ifc_ifp), txqid, NR_TX);
+       if (kring == NULL)
+               return;
 
        if (kring->nr_hwcur != nm_next(kring->nr_hwtail, kring->nkr_num_slots - 
1)) {
                bus_dmamap_sync(txq->ift_ifdi->idi_tag, txq->ift_ifdi->idi_map,
@@ -3756,20 +3758,12 @@ _task_fn_tx(void *context)
 #ifdef IFLIB_DIAGNOSTICS
        txq->ift_cpu_exec_count[curcpu]++;
 #endif
-       if (!(if_getdrvflags(ctx->ifc_ifp) & IFF_DRV_RUNNING))
+       if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING))
                return;
 #ifdef DEV_NETMAP
-       if (if_getcapenable(ifp) & IFCAP_NETMAP) {
-               bus_dmamap_sync(txq->ift_ifdi->idi_tag, txq->ift_ifdi->idi_map,
-                   BUS_DMASYNC_POSTREAD);
-               if (ctx->isc_txd_credits_update(ctx->ifc_softc, txq->ift_id, 
false))
-                       netmap_tx_irq(ifp, txq->ift_id);
-               if (ctx->ifc_flags & IFC_LEGACY)
-                       IFDI_INTR_ENABLE(ctx);
-               else
-                       IFDI_TX_QUEUE_INTR_ENABLE(ctx, txq->ift_id);
-               return;
-       }
+       if ((if_getcapenable(ifp) & IFCAP_NETMAP) &&
+           netmap_tx_irq(ifp, txq->ift_id))
+               goto skip_ifmp;
 #endif
 #ifdef ALTQ
        if (ALTQ_IS_ENABLED(&ifp->if_snd))
@@ -3784,6 +3778,9 @@ _task_fn_tx(void *context)
         */
        if (abdicate)
                ifmp_ring_check_drainage(txq->ift_br, TX_BATCH_SIZE);
+#ifdef DEV_NETMAP
+skip_ifmp:
+#endif
        if (ctx->ifc_flags & IFC_LEGACY)
                IFDI_INTR_ENABLE(ctx);
        else
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to