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-head
mailing list