Author: glebius
Date: Thu Jan 23 01:27:58 2020
New Revision: 357006
URL: https://svnweb.freebsd.org/changeset/base/357006

Log:
  Enter network epoch in iflib rxeof task.
  
  In upcoming changes ether_input() is going to be changed not
  to enter the network epoch.  It is going to be responsibility
  of network interrupt.  In case of iflib - its taskqueue.

Modified:
  head/sys/net/iflib.c

Modified: head/sys/net/iflib.c
==============================================================================
--- head/sys/net/iflib.c        Thu Jan 23 01:25:32 2020        (r357005)
+++ head/sys/net/iflib.c        Thu Jan 23 01:27:58 2020        (r357006)
@@ -2759,6 +2759,8 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget)
         */
        struct mbuf *m, *mh, *mt, *mf;
 
+       NET_EPOCH_ASSERT();
+
        lro_possible = v4_forwarding = v6_forwarding = false;
        ifp = ctx->ifc_ifp;
        mh = mt = NULL;
@@ -3779,6 +3781,7 @@ _task_fn_tx(void *context)
 static void
 _task_fn_rx(void *context)
 {
+       struct epoch_tracker et;
        iflib_rxq_t rxq = context;
        if_ctx_t ctx = rxq->ifr_ctx;
        bool more;
@@ -3802,6 +3805,7 @@ _task_fn_rx(void *context)
        budget = ctx->ifc_sysctl_rx_budget;
        if (budget == 0)
                budget = 16;    /* XXX */
+       NET_EPOCH_ENTER(et);
        if (more == false || (more = iflib_rxeof(rxq, budget)) == false) {
                if (ctx->ifc_flags & IFC_LEGACY)
                        IFDI_INTR_ENABLE(ctx);
@@ -3809,6 +3813,7 @@ _task_fn_rx(void *context)
                        IFDI_RX_QUEUE_INTR_ENABLE(ctx, rxq->ifr_id);
                DBG_COUNTER_INC(rx_intr_enables);
        }
+       NET_EPOCH_EXIT(et);
        if (__predict_false(!(if_getdrvflags(ctx->ifc_ifp) & IFF_DRV_RUNNING)))
                return;
        if (more)
@@ -6811,6 +6816,7 @@ iflib_debugnet_transmit(if_t ifp, struct mbuf *m)
 static int
 iflib_debugnet_poll(if_t ifp, int count)
 {
+       struct epoch_tracker et;
        if_ctx_t ctx;
        if_softc_ctx_t scctx;
        iflib_txq_t txq;
@@ -6826,8 +6832,10 @@ iflib_debugnet_poll(if_t ifp, int count)
        txq = &ctx->ifc_txqs[0];
        (void)iflib_completed_tx_reclaim(txq, RECLAIM_THRESH(ctx));
 
+       NET_EPOCH_ENTER(et);
        for (i = 0; i < scctx->isc_nrxqsets; i++)
                (void)iflib_rxeof(&ctx->ifc_rxqs[i], 16 /* XXX */);
+       NET_EPOCH_EXIT(et);
        return (0);
 }
 #endif /* DEBUGNET */
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to