svn commit: r357006 - head/sys/net

Gleb Smirnoff glebius at FreeBSD.org
Thu Jan 23 01:27:59 UTC 2020


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 */


More information about the svn-src-all mailing list